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にしていきます。