「キミならどう書く 2.0 Round2」は難しいのか、つまらないのか
キミならどう書く 2.0 - ROUND 2 の問題文がもしこう書かれていたら、世間の評判はどう変わったでしょうか。
ある1以上の整数 n に、
- n が1なら停止する。
- n が偶数の時は、nを2で割る。(n = n / 2)
- n が1以外の奇数の時は、nを3倍して1を足す。(n = n * 3 + 1)
という手続き f を繰り返し適用することを考えます。どんな整数 n からスタートしても、繰り返し f を適用すると、かならずいつかは n が 1 になり停止するのではないかと思われています。(コラッツの問題 - Wikipedia)
例えば3からスタートすると、
3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1 -> 停止
と、 手続き f を8回実行して停止します。これをステップ数と呼ぶことにします。 さて、「100までの整数で、停止するまでのステップ数が最も大きい数」はなんでしょうか?
「簡単すぎてつまらない」という人が増えたでしょうか。これを見て「なんだ、あの難しそうな問題文はそういう意味だったのか」と思う人も多いのでしょうか。
今回の問題は、問題文に使われている言語こそ難しかったですが、技術的に難しいところはありませんでした。問題が簡単すぎるという意味での「つまらない」という意見には、そういう意味では賛同します。この問題をゴールだと考えると簡単すぎてつまらないでしょうね。 でも、だからこそ一部のチャレンジングな人は、例えば「ものすごく大きい数についての計算に挑戦する」や「少ない文字数でコードを書くことに挑戦する」などの課題を自分で作り出してそれに挑戦していたのではないでしょうか。(僕の場合は「Schemeでdefineを使わずに書く」と「物理法則を使って可視化してみる」でした。)
お祭りは盛り上がらないと面白くないですから、難しすぎて挑戦者が少なすぎるよりは、簡単すぎる方がマシかと思います。簡単な問題なら、参加者が自分でもっと難しくすることができますから。でも今回の問題は、内容自体は簡単だったのに、問題文が難しすぎたようですね。例えば2文目の「Collatz予想とは,1以上の自然数 n に対して,次の関数 f(n) が必ず1を返すものとする.」も、関数fが再帰的な定義になっていて、慣れていない人にはわかりにくいですよね。hの定義も数学語で書かれていて読みづらいですよね。そういう難解な問題文を苦労して読解したら実はお題はすごく簡単だった、となるとガックリくる人も多いのかも知れませんね。