2010 8/8

プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~

 OCamlの練習に、長年の疑問だった

  • 切符算で解がある全ての組み合わせ

 を求めようとしている。

 ただ、自分の知っているバージョンはローカルルール(?)があり、四則演算と括弧だけではなく、

  • 最初から存在する数字をくっつけて2〜4桁の数字にする

 という操作が可能である。意味があるのは2ケタだけだが。

 まだインチキしているのでコード公開できないけど、とりあえず答えは出たはず。これ合ってる?

0001 0011 0012 0013 0014 0015 0016 0017 0018 0019
0022 0023 0025 0028 0033 0034 0037 0044 0045 0046
0055 0056 0066 0067 0077 0078 0088 0089 0099 0111
0112 0115 0118 0119 0122 0123 0124 0125 0126 0127
0128 0129 0133 0134 0135 0136 0137 0138 0139 0144
0145 0146 0147 0149 0155 0156 0158 0159 0166 0167
0169 0177 0178 0179 0188 0189 0199 0223 0224 0225
0226 0227 0228 0229 0234 0235 0236 0237 0238 0239
0244 0245 0246 0247 0248 0249 0255 0256 0257 0258
0259 0266 0267 0268 0278 0279 0288 0289 0334 0336
0337 0339 0345 0346 0347 0349 0355 0356 0357 0358
0367 0368 0369 0377 0378 0379 0446 0448 0449 0455
0456 0457 0458 0459 0466 0467 0468 0469 0477 0488
0555 0556 0557 0558 0559 0568 0569 0578 0579 0589
0669 0679 0688 0779 0789 0889 0899 0999 1111 1112
1114 1115 1116 1117 1118 1119 1122 1123 1124 1125
1126 1127 1128 1129 1133 1134 1135 1136 1137 1138
1139 1144 1145 1146 1147 1148 1149 1155 1156 1157
1158 1159 1166 1167 1168 1177 1178 1188 1189 1199
1222 1223 1224 1225 1226 1227 1228 1229 1233 1234
1235 1236 1237 1238 1239 1244 1245 1246 1247 1248
1249 1255 1256 1257 1258 1259 1266 1267 1268 1269
1277 1278 1279 1288 1289 1299 1333 1334 1335 1336
1337 1338 1339 1344 1345 1346 1347 1348 1349 1355
1356 1357 1358 1359 1366 1367 1368 1369 1377 1378
1379 1388 1389 1444 1445 1446 1447 1448 1449 1455
1456 1457 1458 1459 1466 1467 1468 1469 1477 1478
1479 1488 1489 1555 1556 1557 1558 1559 1566 1567
1568 1569 1577 1578 1579 1588 1589 1599 1666 1668
1669 1678 1679 1688 1689 1777 1778 1779 1788 1789
1799 1888 1889 1899 1999 2222 2223 2224 2225 2226
2227 2228 2229 2233 2234 2235 2236 2237 2238 2239
2244 2245 2246 2247 2248 2249 2255 2256 2257 2258
2259 2266 2267 2268 2269 2277 2278 2279 2288 2289
2299 2333 2334 2335 2336 2337 2338 2339 2344 2345
2346 2347 2348 2349 2355 2356 2357 2358 2359 2366
2367 2368 2369 2377 2378 2379 2388 2389 2399 2444
2445 2446 2447 2448 2449 2455 2456 2457 2458 2459
2466 2467 2468 2469 2477 2478 2479 2488 2489 2499
2555 2556 2557 2558 2559 2566 2567 2568 2569 2577
2578 2579 2588 2589 2599 2666 2667 2668 2669 2677
2678 2679 2688 2689 2699 2777 2778 2779 2788 2789
2799 2888 2889 2899 2999 3333 3334 3335 3336 3337
3338 3339 3344 3345 3346 3347 3348 3349 3355 3356
3357 3358 3359 3366 3367 3368 3369 3377 3378 3379
3388 3389 3399 3444 3445 3446 3447 3448 3449 3455
3456 3457 3458 3459 3466 3467 3468 3469 3477 3478
3479 3488 3489 3499 3555 3556 3557 3558 3559 3566
3567 3568 3569 3577 3578 3579 3588 3589 3599 3666
3667 3668 3669 3677 3678 3679 3688 3689 3699 3777
3778 3779 3788 3789 3799 3888 3889 3899 4444 4445
4446 4447 4448 4449 4455 4456 4457 4458 4459 4466
4467 4468 4469 4477 4478 4479 4488 4489 4499 4555
4556 4557 4559 4566 4567 4568 4569 4577 4578 4579
4588 4589 4599 4666 4667 4668 4669 4677 4678 4679
4688 4689 4699 4777 4778 4779 4788 4789 4799 4888
4889 5555 5556 5557 5558 5559 5566 5567 5568 5569
5577 5578 5579 5588 5589 5599 5666 5667 5669 5677
5678 5679 5688 5689 5699 5777 5778 5779 5789 5888
5889 5999 6666 6667 6668 6669 6677 6678 6679 6688
6689 6699 6777 6779 6788 6789 6799 6889 7777 7778
7779 7788 7789 7799 7888 7889 7899 8888 8889 8899
8999 9999

参考リンク

おまけ

by 木戸孝紀 tags: ブックマークに追加する

2010 4/17

(本文とは無関係)

 上のエントリにコメントするため秀丸の単語補完機能ってどれぐらいまでカスタマイズできたっけ? と調べていたら、むしろ自分がビックリしてしまった。

 今まで、辞書の「フリーフォーマット」というのと「単語補完の検索対象:現在編集中のテキスト」という設定の意味を正しく理解していなかった。

 これは要するに「たった今自分が何も考えずに書いたばかりの単語でも勝手に辞書に登録され補完対象にできます」ということだったのだ。

 ん? それぐらいEclipseとかのIDEなら普通だろ、と思うかもしれないが、Eclipseとまったく違うところは、速いということだ。もう目にも止まらぬ速さ。*1

 流石に「このクラスに存在する関数だけ表示」とか文法を考慮まではしてくれないが、ちょっとしたものを書くだけならこれで十分。むしろEclipseよりやりやすい。

 秀丸ユーザでよかったと久々に思った。タブモードがあるのを発見したとき以来の衝撃。

*1:逆に言うとそんな速度でIDE並のことをやってくれるいう可能性が頭になかったので、今まで気づかなかった。

おまけ

 鬼のように難しい。

by 木戸孝紀 tags: ブックマークに追加する

2010 3/31

入門Mercurial Linux/Windows対応

 実は大分前から参考リンクのような記事を参考にプライベート用のリポジトリをMercurialにしていた。

 が、自分だけで使っていたこともあって、日常のコミットをローカルだけで完結できるので速くて便利とか、コマンドが”hg”だけで済むので短くて便利、ぐらいの感想しか持っていなかった。

 しかし、Joelの記事とチュートリアルを読んでようやくそれ以上の利点が理解できた気がする。

 システムはファイルではなく変更単位で管理する。変更はクリアシートのようなもので、シートを積み重ねて上から見た状態がファイルと考えればよい。マージはクリアシートの積み重ね・抜き差しである。だからマージが楽。大変わかりやすかった。使い方にも微妙に変化が生じそう。

参考リンク

おまけ

 Mercurial→Mercury→水銀→水銀燈

by 木戸孝紀 tags: ブックマークに追加する

2010 3/7

(本文とは無関係)

 Google IMEに対応。これまでも10000語ごとに分割すればそのまま使えたが、あらかじめ分割したバージョンを追加。

 元からネット用語に強いGoogle IMEのことなので、およそネット用語に関しては最高の環境になったかも。

 サジェスト機能も軽いので、普通に入力して変換することはあまりないであろう長めの項目も、比較的有効に使える。使えるというか、使えないけど笑える。

 プロパティでサジェスト9個にして「あいすべき」とか「びょういんが」とか入力するとそれだけでカオスな世界に突入する。

 ただし、問題がひとつ残っている。Google IMEでは、キーボードから入力されるのはカタカナのヴなのに、辞書ファイルで読みを「ヴ」で入れていても、インポート時に「機種依存文字の一文字でひらがなのう゛」に変換されて登録されてしまう。

 そのため「ヴ」が絡む単語は、登録しても結果的に変換できない。インポートの仕様が変らない限り、こちらで回避する方法はないように思われる。気になる人はGoogleの然るべきところに要望を出しておいてくれるといいかも。

おまけ

 ニコニコと日本語つながり。

by 木戸孝紀 tags: ブックマークに追加する

2009 11/8

プログラミング言語 Ruby

 一昨日のパズル。もう終わっちゃってるけど、乱数でのゴリ押しだけでは芸がなさ過ぎるでしょう常識的に考えて……ということで、ちょっと改良した。

 互いに行き着けないノードの数をスコア(当然低い方が良い)として、ステップごとに上位1/4だけ残してそれを4倍に複製。二本のエッジをちょん切ってつなぎ替える。

 N=4で15個の解はわりとすんなり見つけられるようになった。


15個のノード。
30本のエッジ。
0のスコア。
0:[9, 12, 5, 8]
1:[3, 9, 11, 6]
2:[5, 11, 13, 12]
3:[1, 5, 10, 13]
4:[7, 5, 14, 6]
5:[2, 4, 3, 0]
6:[14, 12, 1, 4]
7:[4, 11, 9, 10]
8:[10, 14, 11, 0]
9:[13, 0, 7, 1]
10:[8, 12, 7, 3]
11:[2, 7, 1, 8]
12:[6, 10, 0, 2]
13:[9, 14, 2, 3]
14:[6, 13, 8, 4]

 まだやってないけど、パラメータ設定とかける時間次第ではN=5もいけるかもしれん。

11/9追記

 ちょっと時間かかったけどN=5で24個いけた。populationは800に設定。


24個のノード。
60本のエッジ。
0のスコア。
0:[6, 11, 7, 16, 13]
1:[15, 3, 13, 4, 18]
2:[6, 5, 14, 3, 23]
3:[1, 7, 20, 2, 11]
4:[19, 13, 17, 1, 5]
5:[2, 16, 4, 12, 10]
6:[2, 0, 23, 15, 19]
7:[17, 21, 0, 3, 10]
8:[12, 10, 23, 13, 20]
9:[14, 20, 17, 15, 16]
10:[8, 22, 15, 7, 5]
11:[12, 0, 22, 3, 17]
12:[8, 11, 21, 15, 5]
13:[14, 4, 1, 8, 0]
14:[13, 9, 21, 2, 22]
15:[1, 6, 9, 12, 10]
16:[20, 0, 5, 18, 9]
17:[23, 7, 4, 9, 11]
18:[23, 21, 1, 22, 16]
19:[20, 22, 4, 6, 21]
20:[19, 16, 9, 3, 8]
21:[7, 18, 14, 12, 19]
22:[19, 10, 11, 14, 18]
23:[18, 17, 8, 6, 2]

おまけ

 もうすぐCDが出るらしい。

by 木戸孝紀 tags: ブックマークに追加する

2009 11/6

科学がきらわれる理由

 ううむ、地下猫さんが『科学がきらわれる理由』をおすすめされた背景では、そんなこと考えていたのか。これはちょっと予想外だった。

 確かに『科学がきらわれる理由』は素晴らしい本だが、ダンバー数自体は「まあそりゃ限度のある要素の集まりには何かしらの限界はあるだろうねえ」ぐらいの受け取り方をしておけばいいものだろう。

 少なくとも現時点で、具体的にその数に何かがある・その数から何かが言えると考えるのは、百匹目の猿現象みたいな純然たるオカルトとは異なるものの、六次の隔たりレベルの通俗科学でしかないと思うなあ。

 まあそれはそれとして、

平面上にいくつかの点がある。点と点が線で結ばれている。1本任意の1点から出ている線の数はN。任意の2点を取り出すと、その2点は直接、あるいは、別の1点を経由してつながっている。このような状況が可能な点の個数の最大値は?

 という問題そのものには久々にパズル欲が刺激された……と言いたいところだけど、こりゃパズルってレベルじゃねーぞ!

 直感で根拠はないが、M、Nが一般の場合の解を求めるのは、数学上の未解決問題ではないかと思う。具体的な数にしたってN = 150なんてとてもとても。

 かと言って、一応数学野郎・プログラム野郎の端くれのつもりなのに手も足も出ずに終わるのは悔しいので、小さい数ぐらいでなら遊べるように、ゴリ押しで解を探すスクリプトを書いた。

 見つからないと延々と探し続けるので、諦めるときはCtrl+Cで止めて下さい。(実行できる人なら止め方も知ってると思うけど。)

 N = 3の時の最大個数は10のようだ。理論上 N^2+1 を上回ることはありえないのでN = 3については解決。


10個のノード。
15本のエッジ。
[0, 1, 2, 7]
[1, 0, 9, 6]
[2, 0, 5, 3]
[3, 2, 8, 6]
[4, 6, 5, 7]
[5, 2, 4, 9]
[6, 1, 3, 4]
[7, 0, 4, 8]
[8, 3, 7, 9]
[9, 1, 5, 8]

 N = 4の時は13まで、


13個のノード。
26本のエッジ。
[0, 6, 11, 9, 4]
[1, 6, 11, 12, 10]
[2, 8, 11, 6, 4]
[3, 5, 4, 7, 12]
[4, 0, 2, 3, 12]
[5, 3, 8, 6, 7]
[6, 0, 1, 2, 5]
[7, 3, 5, 11, 9]
[8, 2, 5, 10, 9]
[9, 0, 7, 8, 10]
[10, 1, 8, 9, 12]
[11, 0, 1, 2, 7]
[12, 1, 3, 4, 10]

 N = 5の時は16まで、


16個のノード。
40本のエッジ。
[0, 5, 10, 8, 9, 1]
[1, 3, 15, 11, 0, 14]
[2, 10, 12, 11, 4, 3]
[3, 10, 6, 1, 4, 2]
[4, 8, 3, 15, 9, 2]
[5, 15, 0, 7, 10, 14]
[6, 10, 3, 13, 7, 8]
[7, 15, 13, 5, 6, 12]
[8, 4, 0, 6, 14, 11]
[9, 15, 12, 4, 13, 0]
[10, 3, 6, 2, 0, 5]
[11, 2, 13, 14, 1, 8]
[12, 9, 2, 13, 14, 7]
[13, 6, 7, 9, 12, 11]
[14, 5, 12, 11, 8, 1]
[15, 9, 5, 1, 7, 4]

 N = 6の時は20個まで発見。(まだあるかも。)(追記:N=4で14はあるみたい。(2009-11-04 – imo758の日記


20個のノード。
59本のエッジ。
[0, 18, 1, 5, 8, 17, 13]
[1, 7, 0, 10, 4, 16, 14]
[2, 19, 16, 10, 5, 13, 6]
[3, 7, 9, 11, 19, 16, 13]
[4, 12, 18, 16, 19, 1, 11]
[5, 7, 8, 9, 18, 2, 0]
[6, 15, 10, 17, 2, 12, 9]
[7, 9, 3, 5, 1, 15, 17]
[8, 5, 12, 0, 11]
[9, 18, 7, 3, 5, 12, 6]
[10, 12, 15, 2, 6, 13, 1]
[11, 3, 19, 15, 4, 16, 8]
[12, 10, 4, 8, 6, 9, 14]
[13, 19, 10, 2, 18, 0, 3]
[14, 15, 18, 1, 12, 19, 17]
[15, 14, 17, 6, 7, 10, 11]
[16, 17, 2, 4, 1, 11, 3]
[17, 15, 16, 7, 6, 14, 0]
[18, 9, 0, 4, 5, 14, 13]
[19, 2, 4, 13, 11, 3, 14]

 もちろん完全ランダムなので、見つからなくてもない証明にはならないが、見つかった解は正しい(はず)。

追記

 やっとまともにグラフ理論っぽい説明が来てくれた。面白い。

 N=4は15まであるのかよ。やはりN=4で早くもゴリ押しは通用しなくなるみたいだな。まあ今回はN=3の10を見つけるスクリプトがさっと書けたのと、一般には未解決だろうと一目で当たりがつけられたということで個人的には満足しておこう。

おまけ

 プログラミングつながり。これは楽しい。

by 木戸孝紀 tags: ブックマークに追加する

2009 10/31

(本文とは無関係)
 ふと思い立って作ったら、かかった時間の割に意外と効用があったので公開。


#!/usr/local/bin/ruby
#-*- coding: Windows-31J -*-

SOURCE = 'training.txt'

puts "トレーニングを開始します。\n\n"

File.open(SOURCE){|file|
  file.each do |line|
    line.chomp!
    next if line.size == 0

    print line
    gets
    puts "...Done\n\n"
  end
}

puts "おつかれさまでした!!"

スクワット足を閉じて 10
スクワット足を普通に開いて 10
スクワット足を大きく開いて 10

アレイ交互前上げ 10
アレイ上持ちあげ 10
アレイ背筋上げ 10

アレイ内上げ 10
アレイ前持ちあげ 10
アレイ横持ちあげ 10
アレイ後ろ持ちあげ 10

手を押しあう前で 10秒
手を引き合う前で 10秒

首を前から押す 10秒
首を後から押す 10秒
首を左から押す 10秒
首を右から押す 10秒

腹筋 10
背筋 10
腕立て 10

もも上げ 10
尻蹴り 10
足を横開き左 10
足を横開き右 10

 こんなメニューを作っておけば一行ずつ表示してくれる。それだけのプログラム。

 ちょっとしたことなのだけど、単に表を見ながらやるより能率上がるのよね。

おまけ

 トレーニング→スポーツ

by 木戸孝紀 tags: ブックマークに追加する

2009 7/21

 最近読んだ本、またはずっと紹介したいと思っていた本の中から、個別エントリにするタイミングがなさそうなものを、まとめて一挙紹介。

 ★は1-5個でオススメ度。人に薦める価値がまったくないと思うものはそもそも取り上げないので、1個でもつまらないという意味ではない。

『自分をつくりだした生物―ヒトの進化と生態系』★★★

 ジョナサン・キングドン著。先史人類とそのテクノロジーが環境といかに相互作用してきたかという観点からの本格的な人類学本。

『BEST SOFTWARE WRITING』★★★

 Joel Spolsky編。おなじみJoelが編集したソフトウェア関係の良記事集。

『人間の安全保障』★★

 アマルティア・セン著。とても薄い新書。いい人だということはわかったが、さすがに薄すぎてこれだけでは何とも。もっと別の本も読んでみようと思うぐらいには面白かった。

『知的複眼思考法―誰でも持っている創造力のスイッチ 』★

 苅谷剛彦著。amazonレビューなどでは非常に評価が高かったが、そこまでとは思えなかった。すでに類似の本をけっこう読んでいるからだろうか?

『ルドルフ・シュタイナー―その人物とヴィジョン』★

 コリン・ウィルソン著。地下猫さんのところで小耳に挟んだので。まあ悪人ではないのだろうけど、私には普通のオカルト主義者としか見えなかった。

『紅一点論―アニメ・特撮・伝記のヒロイン像』★★★

 斎藤美奈子著。かなり昔読んでいて、最近どこかで見かけて思い出した。なかなか良い本だったと記憶している。

『地に呪われたる者』★

 フランツ・ファノン著。ここ経由で読んだ。つまらなくはなかったが特にこれといったことは。

おまけ

 今月はトレーニングが流行ってたようだがこれ以上はもう出んだろ。

by 木戸孝紀 tags: ブックマークに追加する