四桁の3~8角数を任意の順に並べて輪を作る問題。
全くいい方法を思いつかなかったので全数アタック。
・ 4桁のX角数を全部リストアップしておく。
・ 3~8の数の順列を全部リストアップしておく。
・ 順列すべてについて、あてはまるものがあるかどうかを探す。
・ 途中でみつかっても中断せず、すべて探す
だいぶ長くなってしまった。
- triangle-num ~ octagonal
- n-digit-xgonal-num
生成する関数とチェックする関数を両方用意した。
4桁の数が必要なので、4桁の整数からチェックする関数でフィルターする方法を採った。
- split-into-2digit
上位と下位の2桁ずつにわけたベクタを生成
- remove-1digit-at-second
10の位が0の数は、題意に合わないので除外する。
- get-pe61-xgonal-list
上記の関数をつかって、x角数のリストを作る。
[[12 34] [56 78] ....]
- get-child
とある4桁数 [xx yy] に続くx角数のをすべて求める。
- get-pe61-all-path
3~7の数の全ての順列を返す。
※ 8角数から始めることにしたので、8は入っていない。
- search-all-path-depth
ある順列について、8角数から始めてその順に最後まで並べたときに、
先頭の2桁と末尾の2桁が同じであればその列を返す。
- pe61
全ての順列について、上の関数を呼び出して、解だけ出力する。
他にいいロジックがありそうだけど、思いつかない。
全くいい方法を思いつかなかったので全数アタック。
・ 4桁のX角数を全部リストアップしておく。
・ 3~8の数の順列を全部リストアップしておく。
・ 順列すべてについて、あてはまるものがあるかどうかを探す。
・ 途中でみつかっても中断せず、すべて探す
だいぶ長くなってしまった。
- triangle-num ~ octagonal
- n-digit-xgonal-num
生成する関数とチェックする関数を両方用意した。
4桁の数が必要なので、4桁の整数からチェックする関数でフィルターする方法を採った。
- split-into-2digit
上位と下位の2桁ずつにわけたベクタを生成
- remove-1digit-at-second
10の位が0の数は、題意に合わないので除外する。
- get-pe61-xgonal-list
上記の関数をつかって、x角数のリストを作る。
[[12 34] [56 78] ....]
- get-child
とある4桁数 [xx yy] に続くx角数のをすべて求める。
- get-pe61-all-path
3~7の数の全ての順列を返す。
※ 8角数から始めることにしたので、8は入っていない。
- search-all-path-depth
ある順列について、8角数から始めてその順に最後まで並べたときに、
先頭の2桁と末尾の2桁が同じであればその列を返す。
- pe61
全ての順列について、上の関数を呼び出して、解だけ出力する。
他にいいロジックがありそうだけど、思いつかない。
0 コメント:
コメントを投稿