Vim Advent Calendarがなかなか電子書籍化しないのは、もしかして私がanimated gifなんか貼ったせいなんじゃないかと微かに罪悪感を感じる今日この頃の plaster です。 ごぶさたでした。
さて、 ちょっと前に話題になった「『フカシギの数え方』 おねえさんといっしょ! みんなで数えてみよう!」というすばらしい動画があります。
おねえさんが命をかけて組み合わせ爆発のすごさをつたえてくれる壮絶なストーリーなのですが、 おねえさんのコンピュータを作ってみた方までいらっしゃって、ほんとにみなさんすごいですね。
ところで、この記事を読んでいて、ひとつ気づいたことがありました。
小さいなサイズなら単純な深さ優先検索(DFS)で解けます
なるほど……たしかに解けますね。Vimで。
##### # # # # # G# ##### 0こういうテキストで表すことにします。ゴールは「G」にします。
###### # # # # # # # G# ###### 0となります。
まずバッファに次のようなテキストを1行、書いておきます。
yl@=@0=="G"?"maGD\"=@-+1\rP`a":@0==" "?"r.l@1hj@1kh@1lk@1jr ":""
この行でdd
して、スタート地点にカーソルを持って行って、@1
すれば Vimおねえさんががんばって数えてくれます。
以下に、Vimおねえさんの勇姿を貼っておきます。
この通り、184だね!
たった1行で解けるVimおねえさん、すご〓い!
同じように、あなたのお手元のVimでももちろん、数えることができます。ぜひ試してみましょう。
コピペするのもめんどいひとのために、すぐ試せるファイルを用意しておきました。
まずはこのファイルをダウンロードして、おもむろにお手元のVimで開いて、1行目にカーソルがある状態で ddjl@1
すれば 3×3 の道順の数が出てきます。
地形を適当にいじれば、4×4 も数えられますし、3×5 みたいな変則的な場合にも対応できます。スタートとゴールの場所を左上や右下以外にしても大丈夫です。 ただし、全体を「#」で囲うことと、最下行が「0」なのだけは変えないでくださいね。
ddjl@1
するだけです。
セコメントをする