マクガフィンを自動生成する 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)
}
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
茶色の壷に隠された島の地図
紫のアタッシュケースに厳重に保管されたカードキー
白い旅行鞄に入っているネガフィルム
紫色の謎の像に隠されたセキュリティカード
白い仏像に封じられたセキュリティカード
黄色の空き缶に厳重に保管されたネガフィルム
紫色の仏像に詰めこまれた見取り図
白いコンビニのビニール袋に詰めこまれたMD
茶色の段ボール箱に隠されたMD