require 'to_words' # find all the nine-digit numbers made up of only zeros and eights possibilities = [0, 8] 8.times do new_possibilities = [] possibilities.each do |possibility| new_possibilities << possibility * 10 new_possibilities << possibility * 10 + 8 end possibilities += new_possibilities end # add a five to all of them possibilities.collect! {|p| p * 10 + 5} winner = possibilities.inject('zzz') do |earliest, current| word = current.to_words raise "Unexpected number: #{current}" if word.eql? '?' word < earliest ? word : earliest end puts winner