diff --git a/src/day2/day2.rb b/src/day2/day2.rb new file mode 100644 index 0000000..ea39983 --- /dev/null +++ b/src/day2/day2.rb @@ -0,0 +1,60 @@ +Point = Struct.new(:x, :y) do + def +(other) + self.class.new(self.x + other.x, self.y + other.y) + end +end + +def process_input(input_string) + split = input_string.split + return split.first.to_sym, split.last.to_i +end + +def step_to_point(direction, amount) + x = y = 0 + case direction + when :forward + x = amount + when :down + y = amount + when :up + y = -amount + end + return Point.new(x, y) +end + +position = Point.new(0, 0) +inputs = ARGF.read.lines +inputs.map do |input| + direction, amount = process_input(input) + point = step_to_point(direction, amount) + position += position + point +end + +puts "Position is (#{position.x}, #{position.y})" +puts "The product of depth and height is #{position.x * position.y}" + +# Aim portion +def step_to_point_with_aim(direction, amount, aim) + x = y = 0 + case direction + when :forward + x += amount + y += amount * aim + when :down + aim += amount + when :up + aim -= amount + end + return Point.new(x, y), aim +end + +position = Point.new(0, 0) +aim = 0 +inputs.map do |input| + direction, amount = process_input(input) + point, aim = step_to_point_with_aim(direction, amount, aim) + position += position + point +end + +puts "Position considering aim is (#{position.x}, #{position.y})" +puts "The product of depth and height considering aim is #{position.x * position.y}" diff --git a/src/day2/input b/src/day2/input new file mode 100644 index 0000000..353ba9a --- /dev/null +++ b/src/day2/input @@ -0,0 +1,1000 @@ +forward 4 +down 8 +down 1 +forward 6 +forward 7 +down 7 +forward 3 +forward 5 +up 9 +down 1 +forward 5 +down 8 +forward 4 +forward 5 +down 5 +down 1 +forward 1 +down 3 +forward 5 +forward 5 +down 1 +up 2 +down 2 +down 5 +down 5 +forward 3 +forward 7 +forward 5 +forward 9 +forward 8 +down 4 +down 6 +up 5 +down 1 +forward 6 +up 3 +forward 7 +forward 4 +down 7 +up 5 +up 5 +up 1 +up 5 +forward 5 +forward 2 +forward 7 +down 7 +forward 9 +down 9 +up 8 +up 8 +up 2 +forward 5 +forward 8 +up 5 +forward 1 +down 1 +down 6 +forward 1 +forward 2 +forward 4 +forward 6 +up 4 +up 5 +down 4 +down 9 +down 4 +forward 4 +up 8 +up 2 +down 2 +up 9 +forward 9 +forward 4 +forward 1 +forward 6 +up 3 +forward 6 +forward 2 +up 3 +down 3 +forward 6 +down 9 +down 7 +forward 3 +up 7 +up 8 +forward 3 +down 1 +down 8 +forward 7 +forward 3 +down 2 +down 5 +forward 5 +forward 1 +down 1 +down 3 +down 5 +forward 1 +down 1 +down 7 +forward 1 +up 2 +down 5 +up 3 +up 2 +down 7 +up 4 +forward 2 +down 3 +down 1 +up 7 +down 6 +down 1 +forward 7 +down 5 +down 2 +forward 7 +up 9 +forward 6 +forward 6 +forward 2 +forward 6 +down 2 +forward 4 +down 5 +forward 4 +down 8 +forward 3 +down 9 +up 5 +forward 6 +down 5 +forward 5 +down 4 +down 1 +forward 3 +up 9 +up 5 +up 9 +down 3 +forward 7 +forward 7 +up 5 +up 6 +up 3 +down 9 +down 4 +up 8 +down 9 +down 6 +forward 5 +down 6 +forward 7 +down 4 +down 9 +down 9 +forward 6 +down 4 +up 2 +down 8 +up 3 +up 7 +up 1 +forward 9 +down 4 +down 8 +up 2 +forward 7 +forward 5 +down 9 +down 9 +up 5 +down 4 +forward 8 +up 3 +up 4 +up 8 +down 7 +forward 6 +down 8 +down 1 +up 1 +down 7 +down 7 +forward 3 +down 9 +up 2 +forward 2 +up 1 +up 1 +down 2 +down 8 +up 5 +down 3 +down 3 +forward 2 +down 4 +forward 2 +down 2 +forward 3 +down 6 +forward 8 +down 5 +down 6 +forward 9 +forward 2 +down 6 +down 4 +up 9 +forward 2 +forward 1 +up 9 +down 9 +forward 8 +down 4 +up 3 +down 1 +forward 9 +forward 9 +forward 3 +forward 4 +down 2 +down 1 +forward 5 +up 3 +forward 6 +down 8 +down 8 +down 7 +forward 1 +forward 6 +down 9 +down 6 +forward 8 +down 5 +up 6 +down 2 +forward 2 +up 3 +forward 6 +forward 4 +up 4 +down 5 +forward 2 +down 5 +forward 1 +forward 5 +up 7 +up 1 +down 3 +up 8 +forward 4 +forward 8 +forward 8 +up 2 +down 8 +up 2 +up 2 +up 7 +down 9 +down 1 +forward 1 +down 3 +down 1 +down 4 +forward 3 +down 4 +down 5 +forward 7 +forward 6 +forward 7 +forward 8 +up 6 +down 1 +down 9 +up 2 +up 2 +forward 1 +up 9 +forward 6 +down 2 +forward 6 +forward 8 +up 8 +down 6 +forward 2 +up 4 +up 5 +down 3 +down 2 +forward 7 +down 8 +forward 4 +forward 8 +up 4 +down 7 +forward 6 +forward 1 +up 4 +down 4 +down 9 +down 7 +down 6 +down 1 +forward 7 +up 3 +down 1 +down 9 +down 9 +down 1 +down 7 +down 8 +up 9 +down 7 +up 4 +forward 4 +down 2 +up 8 +down 6 +down 6 +forward 4 +up 5 +down 9 +down 8 +up 7 +down 4 +forward 9 +up 3 +down 6 +forward 7 +up 4 +forward 9 +down 6 +forward 6 +down 3 +down 5 +down 4 +up 5 +down 8 +down 8 +forward 5 +forward 1 +down 3 +forward 7 +down 3 +up 6 +forward 5 +up 7 +forward 8 +down 1 +forward 7 +forward 8 +forward 9 +forward 7 +up 5 +forward 9 +up 7 +down 7 +forward 8 +down 8 +up 6 +down 4 +forward 6 +forward 3 +forward 3 +forward 6 +down 3 +up 4 +down 3 +down 8 +forward 2 +down 1 +down 5 +forward 2 +up 3 +up 5 +forward 2 +forward 8 +down 7 +down 9 +forward 8 +forward 5 +forward 2 +down 3 +forward 6 +forward 3 +forward 4 +forward 9 +down 8 +forward 2 +down 6 +down 8 +forward 1 +forward 5 +up 3 +forward 8 +up 3 +forward 2 +down 3 +down 5 +up 4 +down 9 +up 5 +down 2 +forward 7 +forward 8 +forward 2 +forward 4 +forward 6 +down 1 +up 3 +forward 3 +up 6 +forward 1 +down 9 +forward 4 +forward 5 +forward 3 +down 7 +down 9 +forward 1 +forward 5 +up 1 +down 6 +down 7 +up 4 +up 7 +forward 2 +down 7 +forward 5 +up 9 +up 8 +forward 8 +up 1 +up 6 +down 7 +up 8 +forward 2 +down 1 +forward 7 +forward 6 +forward 2 +up 7 +down 5 +down 6 +forward 8 +down 3 +down 2 +forward 5 +down 7 +forward 2 +down 9 +forward 7 +forward 9 +forward 1 +down 7 +down 3 +down 8 +down 4 +up 1 +down 2 +forward 5 +forward 9 +forward 5 +up 6 +up 1 +forward 3 +forward 1 +forward 7 +down 9 +forward 4 +down 7 +up 6 +forward 1 +down 7 +forward 5 +down 4 +down 2 +up 1 +forward 6 +up 6 +down 3 +up 5 +down 8 +down 5 +forward 2 +down 1 +forward 8 +forward 4 +down 3 +forward 3 +forward 6 +forward 2 +forward 9 +forward 2 +down 3 +forward 8 +down 4 +down 1 +forward 4 +down 1 +forward 5 +down 5 +down 6 +forward 6 +down 6 +down 9 +forward 7 +down 6 +forward 6 +forward 7 +forward 1 +forward 4 +forward 2 +forward 3 +up 8 +down 3 +down 7 +forward 6 +forward 4 +up 7 +forward 6 +forward 6 +down 7 +up 8 +down 5 +forward 6 +forward 8 +down 3 +up 2 +down 5 +forward 2 +forward 5 +up 8 +forward 1 +down 3 +forward 3 +forward 2 +down 3 +down 8 +forward 3 +forward 1 +down 5 +down 1 +up 1 +forward 9 +down 7 +up 2 +forward 8 +down 6 +down 5 +up 9 +forward 2 +forward 5 +forward 8 +up 2 +up 5 +forward 2 +down 2 +down 9 +down 3 +forward 7 +up 5 +forward 7 +down 6 +forward 2 +forward 7 +forward 8 +forward 8 +down 7 +forward 3 +forward 6 +down 5 +forward 8 +forward 6 +up 2 +forward 1 +up 9 +forward 1 +up 3 +forward 6 +down 4 +down 5 +down 8 +up 6 +forward 1 +down 8 +forward 3 +forward 2 +forward 9 +down 5 +down 9 +forward 5 +down 7 +up 9 +forward 5 +forward 7 +forward 6 +forward 5 +down 3 +forward 6 +down 9 +up 8 +forward 4 +forward 7 +forward 3 +down 7 +forward 8 +down 5 +forward 3 +up 6 +up 5 +forward 9 +up 4 +up 9 +forward 9 +forward 3 +down 8 +forward 8 +down 3 +forward 2 +down 4 +down 1 +forward 2 +up 9 +down 7 +forward 4 +up 3 +down 9 +down 6 +forward 2 +forward 5 +down 7 +down 2 +forward 8 +down 5 +forward 8 +down 8 +down 4 +down 1 +down 2 +forward 5 +down 8 +down 1 +down 2 +forward 8 +forward 3 +down 8 +up 8 +up 8 +down 3 +forward 3 +forward 6 +down 9 +up 1 +forward 6 +up 1 +down 1 +down 9 +forward 3 +up 1 +forward 7 +forward 6 +forward 1 +up 3 +down 8 +forward 7 +down 3 +down 5 +down 7 +forward 6 +down 9 +forward 9 +forward 8 +down 9 +forward 1 +down 2 +up 7 +down 3 +down 1 +forward 8 +forward 4 +forward 9 +up 9 +down 4 +forward 1 +down 1 +up 1 +up 1 +up 6 +down 7 +down 5 +forward 1 +forward 7 +up 3 +down 7 +up 3 +down 4 +up 9 +up 9 +forward 1 +down 4 +down 6 +forward 2 +forward 6 +up 1 +forward 1 +down 8 +forward 7 +up 6 +forward 6 +forward 3 +up 1 +up 6 +forward 1 +down 2 +forward 8 +forward 4 +forward 2 +down 3 +forward 2 +forward 3 +forward 1 +down 6 +forward 7 +forward 7 +down 4 +forward 6 +up 3 +up 4 +up 6 +down 7 +down 8 +forward 3 +down 2 +forward 5 +down 4 +forward 6 +forward 7 +forward 8 +forward 9 +forward 3 +down 1 +forward 8 +forward 1 +down 8 +up 1 +down 3 +down 6 +down 1 +up 1 +forward 1 +down 6 +down 5 +forward 6 +down 1 +down 5 +forward 7 +up 3 +forward 4 +forward 4 +forward 1 +up 6 +up 2 +up 4 +down 4 +up 4 +forward 8 +up 8 +forward 1 +down 5 +forward 5 +down 7 +up 5 +up 7 +up 5 +forward 9 +down 1 +down 1 +forward 4 +down 2 +down 2 +down 3 +down 1 +forward 1 +up 7 +forward 6 +forward 9 +up 5 +forward 1 +forward 9 +up 2 +forward 5 +down 4 +forward 6 +down 9 +down 3 +forward 1 +down 2 +down 3 +down 1 +down 3 +forward 8 +up 6 +forward 2 +down 5 +down 9 +down 4 +up 2 +up 9 +forward 2 +down 7 +forward 9 +down 5 +down 5 +up 6 +forward 1 +forward 5 +forward 9 +down 4 +forward 2 +forward 7 +down 2 +forward 4 +down 2 +forward 3 +down 3 +down 2 +up 5 +forward 8 +up 8 +down 9 +forward 9 +down 9 +down 4 +down 1 +forward 4 +forward 9 +down 5 +down 9 +down 4 +down 5 +forward 1 +down 3 +down 3 +down 4 +forward 6 +forward 5 +down 3 +up 4 +forward 9 +forward 5 +forward 3 +forward 6 +down 8 +up 9 +forward 2 +up 6 +forward 2 +down 9 +up 9 +down 4 +forward 1 +forward 9 +down 5 +forward 9 +forward 4 +down 6 +forward 7 +forward 4 +down 7 +down 1 +forward 9 +down 6 +down 5 +forward 5 +down 5 +down 1 +forward 3 +down 7 +down 5 +down 9 +down 5 +up 6 +up 5 +down 5 +up 1 +down 9 +forward 5 +forward 9 +forward 3 +forward 4 +down 7 +forward 3 +forward 3 +down 5 +forward 7 +down 9 +forward 8 +forward 4 +forward 8 +forward 9 +forward 1 +forward 6 +up 9 +down 3 +forward 1 +forward 4 +down 2 +down 8 +up 4 +down 4 +forward 1 +down 5 +down 3 +down 9 +up 1 +forward 8 +down 6 +down 4 +forward 3 +down 8 +down 2 +up 6 +down 5 +forward 8 +down 4 +up 1 +forward 5 +down 1 +down 9 +down 1 +down 9 +down 3 +down 3 +forward 2 +forward 6 +down 8 +forward 1 +up 4 +down 3 +forward 9 +up 2 +down 4 +forward 9 +down 3 +down 1 +down 3 +down 4 +up 6 +down 2 +forward 3 +forward 9 +forward 7 +down 2 +down 5 +forward 4 +forward 5 +down 9 +up 3 +forward 5 +forward 9 +up 2 +forward 3 +down 4 +forward 2 +down 5 +down 8 +down 1 +forward 4 +up 4 +forward 7 +down 9 +forward 8 +down 8 +forward 3 +down 6 +up 9 +up 6 +down 2 +forward 6 +up 1 +down 5 +down 5 +down 9 +up 2 +down 2 +forward 1 +forward 8 +down 2 +up 8 +down 3 +forward 2 +down 1 +down 5 +down 5 +up 4 +forward 5 diff --git a/src/day3/day3.rb b/src/day3/day3.rb new file mode 100644 index 0000000..0ac272e --- /dev/null +++ b/src/day3/day3.rb @@ -0,0 +1,52 @@ +def process_input(input) + input.strip.to_i(2) +end + +def find_most_common_bit(report) + bit_length = report.first.bit_length + + ones_count = [] + zeros_count = [] + report.each do |column| + index = 0 + while index <= bit_length + 1 do + ones_count[index] ||= 0 + zeros_count[index] ||= 0 + case column[index] + when 0 then zeros_count[index] += 1 + when 1 then ones_count[index] += 1 + end + index += 1 + end + end + result = ones_count.zip(zeros_count) + puts "Result: #{result}" + result.map do |digit| + if digit.first > digit.last then 1 else 0 end + end + return result +end + +def find_least_common_bit(report) + most_common_bit = find_most_common_bit(report) + least_common_bit = most_common_bit.map do |bit| + case bit + when 0 then 1 + when 1 then 0 + end + end + return least_common_bit +end + +inputs = ARGF.read.lines + +puts "Report looks like: " +report = [] +inputs.each do |input| + puts " #{input}" + processed_input = process_input(input) + report << processed_input +end + +puts "Gamma Rate: #{find_most_common_bit(report)}" +puts "Epsilon Rate: #{find_least_common_bit(report)}" diff --git a/src/day3/input b/src/day3/input new file mode 100644 index 0000000..a6366a8 --- /dev/null +++ b/src/day3/input @@ -0,0 +1,12 @@ +00100 +11110 +10110 +10111 +10101 +01111 +00111 +11100 +10000 +11001 +00010 +01010