Completed, got solution for reddit

main
s00ner 2023-12-06 11:46:54 -05:00
parent cf7a1a683b
commit a4f4c2eace
4 changed files with 1086 additions and 0 deletions

1000
day01/input Normal file

File diff suppressed because it is too large Load Diff

7
day01/input.sample Normal file
View File

@ -0,0 +1,7 @@
two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen

40
day01/solution.rb Executable file
View File

@ -0,0 +1,40 @@
#!/usr/bin/env ruby
# This is unfinished and broken. IDK why it doesn't work, but it's a bad solution.
# Check ./stolen.rb for a better solution that I stole from Reddit.
require 'pry'
# Part 1
input = File.readlines("./input").map(&:strip)
p1 = input.map{|line| line.scan(/\d/).values_at(0,-1).join}
solution = p1.map(&:to_i).sum
puts "Part 1 Solution is: #{solution}"
# Part 2
def transform(s)
digit_map = {one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9}
first_word = 0
until first_word.nil?
first_word = digit_map.map{ |word, digit| [ word.to_s,s.index(word.to_s)]}.to_h.reject{ |_k, val| val.nil? }.min_by{|_x, digit| digit}
s.sub!(first_word[0], digit_map[first_word[0].to_sym].to_s) unless first_word.nil?
end
s
end
p2 = input.map do |line|
transform(line).scan(/\d/).values_at(0,-1).join
# oline = line.dup
# new_line = transform(line)
# values = new_line.scan(/\d/).values_at(0,-1)
# final = values.join
# pp "#{oline}, #{new_line}, #{values}, #{final}"
# gets
# final
end
# binding.pry
solution = p2.map(&:to_i).sum
puts "Part 2 Solution is: #{solution}"

39
day01/stolen.rb Normal file
View File

@ -0,0 +1,39 @@
@data = File.readlines("./input").map(&:strip)
NUM_DICT = {
"one" => "1",
"two" => "2",
"three" => "3",
"four" => "4",
"five" => "5",
"six" => "6",
"seven" => "7",
"eight" => "8",
"nine" => "9",
"1" => "1",
"2" => "2",
"3" => "3",
"4" => "4",
"5" => "5",
"6" => "6",
"7" => "7",
"8" => "8",
"9" => "9"
}
def part_1
calibrate(/\d/)
end
def part_2
calibrate(/(?=(\d|one|two|three|four|five|six|seven|eight|nine))/)
end
def calibrate(regex)
@data.each.map do |line|
digits = line.scan(regex)
(NUM_DICT[digits.first[0]] + NUM_DICT[digits.last[0]]).to_i
end.sum
end
puts part_1, part_2