1時間以内に解けなければプログラマ失格となってしまう
という問題があったので最後の問題だけRubyで解いてみた。
https://blog.svpino.com/2015/05/07/five-programming-problems-every-software-engineer-should-be-able-to-solve-in-less-than-1-hourblog.svpino.com
問題5
1,2,…,9の数をこの順序で、”+”、”-“、またはななにもせず結果が100となるあらゆる組合せを出力するプログラムを記述せよ。
とのこと
書いたコードはこんな感じ。
def make_num(now_num, sum, result) now_num.times do |n| num = ((now_num - n)..now_num).to_a.join.to_i if n + 1 == now_num print_result ([num] + result) if sum + num == 100 else make_num(now_num - n - 1, sum + num, ['+', num] + result) make_num(now_num - n - 1, sum - num, ['-', num] + result) end end end def print_result(result) puts result.join(' ') end make_num(9, 0, [])
かかった時間は28分。トップにマイナス使っちゃいけないってこと知らずに作って後で手直ししたとか言い訳はある。