鍋あり谷あり

テーマを決めずに適当に書いています。

南無ドット

CodeIQ のナムドット問題( https://codeiq.jp/ace/yuki_hiroshi/q468 )に取り組んでみた。
規則性の発見に数時間を要したと思う。
規則性がわかれば実装はそんなにかからなかったと思う。
測ってないけど。

で。
私が書いたのはこんな感じ。

maps = (0..( "01234".to_i(5))).map{ |raw_number|
  penta_num=("00000"+raw_number.to_s(5))[-5,5]
  used=penta_num.chars.uniq
  penta_num.chars.map{ |c|
    used.index(c)
  }.join
}.uniq

maps.each_with_index{ |proj,index|
  # printf "%2d : " % (index+1)
  puts 5.times.each_with_object( [""]*5 ){ |ix, o|
    o[proj[ix].to_i]+="#{ix+1}"
  }.select{ |i| ! i.empty? }.join(".")
}

問題を解いてから wikipedia で 52 を調べた( wikipedia:52 )ら、案の定答えがあった。
ベル数( wikipedia:ベル数 )という名前らしい。

言葉で数を表現する遊び( http://d.hatena.ne.jp/Nabetani/20061011/p2 )としては

  • 15 : 合成数であるベル数として最小
  • 52 : 偶数で合成数であるベル数として最小

といったところ。

追記:正解だったらしい。ほ。