プログラミング

問題141を解く(その2)

解法のひとつです。 幾何数列に着目するってもの考えたんだけどなあ。 いまいち無理でしたw 幾何数列「a, ca, c^2 a」における比率を「c」とします。 gcd(p, q) == 1 の場合、c は p/q と書くことができます。 したがって、n^2 == c^3*a^2 + a がわかります…

問題141をやってみた

メインから。 時間を計るので、ちょいゴタゴタしてます。 1兆までなのでかなり時間がかかります。 いえ、力技コードなので処理時間は気にしてないですw #include <iostream> #include <chrono> int main() { long long limit = 1000000000000; std::chrono::system_clock::tim</chrono></iostream>…

整数の三乗根を誤差なしで求める

三乗根は Math 標準ライブラリの Pow を使って double val = Math.Pow((double)number, 1.0 / 3.0) こんな風に求められるけれども、number が整数のときは これでは誤差が出るので使い物にならない。なのでプログラムを自分で書く!呼び出し側。最近の .NET …

約数を求める(完全版)

(define nil '()) (define (gen-primes limit) (let ((v (make-vector (+ limit 1) 1))) (define (set-not-prime! ini-idx) (define (iter i) (if (> i limit) 'done (begin (vector-set! v i 0) (iter (+ i ini-idx))))) (iter (* ini-idx 2))) (define (in…

約数を求める

(define nil '()) (define (element-of-set? x set) (cond ((null? set) #f) ((equal? x (car set)) #t) (else (element-of-set? x (cdr set))))) (define (uniq set) (define (iter x s) (if (null? x) s (iter (cdr x) (if (element-of-set? (car x) s) s …

最近見かけたう◯んこコード!

最近見かけたう◯んこみたいなクソコードを紹介していくコーナー! ドンドンパフパフー!!はい。 というわけで、最近仕入れた「う◯こ」なコードを紹介していきますよ。 良い子のみんなはこんなコードを書いちゃダメだぞ!月データから月初の日を求める Select Ca…

素数を作る処理の改善

無限ストリームを使って素数を求める処理に、「素数は必ず6の倍数の隣にある」という事実を使って、処理速度を改善してみます。なお、無限ストリームを使った解法は処理速度が遅いので、最速を求める人にはおすすめしません。無限ストリームを実現するため…

合計を求める(第一回)

最近は高等学校でもプログラミングを教えるみたいなので、 高校生でもわかるようにやさしくに解説していきます。まず始めに 1 から 10 までの合計を求めるプログラムを考えます。 (define (sum-ex1) 55) 55 ってわかってるからね。そのまま書いちゃった。 実…

また役に立つツールを(以下略

XML は整形しても読みづらいので json に変換するツール書いた。 Dictionary 経由で XML を JSON に変換するだけ。簡単。 import json import xmltodict filename = 'hoge' dict_data = [] with open(filename + '.xml', encoding = 'utf-8') as fp_xml: xml…

また役に立つまともなツールを作ってしまった・・・

csv のカンマをパイプに置き換えるツールです。ダブルクォーテーション内は置き換えません。カンマってデータ中にもよく出てくるので、awk などでテキスト処理したいときに、いつも面倒な問題がつきまといます。パイプであれば日常的にデータの中に使う人は…

コルーチンによる FizzBuzz の実装

まずコルーチンを実装します。 Scheme は継続(Continuation)を扱えるので、簡単にコルーチンを実装できます。 (use util.queue) (define *tasks* (make-queue)) (define-syntax define-coroutine (syntax-rules () ((_ (routine yield) body ...) (define (r…

チケットナンバー問題

お断り チケットの高額売買に関する問題の事ではありません。 なお、チケットに限らず転売屋は地獄に堕ちてください。 お断り ここまでさて、今回のお題です。 チケットナンバー問題で、もっとも計算方法が多い4桁の数字はいくつか。 最小の値を答えよ。 プ…

問題146 改

n^2 + k (k=1,3,7,9,13,27) は、式全体として奇数にならないと素数である可能性はありません。 足し算の偶奇の組み合わせは、以下の 3 つがあります。 交換法則が使えますので、重複分は割愛します。 偶数 + 偶数 = 偶数 ... k は奇数なのでありえません 偶…

問題146

問題 146 です。数学的解法により高速化するというより、プログラムの高速化技法を用いて解く問題だと思いました。 (いつも使用している Scheme ではなくて、高速で動作する c で書いたのはヒミツです) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <math.h> b</math.h></stdbool.h></string.h></stdlib.h></stdio.h>…

「エラトステネスの篩を使用して素数の無限ストリームを作るプログラムを書いて」を質問してみた

AI に質問して提示したプログラムがこれ。 (define (stream-cons a b) (cons a (delay b))) (define (stream-car s) (car s)) (define (stream-cdr s) (force (cdr s))) (define (stream-filter p s) (cond ((null? s) '()) ((p (stream-car s)) (stream-con…

Scheme で AI に Project Euler 142 を解くように質問してみた

いい線はいっているんだけど、 ・処理速度の改善が全然ダメ ・カッコの対応をいつも間違える ・未定義の関数を使用するのでプログラムがエラーで動作しない でダメだねwww 何度訂正させても、きちんと動作するプログラムが書けなので、 4,5回聞いて諦…

プログラマ不要論は不要論

AI に以下を質問してみた。 フィボナッチ数列を求めるプログラムを書いて AI は c と python のプログラム例を提示したけど、 それと同じものを Scheme で書いたものがこれ。 (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (-…

幾星霜の時を経て一問解く

問題 142 です。問題の内容は公式サイトをご覧ください。 公式サイトは英語ですが、有志の方々が日本語に翻訳しているページもあったりします。最初に書いたプログラムはこちら。 (define nil '()) (define (pe142 low high) (define (iter-x x) (if (> x hi…

Visual Studio を久しぶりに使う

現在は Visual Studio 2022 (.NET 6.0) が最新ですね。 今回 Program.cs はずいぶんと思い切りましたねw まあ、ここにひたすら処理を書きまくる static オジサンとかいるので、これはありだと思います。適切にクラスを作成して using なんとかアプリ; new …

プログラマーの広告がうざい

よく Youtube の広告で ・プログラミングが一ヶ月でできるようになります! ・2020年から小学校でもプログラミングの授業がはじまりました!小学生でもできるんです!*1 ・プログラマーの副業で一ヶ月 30 万円稼げます! とかあるんだけどね、舐められたもん…

定数の定義

定数の定義について若いプログラマから質問を受けたので、 Python ならば json で定義するといいんじゃない? って答えたんですよ。しかし・・・ ちょっと画面を見せてもらったら こんなのを書いてんのが見えたんですよ。 ConstValue30 = 30 ConstValue31 = …

フィボナッチ数列を一般項から求めてみる

本日のお題 フィボナッチ数列を一般項から求めるプログラムを Scheme で書いてみます。 フィボナッチ数列の一般項は、と表されます。 面倒くさい数式を頑張って書きました。褒めてくださいwポイント このお題を解くにあたってのポイントは、一般項に出てく…

Lispの動かし方は・・・

すっかり忘れていたので自分用にメモするw1.Cygwin で clisp をインストールしておく。最新のテスト版を入れないとうまく動かない。たぶん。 2.Emacs は各自用意する。 3.SLIMEを入れる。 M-x package-list-packagesで slime を検索して入れる。 4.SLIME起…

CODE COMPLETE(上)

突っ込み入れてみるよ。 5.3.7 節 の「柔軟性」のところ。 Employee オブジェクトを LookupVacationBenefit() に渡す。と書いてあります。 SomeObject.LookupVacationBenefit(anEmployee);って事ですよね。自分なら anEmployee.LookupVacationBenefit();こう…

CODE COMPLETE(上)とIT業界の深い闇

今、第3章を読んでいるのですが・・・ コンストラクション時の要求変更時への対処のところですが、書いてあることはごもっともではありますが、まったく日本では現実的ではないのですよ。「作業を中断し」とか、ましてや「プロジェクトを中止」とか絶対無理…

AtCoder ABC085C

解き方だけ書きます。一万円札、五千円札、千円札の枚数をそれぞれ x, y, z とすると、 x + y + z = c ... (式1) 10000x + 5000y + 1000z = a ...(式2)これらの式が導かれます。c はお札の総枚数、a は合計額です。 この 2 つは定数で入力データとして与えら…

継続渡しスタイル第二回(最終回)

第二回にして最終回ですがw、 CPS でもう少しプログラムを書いてみましょう。まずは、階乗を求めるプログラム。鉄板ですねw まずは普通の関数型で書きます。 (define (fact n) (if (= n 1) 1 (* n (fact (- n 1))))) 5! + 7 を計算してみます。 gosh> (+ 7…

継続渡しスタイル

プログラミングスタイルというと主に、・手続き型 ・オブジェクト指向型 ・関数型の3つがよく使われていると思います。 今回は継続渡しスタイル(Continuation Passing Style. 以下 CPS と略します)を紹介したいと思います。CPS の基本的な考え方は、・処理…

ナンプレを解く(改

ナンプレを解くプログラムがバグっていて解けない問題があったので直しました。 このプログラムは人間的な解法で問題を解きます。総当りな方法は使いません。 (use util.list) (define nil '()) ;;; 汎用手続き (define (list->number lis) (fold (lambda (a…

数値リストのコンパクトな表現

ネットを徘徊してどこぞから拾ってきたお題です。 (define nil '()) ;; '(1 3 4 5 6 12 13 15) ;; => '(1 (3 . 6) (12 . 13) 15) (define (compact-number-list sorted-number-list) (define (iter lis prev start end result) (if (null? lis) (append resu…