day1 complete
						commit
						28cacbd5d6
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
#prepare the input which is a string containing new lines
 | 
			
		||||
def parse(input)
 | 
			
		||||
  data = []
 | 
			
		||||
  input.each_line do |line|
 | 
			
		||||
    data << line.gsub(/[a-zA-Z]/,"").chomp
 | 
			
		||||
  end
 | 
			
		||||
  data
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# result should a single string or integer
 | 
			
		||||
def calculate(data)
 | 
			
		||||
  result = 0
 | 
			
		||||
  data.each do |d|
 | 
			
		||||
    d = d.chars.to_a
 | 
			
		||||
    num = "#{d.first}"+"#{d.last}"
 | 
			
		||||
    result += num.to_i
 | 
			
		||||
  end
 | 
			
		||||
  result
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
MAPPER = {
 | 
			
		||||
  "8": "eight",
 | 
			
		||||
  "7": "seven",
 | 
			
		||||
  "3": "three",
 | 
			
		||||
  "9": "nine",
 | 
			
		||||
  "5": "five",
 | 
			
		||||
  "4": "four",
 | 
			
		||||
  "6": "six",
 | 
			
		||||
  "2": "two",
 | 
			
		||||
  "1": "one"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#prepare the input which is a string containing new lines
 | 
			
		||||
def parse(input)
 | 
			
		||||
  data = []
 | 
			
		||||
  input.each_line do |line|
 | 
			
		||||
    data << line.chomp
 | 
			
		||||
  end
 | 
			
		||||
  data
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def find_first_digit(line, reverse:false)
 | 
			
		||||
  line.length.times do |i|
 | 
			
		||||
    j = reverse ? line.length - 1 - i : i
 | 
			
		||||
    return line[j] if line[j].to_i != 0
 | 
			
		||||
    sub_line = line[j..-1]
 | 
			
		||||
    MAPPER.each do |k,v|
 | 
			
		||||
      return k if sub_line.start_with?(v)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# result should a single string or integer
 | 
			
		||||
def calculate(data)
 | 
			
		||||
  result = 0
 | 
			
		||||
  data.each_with_index do |d,i|
 | 
			
		||||
    first = find_first_digit(d)
 | 
			
		||||
    last = find_first_digit(d, reverse: true)
 | 
			
		||||
 | 
			
		||||
    num = "#{first}"+"#{last}"
 | 
			
		||||
    result += num.to_i
 | 
			
		||||
  end
 | 
			
		||||
  result
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
if ARGV[0] == "2"
 | 
			
		||||
  require_relative "impl_2"
 | 
			
		||||
else
 | 
			
		||||
  require_relative "impl"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def print(result)
 | 
			
		||||
  if result.is_a? Array
 | 
			
		||||
    result.map! {|l| "#{l}\n" } 
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  puts result
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def run
 | 
			
		||||
  puts "running your implementation"
 | 
			
		||||
  input = File.new("day_1/data").read
 | 
			
		||||
  data = parse(input)
 | 
			
		||||
  result = calculate(data)
 | 
			
		||||
  print(result)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
run
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
if ARGV[0] == "2"
 | 
			
		||||
  require_relative "impl_2"
 | 
			
		||||
  RESULT = 281
 | 
			
		||||
else
 | 
			
		||||
  require_relative "impl"
 | 
			
		||||
  RESULT = 142
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
INPUT = <<~IN
 | 
			
		||||
1abc2
 | 
			
		||||
pqr3stu8vwx
 | 
			
		||||
a1b2c3d4e5f
 | 
			
		||||
treb7uchet
 | 
			
		||||
IN
 | 
			
		||||
 | 
			
		||||
INPUT_2 = <<~IN
 | 
			
		||||
two1nine
 | 
			
		||||
eightwothree
 | 
			
		||||
abcone2threexyz
 | 
			
		||||
xtwone3four
 | 
			
		||||
4nineeightseven2
 | 
			
		||||
zoneight234
 | 
			
		||||
7pqrstsixteen
 | 
			
		||||
IN
 | 
			
		||||
 | 
			
		||||
def test_example
 | 
			
		||||
  input = ARGV[0] == "2" ? INPUT_2 : INPUT
 | 
			
		||||
  parsed = parse(input)
 | 
			
		||||
  result = calculate(parsed)
 | 
			
		||||
 | 
			
		||||
  if result == RESULT
 | 
			
		||||
    puts "Test successful. Now run with real input"
 | 
			
		||||
    puts "ruby day_1/run.rb #{ARGV[0]}"
 | 
			
		||||
  else
 | 
			
		||||
    puts "Test failed"
 | 
			
		||||
    puts "expected \"#{RESULT}\" got \"#{result}\""
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
test_example
 | 
			
		||||
		Loading…
	
		Reference in New Issue