薩摩順吉著『確率・統計』 p.15 の問題を UNIXコマンドと順列生成プログ ラムを使っていんちきなやり方で解きます。 (注意: この方法は、文字列が長くなるとすぐに破綻します)
準備
文字列の順列を生成するプログラム permstr が必要です (Schemeで書かれていま す)。permstr を動かすには guile が必要です。
permstrの動作例:
% permstr abcde | column
abcde adceb bcade becda cdabe daceb deabc ebcda
abced adebc bcaed bedac cdaeb daebc deacb ebdac
abdce adecb bcdae bedca cdbae daecb debac ebdca
abdec aebcd bcdea cabde cdbea dbace debca ecabd
abecd aebdc bcead cabed cdeab dbaec decab ecadb
abedc aecbd bceda cadbe cdeba dbcae decba ecbad
acbde aecdb bdace cadeb ceabd dbcea eabcd ecbda
acbed aedbc bdaec caebd ceadb dbeac eabdc ecdab
acdbe aedcb bdcae caedb cebad dbeca eacbd ecdba
acdeb bacde bdcea cbade cebda dcabe eacdb edabc
acebd baced bdeac cbaed cedab dcaeb eadbc edacb
acedb badce bdeca cbdae cedba dcbae eadcb edbac
adbce badec beacd cbdea dabce dcbea ebacd edbca
adbec baecd beadc cbead dabec dceab ebadc edcab
adcbe baedc becad cbeda dacbe dceba ebcad edcba
問: IWANAMI という語の7文字をすべて用いて並べるとき、次の総数を求めよ
(i) 異なる順列の総数
% permstr iwanami | sort | uniq | wc -l
1260
(ii) AA という並び方と、 II という並び方を、ともに含む順列の総数
% permstr iwanami | sort | uniq | grep aa | grep ii | wc -l
120
(iii) AI という並び方または IA という並び方を少なくとも1つ含む順列の総数
% permstr iwanami | sort | uniq | egrep '(ai|ia)' | wc -l
1008
類題: りんご 5 個を袋 A, B, C にいれる分け方は何通りあるか
ただし (0, 0, 5) のように 1個も入っていない袋があってもよい。
% permstr ooooo:: | sort | uniq | wc -l
21
おまけ: 括弧の色を薄くしよう
Emacs で Lisp プログラムを編集するときは、括弧の色を薄くして います。comp.lang.scheme で話題になっていた設定を真似ました。 C言語でも同様です。括弧が目立たないとPython 風でなかなかいい です。
~/.emacs の設定方法
(defvar paren-face 'paren-face)
(make-face 'paren-face)
(set-face-foreground 'paren-face "#88aaff")
(defvar brace-face 'brace-face)
(make-face 'brace-face)
(set-face-foreground 'brace-face "#ffaa88")
(defvar bracket-face 'bracket-face)
(make-face 'bracket-face)
(set-face-foreground 'bracket-face "#aaaa00")
(setq lisp-font-lock-keywords-2
(append '(("(\\|)" . paren-face))
lisp-font-lock-keywords-2))
(setq lisp-font-lock-keywords-2
(append '(("(\\|)" . paren-face))
lisp-font-lock-keywords-2))
(add-hook 'scheme-mode-hook
'(lambda ()
(setq scheme-font-lock-keywords-2
(append '(("(\\|)" . paren-face))
scheme-font-lock-keywords-2))))
(setq c-font-lock-keywords-3
(append '(("(\\|)" . paren-face))
'(("{\\|}" . brace-face))
'(("\\[\\|\\]" . bracket-face))
c-font-lock-keywords-3))