チューリング不完全

What are you afraid of? All you have to do is try.

いらすとやの奇妙な冒険 第1話

いらすとや Advent Calendar 2015 7日目

ドッギャァ~ン
http://2.bp.blogspot.com/-qeY0sjmUK2A/U401E5rfi-I/AAAAAAAAg9Q/0inLmwepOJE/s800/mizugi_woman.png

『血は生命なり!』
http://3.bp.blogspot.com/-la0WXIEj3Og/VA7mbmBn1UI/AAAAAAAAmQY/FlJynwAD9ro/s800/yuusya_game.png

ドッガァ!
http://4.bp.blogspot.com/-lVhR8beIFw0/VJF_lKI5_hI/AAAAAAAAp4o/ltuV33tBWj8/s800/game_ken.png

ブシューッ
http://1.bp.blogspot.com/-L00Bym3hhig/Ul5qQgqV_TI/AAAAAAAAZCA/gqhfZH-fc-M/s800/funsui.png

美女の返り血はこの石仮面にある無数の細かいヒビに吸い込まれていく!
仮面は生き血を吸って動き出したッ!
http://1.bp.blogspot.com/-sXCRxDscQEc/VahRquDP2gI/AAAAAAAAvuw/KP_kKl5Dwl0/s800/noumen.png

侵略者ディオの巻

ビンビン
ビンビン
ドスッ
ドスドスドスドスドスドス
http://3.bp.blogspot.com/-IDs-NUvUYTE/UvTdwySZPSI/AAAAAAAAddg/JvfTZNymRoQ/s800/saihou_hari.png

『おぉお~ん』
実にッ!

実に奇怪だった!
男は死なない!
どのような仕掛けになっているのかこの石仮面から飛び出た数本の骨針に頭をさされているのに!
http://3.bp.blogspot.com/-hRKCZ3bXovc/U5l6FB6XpYI/AAAAAAAAhYI/HcgJ_FNInuc/s800/setsubun_kodomo.png

『我はついに手に入れたぞ!!』
『永遠の生命を!』
http://3.bp.blogspot.com/-Os449TVwhnI/VCOJwW2w5kI/AAAAAAAAm2M/KdNCpvTag7g/s800/job_seijika_man.png

ウォォォォォン
http://2.bp.blogspot.com/-sGec_su9wSg/U7O61I-cqpI/AAAAAAAAiTk/eBb1Vbh3TRc/s800/setsumeikai_seminar.png

『汝!わたしの生命となるか!』
『は!喜んで!』
http://2.bp.blogspot.com/-47rRGlJCk2M/Ugsrla17PBI/AAAAAAAAXF8/Xu7TePCXAhY/s800/gomasuri_businessman.png


ビスッ
ボゴ!
ボゴボゴ
『生命を吸いとるッ!』
http://1.bp.blogspot.com/-ZJil2Q2DItA/U32NtSeQRzI/AAAAAAAAg0o/cirn0qzpKJU/s800/sick_gekiyase.png

『そして!この石仮面から真の支配者の力を手に入れたぞ!』
バゴォ
http://1.bp.blogspot.com/-8kolqN-9IU8/VGX8kcAlZfI/AAAAAAAApI8/gH_pPbZMZYo/s800/karate_kawarawari.png

ウオォオォオォオォ~ッ
族長!族長!族長!
http://3.bp.blogspot.com/-RtobcWeidcQ/UdoE2jnA10I/AAAAAAAAV9k/XRyDlvSBDJE/s800/senkyo_car.png

西暦12世紀から16世紀にかけメキシコ中央高原に強大で勇猛な王国があった!
国家的規模のすさまじい生贄と人肉喰いの儀式が伴うこの文化!

その名を太陽の民アステカ!
http://4.bp.blogspot.com/-l9k1vsBSHho/VaYrPvwQvJI/AAAAAAAAvms/VdMJzYNnxwY/s800/space01_sun.png


そしてその中にこの「石仮面」の能力で世界に君臨しようとする野望をもつ一部族がいた!
「石仮面」は彼らに伝わる奇跡!永遠の生命と真の支配者の力をもたらす!

しかし!ある時その部族は目的をとげずこつ然と歴史から姿を消す!
無人の廃墟を残して!

http://3.bp.blogspot.com/-kyY7d96QffE/VRUSM5jKsCI/AAAAAAAAsng/E-CuZhl7xvA/s800/maya_kukulcan.png


なぜなのか!?どこへ行ったのか!
謎のすべてはこの「石仮面」にある!

この物語はメキシコから発掘された謎の「石仮面」にまつわる2人の少年の数奇な運命を追う冒険譚である!

http://1.bp.blogspot.com/-sXCRxDscQEc/VahRquDP2gI/AAAAAAAAvuw/KP_kKl5Dwl0/s800/noumen.png

第1部ジョナサン・ジョースター その青春


聞こえねえのか…ディオ…
ディオ……ゴホッ…ゴホッ!ゴホゴホゴホ
http://3.bp.blogspot.com/-sjVI30MeGM8/UvTeP929dWI/AAAAAAAAdl8/-Vxm1QC32W8/s800/roujin_museru_seki.png


ここへ来いディオ!
聞こえねぇのかァ…ディオ
ゴホゴホゴホゴホ
http://2.bp.blogspot.com/-mLEIFaPUH-4/Uj_21DlORzI/AAAAAAAAYCM/ZlgkUb7EcpA/s800/dokusyo_man.png

パタン
http://4.bp.blogspot.com/-7mHxdQtnGHA/VCOJfgYKECI/AAAAAAAAmyM/_8XFWkRbfMk/s800/pose_yareyare_man.png

なんだい父さん薬かい?
い いいや薬はいらねえ……
ディオ!ちょいとここへ来い話がある
http://1.bp.blogspot.com/-NB0JpC-N6ac/VRUP7o2TnuI/AAAAAAAAsds/qwuSGUGFiOw/s800/byouki_oldman.png


おれはもう長いことねぇ…
わかるんだ……
じき死ぬ……
http://3.bp.blogspot.com/-saonpkzjcbw/UxbL0dacztI/AAAAAAAAeFE/kPscjWgPwQQ/s800/unhappy_man1.png

死んだあとの気がかりはひとり息子のおめぇだけだ
………いいかディオ
http://1.bp.blogspot.com/-NB0JpC-N6ac/VRUP7o2TnuI/AAAAAAAAsds/qwuSGUGFiOw/s800/byouki_oldman.png


ゴホ!おれが死んだらこの手紙を出してこの宛名の人の所へ行け!
こいつはおれに恩がある……
きっとおまえの生活の面倒を見てくれる
学校へも行かせてくれるだろう!
http://3.bp.blogspot.com/-saonpkzjcbw/UxbL0dacztI/AAAAAAAAeFE/kPscjWgPwQQ/s800/unhappy_man1.png

こいつはおれに恩があるんだケケケ!
http://4.bp.blogspot.com/-xj-dlczJQN4/Vf-ak6b-4gI/AAAAAAAAyHY/3q8yehxoqjQ/s800/wakadukuri_man.png

そう…12年前
あれは1868年の雨の日だった
こんな話息子のディオには話せねえがよォ……
http://2.bp.blogspot.com/-8NdJg3QsXpQ/U401GmwJh5I/AAAAAAAAg90/EvoZgrkuxIw/s800/rain_ame.png

あそこの崖は雨で崩れやすくなる……
よく馬車が落ちてた
http://2.bp.blogspot.com/-kUWQzMt7vY4/VSufjaMD2hI/AAAAAAAAs-U/d4gv0wzHhLg/s800/car_jikosya.png

たまたまおれは酒場の女を連れて通りかかった
http://1.bp.blogspot.com/-hZ0j7hOAMy0/VRUSf8Bsj7I/AAAAAAAAsrs/vII-kOiL-Jo/s800/couple_man_woman.png


ウヘヘヘヘヘヘヘヘ
おい見ろよッ!
事故だぜッ!
ちょっとォだんな!
あたしゃかかわりあいはゴメンだよォ
うるせェッ!金持ちの馬車だぜ
……貴族だッ!
http://2.bp.blogspot.com/-fZPvL3CtBYY/Vkcakg-ua5I/AAAAAAAA0dI/3vlu971kQ68/s800/shinsyakaijin_run2.png

おェッ
http://3.bp.blogspot.com/-tQmyxi367Fo/UxbL1yiVEvI/AAAAAAAAeFc/qnOG8wRQt1c/s800/unhappy_man4.png

ひェ~
http://3.bp.blogspot.com/-e7FojpyN3s4/VGLMvfM8jSI/AAAAAAAApEw/TYL7jMIJzLE/s800/syoukyaku_noyaki.png

ひでェーッ
……こっちのやつも即死だな

だんなァ!馬車の中
女は死んでるけど赤んぼうが生きてるよッ
子供をかばったんだねこの人…
http://1.bp.blogspot.com/-KPvXcvB5OZE/VYJrasbRLAI/AAAAAAAAucw/zrvrVQHdRRM/s800/akachan_nango.png


赤んぼ!?
そんなのほっときやがれーッ
グイグイ
ズボォ
http://1.bp.blogspot.com/-zE-HbO7CdEI/UaVVSsu96tI/AAAAAAAAUD4/eentZA6WZfg/s800/yubiwa_ruby.png

な……何すんのさ?

決まってんだろ!マヌケーーッ
カネ目の物をいただくッ!
ある人間の不幸ってのはある人間を幸福にする
ウワッハハハハーーッ

そ……それもそうね!
あんた賢いわぁ!

ついてるゥ!
ザックリ持ってやがったぜェ!
http://2.bp.blogspot.com/-xyUcjya7HR8/U82zM5Ox0xI/AAAAAAAAjMk/wsjK8A3sV0g/s800/family_syunyu.png


なんだこれは?
き……気味の悪い仮面だ
こ…こいつはいらねェな!
http://1.bp.blogspot.com/-sXCRxDscQEc/VahRquDP2gI/AAAAAAAAvuw/KP_kKl5Dwl0/s800/noumen.png

おい……
こいつの口を開けるの手伝え!
前歯をひっこ抜こう!
歯医者に持って行くと差し歯用に高く売れんだ
http://3.bp.blogspot.com/-dz2j7rkyIGg/Vf-ek-eJvwI/AAAAAAAAyQw/jyoTFDXf0OQ/s800/teeth_sashiba.png

あ……あんた

どうせ歯を買えるのは貴族だしこいつも貴族だ!何が悪いんだ!

ガッギィ
http://1.bp.blogspot.com/-oDxTrasqNhQ/UZ2VKe52yGI/AAAAAAAATwQ/NyhsRFYkKmA/s800/roujinparty_super_45.png


おげェーーッ!?
http://1.bp.blogspot.com/-pYeNd5OykjQ/UxbL21RsJXI/AAAAAAAAeF8/zWVxohhkWq0/s800/unhappy_man6.png


き…………
…君………
http://3.bp.blogspot.com/-uKYWhvudYnA/VZ-TlKTnDxI/AAAAAAAAvR8/qytZgmLgHlU/s800/ojiisan04_cry.png

どヒェエエエ~~っ
こ……こいつ生きてるゥ!

き……君が
介抱してくれたのかありがとう

妻!……妻は
妻と息子は…どうした?
ふたりは……無事か?

くたば……
……いやご婦人と御者はすでに亡くなっておりました
で……でも赤ちゃんは無事です

こいつおれを命の恩人と思っているようだぞ
http://2.bp.blogspot.com/-8AROLi2gvas/U8XlXylongI/AAAAAAAAi-A/2wRauiNe8rM/s800/usotsuki.png


妻のかわりにわたしが死ねばよかったのに
……でも息子は無事……
これも運命か
http://3.bp.blogspot.com/-uKYWhvudYnA/VZ-TlKTnDxI/AAAAAAAAvR8/qytZgmLgHlU/s800/ojiisan04_cry.png

礼をさしあげようと思ったが
あなたが来る前に誰かに財布や指輪を盗られたらしい……

ドキン
http://2.bp.blogspot.com/-vSBqAZQoj-Q/UzoZ_Y5FnFI/AAAAAAAAexU/ij3IWeTjd4Y/s800/kinchou_man.png


わたしの名はジョースター
命を救ってくれた礼をしたい
また気を失う前にあなたの名を聞かせてほしい
このジョースター決して恩を忘れはしまい
http://4.bp.blogspot.com/-q8sXd4zTHzY/UvTd8T7X8OI/AAAAAAAAdg4/C36owPwwgQ0/s800/keizai_fuyuusou.png


このバカめ!……ケケケ!
名のって損はなかろう!

名のるほどの者じゃあありやせんがブランドーといいやす


あの後ー
さらにジョースター卿からもらった多額の礼金で酒場を始めたが
ツキに見放され女房が死に店はつぶれ
病気になってこのざまだ--チクショウ!
ディオッ!
おれが死んだらジョースター家に行けッ
お前は頭がいいっ!!
誰にも負けねぇ一番の金持ちになれよッ
http://3.bp.blogspot.com/-saonpkzjcbw/UxbL0dacztI/AAAAAAAAeFE/kPscjWgPwQQ/s800/unhappy_man1.png

ビュウウウオオオオ
http://1.bp.blogspot.com/-gl7W8l_2vdk/VMIvIFksqoI/AAAAAAAAq4E/MjKF81NHOgA/s800/ohaka_seiyou.png


醜くってズル賢くって
母に苦労をかけて死なせ最低の父親だったぜ!
一番の金持ちになれだと?
ああ!なってやるとも!
おまえの「遺産」受けとるぜ!
ひとりでも生きられるが利用できるものはなんでも利用してやる!
だからこのジョースターとかいう貴族を利用してだれにも負けない男になるッ!

くずめッ
http://4.bp.blogspot.com/--cbdje5OBQ0/VhHgJVf3GCI/AAAAAAAAy3A/pHmbH65zx7w/s800/manner_tsuba.png

http://1.bp.blogspot.com/-gl7W8l_2vdk/VMIvIFksqoI/AAAAAAAAq4E/MjKF81NHOgA/s800/ohaka_seiyou.png



19世紀!
それは産業と貿易の発展が人びとの思想と生活を変えた時代だッ!
http://4.bp.blogspot.com/-fhZ8FDL0BmM/UU--3WYrKkI/AAAAAAAAO_A/AqIyaVTzkqo/s1600/norimono_kikansya.png

依然!食糧不足や貧富の差が激しいにもかかわらず
大人も子供も「自分もいつか金持ちと同じようなくらしができるッ」
このような幻想をいだいていたッ!
http://2.bp.blogspot.com/-UtyHZTr8itg/VYJru5mxDMI/AAAAAAAAukE/6iB071EEzdA/s800/party_formal_rissyoku.png

それは嵐のようなすさまじい渇きだったッ!

バッ
http://1.bp.blogspot.com/-xiy8xTlQPGI/U6Qo0QBu2bI/AAAAAAAAhjc/ltYQ_cZq9Kg/s800/omocha_ningyou.png

イエー!
かえしてッ!かえしてッ!
手がとれるゥ!!

おいエリナ!この人形買ってもらったのか!
おまえの親父ヤブ医者のくせにもうけてっからなッ!
http://1.bp.blogspot.com/-HCV3Twow1Fk/VMItZ9o1gJI/AAAAAAAAqtQ/wW-VHv-CKkE/s800/boys_kenka_omocha.png

よし!人形の服をぬがせてやるぜッ!
あそこが本物と同じかどうか見てやるッ!
http://2.bp.blogspot.com/-JIZGNO9fCqo/U8XlOStzugI/AAAAAAAAi64/Rko35d_lSd0/s800/kai_awabi.png

シクシク
http://1.bp.blogspot.com/-ut65pPjrzGs/U2ssF0-c1AI/AAAAAAAAf-8/V2CEAzZUnMQ/s800/hankachi_naku.png


わーっエリナエリナ!
泣き虫エリナッ

やめろォ!
人形をかえしてやるんだッ!
http://4.bp.blogspot.com/-at_18dgXa5s/VIhOk9oN8eI/AAAAAAAApeY/GkiJOqtN1Fk/s800/1_26.png

なんだ!?おまえ!
エリナの知り合いかッ!?

知らない子だがぼくには戦う理由があるッ

ドッカァァ~ン

こ この野郎ッ
女の子の前だからってカッコつけるヤツ
おれ こーゆーヤツは大嫌いだッ!
やっつけてやるッ
http://3.bp.blogspot.com/-Gv4iMpQJPcM/UxbLdHc1tXI/AAAAAAAAd-g/f1RPu8ZgE6I/s800/kodomo_kenka.png

ガシィィィン
ギャッ
http://3.bp.blogspot.com/-WrUFsJKa8tw/VcMlc9dhcwI/AAAAAAAAwcM/z_y_wCFeMcQ/s800/pose_zasetsu.png

おやァ なんでェ~
こいつてんで弱いぞッ!

うう~

ギャハハハハハ
これ以上みじめなことがあろーか!
助けに入って逆にやられてやがる
おいッ こいつ誰か知ってるか?

知らないね!
まさかジョースター家のひとり息子じゃあねえだろーな!!

おれは金持ちが嫌いだッ!
恨みはねーがとにかく嫌いだッ!
もしあそこのジョースター家のヤツだったらもっとこっぴどくブチのめしたるッ!

http://3.bp.blogspot.com/-SHx-5ozaCSE/VD3SCt0eH6I/AAAAAAAAoNE/oTR79TraUl8/s800/handkerchief_boy.png

あっ!!

こいつッ
やっぱりジョースター家のひとり息子だッ!

この野郎!お高くとまるんじゃあねェーぜ!
思い知れ!

http://4.bp.blogspot.com/-A_udd1pVVxY/UylATbnJUMI/AAAAAAAAeRo/uFTOMnwLhLk/s800/bakuhatsu.png

ふん!金持ちはてめーの敷地内だけで遊びやがれ!

行こーぜ!

ハア ハア
http://3.bp.blogspot.com/-42EB7CfEAm8/VD3Sg3Xbg6I/AAAAAAAAoVo/JMYBdWuTxTE/s800/tsukare_boy.png

いいからほっといて!

向こうへ行けよッ
ぼくは君に感謝されたくってあいつらに向かっていったんじゃあないぞッ!
http://1.bp.blogspot.com/-bTvFHE2RP6s/VPQTzDH-v4I/AAAAAAAAsCM/zgZNVx1c5sk/s800/apron_woman2-1idea.png

ぼくは本当の紳士をめざしているからだ!
君が女の子で困っていたからだ!
相手が大きいヤツだからって負けるとわかってるからって
紳士は勇気を持って戦わなくてはならない時があるからだぞッ!!
でもいつか勝てるようになってやる!
http://4.bp.blogspot.com/-at_18dgXa5s/VIhOk9oN8eI/AAAAAAAApeY/GkiJOqtN1Fk/s800/1_26.png


ジョナサン・ジョースター

でもなんだってこのハンカチをポケットから出したの?

名前をわざわざ見せなければあんなに殴られなかったのに

きっと--
これも彼の言う本当の「紳士」になるために必要なことなのね……
http://2.bp.blogspot.com/-qLDBpHAIxvc/VPQT0pD_jnI/AAAAAAAAsCk/X76IdJgoBGs/s800/apron_woman2-4think.png

ガガッ

バン
http://4.bp.blogspot.com/-kbKGNXLO4WY/VfS5-6gdV8I/AAAAAAAAxMU/sJAi9Gdp6ro/s800/basya.png

ドザア!
http://1.bp.blogspot.com/-CVRGLMGIB-4/UgsrwoLlZuI/AAAAAAAAXKI/XWwwkVoiXFo/s800/travel_suitcase.png

シャン!
http://4.bp.blogspot.com/-WxpuLNvBy-Q/U6llSS4DyiI/AAAAAAAAhuY/jkuze8oG22U/s800/jump_boy.png

スタッ
http://1.bp.blogspot.com/-Qlvf1tTs0lQ/VZt5G9qVelI/AAAAAAAAuzg/i1y0VViLKsc/s800/jiko_jump_yuka.png

グゥゥン
バァーン
http://4.bp.blogspot.com/-dplUuTaontc/Vkb-9f6lvjI/AAAAAAAA0Yk/6NBmovENCCs/s800/achilles_man.png

誰だろう……?
http://1.bp.blogspot.com/-HMFExFItLgM/VZ-QazWvIKI/AAAAAAAAvLY/ABYQKsh7gxg/s800/man_question.png

ハッ!
そうだ…ディオ!
この子の名はディオ・ブランドーだ!
http://1.bp.blogspot.com/-9PoEbu1VJqs/VZ-PTsjrlHI/AAAAAAAAvD4/On6tsR_sD_I/s800/man_idea.png

父さんの命の恩人が亡くなられたので
父さんがその息子をひきとり
ジョースター家で生活することになった…
ぼくと同い年の男の子だ!

君はディオ・ブランドーだね?
そういう君はジョナサン・ジョースター
http://4.bp.blogspot.com/-_Lx0MQ57Irw/VXOUJD0DNJI/AAAAAAAAuHM/_es1QFhQBuY/s800/businessman_aisatsu.png


みんなジョジョって呼んでるよ…
これからよろしく

ワンワンワン
ハッハッハッハッハッ
http://1.bp.blogspot.com/-I9kzaYgztqc/VOsJpnW6YQI/AAAAAAAArrs/_1utqDdX-zw/s800/dog1_smile.png


ダニーーッ

紹介するよダニーってんだ!
ぼくの愛犬でね
利口な猟犬なんだ
心配ないよ!
決して人は噛まないから
すぐ仲よしになれるさッ
http://1.bp.blogspot.com/-Rr_coDquGtM/UzoaD8xfsvI/AAAAAAAAeyY/JysIA0x7ceI/s800/pet_dog_boy.png


ふん!
http://3.bp.blogspot.com/-saonpkzjcbw/UxbL0dacztI/AAAAAAAAeFE/kPscjWgPwQQ/s800/unhappy_man1.png
ボギャアア
http://1.bp.blogspot.com/-L118A_4TRMg/VRUSWhxaaNI/AAAAAAAAsqM/5ooeCDDHgLQ/s800/thai_kickboxing.png

なっ
ドサーーッ
ダニーーッ
http://4.bp.blogspot.com/-WNowxI0ESwI/VCkbPZnsGyI/AAAAAAAAnDo/d8QMnNq2rNw/s800/pet_byouki_dog.png

なっ!
何をするだァーーーッ
ゆるさんッ!
http://3.bp.blogspot.com/--CoKuZF3Znc/VPQTtSqMf1I/AAAAAAAAsAw/37SkDQmVrPc/s800/apron_man1-2angry.png

こいつがジョースター家の跡継ぎ
ひとり息子のジョジョか!
こいつを精神的にとことん追いつめ
ゆくゆくはかわりにこのディオがジョースター家の財産をのっとってやる!
http://2.bp.blogspot.com/-k0Z_SHye1B8/VPLqqIcwhzI/AAAAAAAAr68/OZZDYziXRNo/s800/eieiou_man.png

ピクピク
http://3.bp.blogspot.com/-iTb1N_ZG_Jk/VYJcVnXsTrI/AAAAAAAAuW4/PkJZiHRlKLE/s800/inu_ashi_yowaru.png


おわり

Vimで任意精度整数演算ができるライブラリを作った

github.com

vital.vimに「Data.BigNum」という名称でmergeされました。
vital.vimを入れればお使いいただけます。

なぜVim

Vim scriptでProject Eulerを解こうと思ったのがきっかけでした。
Project Eulerを順に解いていくと、3問目に1つの壁にぶち当たります。

The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?


13195 の素因数は 5、7、13、29 である。

600851475143 の素因数のうち最大のものを求めよ。

https://projecteuler.net/problem=3

問題に出てくる数字が32bit integerの範囲(-2147483648 ~ +2147483647)を超えています。
最近登場した言語であれば標準で多倍長整数が扱えますし、そうでない言語でもそれを実現するライブラリが既にあります。
しかしVimには存在していないらしく、これではProject Eulerを解き進められない!

私は新しい言語の理解をしようとするときはProject Eulerを解きます。言語で最初に書くプログラムはHello, WorldとかFizzBuzzとか言われますが、その次にProject Eulerを解くことで基本的な数値演算、リスト/辞書の扱い方、map/filterの使い方、外部ファイルの読み込み、ライブラリの読み込み方法・・・などを段階的に学習できます。よい題材だと思います。

私はVim Scriptの理解を深めるためにVim ScriptでProject Eulerを解き進めたかったのですが、3問目で止まってしまうのは悔しい。

とにかく遅くてもいいから四則演算ができるものを作りたい、ということでググりつつ自分で野良実装をしました。
作成進捗を逐次Lingrで書いていたところ、「汎用的なのでvital化しましょう」ということでPR, 無事mergeされました。

使い方

Project Euler 3のコード例が以下です。

Project Euler 3

現状は四則演算のためのadd, sub, mul, div, 比較のためのcompare, あとは文字列とBigNumデータ間の変換をする関数などがあるだけの、ごくごくシンプルなものです。
計算時間は悲しいぐらい遅いですが、フィボナッチ数列の10000番目などもちゃんと計算することができます。

今後

基数変換、ビットシフト、高速化、BigRationalなどいろいろやりたいことがあるので、Project Eulerやりつつ機能追加できればいいなあと思っています。

インフラエンジニアがプレイするべきゲーム「Papers, Please」

プレイしたゲームがあまりにも自分の仕事内容を思い起こさせるものだったのでご紹介します。
(実はゲームをプレイしてこういう記事を書こうかな、と思ってから1年位経ってる)


今回ご紹介するのは「Papers, Please」というゲームで、Steamで980円で購入することができます。(ただし年に数回あるセールのときは80%OFFとかで買えるので、そっちを狙うのがオススメ)

2015/02/03 追記

iPadでもプレイできるらしい。


Steamにあるゲーム紹介の文章を以下に貼ります。

おめでとう。
10月度勤労抽選により貴方を入国審査官に命ずる。
即座配属のため、至急グレスティン国境検問所の入国管理省に赴くように。
貴方とその家族には、東グレスティンの8等級の住居が割り当てられる。
アルストツカに栄光あれ。


ここは、共産主義国アルストツカ。隣国コレチアとの6年間の戦争がついに終わり、国境の町グレスティンの半分を正当に取り戻し、晴れて国交を再開することに。あなたの仕事は入国審査官としてアルストツカへの入国者を審査することです。仕事を探している移民や観光客の中に潜む密輸業者、スパイ、テロリストたちを見極める必要があります。入国希望者のパスポートをはじめとする数々の書類をもとに、入国を認めるか、拒否するかを判断しなければなりません。

説明文にある通り、このゲームでは国境に来る人が提出してくる書類を見て、全てが正しいかどうかを判定するわけです。
これをIT業界ではフローチャートと言います。
端的に言ってしまえば、人間フローチャートをするゲームなのです。


以下では、ゲームの中でどのようなことをやらされるのかを見て行きたいと思います。

ゲームの流れ

ゲームは1日単位で区切られており、日の始まりにルールが通達されます。
1日のうちに何人の人間をチェックしたかで給料が決まります(歩合制)。ただし、書類に不備がある人の入国を認めてしまう、また逆に不備がないのに拒否してしまった場合は当然ペナルティとなります。
この基本ルールに加えて、入国希望者とのいろいろなやりとりによるストーリーがあってそれが面白いのですが、そういう要素については全部割愛。

1日目

[規則]

  • 入国者はパスポートが必須
  • 入国はアルストツカ国民のみ

1日目はチュートリアルですから、提出されたパスポートがアルストツカのものであるかどうかだけを確認すればOKです。

2日目

[規則]

  • 入国者はパスポートが必須
  • 全ての書類は期限内でなければならない


1日目の「アルストツカ国民のみ」という制限が外れ、正規パスポートを所持していれば外国民でも通れるようになりました。
さて、パスポートには顔写真、氏名、生年月日、性別、パスポート発行地域、有効期限、パスポート番号、と情報満載です。これらを分解すると以下の様な確認事項があります。

[確認項目]

  • 顔写真が本人か
  • 性別が正しいか
  • パスポート発行地域が正しいか
  • 有効期限内であるか

3日目

[規則]

  • 入国者はパスポートが必須
  • 全ての書類は期限内でなければならない
  • 外国人は入国券が必須


2日目のルールに「入国券」が加わりました。
入国券には有効期日のみが書いてあります。このぐらいのルール追加ならまだまだ余裕ですね。

[確認項目]

  • 顔写真が本人か
  • 性別が正しいか
  • パスポート発行地域が正しいか
  • 有効期限内であるか
  • 外国人(アルストツカ人以外)は入国券を持っているか
  • 入国券の有効日が正しいか

4日目

[規則]

  • 入国者はパスポートが必須
  • 全ての書類は期限内でなければならない
  • アルストツカ国民はIDカード必携
  • 外国人は入国許可証が必須



さて、ここで登場する「IDカード」と「入国許可証」が確認項目を一気に増やすことになります。
特にIDカードに記載されている身長/体重はよく見逃してしまう危険項目です。(身長は人物後ろの高さの線、体重は画面下部に表示されている)
また、入国希望者に対する質問との照合も必要になります。

[確認項目]

  • 共通
    • パスポートの顔写真が本人か
    • パスポートの性別が正しいか
    • パスポート発行地域が正しいか
    • パスポートが有効期限内であるか
  • アルストツカ人
    • IDカードに記載された地区がアルストツカの行政区画として正しいか
    • IDカードの顔写真が本人か
    • パスポートとIDカードに記載された生年月日が一致しているか
    • IDカードの身長が正しいか
    • IDカードの体重が正しいか
  • 外国人
    • 入国許可証の印が正しいか
    • パスポートと入国許可証に記載された氏名が一致しているか
    • パスポートと入国許可証に記載されたパスポート番号が一致しているか
    • 入国許可証に記載された入国目的と発言した入国目的が一致しているか
    • 入国許可証に記載された滞在期間と発言した滞在期間が一致しているか
    • 入国許可証の入国期限が期限内か

と、このように毎日ルールがどんどん増えていきます。
アルストツカは他国と戦争状態にあり情勢が不安定ですから、日々刻々とやることが変わってしまうわけです。
また、例えばテロが起こったりするとそのような人物を入国させてはいけないということになりますから、書類とか確認項目が山盛りになっていってしまいます。

それでは一気に飛んで、15日目の確認項目を見てみましょう。

15日目

[規則]

  • 入国者はパスポートが必須
  • 全ての書類は期限内でなければならない
  • アルストツカ国民はIDカード必携
  • 外国人は入国許可証が必須
  • 労働者は労働許可証が必須
  • 武器、密輸品を持ち込ませるな
  • 外交官は特権証明が必須
  • 外国人は身分証明補足書が必須




書類が目に見えて増えているのがお分かりいただけると思います。
規則に加えて指名手配犯の顔写真リストが渡されており、それも確認しなければいけません。
さらに、不正を見つけたらそれを指摘してつっこみを入れる必要があるのですが、つっこみを入れると入国希望者の指紋を採取します。その際、指紋データとの照合も必要になります。
では、分解してみましょう。

[確認項目]

  • 共通
    • パスポートの顔写真が本人か
    • パスポートの性別が正しいか
    • パスポート発行地域が正しいか
    • パスポートが有効期限内であるか
    • 指名手配犯の顔写真リストに含まれていないか
  • アルストツカ人
    • IDカードに記載された地区がアルストツカの行政区画として正しいか
    • IDカードの顔写真が本人か
    • パスポートとIDカードに記載された生年月日が一致しているか
    • IDカードの身長が正しいか
    • IDカードの体重が正しいか
  • 外国人
    • 入国許可証の印が正しいか
    • パスポートと入国許可証に記載された氏名が一致しているか
    • パスポートと入国許可証に記載されたパスポート番号が一致しているか
    • 入国許可証に記載された入国目的と発言した入国目的が一致しているか
    • 入国許可証に記載された滞在期間と発言した滞在期間が一致しているか
    • 入国許可証の入国期限が期限内か
    • 身分証明補足書の身長が正しいか
    • 身分証明補足書の体重が正しいか
    • 身分証明補足書の特徴が矛盾していないか (例えば「視力良好」なのにメガネをしている、など)
    • 身分証明補足書の期日が期限内か
  • 外交目的の入国の場合
    • 外交特権証明書の印が正しいか
    • パスポートと外交特権証明書に記載された氏名が一致しているか
    • パスポートと外交特権証明書に記載されたパスポート番号が一致しているか
    • 外交特権証明書に記載された入国許可リストにアルストツカが含まれているか
  • 指紋を採取した場合
    • 入管省ID記録の氏名(もしくは別名)とパスポートの氏名が一致しているか
    • 入管省ID記録の指紋と採取した指紋が一致しているか

これでもまだ書き出しきれてないはずです。やばさが伝わるでしょうか。
この段階に来ると、日が変わって新たな条件が与えられた時点で「アッ、もう無理」と悟ってしまいます。


(既にだいぶネタバレを書いてしまっていますが、)ゲームの紹介はこのぐらいにしておきます。

なぜこのゲームをインフラエンジニアに薦めるのか?

このゲームは「人は必ず間違いを犯す」ということを実にわかりやすく痛感させてくれるからです。
システムの構築、設定の変更、障害時の対処・・・運用で起こる様々なイベント、あなたの会社では自動化されているでしょうか。それともWordやExcelWikiなどで管理された手順書を元に人が行なっているでしょうか。
全てが自動化されており、ルーチンワークなどないという環境にある方はおめでとうございます。しかしそうでない環境で働いている人がまだまだ大半だと思います。
できればエンジニアの人達には常に「これを手作業でやるのは無駄だから自動化を検討しよう」という意識でいて欲しいのですが、中にはフローチャート通りに間違いなくこなすことに非常に長けている人というのがいます。
もしフローチャートに沿った手順をこなすのを得意としていて「自分は間違ったことがない、だから大丈夫」だと思っているエンジニアがいたら、一刻も早くこのゲームをプレイしてください。そして早くミスをしてください。
別にフローチャートが得意でなくても、運用事故を起こしたことがない人にはおすすめします。他人からいくら言われても、やはり自分で実際に体感しなければわかりませんからね。


ゲーム内でどんどん事故を起こして、仕事では事故を起こさない仕組みづくりを心がけたいものです。

VimConf 2014への参加とコミュニティの関係性について思ったこと

VimConf 2014に参加してきました。

今回の会場はmixiさん。

最後の方はピザを取りにいくお手伝いをしていたために全ての発表を聞くことはできませんでしたが、ほとんどについては拝聴して楽しませて頂きました。以下、特に気になった発表について書きます。

気になった発表と感想

Identity of the Vim / @kaoriya

VimVimたらしめているものは一体なんなのか、アイデンティティについてのお話でした。今回の資料ははVimというものの立ち位置を説明する際に立ち返ることになるものになりそうです。
人から「なんでVimなの?」「なんで○○使わないの?」と言われた時に、自分の中で確固とした理由・意見を持つことは、今後Vimに本当にcommitしていく価値が本当にあるのかどうかを見つめるという意味で非常に重要なことです。

PM2 / @ujm

ProcessManager及びPM2ライブラリの紹介でした。
でもCiv5の話が強烈すぎてPM2の方をあまり覚えてない。終始笑いまくっていた気がする。

auto closing parenthesis / @c0hama

カッコを自動で閉じようという話。
私はこの発表をきいて、「ああ、俺自動補完あまり好きじゃないんだなあ」と思いました。
(|)のときに)を入力すると()|になるのにいつもイライラしてしまうんですよね。カッコならまだしも、シングルクォートとダブルクォートが混在するようなコードを書くときは本当につらいので…
そういうことを見つめ直せたのでよかったです。

かなりすごい発表(かなり) / @supermomonga

この唯一無二の芸風である。

/-improved / @haya14busa

gifによる操作説明が超わかりやすい。(ああいうのどうやって作るのかな)
incsearch.vimは、今回の発表で一番気になったプラグインでした。入れよう。


Vimコミュニティに見たスモールワールド性

私は今回はじめてVimConf(およびVimConfに連なるこれまでの勉強会)に参加しましたが、TwitterLingrを見ると参加者の全体的な満足度がとても高いように感じました。
「過去最高だった」「感極まってきた」「便利」との感想が飛び交っています。(Lingrに生息している一部の人は日常的に発している言葉ですが。)
懇親会も、私が見た限りではどのテーブルもかなり活発に会話が行われているように見受けられました。50人超の勉強会でこういう状態は、結構すごいことなのではないでしょうか。

というのも、過去に自分が参加した同規模の勉強会を振り返ると、発表を聞いてそのまま誰とも話さず解散となったり、懇親会で周りも自分と同じくらいの初心者ばかりで、時たま気まずい時間が流れてしまう、などを経験したことがあったからです。

Vimコミュニティに長年関わっているujihisa(@ujm)さんは、今回の感想記事で以下のようなことを書いています。

日本のVimコミュニティは今年をもって別の段階に進化したといえるでしょう。集中と継続。大きく分断されることなく、かつ、独裁ではない。持続可能な有機的コミュニティができています。この事実は、目に見えるものではないものの、ものすごく偉大なことではないでしょうか。

https://gist.github.com/ujihisa/1e8925470d01794a002c

私はこれを読んで、大学時代に少し勉強したスモールワールドのことを思い出しました。

スモールワールド

スモールワールドは「友達の友達の友達の…」と辿っていくと6〜7ステップで全世界の人に辿り着ける、という「7つの隔たり」の話に象徴されるような、現実の人間関係をモデル化した複雑ネットワークという分野の言葉です。

詳しくは各自ググっていただきたいと思いますが、ざっくり言うと複雑ネットワークではグラフ理論のノードを人間、エッジを知りあい関係で表します。

以下に、かなり極端な例を出してみます。


例えば上のようなグラフの場合、中心の3人にエッジが集中しています。これは勉強会でいうなら、講演会に近いようなタイプが連想されます。真ん中の3人は発表者であったり、主催者であったりといった存在です。
このような構造の場合、エッジが集中している人間にかなり依存した状態になります。ここで、例えば一番エッジをたくさん持っているノードを消してみましょう。


すると、左側の多くのノードが非連結な状態となってしまいました。特定の人間に関係が集中したグループの場合、中心人物が関係できなくなると、グループとして存続することが危うい状態となります。
例えば勉強会を立ち上げたけれど、発表者の募集、会場準備、次回の計画をたてる…などなど、会を催す上での諸々に中心人物がコミットすることができなくなり、結果数回で消滅の憂き目を見る…このような勉強会は数多くあります。


では次に、同じノード数、エッジ数のもう1つのグラフを見てみましょう。

エッジを多く持つノードはありますが、最初のグラフほど極端な形ではありません。
このグラフについても、ノードを1つ消してみましょう。


やはり独立するノードが発生してしまいましたが、最初のグラフに比べればだいぶましな状態です。
このような関係性であれば、参加者に様々なタスクを任せたり、1人が急遽参加できなくなった場合でもコミュニティ自体は存続し続けられる可能性が高いです。


コミュニティが成長する際、最初のグラフからだんだんと2つ目のグラフに移行していくことが多いと思います。*1
上記の2種類のグラフは、構造の説明の為に同じノード数、エッジ数のものを例として出しましたが、実際はエッジ数は基本的に増えていきますから、例よりももっと網の目のような構造に至るでしょう。



先ほど書いたような、「ノードを1つ消したときにグラフ全体の関係性がどのように変化するか」は、グラフの平均距離を計算することで数値化することができます。
詳しくはこの辺を読んでみてください。


さて、ここでようやくVimConfの話に戻ります。

コミュニティと貢献

ujihisaさんの言う「持続可能な有機的コミュニティ」という言葉を、私は前述した複雑ネットワークの話として捉えました。
このような構造を作り上げるためには、黎明期の中心人物が継続して貢献することが必要になるでしょう。またイベントのみでなく、TwitterLingrを通した日常的な関わり合いであったり、Vim advent calendarなどに代表される精力的な記事の公開が大きく寄与しているのではないでしょうか。結果、明確な中心的人物というものがなく、その人がいない状態でもコミュニティとしては正常にイベントを作ることができる。また、このような構造は新たなノードを取り込むという意味でも有利なように思います。


私は、今回のVimConfの参加者の中でもVimの使い方が極めてライトです。Vimは日常的に使ってはいるけれども、vimrcを編集する頻度も少ないし、プラグインを導入することもそんなにありません。Vim scriptも全然書けません。それでもLingrに毎日いたら仲良くしてくれる方がたくさんいて、それだけで既にいろんな恩恵を受けていると感じます。
もっと即物的には、数ヶ月前に出版されたVim script本をthincaさんから頂いたので、そのレビュー記事とか、プラグインを作るとか…とにかくいろいろと、contributionしていきたいなあということは考えています。

まとめ


*1:別の移行パターンとして、中心人物同士のみで強固なクラスタが構成され、他のノードがそれぞれ孤立した状態になる、という状態もあるかと思います。すなわち新参の拒絶です。この場合はコミュニティのノード数がなかなか増えないという問題に陥ることが考えられます。

PuTTY設定覚書

WindowsからPuTTYを使ってCentOSにログインし、ログイン先ではtmuxを使用している。
主に使用しているエディタはvim
tmuxはtmux.conf、vimはvimrcをgithubにあげているからよいのだけど、PuTTYの設定を書くとこがなくて怖いです、ということでここに書く。

環境

OS(Client) Windows 7
Client PuTTY (Release 0.60-JP_Y-2007-08-06)
OS(Server) CentOS 6.5

PuTTY

端末 > 高度な設定 > Alternate 端末画面への切り替えを無効にする true
ウィンドウ > 外観 > フォント Inconsolata, 12-point
接続 > データ > 端末の詳細 > 端末タイプを表す文字列 putty-256color

あ、あれ?こんなに書くことなかったか・・・

aomoriringo/dotfiles · GitHub

momonga.vim #5

巨体と独特の体系が特徴の海水魚氏から「レポート記事はいつだ」と圧力をかけられまして、とりあえず脳内ストリームを起動してdumpしたやつを貼り付ければいいんじゃないの、というわけで書いています。

普段私は別段Vim Scriptを書くわけではなく、vimrcの編集に熱心なわけでもありません。仕事柄、まっさらな環境で作業することもあるため、あまり凝った構成にするといらいらが増すような気がしており、あまり増やしたくないなあと思っているわけです。
しかしVimの標準機能もまだまだ知らないわけで、momonga.vimでは日頃Vimを使っていて「これがこうなったらなあ」と思っている少し不満な部分、些細な部分を調べ、vimrcを編集し、コマンドに慣れるという作業を本腰をいれてやる、という行動パターンです。


さて、今回の調べたい・直したいのは主に以下の2点でした。

  • テキストオブジェクトって何
  • 日本語入力もうちょっとなんとかならんの

というわけで前半でこの2つをあーだこーだしました。

テキストオブジェクト

調べる前はもっと仰々しいものを想像してたのですが、要は「いろんなキーバインドで範囲指定が楽にできますよ」「オペレータとかと組み合わせてエディットが便利」ということらしい。

テキストオブジェクトやオペレータの拡張プラグインもいろいろあるようなので、おすすめされるままにいれたりしました。あれ、でもいれただけで全然試してない。
この辺でテキストオブジェクトふ~んという気持ちが増大しており、次に進むことにしました。

日本語入力

この時ちょうど仕事で日本語の文章をたくさん書く必要があったのですが、まあめんどいんですよね。
挿入モードで日本語入力にしておくと、ESCと[半角/全角]を両方押さないとその後のカーソル操作ができません。これがもっと快適になればなあという思いで調べ始めたのですが、正直あんまりいい解決方法が見つからなかったです。
挙句の果てには世界最大の硬骨魚氏覚えてないのですが、誰かに「私は日本語の文章書く時Vimは使いません」とか言われてしまって、

(・o・)

みたいな顔になりました。少なくとも心の中で。
というわけでこれも割とどうでもよくなりやめました。

[訂正]
学名Mola mola氏は普段日本語のテキストもVimで書いており、上のようなことを言った覚えは無いということでした。謹んでお詫び申し上げます。

Clojureの設定

用意していたタスクがいい感じに萎んだのでじゃあ何するかということで、最近Lingrでujm氏がClojureを進めているので、「ああ、S式系の言語をまたやってみたいもんだなあ」と考えて環境をいっちょ作ってみましょうか、という気持ちになりました。
ちなみにS式系言語の経験はCommon Lisp(Land of Lisp)とMathematicaです。MathematicaLispに分厚い皮をかぶせたものだと思っている。(超語弊あり)

ところがここでネットワークという壁が私に立ちふさがります。普段私はWiMAXとか持っていなくて、いつも他人の無線LAN環境におんぶにだっこなのです。momonga.vimでは毎回滑空によって飛翔する性質を持つリスの仲間氏の無線にタダ乗りさせてもらっており、みんなそこに接続するので速度とかお察しレベルです。そりゃしょうがないわけです。
それで、yum install hogeとかやると「100個ぐらいインストールするものあるわー^^」とか言いやがるわけで、みなさんの貴重な無線帯域を圧迫し、かつ自分は何もできないという状況の完成です。やりました。
勉強会にきて環境構築などやってはいけません。環境構築というのはこの世で一番つらい作業であり、忌避したいです。時間泥棒です。一回こっきりの作業であることも多く、問題解決は面倒で、環境が違った場合知識の敷衍が難しくてほんと嫌いです。

そんなこんなで全体的なやる気は減衰減退、でもClojureはやりたいので4ClojureというサイトでClojureの問題を20問ぐらい解きました。
そんな感じです。

まとめ

この勉強会は人間が少ない。