プログラマの素養を確認するための簡単な問題として有名な「FizzBuz」問題。ただしこれだけ有名になってしまうと、プログラムの能力を試験するための新たな問題が必要とされているかもしれません。
経験豊富なソフトウェア開発者、Santiago L. Valdarrama氏が、「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」を出題し、Redditなどで話題となっています。
その5つの問題は以下の通りです。
問題1
forループ、whileループ、および再帰を使用して、リスト内の数字の合計を計算する3つの関数を記述せよ。
問題2
交互に要素を取ることで、2つのリストを結合する関数を記述せよ。例えば [a, b, c]と[1, 2, 3]という2つのリストを与えると、関数は [a, 1, b, 2, c, 3]を返す。
問題3
最初の100個のフィボナッチ数のリストを計算する関数を記述せよ。定義では、フィボナッチ数列の最初の2つの数字は0と1で、次の数は前の2つの合計となる。例えば最初の10個のフィボナッチ数列は、0, 1, 1, 2, 3, 5, 8, 13, 21, 34となる。
問題4
正の整数のリストを与えられたとき、数を並び替えて可能な最大数を返す関数を記述せよ。例えば、[50, 2, 1, 9]が与えられた時、95021が答えとなる(解答例)。
問題5
1,2,…,9の数をこの順序で、"+"、"-"、またはななにもせず結果が100となるあらゆる組合せを出力するプログラムを記述せよ。例えば、1 + 2 + 34 – 5 + 67 – 8 + 9 = 100となる(解答例)
まとめ
Redditでも話題となっているように、問題1〜問題3はかなり簡単なのに対し、問題4と問題5が急に難しくなっている印象があります。
このような、頭の体操的プログラミング技術が、あらゆるプログラマに必須かどうか議論の余地があるところかもしれませんが、解けないよりは解けたほうがかっこ良いとは確実にいえそうです。腕に覚えのあるプログラマの方はチャレンジしてみてはいかがでしょうか。