to top page
2013-01-19
マクガフィンを自動生成する Awk スクリプト
マクガフィン(MacGuffin, McGuffin)とは、何かしらの物語を構成する上で、登場人物への動機付けや話を進めるために用いられる、仕掛けのひとつである。登場人物たちの視点あるいは読者・観客などからは重要なものだが、作品の構造から言えば他のものに置き換えが可能な物であり、泥棒が狙う宝石や、スパイが狙う重要書類など、そのジャンルでは陳腐なものである。
- マクガフィン - Wikipedia

こちらのプログラムを Awk で真似てみた。
- マクガフィン自動生成

Awk で書くからには他の言語より短くしたいが、逆に長くなってしまった。
スクリプトは次の通り。「...」は省略箇所。
ITEMS の羅列が格好悪いが、お手本を Awk で無理なく真似るとこんなところか。

BEGIN {
    split("もの 何か 謎 秘宝 宝物 お宝", ITEM_ANBIGUOUS)
    split("鷹", ITEM_CODENAME)
    split("壷 スーツケース アタッシュケース ... 像", ITEM_CONTAINERS)
    ...
    srand()
    for (i = 1; i <= 10; i++) print mcguffin()
}
function random(arr) {
    return arr[int(length(arr)*rand())+1]
}
function mcguffin() { # オリジナルのメソッド名「item」は Gawk では不可
    ITEMS[1] = random(ITEM_DRUGS)
    ITEMS[2] = random(ITEM_MAPS)
    ITEMS[3] = random(ITEM_MESSAGES)
    ITEMS[4] = random(ITEM_EVIDENCES)
    ITEMS[5] = random(ITEM_KEYS)
    return random(MODIFIER_COLORS) random(ITEM_CONTAINERS) random(RELATION_CONTAINED) random(ITEMS)
}

出力例。
茶色の革袋に詰められたハッシーシ
茶色の壷に隠された島の地図
紫のアタッシュケースに厳重に保管されたカードキー
白い旅行鞄に入っているネガフィルム
紫色の謎の像に隠されたセキュリティカード
白い仏像に封じられたセキュリティカード
黄色の空き缶に厳重に保管されたネガフィルム
紫色の仏像に詰めこまれた見取り図
白いコンビニのビニール袋に詰めこまれたMD
茶色の段ボール箱に隠されたMD