Skip to content

Instantly share code, notes, and snippets.

@angusluk
Created March 10, 2018 17:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save angusluk/a116c5bb85f1fb2da2d33b078f7f3d96 to your computer and use it in GitHub Desktop.
Save angusluk/a116c5bb85f1fb2da2d33b078f7f3d96 to your computer and use it in GitHub Desktop.
My solution of Google codegem 2017 - Problem B. Tidy Numbers
def tidy?(number)
i = 0
number_of_digits = number.digits.count
while i < number_of_digits
array = number.digits.reverse
if (number_of_digits == 1 || i == (number_of_digits - 1 ))
return true
end
if array[i] <= array[i+1]
i += 1
else
return false
end
end
end
def the_next_number(number)
array = number.digits.reverse
diff = 0
i = 0
while i < array.length
if (array.length == 1 || i == (array.length - 1 ))
return number - 1
end
if array[i] <= array[i+1]
i += 1
else
counter = 0
while counter < (number.digits.count - (i + 1))
diff += (10 ** (counter)) * (number.digits[counter])
counter += 1
end
diff += 1
return (number - diff)
end
end
end
def find_the_tidy_number(number)
return number if tidy?(number)
find_the_tidy_number(the_next_number(number))
end
text=File.open('B-large-practice.in').read
text.gsub!(/\r\n?/, "\n")
text.each_line.with_index do |line, index|
if index ==0
num_of_row = line
else
open('output.txt', "a") { |f| f << "Case ##{index}: #{find_the_tidy_number(line.chomp.to_i)}\n" }
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment