commit cf706d01c44154335d3d60051b9cefa85f06495e Author: Andrew R. M Date: Mon Dec 2 21:32:16 2019 -0500 Completed days 1 and 2 diff --git a/01/input b/01/input new file mode 100644 index 0000000..6ffee7e --- /dev/null +++ b/01/input @@ -0,0 +1,100 @@ +110756 +132543 +57911 +58262 +119938 +58581 +52446 +127591 +132449 +82732 +51388 +115723 +67376 +61402 +71379 +99264 +54697 +120877 +130457 +89519 +92846 +121983 +145752 +57606 +136613 +74147 +142443 +91993 +66409 +71590 +74057 +126005 +103231 +104401 +105004 +100771 +60204 +125178 +132927 +97615 +116662 +91806 +74435 +69993 +77268 +124654 +116862 +79505 +132479 +104118 +59975 +133267 +71379 +136031 +64325 +85017 +149922 +148287 +62061 +92790 +81205 +74146 +116381 +78975 +66557 +74568 +77797 +60262 +111913 +53703 +139663 +65642 +90693 +105015 +147887 +139533 +97861 +68607 +146757 +97707 +148185 +87966 +115839 +118377 +71123 +82938 +63957 +76062 +144141 +138096 +132460 +67338 +142338 +76347 +128877 +104797 +104637 +107605 +66506 +127296 diff --git a/01/solution1.rb b/01/solution1.rb new file mode 100755 index 0000000..a8feb82 --- /dev/null +++ b/01/solution1.rb @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby + +def calculate_fuel(mass) + return (mass / 3).floor - 2 +end + +fuel_requirements = 0 + +ARGF.each do |line| + mass = line.to_i + fuel_requirements += calculate_fuel(mass) +end + +puts "Fuel Requirements: #{fuel_requirements}" diff --git a/01/solution2.rb b/01/solution2.rb new file mode 100755 index 0000000..6e9b895 --- /dev/null +++ b/01/solution2.rb @@ -0,0 +1,22 @@ +#!/usr/bin/env ruby + +def calculate_fuel(mass) + return (mass / 3).floor - 2 +end + +def calculate_fuel_with_fuels_fuel(mass) + fuel_required = calculate_fuel(mass) + if calculate_fuel(fuel_required) > 0 + fuel_required += calculate_fuel_with_fuels_fuel(fuel_required) + end + return fuel_required +end + +fuel_requirements = 0 + +ARGF.each do |line| + mass = line.to_i + fuel_requirements += calculate_fuel_with_fuels_fuel(mass) +end + +puts "Fuel Requirements: #{fuel_requirements}" diff --git a/02/input b/02/input new file mode 100644 index 0000000..bf940d6 --- /dev/null +++ b/02/input @@ -0,0 +1 @@ +1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,10,19,1,19,5,23,1,6,23,27,1,27,5,31,2,31,10,35,2,35,6,39,1,39,5,43,2,43,9,47,1,47,6,51,1,13,51,55,2,9,55,59,1,59,13,63,1,6,63,67,2,67,10,71,1,9,71,75,2,75,6,79,1,79,5,83,1,83,5,87,2,9,87,91,2,9,91,95,1,95,10,99,1,9,99,103,2,103,6,107,2,9,107,111,1,111,5,115,2,6,115,119,1,5,119,123,1,123,2,127,1,127,9,0,99,2,0,14,0 diff --git a/02/solution1.rb b/02/solution1.rb new file mode 100755 index 0000000..88a1385 --- /dev/null +++ b/02/solution1.rb @@ -0,0 +1,35 @@ +#!/usr/bin/env ruby + +def process_opcodes(list) + index = 0 + + while index < (list.length - 1) + opcode = list[index] + case opcode + when 1 + input1 = list[list[index+1]] + input2 = list[list[index+2]] + list[list[index+3]] = input1 + input2 + when 2 + input1 = list[list[index+1]] + input2 = list[list[index+2]] + list[list[index+3]] = input1 * input2 + when 99 + break + end + index += 4 + end + return list +end + +ARGF.each do |line| + # Eat the opcode list + list = line.split(",").map(&:to_i) + + # Fix the program as per the exercise + list[1] = 12 + list[2] = 2 + + # Print the post processed list for inspection to get the 0th element + puts process_opcodes(list).inspect +end diff --git a/02/solution2.rb b/02/solution2.rb new file mode 100755 index 0000000..32d6f85 --- /dev/null +++ b/02/solution2.rb @@ -0,0 +1,51 @@ +#!/usr/bin/env ruby + +def process_opcodes(list) + index = 0 + + while index < (list.length - 1) + opcode = list[index] + case opcode + when 1 + input1 = list[list[index+1]] + input2 = list[list[index+2]] + list[list[index+3]] = input1 + input2 + when 2 + input1 = list[list[index+1]] + input2 = list[list[index+2]] + list[list[index+3]] = input1 * input2 + when 99 + break + end + index += 4 + end + return list +end + +ARGF.each do |line| + # Eat the opcode list + list = line.split(",").map(&:to_i) + + noun = 0 + verb = 0 + target_number = 19690720 + program_output = [0] + + while program_output[0] != target_number + temp_list = list.dup + temp_list[1] = noun + temp_list[2] = verb + + # Enumarate through all possible nouns and verbs O(n^2) + if noun < 99 + noun += 1 + else + noun = 0 + verb += 1 + end + + program_output = process_opcodes(temp_list) + end + # Print the post processed list for inspection to get the 0th element + puts program_output.inspect +end