【WIP】【振り返り】GCJ2019 Qualification Round: Foregone Solution
昨日の記事の1問目について少しずつ振り返りを進めていきます。
ちなみにGoogle Code Jamのサイトに行くと、今でもSubmitしたコードを採点してくれます。
まずはけんちょんさんの記事を参考にRubyで実装していきます。
GCJ 2019 Qual A - Foregone Solution - けんちょんの競プロ精進記録
競技プロerにならったコード
def separator(n) a = '' b = '' (0...n.size).each do |idx| if n[idx] != '4' a << '0' b << n[idx] else a << '1' b << '3' end a = '' if a == '0' # leading zero対策 end return a, b end t = gets.chomp.to_i t.times do |i| n = gets.chomp a, b = separator(n) puts "Case ##{i + 1}: #{a} #{b}" end
自分が本番でSubmitしたコードよりかなりシンプルです。
本番でSubmitしたコード
def include_digit_four?(num) /4/ =~ num.to_s end def find_index_of_four(num) # 中身が同じメソッドを書いてしまった 汗 /4/ =~ num.to_s end def one_digit_separator(arr, num) index = find_index_of_four(arr[0]) b = arr[1] + 10 ** (arr[0].to_s.size - index - 1) a = num - b return a, b end def separator(num) arr = [num, 0] while arr = one_digit_separator(arr, num) if !include_digit_four?(arr[0]) && !include_digit_four?(arr[1]) break end end return arr[0], arr[1] end t = gets.chomp.to_i t.times do |i| n = gets.chomp.to_i a, b = separator(n) puts "Case ##{i + 1}: #{a} #{b}" end
ToDo
Webアプリの機能に導入したケースを想定して下記でも追記していく予定です。
- Class/Module定義
- 4以外のキーが壊れた場合