プログラミング

IEEE 単精度浮動小数点数 の計算

技術士試験の問題によく IEEE 単精度浮動小数点数の計算問題が出てくるので、 Scheme で実装してみました。情報工学部門の技術士を目指すなら、毎回計算してないでプログラム書いて解けよ! と思いますよね?でも試験は頭で解かないとダメですーwww 面倒…

オオカミとヤギとキャベツ

仕様はググってください。 お断り:このプログラムはすべての解を列挙するものではありません。 ;; common procedures (define nil '()) (define (enumerate-interval low high) (if (> low high) nil (cons low (enumerate-interval (+ low 1) high)))) (de…

Pharoでフラクタル図形を書いてみよう

技術士試験の平成27年度情報工学部門に出題されたコッホ曲線を Pharo で実装してみます。 Pharo を使用するのはグラフィックス周りの実装が楽だからです。 BorderedMorph subclass: #KochMorph instanceVariableNames: 'location angle' classVariableNames:…

スタックマシンもどき

技術士試験の平成28年度情報工学部門に出題されたスタックマシンを Scheme で書く。 まずはスタックの実装から (define nil '()) ;; stack (define *stack* nil) (define (last-pushed) (if (empty?) nil (car *stack*))) (define (after-popped) (if (empty…

問題 156 の改良

力技で問いた結果のログから規則性を調べて改良してみました。 前よりは格段に速いですが、計算で求めてはいないので、 めちゃくちゃ速いというわけでは無いです。 #include <iostream> #include <math.h> using namespace std; void f(unsigned long long n, unsigned long lo</math.h></iostream>…

久々に解く

Project Euler の問題 156 です。使用言語は c++。 ちなみに、もうデータ量が多すぎてエクセルさんに貼り付けてデータ解析するのが厳しいですw #include <iostream> #include <math.h> #include <time.h> using namespace std; unsigned int f(unsigned long long n, unsigned int d) </time.h></math.h></iostream>…

順列を求める(個数だけ) その後

寝不足のまま続きを考えましたw (define (iter-3 ans rests rests1 count) (if (null? rests) count (iter-3 ans (cdr rests) rests1 (let ((x (car rests))) (+ count (iter-2 (append ans (cons x nil)) x (remove x rests1))))))) (define (iter-2 ans n…

順列を求める(個数だけ)

個数だけ求めるなら、これで十分ですかね。 (define (iter-2 ans num rests) (if (null? rests) (if (check ans) 1 0) (if (not (check ans)) 0 (apply + (map (lambda (x) (iter-2 (append ans `(,x)) x (remove x rests))) rests))))) (define (iter num c…

逆行列を求める 数式の改良

数式を少し改良しました。 (define (sort-sum-values lis) (let ((num (apply + (filter number? lis))) (vals (filter symbol? lis))) (if (= num 0) (sort vals) (append `(,num) (sort vals))))) (define (sort-product-values lis) (let ((num (apply * …

順列を求める

ja.stackoverflow.com暇なので解いてみた。 (define nil '()) (define (enumerate-interval low high) (if (> low high) nil (cons low (enumerate-interval (+ low 1) high)))) (define (accumulate op initial seq) (if (null? seq) initial (op (car seq)…

逆行列を求める

逆行列を計算するプログラムです。まず共通処理から。 (define nil '()) (define *stack* nil) (define level-ratio 100) (define (last-pushed) (if (empty?) nil (car *stack*))) (define (after-popped) (if (empty?) nil (cdr *stack*))) (define (init)…

L-99 P98 再び

お絵かきロジックを、より人間らしく解く!とは言っても、普通の人間には簡単にできる ・解法を自ら学習する ・新たな解法を発見する とかは出来ません。というか、そんなのが出来たら怖いです。人類を敵と見做して核攻撃とかしそう! 人形ロボットを作って…

L-99 P97

数独を解く問題。Euler Project 問題 96 と同じです。まず、問題をスクラッチバッファで加工して sudoku_p97.txt を作ります。 ファイルの中身はこんな感じ。未確定の部分は 0 にします。 Grid 01 004800017 670900000 508030004 300740100 069000780 001069…

L-99 P90

8クイーン問題*1です。1. 普通な実装 (define nil '()) (define (enumerate-interval low high) (if (> low high) nil (cons low (enumerate-interval (+ low 1) high)))) (define (filter predicate sequence) (cond ((null? sequence) nil) ((predicate (c…

L-99 P93

年度始めすぐは、なにかと暇なので勉強が捗っちゃうねーw 2 3 5 7 11 から等式を作って正しい計算結果になる式をリストアップしなさい。 例として、2-3+5+7 = 11 とか 2 = (3*5+7)/11 があるよ。(あと 10 個ある。) という問題。まずは汎用手続き (define n…

L-99 P70d

たまにはプログラミングの話題でも書きますか。L-99 の p70 です。p70 は既出なので、「d」を付けました。 (あちこちの問題で間違いがあるような気がします。元は Prolog の問題集なので仕方ないかな。意味がよくわからないものもあります。) a f g ^ ^ c ^ …

L-99 P58

久々のプログラミングネタです。 L-99: Ninety-Nine Lisp Problems の P58 です。P58 Apply the generate-and-test paradigm to construct all symmetric, completely balanced binary trees with a given number of nodes. Example: sym-cbal-trees(5,Ts). …

とあるプロコンの練習問題の実行時間ランキング

ということで、言語は Scheme です。 全部で 11 問あるのですが、全問正答している人は 2 人でした。 Scheme のマイナー加減がパないです!w これではさみしいので 10 問正答している人もランキングに加えました。 (ランキングにエントリーしているのは 3 …

Project Euler 問題139

久しぶりに一問解きました。 問題がかなり難しいです。 なかなか解けない。 解法はわかっても、 処理時間がべらぼうにかかって 解けない場合もありますw 計算式を発見してO(n)とかで解くプログラムを 書かないと無理ですねw 自分は大学出てないので、 数学力…

迷路アプリに最短経路探索機能付けてみた

以前作った迷路作るだけのアプリに、暇だったので最短経路探索機能を付けました。 探索アルゴリズムは以前に Scheme 用に作ったもの。x と y、row と column がこんがらがって移植は結構大変でした。縦横の長さが違うとバグってましたw 元プログラムが手抜…

Pharo7 (dev版) のブレークポイント

Pharo7 (dev版)だとソースの左端クリックでブレークポイントが設定できるのですが、 どうも挙動が変です。 まず、ブレークポイントに代入がある場合、右辺は実行されるようです。 Visual Studio だとブレークポイントの行を実行せずに止まるじゃないですか?…

幼児並の知能であることが判明w

なにか面白い題材ないかなーとネットは徘徊していたら見っけました。 matsuhiro.blogspot.com 30秒で解けました。てか、エンジニアがこの問題を解くのに1時間もかかるってヤバくない? 適正検査でこういうのよくあるよね? これで1時間もかかってたら、テ…

Pharoでライフゲーム

暇なので作ってみました。 ベースはもちろん、みんな大好き LightsOut ですw アルゴリズムは超簡単。表示の仕組みのほうが面倒w でも、Pharo なら表示まわりの実装も簡単ですね。 これは「グライダー銃」を動かしている画です。 ライフゲーム楽しいです。 …

Pharo7のMatrix

一応使えるけど、取り消し線が引かれているし、「まもなく消滅するよー」という事なのだろう。たぶん。 rows:columns:tabulate: と at:at: ぐらいしか使ってないので、自前で用意すればなんとかなりそう。 しかし、Pharo7 のクラスブラウザはゴチャゴチャし…

Pharoで最近作ったアプリのみなさん

最近ヒマなので、ついうっかりアプリを作ってしまいます。 上・迷路作るだけのアプリw 左中央・ストップウォッチw 左下・アナログ時計w 右下・マイ○スイ○ーもどきw

自分自身を再描画する

Morph の描画をゴリゴリやっているアプリでは、自分自身を再描画したい場合がありますよね。つまり具体的に例えば時計モーフを考えたとき、 self step 内で、自身を描画したい時がありますね。その時にどうコードを書くか?ってことです。正解は、ClockMorph…

FreeType2 primitive failed その後

一日経ったらなぜか直ったwww 昨日、PC の再起動も試して直らなかったのに、なんで今日になったら直ったのか意味不明デスwww でも直ったからいっか。

FreeType2 primitive failed

Pharo 6.1 を使っていますが、プリミティブエラーが出るようになってしまって。Pharo を再インストールしたりいろいろ試しましたがまったく直りません。フォントが読み込めないようでおかしくなってしまった(以前から変な動作はしていたのですが)。 ググる…

ソフトウェアメトリクス(初歩)

数年に一度作るかどうかという奇跡のまともアプリw「マイ○スィー○ーもどき」のメソッドあたりの平均ライン数を求めてみます。 Smalltalk は強力なリフレクションを備えるため、いとも簡単に求めることができます。 商用のメトリクスツールなんて要りません…

SUnit

Smalltalk だとテストコード書きやすい。そもそもメソッドが数百行とかならないし、某○#でもまともにコード書けばテストコード書きやすいのだろうけど、きちんとモジュール分割できる人が居ない。すぐ数百行のメソッドとか書いちゃうわ、メンバ変数なんて外…