tech oyaji ksmakoto_presen

11
5分間hangmanで遊ぶ! @ksmakoto(きしもと)

Upload: makoto-kishimoto

Post on 05-Dec-2014

534 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Tech oyaji ksmakoto_presen

5分間hangmanで遊ぶ!

@ksmakoto(きしもと)

Page 2: Tech oyaji ksmakoto_presen

hangmanとは?

● 昔はUnix(BSD)に標準添付だったゲームのひとつ● いわゆる単語当てゲーム● 単語中に含まれないアルファベットを答えると、

吊るされている人(hangman)が描き加えられる

● /usr/share/dict/words ファイルから出題● 日本人にはつらい● Unixコマンドを使って(チートではなく)楽をしよう

Page 3: Tech oyaji ksmakoto_presen

hangmanの入手とビルド

● bsdgamesのような名前のportsやパッケージに

ごった煮状態で入っている(rogue, mille等)

● 私が確認したFreeBSDのportsで入る版にはバグ

(出題の単語中に大文字が含まれるが、大文字は回答できない)

● 現在ソースをメンテしてるのはDragonFly BSDプロジェクトなので、DragonFlyのリポジトリから最新版を取ってきてビルド!

Page 4: Tech oyaji ksmakoto_presen

アルファベットの頻度(1)

● 有名な「ETAOIN SHRDLU」 → これは使えない

Page 5: Tech oyaji ksmakoto_presen

アルファベットの頻度(2)

● 「ETAOIN SHRDLU」は、「通常の英文」の頻度

● hangmanのような「辞書の見出し語」の頻度ではない

● 例: 辞書には「the」や「that」や「they」が出てくるのは、1回だけ

● hangmanでは単語の長さもヒントになるが、調べてみるとそれだけでもアルファベットの頻度は変動する

Page 6: Tech oyaji ksmakoto_presen

アルファベットの頻度(3)

● hangman用の頻度調査

● wordsファイルを使うので「あるアルファベットが出現する行(単語)はいくつか?」をかぞえるawkスクリプト

● その他はおなじみのgrepとsortで

Page 7: Tech oyaji ksmakoto_presen

アルファベットの頻度(3)cont

BEGIN {

split("", count)

}

END {

for (c in count) {

print(count[c] " '" c "'")

}

print NR " lines"

}

{

split($0, arr1, "")

for (n in arr1) {

arr2[arr1[n]] = 1

}

for (c in arr2) {

count[c] += 1

}

delete arr2

}

Page 8: Tech oyaji ksmakoto_presen

実例

● 出題: Word: --------- (9文字)● grep -i '^.........$' /usr/shate/dict/words |

./hang_count.awk |sort -nk 1

● 19171 'a'20073 'I'22456 'e'32407 lines

Page 9: Tech oyaji ksmakoto_presen

実例

● Word: -er-tri-e● grep -i '^.er.tri.e$' /usr/shate/dict/words |

./hang_count.awk | sort -nk 1● 3 'z'

5 'e'5 'I'5 'r'5 't'5 lines … ここで ”z” は外れた

Page 10: Tech oyaji ksmakoto_presen

実例

● Word: -er-tri-e● grep -i '^.er.tri.e$' /usr/shate/dict/words |

grep -v -e z | ./hang_count.awk● pedotribe

veratribe● 本当は「.」もマッチし過ぎている(既に出ている以外の

文字、に絞りたい)が、grepで簡単に表現する方法がない( . の代わりに [^erti] のようなのを並べるしかない)

Page 11: Tech oyaji ksmakoto_presen

まとめ

● hangmanを簡単なスクリプトとコマンドで攻略する方法を紹介した

● まだ詰められる点はあるが、発表者による30分ほどの評価では、おおむねほぼ全てのゲームでwin可