find / -name 'hanoi*' 2>/dev/null
ハノイの塔のプログラムを過去に作ったかどうかと思い、わたしのザウルスZaurusでfindをかけてみたら、
emacsについてきたhanoi.elc
と
がひっかかりました。
感想:
1.findはいつも使い方を思い出すのに苦労する。linux、unixで一番使うコマンドは何かとhistoryと打ってみたら、cl、ls、grepあたりで、それ以外はeditorやソフトを起動してしまっている。shellは使うけどね。
2.emacsやvimも使い方がわからないままつかっていて、Zaurusではunicodeの関係でvimを使っている。vimを使っているとemacsが使えなくなるので寂しいのですが、vimはvimなりにすばらしい。
3.vimにマクロがあるのを知らなかった。動かし方もよくわからないままhanoi.vimを動かしてみたら、キャラクターベース(数字)でハノイが動いていて、かわいらしい。
4.結局、自分で作ったものはなかった。ちょっとrubyでやってみよう。
#! /usr/bin/env ruby.rb @k = 0 # counter def hanoi(n, x, y, z) # xにあるn個の円盤をzを使ってyに移す if n == 0 # do nothing else hanoi((n-1), x, z, y) # まずn-1個の円盤をxからyを使ってzに移す printf("%3d: %s => %s ", @k, x, y) # xからyに移す @k = @k + 1 # カウンターをインクリメントして puts if (@k % 5) == 0 # 5回ごとに改行する hanoi((n-1), z, y, x) # その後zにあるn-1個の円盤をxを使ってyに移す end end hanoi(6, "A", "B", "C")
よしよし。
追記:「findの使い方」で検索してこのページに来られる方が多いので、少し解説。
実例: find / -name 'hanoi*' 2>/dev/null
findのあとのスラッシュ「/」は、ルートの意味でこれでシステム全体を探せます。Zaurusのハードディスク6GとSCカード2Gを一瞬にして検索。カレントフォルダー以下にしたい場合は、ピリオド「.」にする。
「-name」はファイル名の検索をしますよ、という意味で、
「hanoi*」はhanoiで始まり、そのあとに任意の文字列がつくファイルという意味。
シングルクウォート「'」で囲っているのは、シェルが「hanoi*」のワイルドカードを解釈して展開してしまわないように囲っています。
「2>/dev/null」は、ファイルでないフォルダーについて、エラーが山のようにでるので、それを出ないようにするためのおまじない。
unixのコマンドはmanやinfoでわかるといいますが、findはちょっと癖があって私はいつも自分のこの例をノートから探し出して使っています。