ツイッターで面白い問題を見かけました。
元々は、英単語で0~12を表す単語に必要なアルファベットを抽出、それぞれに値を設定する、設問で
第0問 z+e+r+o の答えは……みたいなので、足したら0だけど、計算しなくても答えは書いてあるというやつです。
面白かったのでメンバー毎に出席番号が振られている某アイドルグループの名前でやってみたのですが、凄く時間が掛かりました。
こういうののスマートな問題制作方法ありますか? プログラム的でも数学的でもよいです。
ちなみに、添付の画像のについては、それぞれ答えが(計算したらわかるのですが)、3,5,7,10,11,2,13,14,15となってます。15番の人は色々仕方なくあだ名にしてます(n+o+n+o+k+aで答えが見つかりませんでした)。
元々の英単語のやつも13は無理だったのであきらめたんですかね
コメント(5件)
以下、戦略のメモ。
ネタはプログラムや数学では探せないので、個人の力量、もしくは好み。
思いついたネタに対して、「解」があるかどうかを探す。
質問のお題で、"nonoka" のケースを考えてた。
まずは、文字の出現頻度を調べる。
全メンバーで一回しか出てこない文字は、幾らでも調整が効く。
なので、一回しか出てこない文字を持っている人を検索対象から除外。
出現頻度が一回なのは、"e"、"m"、"t"、"u" 。
それを持っているのは、"mirei"、"hinata"、"yuno" 。
残った6名で、もう一回同じことを考える。
出現頻度が一回なのは "h" と "y" 。
"ayaka" と "kaho" を検索対象から除外。
残ったのは、以下の4名。
- rika
- riko
- kokona
- nonoka
使われている文字は、6種類。
"rika" と "riko" は、一文字しか違わない。
rika : 3
riko : 12
a - o = -9 と推定できる。どちらかを確定すれば良い。
"kokona" と "nonoka" も重複が多い。
kokona : 13
nonoka : 15
k - n = -2 のはず。
変数がふたつ減らせたので、残ったのは "a"、"i"、"k"、"r" の四つ。
4重のループを力業でぶん回して回答が見つかれば、"o" と "n" は計算できて、
"h"、"y"、"e"、"m"、"t"、"u" も他のメンバーに影響がないので、逆算で求められるはず。
って、考えてました。
うまく行かなかったから、回答できてないんだけれども。
# 年度末には厳しいぜ
なんとなく方程式? でゴリゴリやるか、絞り込まずに文字種数分の多重ループを組むのがあまりにも力技なので、スマートな方法ないかとか考えてたんですが、ゴリゴリ計算か総当たりでは時間があれなので、テストで出たら閃きで(お記述のように絞り込んで計算量を減らして)解く系問題だったようですね。(コメント者1なのでほんまかどうかわかりませんが、a-kuma3さんがおっしゃってるならなんとなく信憑性あります)
以下は放置してくださって結構です。
>ネタはプログラムや数学では探せないので、個人の力量、もしくは好み。
ってのがよくわからなかったのですが、別のメンバー(例えば中日のスタメンと背番号)でやるとかいう意味でのネタってことなんでしょうか。
それなら私も同感で、たまたまnonokaさん以外で解が見つかるネタがすぐそこに転がってましたが、他のネタって何がある? って考えたら結構何も出てきませんでした。
別のネタ思いついた時に、簡単に検証できるようにという下心ありの質問だったりしたのですが。
C言語しか覚えてないので、C#環境みたいなところでなんちゃってC言語で書いて実行して、それでも時間がかかりすぎて、答えは出ず。
その時は気が付かなかったのですが、デバッグする時のやつで実行してたから、余計に遅かったんだろうなと。
-20~20ぐらいまでを12重ループでぶん回すだけなら、普通のPCでは現実的なんでしょうかね。やっぱり時間かかっちゃうのかな
>ってのがよくわからなかったのですが、別のメンバー(例えば中日のスタメンと背番号)でやると>かいう意味でのネタってことなんでしょうか。
です、です。
解ける問題を探す方法はないと思うので、面白そうな問題を思いついて、それに解があるのかどうかを調べるしかないかなと。
>-20~20ぐらいまでを12重ループでぶん回すだけなら、普通のPCでは現実的なんでしょうかね。やっぱり時間かかっちゃうのかな
Ruby で試してたのですけれど、4重ループまで絞り込んで、-20~20 くらいで数分くらいはかかりました。平均的なノートPCで。
背番号の判定の仕方とか、ほんの少しだけは性能対策をしたつもりだったのですけれども。
単純な計算で、12重ループと4重ループを比較すると 12^12/4^4 なので、34,828,517,376 倍。
生きてる間には終わらないですね。
-20~+20 を 12重ループだと、41^12 でしたわ。
なので、12重ループと4重ループを比較すると 41^12/41^4 で、7,984,925,229,121 倍。
もっと増えた :-)