与えられた範囲の中から、回文の積を見つけます。
回文数とは、数字を逆に並べても同じになる数のことです。
たとえば、121は回文数ですが、112はそうではありません。
ある範囲の数が与えられたとき、その範囲内の2つの数の積として表せる回文のうち、最大のものと最小のものを見つけます。
解答では、最大と最小の回文の積を、それぞれの範囲内での因数とともに返します。 最大または最小の回文の積に、範囲内での因数の組が複数ある場合は、そのすべての組を返します。
範囲[1, 9](両端を含む)が与えられたとします…
また、この範囲で考えられるすべての積を並べると、次のようになります。
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 15, 21, 24, 27, 20, 28, 32, 36, 25, 30, 35, 40, 45, 42, 48, 54, 49, 56, 63, 64, 72, 81]
回文の積は、(この場合は)すべて1桁の数です。
[1, 2, 3, 4, 5, 6, 7, 8, 9]
最小の回文の積は1です。
その因数は(1, 1)です。
最大の回文の積は9です。
その因数は(1, 9)と(3, 3)です。
範囲[10, 99](両端を含む)が与えられたとします…
最小の回文の積は121です。
その因数は(11, 11)です。
最大の回文の積は9009です。
その因数は(91, 99)です。
この演習を解くには、次の2つの関数を実装する必要があります。
largestPalindromesmallestPalindromeどちらの関数も、因数の下限と上限を受け取り、回文とその因数のペアの候補を含むペア(value, [(factor1, factor2)])を返します。
型がわからない場合は、用意されているシグネチャを使ってもかまいませんが、それに創造性を縛られないようにしましょう。
因数の配列に重複が含まれていてもかまいませんし、因数の順序は関係ありません。
最小の回文と最大の回文を探すときは、少し違うアルゴリズムを使うことも検討してみましょう。