gnugo
『山の近くで愉快にくらす』(信濃毎日新聞社)なんて本を読んだ。著者は、北尾トロさん。 ん、この著者の本、昔読んだ事があるぞ。
「裁判長ここは懲役4年でどうすか」とか「傍聴弁護人から異議あり」とか、笑わせてくれる 一連のものだ。今度はその人が、猟師になりたい!2、なんて副題が付いた本を出したと 言うんだから、これはもう読んでみる鹿ないだろう。
事の顛末は、どうもこういうことらしい。東京に住む著者が田舎暮らしにあおこがれ、松本近辺に 通ううち、セカンドハウスを借りた。先行で、女房小供が田舎に定住。著者は、東京と田舎を 行ったりきたり。そして段々と田舎に比重が移って行く。
折角田舎に来たんだから、田舎ならではの事をやろう。そして眼を付けたのが何と、猟師に なろうという発想。猟師になるには、試験を受けて資格を取った後、免許を取得しないと いけないらしい。
猟の免許は4種類あるとか。網を使ったもの、罠を使ったもの、空気銃を使ったもの、最後は ライフル銃等空気銃以外での猟。
4種の免許はそれぞれ違い、種類毎に資格を得る必要がある。猟銃免許だと、免許取得に15k、 猟銃所持許可に60k、狩猟者登録に20k、ハンター保険等に15k、全部で最低11万円は、公的に 必要になる。この他、講習会の費用とか、猟友会の会費とか、銃やそれを保管するロッカーも 必要になるので、30万円以上の出費を覚悟しないといけないらしい。
著者は、こういう出費をして、晴れて猟師にはなったけど、初年度は猟価ゼロに終わった。 その事は、猟師になりたい本に書いたそうだ。そうか、それだけの投資は本を書くための 材料になったのかと失礼な話もあったので、パート2で、猟価を得る所を書いたとか。
自分への挑戦らしいです。下調べで、何処に獲物が居るか調査。狩猟期間は、本州だと 11/15から翌年2/15までの期間しか無いそうな。この時期以外は、弾は撃てないので、 ひたすら調査、撃ってもし当ったら、獲物を回収しなければならない。命を頂くのだから、 粗末にしてはいけない。必ず、全部食べてあげる事が、命を奪った者の仁義。
解体方法、料理方法も体験して身につけなければならない。身近で先輩の猟師を見つけ、 その人から技を伝授してもらう。猟を通じて、地元に溶け込んで行くのが楽しいと著者は 言う。そうでしょう、そうでしょう。頑張ってください。
ちなみに、獲物は鳥とか鹿とか猪とか熊とかあるけど、彼は鳥にこっているらしい。 まあ、空気銃では熊を倒せませんから。でも、そのような大型獣の狩猟に参加は出来るそうだ。
いわゆる、巻き猟というやつ。勢子と呼ばれる人達が、獲物を居そうな所で囃したて、獲物を 追い出す。慌てた獲物はたいがい勝手て知ったる獣道から逃げて行くので、そこに立ち子と 呼ばれる、ゴルゴ13が待ち構えていてズドーン。
勢子に参加するには、体力必要。冬場なので雪のある所を、1時間も2時間も声を出しながら、 登ったり下ったりするんだぞ。オイラーも昔、山スキーで経験あるけど、それは大変な事ですよ。
ああ、経験で思い出した。取った獣は食べる事だけど、最近はジビエとか言って、それらの 肉が出回り、また食べさせてくれるレストランが出来つつあるね。オイラーも、つい1月程前に、 鹿肉のハンバーグを食べたぞ。ちょっと獣臭(動物園の臭いね)がしてワイルドな味だった。
昔、ドイツに駐留してた時、鹿、うさぎとか、普通に食べてたなあ。あちらは狩猟の本場 ですからねえ。鹿肉のステーキに野ぶどうのソースを付けて食べるなんて最高の贅沢と 思ったぞ。
ああ、贅沢と言えば、鷹を使って鴨等の鳥類を取る、鷹狩りが贅沢です。徳川の殿様とかは、その 為だけに、鷹匠を召抱えていたんですから。現代でも、細々と続けている方がおられるそうな。 件の著者も、猟師仲間の紹介で、その方の話を聞いた事があるとか、いいな。楽しそう。
lisp debug
gnugoを作って、付属のgnugo.elを使おうとすると、旨く動かない。で、infoして、新しい やつが出てるって知り、それを使って事なきを得たんだけど、世の中そうそう旨く行くとは 限らないはず。そういう時はどうするか? emacsは勝手に昔の互換性を棄ててくれるって言う 困った性質があるから、そういう時の為に、少し調べておこう。
具体的にどんなエラーになったか? gnugoを起動した時に、minibufferに、ちょろっと
Args out of range: "", 0
こんなメッセージが出てきた。メイン画面には何の表示も無しって症状。レンジを外れてるって 何処で出してる? それが分かれば、追跡出来るだろうに。C-x C-bして、関係ありそうな Messages bufferが出来上がっている事を知る。
Loading /home/sakae/src/gnugo-3.8/interface/gnugo.el (source)... gnugo.el: `flet' is an obsolete macro (as of 24.3); use either `cl-flet' or `cl-letf'. [7 times] Loading /home/sakae/src/gnugo-3.8/interface/gnugo.el (source)...done let*: Args out of range: "", 0
ほらね。って、この方法は、たった今、思い付いた調査法。emacsの人達って、こういう事を 平気でやってくれるから、困り者。指示通りに変更してみたけど、やはりレンジ外が出てくる。
えと、こういう時の調べ方ってあったよな。相手はlispマシーンだからな。デバッガの 項でも調べればいいのかな。 17.1 Lispデバッガ ふむ、ある変数を有効にすると、エラーに至る道筋が見えるとな。
(setq debug-on-error t) C-x C-e M-x gnugo
スクラッチバッファーで、上記の操作。
Debugger entered--Lisp error: (args-out-of-range "" 0) aref("" 0) (let* ((col (aref value 0)) (one (+ 97 (- (if (< 72 col) (1- col) col) 65))) $ (if (string= "PASS" value) "tt" (let* ((col (aref value 0)) (one (+ 97 (- (if$ gnugo-gtp-to-sgf("") (format "[%s]" (gnugo-gtp-to-sgf x)) (lambda (x) (format "[%s]" (gnugo-gtp-to-sgf x)))("") mapcar((lambda (x) (format "[%s]" (gnugo-gtp-to-sgf x))) ("")) (apply (quote concat) (mapcar (function (lambda (x) (format "[%s]" (gnugo-gtp$ (gnugo-note :AB (apply (quote concat) (mapcar (function (lambda (x) (format "$ (if black-stones (gnugo-note :AB (apply (quote concat) (mapcar (function (lam$ (let ((g-blackp (string= "black" (gnugo-get :gnugo-color))) (black-stones (sp$ gnugo-initialize-sgf-tree() gnugo-board-mode() (if (and (not new-game) (< 0 n) (y-or-n-p (format "GNU Go game%s in progress,$ (let* ((all (let (acc) (let ((--dolist-tail-- (buffer-list)) buf) (while --do$ gnugo(nil) call-interactively(gnugo record nil) command-execute(gnugo record) execute-extended-command(nil "gnugo") call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command)
バックとレースが出てきた。emacsは、リスプマシーンって事を実感しましたよ。ここから 先は、lisperになって地道な追跡が待っているとな。大変だーー、だけどとっかかりは こういう方法で得られる。
ifdefを隠す
lisp繋がりで、もう一つ調べておきたい事が有る。それは、C語のソースを読んでいる時に、 #ifdef WINDOWS なんてのが、頻出して鬱陶しいのだ。どれぐらいそういうのが有るか 調べてみたぞ。
まずは、newlispのソースから
nb7$ grep ifdef *c | cut -d' ' -f2 | sort| uniq -c| sort -nr | head -5 100 SUPPORT_UTF8 68 WINDOWS 39 BIGINT 34 DEBUG 25 SUPPORT_UCP nb7$ grep ifndef *c | cut -d' ' -f2 | sort| uniq -c| sort -nr | head -5 62 NEWLISP64 37 WINDOWS 26 SUPPORT_UTF8 23 EMSCRIPTEN 8 LIBRARY
31本のソースに、これだけ切り分けが有るって、作者の方、よくやるわ。そんじゃ、他の ものはどうだ? emacs-24.5/srcの中を調べてみる。
nb7$ grep ifdef *c | cut -d' ' -f2 | sort| uniq -c| sort -nr | head -5 203 HAVE_WINDOW_SYSTEM 139 WINDOWSNT 80 USE_GTK 73 HAVE_X_WINDOWS 68 ifdef nb7$ grep ifndef *c | cut -d' ' -f2 | sort| uniq -c| sort -nr | head -5 31 DOS_NT 24 MSDOS 21 WINDOWSNT 20 HAVE_X_WINDOWS 14 HAVE_NS
こちらも、いろいろ切り分けていますなあ。
で、検索してみると、ルビキチさんの本がヒットした。 emacs ifdef 隠す みんな、悩みは共通って事で、emacsに標準でマイナーモードが用意されてた。この使い方だと、 その場で設定するようだ。恒久的に設定するにはどうするの?
一つのヒントを提示してくれている方が居た。 Emacs + hide-ifdef-mode の自分なりの使い方メモ この方の例に倣って、
;; hide-ifdef-mode (add-hook 'c-mode-hook '(lambda () (hide-ifdef-mode t) (hide-ifdefs) )) (add-hook 'hide-ifdef-mode-hook (lambda () (unless hide-ifdef-define-alist (setq hide-ifdef-define-alist '((p1 DEBUG BIGINT) (p2 WINDOWS WINDOWSNT) ))) (hide-ifdef-use-define-alist 'p2)))
もっと詳しくは、 /usr/share/emacs/24.5/lisp/progmodes/{hideif.el,hideshow.el} あたりを見れ。
その他、emacsユーザーの生態観察って事で、 Emacs ユーザーの方に質問です。これは便利! と思える elisp プログラムを教えてください。 参考にすると良いかも。回りに相談相手がいないと、どうしてもこうなっちゃうね。
gnugo
gnugoで遊んで(遊んでもらって)いるんだけど、全く勝てない。空間認識が出来ないの だろう。こういうのには慣れるしかないのかな。
何とかして相手を出し抜いてやろう。そうだ、相手の思考ルールを知れば何とかなるんじゃ ないかい。ソース嫁。いきなりだと辛いので、試合が始まった時、どのあたりに居るか 、スパイもとえ、昔風に言うと、忍びとか間者を放ってみれ。
こちらは、emacs経由で、盤と石をリアルに表示した時の図
(gdb) bt : #7 0xb754805d in fgets () from /lib/libc.so.6 #8 0x08059b8d in gtp_main_loop (commands=0x8509160 <commands>, gtp_input=0xb76ae5a0 <_IO_2_1_stdin_>, gtp_output=0xb76aed60 <_IO_2_1_stdout_>, gtp_dump_commands=0x0) at gtp.c:95 #9 0x0804f04a in play_gtp (gtp_input=0xb76ae5a0 <_IO_2_1_stdin_>, gtp_output=0xb76aed60 <_IO_2_1_stdout_>, gtp_dump_commands=0x0, gtp_initial_orientation=0) at play_gtp.c:353 #10 0x0804b2d6 in main (argc=4, argv=0xbfb7bd24) at main.c:1431
こちらは、チープにASCII表示の図。ASCIIモードはdebug専用に使うらしい。
(gdb) bt : #7 0xb75a105d in fgets () from /lib/libc.so.6 #8 0x0804d1a5 in do_play_ascii (gameinfo=0xbfacda78) at play_ascii.c:667 #9 0x0804d087 in play_ascii (tree=0xbfacda70, gameinfo=0xbfacda78, filename=0x0, until=0x0) at play_ascii.c:613 #10 0x0804b375 in main (argc=1, argv=0xbfacdbf4) at main.c:1463
ソースを追っていってもいいんだけど、パターンマッチしながらやってると思うんで、 その思考の元を探してみる。ぴったりな名前のdirが有ったぞ。
[sakae@fedora patterns]$ ls *.db aa_attackpats.db fuseki.db mc_mogo_classic.db owl_vital_apats.db attack.db gogo.db mc_montegnu_classic.db patterns.db barriers.db handicap.db mc_uniform.db patterns2.db conn.db hoshi_keima.db mokuhazushi.db sansan.db defense.db hoshi_other.db oracle.db takamoku.db endgame.db influence.db owl_attackpats.db eyes.db komoku.db owl_defendpats.db
攻撃とか防御壁とかご宣託とか布石とか、それらしいのが有りますなあ。一つ開いてみるか。 初盤が大事らしいので、fuseki.dbを見てみる。
# ? : don't care # . : empty # X : your piece, # O : my piece, # x : your piece or empty # o : my piece or empty # * : my next move # -, | : edge of board # + : corner of board
パターンは文字列で表す。そしてその凡例が載ってて、実際の布石は
Pattern F1 |..???...ooo approach star |...X.....O. |.....*..... |........... |........... +----------- :8,FEad
星を作りたい時は、こんな風に打てとな。そして、コロンから始まっているのは、付帯 情報。多分、効果点とかなんだろうな。こういうのが幾つあるか調べたら、172個登録 されてた。データベースに登録されてる、総計は5300個を超えてた。 凄いもんだなあ。資料を斜め読みした感じでは、自分でパターンを追加したり強化する 事が出来るみたい。その為のツールも提供されてた。
SGF
ゲームの記録を残すためのフォーマットだそうです。 SGF File Format FFによれば、SGF is the abbreviation of 'Smart Game Format'. との事。碁だけじゃなく、オセロとかチェスとかヘックスとかバックギャモンとかの ゲームにも対応してるとか。チェスだと、ゲームの譜の事をノーテーションとか言うらしい。
gnugoでも、記録を残せるようになっている。どんな風に記録されるかやってみた。
nb7$ cat mygame.sgf (;FF[4]GM[1]SZ[19]DT[2015-11-21]RU[Japanese] AP[gnugo.el:2.2.12] KM[0.0] PB[] PW[GNU Go 3.8] ;B[aa];W[po];B[ss];W[cp])
最初のFFはバージョン番号、GMはゲーム名、SZは碁盤のサイズ、日付、日本ルールかな。 APは通信プログラムか。KMは碁用語でコミと呼ばれる一種のハンディキャップ。 囲碁用語一覧を参照。 また、ウェキペディアの囲碁のページとか 囲碁のルール なんてのも面白い。こちらは簡潔にして的を得た囲碁」のルールについて です。ルールを覚えると、45級だかが得られるそうですよ。
回りを囲んで石を取ると、その石はアゲハマって名前が付けられて、碁筒の蓋に移される。 捕虜収容所送りだな。戦いが続き、陣地が形成され、その中に取り残された相手の石は、死石 とか言うそうな。人質だな。
戦いが終了した時、捕虜と人質の交換を行う。相手の陣地の目を 捕虜と人質で潰し(陣地との交換だな)、残った陣地の大小で勝ち負けが決まる。 やっと正確なルールが把握出来ましたよ。これって、国連が認める国際ルールだよね。 それとも、世界文化遺産候補?殺し合いが無いから、平和なゲームだ。
PBとPWは、黒と白石の対戦者名。そして、最後は、打った手、Bが黒の手で、Wが白石の手。 括弧内は、交点位置。左上が、AAで、右上がSA、左下がASで右下がSSって具合。嗚呼、角の場所は 隅って言う囲碁用語が有ったわい。
gmp and gtp
囲碁のプログラムを作ると言う事は、碁脳を作るのと同じ事、誇大妄想的に言うと、人口頭脳を 作ってる事になる。今流行りの深層学習とかを付け加えたら、素晴らしい成果が出るんで しょうな。誰かやれ。
で、ポツンと脳だけあると、SFに出て来るホルマリン漬けの脳を想像しちゃうけど、その脳には 確か電極やらが差し込まれていたはず。外界とのやり取りをする為の信号線だ。こういう信号線は 規格化しておいたら、いろいろな脳に差し込んで使えるので便利。
囲碁プログラムも同様に、外部とやり取りする為の信号線と言うか、通信の取り決めがなされて いる。信号線の先に、入出力回路を付け加えるわけだ。
昔の規格は、Go Modem Protocol略してGMPですよ。 昔の規格らしくモデムなんて単語が使われている。そうさ、モデムを繋げば、地球の裏側に あるコンピュータとも会話出来たんだぞ。
gnugoの人は考えた。gnugoを強くするにはどうしたらいいか。知識をデータとして蓄えて、 それがきちんと動くか、徹底的にテストしよう。それを繰り返せば強くなるはず。 そのためには、簡単に試験出来るようにしなければ....
GMPって規格は、それにはちと不便だな。人間が見ても、どんな信号が流れているか簡単に 判別出来た方がよい。そうunix的なテキスト文化。 かくしてして、Go Text Protocolが生まれた。 略してgtpね。
こういう分かり易い規格を公開しておけば、GUI大好き人間が、かっこいい碁盤とか、 ゲームの進行状態表示機を作ってくれるだろう。この作戦は大成功。
オイラーも、Windows7にgnugo脳味噌だけを取ってきて、適当な所に放り込み。表示機は 、昔から持ってるemacs君にお願い。これで、GUI版のgnugo対局システムが簡単に出来上がったよ。 楽でいいわーー。
regression
そして脳味噌試験用の試験器ですよ。どかかの自動車メーカーみたいに嘘はありません。 公開テストが待っています。その公開場所は、regressionって言うdir。脳味噌と 一緒に付いてくる。
ああ、regressionって回帰。要するに パターンとかを変更したならミスっていないかテストしましょって事。試験官もシェル族、 perl族、awk族、python族、pike族と盛り沢山。
資料を読むと、試験官で一番厳しいのはpike族らしい。初めて聞く名前だな。emacsで、 regress.pikeを開いてみたら、ちゃんとpikeモードで色付けしてくれた。デフォで このモードがサポートされてるって事は、世界的には有名なのか。ふと、C-h m で、 どんな編集が出来るか調べたら、なんとPikeモードって、cc-mode.elで代用してた。 pikeってCフラフラに近いんだな。
乗り掛けた船なんで、乗ってみよう。
Pike
本山は Pikeですな。URLにseが混じっているって、スゥーデンが 原産国だな。ウィキにPikeの簡単な 説明が有った。
ネットを検索すると、goの父、Rob Pike先生が優勢なんだなあ。隠れるようにして、 Pikeって意外とやるじゃん、って思った 、 PikeとProcessing とか、 還暦おじさんがPikeの勉強を始めたいと思います と宣言されて、その後の便りが無いなあ。まあ、日本では非常にマイナーって事が 分かりましたよ。 今までどのくらいプログラミング言語を触ってきたか(3秒で挫折したものものも含む) Ver.7 な方も、遭遇してないっぽい。
御託を並べてるより、実際に動かしてみれ。NetBSDに入れてみます。GMPを入れておくと 無限精度演算が出来るそうですから、先に入れましょう。gnugoのgmpと被ってるな。文脈依存だから、 そこは分かるよね。
nb7$ pike Pike v7.8 release 866 running Hilfe v3.5 (Incremental Pike Frontend) > 111111111111111111111111 * 111111111111111111111111111111 ; (1) Result: 12345679012345679012345666666654320987654320987654321
インストール方法は、ちょっと独自。READMEから
The top-level makefile (in this directory, not the src directory) has all the magic you need to build Pike. Just type 'make'. To install type "make install" or "make install_interactive".
いきなりmakeですよ。そして、インストールには、nstall_interactive なんて方法も あるとな。もの珍しいので試してみた。
質問は2つ出てきた。pikeを入れる(PATHの通った)dirは何処ですか? もう一つの 質問は、pike本体は何処に置きますか? こういう方法も有りか。 結果は、最初の質問の場所に、リンクが張られていましたよ。こういうのなら、後で飽きても 即座に、綺麗に削除出来るね。
NetBSDのpkgsrcにはpikeが無かったので野良で入れたけど、FreeBSDではportsになってた。 売りは、
Pike is an interpreted, object-oriented programming language. It looks a bit like C and C++, but it is much easier to learn and use. It can be used for small scripts as well as for large programs. Pike is : - High-level and powerful, which means that even very complex things are easy to do. - Object-oriented, which means that you can use modern programming techniques to divide a large program into small pieces, which are much easier to write than it would be to write the entire program at once. - Interpreted, which means that you don't have to wait for a program to compile and link when you want to run it. - One of the fastest "scripting" languages available. - Garbage-collected, which makes programming much simpler, and removes the risk for memory leaks and other memory-related bugs. - Easy to extend, which means that you can create plug-ins, written in Pike as well as in C or C++, and integrate them with the rest of Pike.
らしい。C語に似てて、ちょびっとCよりも学びやすいとな。GCは勝手にやってくれるから お悩み不用。
で、御題を走らせてみます。永遠に続きそうなので、途中で打ち切りましたけど。こういう 時は、早いマシンが欲しいなー、と。
nb7$ ./regress.pike reading 1.34 101206 0 0 owl 63.60 15038154 19782 92325 ld_owl 25.45 4772708 21720 5613 optics 1.91 259838 0 2689 filllib 9.07 1246414 1719 10176 atari_atari 13.92 3317011 2560 19015 connection 15.61 3630828 0 41483 break_in 1.82 502321 674 4549 blunder 25.55 3957775 4165 18111 unconditional 2.29 38618 0 0 trevora 53.68 15184621 56396 81458 nngs1 165.51 50311277 70291 388145 strategy 132.88 35620398 73359 272673 endgame 32.17 6786690 2797 66664 heikki 2.53 878008 1347 5888 :
最初の数値は、実行時間って分かるけど、後の数値は何? どうも、ここで表示してるようだ。
static void finish() { // Write nothing if no test from the file was run at all. if (sizeof(pass) + sizeof(fail) + sizeof(PASS) + sizeof(FAIL) > 0) write("%-37s %7.2f %9d %7d %8d\n", name, cputime, reading_nodes, owl_nodes, connection_nodes); }
オプション指定が出来るようだ。
nb7$ ./regress.pike -v owl:51-59 owl:51 pass 1 E19 [1 (E19|B19)] owl:52 pass 1 S1 [1 S1] owl:53 pass 1 S1 [1 S1] owl:54 pass 1 H2 [1 (H2|J2)] owl:55 pass 1 H2 [1 (H2|G2)] owl:56 pass 1 Q19 [1 (Q19|T13)] owl:57 fail 0 [1 (T13|N19)] owl:58 pass 1 N19 [1 (T13|N19)] owl:59 pass 1 Q19 [1 (Q19|T13)] owl 6.88 74128 37 210 Total nodes: 74128 37 210 Total time: 6.88 (6.90) Total uncertainty: 0.00
これに対するテスト文、owl.tstの該当箇所は
loadsgf games/owl04.sgf 52 owl_attack Q7 #? [1 S1] 53 owl_defend Q7 #? [1 S1]
碁譜 104番のQ7に対して、52番目では攻撃テスト、S1と返してきたら成功。53番テストは 防御だな。攻撃も防御も同じ石が期待値って事は、大事な眼って事か。
nb7$ ./regress.pike -v owl:52 owl:52 pass 1 S1 [1 S1] owl 5.71 11525 4 87 Total nodes: 11525 4 87 Total time: 5.71 (5.56) Total uncertainty: 0.00 nb7$ ./regress.pike -v owl:53 owl:53 pass 1 S1 [1 S1] owl 5.57 12144 6 87 Total nodes: 12144 6 87 Total time: 5.57 (5.60) Total uncertainty: 0.00 nb7$ ./regress.pike -v owl:52,53 owl:52 pass 1 S1 [1 S1] owl:53 pass 1 S1 [1 S1] owl 5.08 12848 10 87 Total nodes: 12848 10 87 Total time: 5.08 (4.60) Total uncertainty: 0.00
それぞれのテストを単独でやった場合と、続けてやった場合の比較。読んだ手は余り変わらず。 owlってのは和になってる。接続の方は変化無し。owlってのの意味が決定的に重要っぽい。 調べたら戦術的な手て事らしい。最後の行に出てるのは、総不確実性、これが0.0って事は、 自信を持ってお勧め出来ますって事か。 こういうデータを取っておいて、差分を見てくんでしょうな。
pikeのソースコードを見ると、パラレルで実行出来るようになってたぞ。糞石7ぐらいは 欲しくなってくるな。
nb7$ ./eval.sh break_in.tst 10 passed 20 passed 30 passed 40 passed 50 passed 60 passed 70 passed 80 passed 90 passed 100 failed: Correct '0', got '1 D9' 110 passed Summary: 10/11 passes. 0 unexpected passes, 0 unexpected failures
shell版との対比。やっぱりpikeが詳しい。
nb7$ ./regress.pike -v break_in break_in:10 pass 1 F2 [1 (F2|D2)] break_in:20 pass 0 [0] break_in:30 pass 1 G5 [G7|G5] break_in:40 pass G7 [G7|G5] break_in:50 pass 1 E3 [1 (C3|E3)] break_in:60 pass 0 [0] break_in:70 pass 0 [0] break_in:80 pass 0 [0] break_in:90 pass 0 [0] break_in:100 fail 1 D9 [0] break_in:110 pass 0 [0] break_in 6.04 502321 674 4549 Total nodes: 502321 674 4549 Total time: 6.04 (5.97) Total uncertainty: 0.00
pikeなかなか面白そう。何か作ってみたいな。十分に周回遅れだけど、 8つの言語でテキストフィルタを書き比べた をやってみるか。shiroさんも参戦してるしな。 それとも、懲りずに、血圧測定表示にするか。
調子こいて、fedoraにも入れようとしたら、gmp.hないぞ攻撃に遭遇。全く腹立つなあと、 ぶつぶつ言いながら、dnf install gmp-develしたよ。コンパイルには少し時間がかかるので、 ソースエリア探検。toolsの中にpike.elを発見したけど、これを使うと何か特別な碁利益が 有るのでしょうか? まあ、碁縁って事で入れてみるか。
リアル世界の碁繋がりは、いろいろと御利益がありそうだな。林檎が一杯あるから取りに おいでとかね。ちょっと前だけど、渋柿あげる攻撃に実家が晒され、泣きながら90個の柿の 皮向き。そして柿暖簾を編んで、正月に備えたとか。干し柿食べ放題だな。 田舎は付き合いが濃密ですよ。