Project EulerのProblem 61(日本語)です。
create_hash メソッドでは2つのことをやっています。
まずは、以下のようなhashを作ることです。2桁で始まる4桁の整数とその整数が何角数なのかという情報をもたせています。
{10=>
[[1035, 3],
[1081, 3],
[1024, 4],
[1089, 4],
[1080, 5],
[1035, 6],
[1071, 7],
[1045, 8]],
11=>
[[1128, 3],
[1176, 3],
[1156, 4],
[1162, 5],
[1128, 6],
[1177, 7],
[1160, 8]],
…次に、$octagonal_numbers 配列に八角数を格納しています。これは4桁の整数では八角数の個数が一番少ないので、巡回を探すスタートには適していると判断したからです。
[[1045, 8], [1160, 8], [1281, 8], [1408, 8], [1541, 8], [1680, 8], …
あとは、resovleメソッドを使って再帰的に解を探っていきます。引数のcheckで、使用したn角数をtrueにしていきます。