はてなの日記でやっている30分プログラミングから、適当に抜粋しました。
ちなみに、現在のルールは、
抜粋ではなく全リストは 30分プログラム一覧にあります。
http://d.hatena.ne.jp/mzp/20070419/fortune
fortune用のデータを与えると、そこからランダムに表示する。
例えば、次のようなファイルを用意する。
アブラハムの子であるダビデの子、イエス・キリストの系図。 -- マタイの福音書 1:1 % アブラハムはイサクの父であり、イサクはヤコブの父、ヤコブはユダとその兄弟たちとの父、 -- マタイの福音書 1:2 %
そして、それを与えると
$ ./fortune bible アブラハムはイサクの父であり、イサクはヤコブの父、ヤコブはユダとその兄弟たちとの父、 -- マタイの福音書 1:2
となる。
http://d.hatena.ne.jp/mzp/20070908/history
シェルの~/.historyを解析し、よく使うコマンドを抽出する。
$ ./history_analizer ~/.history
ls: *****************************************
cd: ***********************************
perl: *****************************
mvn: ******************
sudo: *********
svn: ****
http://d.hatena.ne.jp/mzp/20070716/bar
拡張子ごとにファイルの数を数える。
$ ./ext * * :[================= ] (bible,cat,db,dict,...) *.awk :[== ] (ls.awk,rawk.awk) *.bmp :[= ] (ChiPet.bmp) ...
http://d.hatena.ne.jp/mzp/20070822/zip
郵便番号と住所の相互変換を行なう。郵便番号のデータは、 日本郵便のサイトからダウンロードできるので、それを利用する。
$ ./zip 4710852 愛知県豊田市御幸町 $ ./zip 御幸 4710852 : 愛知県豊田市御幸町 4430042 : 愛知県蒲郡市御幸町
http://d.hatena.ne.jp/mzp/20070831/paste
http://d.hatena.ne.jp/mzp/20070902/paste
pasteコマンドの再実装。複数のファイルを一つにまとめる。
$ cat 01 000 111 222 333 444 $ cat 02 AAA BBB CCC DDD $ cat 03 aaa bbb ccc ddd $ ./paste 0[1-3] 000 AAA aaa 111 BBB bbb 222 CCC ccc 333 DDD ddd 444
http://d.hatena.ne.jp/mzp/20070506/wcavg
与えられたファイルの平均行数を求める。
$ ./wc_avg.scm msort.rb sieve.rb 53.5
http://d.hatena.ne.jp/mzp/20071107/glob
[1-10]という形のグロブを展開する。
$ ./glob 'a[0-3].txt' a0.txt a1.txt a2.txt a3.txt $ ./glob 'a[00-03].txt' a00.txt a01.txt a02.txt a03.txt
http://d.hatena.ne.jp/mzp/20070612/acm
与えられた数値に対して、次の操作を繰り返し行なう。
例えば10が与えられた場合には、
10 5 16 8 4 2 1
となる。
どんな入力に対しても、最終的には1になると考えられている。初期値が1になるまでの系列の長さを求めよ。この例の場合には、系列の長さはもちろん7になる。
http://d.hatena.ne.jp/mzp/20070827/shuffle
配列をシャッフルする。
irb> shuffle [1,2,3,4,5,6,7] [4, 1, 3, 5, 7, 2, 6]