atgt2020_制作後記
こんにちは。ちゃそです。
初noteです。
書こう書こうと思って1ヶ月が経過し、公開しようしようと思ってさらに1ヶ月が経ちました。atgt2020の制作後記です。
私は今回のイベントで2問の作問を担当しました。それぞれの解説はこちらです。
11匁
https://atgt2020.wordpress.com/2020/12/25/11/
23匁
https://atgt2020.wordpress.com/2020/12/25/23/
このうち23匁の方に関しては、言いたいことが「がんばった!」と「小謎生成力をあげたい!」に集約されてしまうので、今回は11匁についてつらつらと書いていきます。
11匁『ヴェールに包まれた』
というわけで、界隈にまたもや新単位「1Velato(14h51m)」を生み出してしまった伝説の問題についてです。こんなはずではなかった。
私はGM参加当初から、88星座使って作曲したいと思っていたのですが、同じく作問担当のしゃなさんがMIDIでプログラミングするとかいう激ヤバ言語を持ってきてくださって、
「これもやりたい!どうしよう!」
からの
「どっちもやっちゃえ、NISSAN」
で悪魔合体したというわけです。
前半:無限Velato編
前半は、歌詞の羅列から指定された箇所のメロディーをとってきて、プログラミング言語「Velato」で変換するというものでした。
……しかし、解かれる際はこの段階でかなりの時間がかかってしまう結果となりました。一番の原因は、6時間経過して直接的なヒントを出すまでそもそもVelatoの存在にたどり着いてもらえなかったことですね。
一応想定していた導線としては、タイトルが楽語であることに気づいてそれを検索してもらうというものでしたが、
・そもそもタイトルを使うか否かが問題によってまちまち
・「タイトルが楽語っぽい」と感じる人が少ない
・タイトルで検索したとして、「ヴェールに包まれた」や「Velato」の検索
結果がシブい
といったあたりが難易度爆上がりの原因だと思います。検索という作業は海が果てしないので、深く潜らせるならばそこを調べるのが正しいという確信をもたせなければなりません。それはそう。
しかし、Velatoを使うことがわかってからもひと悶着ありました。
この言語はasciiコードを10進法で入力して対応する文字を出力するのですが、音と0〜9の数字の対応について、公式側で仕様のぶれがあったのです。そのため、使うコンパイラやツールによって出力が変わってしまうというバグが生じてしまいました。
そもそもコンパイラの類があまり整備されていないマイナー言語なので、「目コンパイル」が想定解法だったのですが、実情がここまでややこしいことになっているとは思いませんでした……。
裏でどうにか仕様のぶれを解読して、訂正表を作ることに。結果としてatgt史上最も「何を言っているのかわからない」訂正になった気がします。
結局実際に目コンパイルが完了するまでには、出題から11時間半くらいかかりました。ここからようやく私が手を動かして作問した部分です。なんてこった。
後半:(音楽+原義宇宙)謎
後半は、「ピアノの音と星座を対応づけて、楽譜から指示文を導く」というものでした。
もともとは数年前に「ピアノの鍵盤数と星座の数が同じ」というのに気づいてから、いつか使いたいなーと思っていたところ、これまたしゃなさんから天球図を使うアイデアをいただきまして、色々考えた結果
星と天文台が3組対応するように天球図と日本地図を重ねる
という指定方法を思いつきました(11月下旬)。
思いついたはいいが、そんな重ね方実装できるのでしょうか???とりあえず試してみます。
探すべきは、3つの日本の天文台と3つの星で、結ぶと相似な三角形になるものです。
一旦、指示文に出しやすそうな名前の天文台を適当に選んで結んでみます。なるべく三角形が大きいほうが精度が担保できますね。
これを天球図の上でぐるぐるして、いい感じに星に重なるやつを探します。
探します。
ありました。
かなりいい精度で重なっています。南半球の星ですが、2つは一等星、もう一つはプロキシマ・ケンタウリとかいうなんか有名なやつです。というわけで採用。ここまで約3時間。
あとは楽譜から指示文を出すパートですが、88音に88星座の名前を対応づけるのはほぼ確定の流れでしょうから、「星座名の○○文字目を拾う」みたいな指定ができるとよさそうです。
楽譜(というか音)に情報を仕込む方法にはいろいろあると感じていて、例えば
・音の高さ
・音の長さ
・音の大きさ
・音色
・音の組み合わせ(和音)
といったパラメータが存在します。これをうまいこと使うと、色々な情報を伝えられます。音楽の素養のあるなしが関係しないような見せ方が難しいのですが……。
今回は、音の長さを利用するのがよさそうです。
ピアノの各鍵盤に星座の名前を当てはめて、その音が8分音符n個分の長さなら星座名のn文字目を読むというルールにしました。
これで指示文が作れないとかだと焦ったのですが、幸い
acrux is naoj、 achernar is misato、 proxima centauri is
が作れそうなのでOK。
もう一つ、制作当初からのこだわりとして、
どうせなら曲として聴けるものにしたい!
という考えがありました。
折角なら音楽の趣味を活かしたいですし、これに成功すれば、今までの音楽匁とは一味違ったものができるはずだという考えでした。
そんなわけで、先ほどの指示文を出すのに使える音とその長さをリストアップ。
あまりに長い音(8分音符10個分とか)は使い物にならないので除外。
あとは制約の強そうなところから考えていきます。特に「J」はめっちゃ低いA#と鬼のように高いGしか使えないので苦労しました。
半日くらいわちゃわちゃやって、こんな感じになりました。拍子も調も変えずに作れてハッピー。
88星座を使うこと、および一音に一アルファベットを対応させることへの誘導として、starを表出させました。
星座を使うことへの導線としては、最初のステップで使った曲がことごとく「夜」「天体」モチーフであったことも挙げられます。これに関してはもうしゃなさんの神選曲・神実装のおかげです。頭が下がります。
……ここのstar表出も、当初は設けていませんでした。
しかし今思えば、この導線を削ってもいたずらに難易度が上がるだけで面白くないですね。
基本的に、難しくしてやろうという考えで全体戦をつくるとpspsしてあまりよろしくない、という学びを得ました(Velatoの導線然り……)。
さて、いい感じに曲っぽいメロディーになったので伴奏をつけます。これはもともと暗号には使わず、おまけの音声ファイルとして置くだけの予定でした。
これを投げたところ、「これだけ音数があればここにもVelatoのコードを仕込める」とのご意見をいただき、ヒントとして日本地図の画像を入れたフォルダのパスが出力されるようになりました。
結果としてこれが実際に解かれる際にも良い導線になっていて、後半は3時間半くらいで無事突破されました。朝を迎えなくて本当によかった……。
最後まで解き切ってくれた深夜班のみなさん、ありがとうございました。
さいごに
初めての作問で、やりたかったことをほぼそのままやらせていただけて、結果的には良いものができたと思います(難易度は鬼でしたが……)。
作問班やデバッグの皆さん、そして解いてくれた皆さん、ありがとうございました。
追記1:音のもつ情報とその見せ方について。 この間Twitterに投稿したもの。
コードを図形化して並べたわけですが、この形式で「この曲は何でしょう?」をやると、簡単に「謎」ができるという寸法です。
追記2:
折角なので、YouTubeチャンネルを開設して今回作曲した「Message to ATGT」を投稿しました。
よろしくです。