From 0b874c58399bf3628b9c73a7c46de8c84d79d8c4 Mon Sep 17 00:00:00 2001 From: Gheiserton Date: Fri, 2 Dec 2022 18:19:22 -0500 Subject: [PATCH] Added 2019 work. --- 2019/day01A.py | 13 ++++++ 2019/day01B.py | 19 +++++++++ 2019/day01input.txt | 100 ++++++++++++++++++++++++++++++++++++++++++++ 2019/day02A.py | 15 +++++++ 2019/day02B.py | 27 ++++++++++++ 2019/day03A.py | 42 +++++++++++++++++++ 2019/day03B.py | 41 ++++++++++++++++++ 2019/day04A.py | 29 +++++++++++++ 2019/day05a.py | 0 9 files changed, 286 insertions(+) create mode 100644 2019/day01A.py create mode 100644 2019/day01B.py create mode 100644 2019/day01input.txt create mode 100644 2019/day02A.py create mode 100644 2019/day02B.py create mode 100644 2019/day03A.py create mode 100644 2019/day03B.py create mode 100644 2019/day04A.py create mode 100644 2019/day05a.py diff --git a/2019/day01A.py b/2019/day01A.py new file mode 100644 index 0000000..d060436 --- /dev/null +++ b/2019/day01A.py @@ -0,0 +1,13 @@ +import math + +inputs = [] +fuelneeded = 0 + +with open ('day01input.txt', 'r') as infile: + inputs = [current_input.rstrip() for current_input in infile.readlines()] + +for item in inputs: + module_fuel = math.floor(int(item) / 3) - 2 + fuelneeded += module_fuel + +print(fuelneeded) diff --git a/2019/day01B.py b/2019/day01B.py new file mode 100644 index 0000000..f319702 --- /dev/null +++ b/2019/day01B.py @@ -0,0 +1,19 @@ +import math + +inputs = [] +fuelneeded = 0 + +with open ('day01input.txt', 'r') as infile: + inputs = [current_input.rstrip() for current_input in infile.readlines()] + +for item in inputs: + working_mass = int(item) + while working_mass > 0: + module_fuel = math.floor(int(working_mass) / 3) - 2 + if module_fuel > 0: + fuelneeded += module_fuel + working_mass = module_fuel + else: + break + +print(fuelneeded) diff --git a/2019/day01input.txt b/2019/day01input.txt new file mode 100644 index 0000000..bddb687 --- /dev/null +++ b/2019/day01input.txt @@ -0,0 +1,100 @@ +60566 +53003 +132271 +130557 +109138 +64818 +123247 +148493 +98275 +67155 +132365 +133146 +88023 +92978 +122790 +84429 +93421 +76236 +104387 +135953 +131379 +125949 +133614 +94647 +64289 +87972 +97331 +132327 +53913 +79676 +143110 +79269 +52366 +62793 +69437 +97749 +83596 +147597 +115883 +82062 +63800 +61521 +139314 +127619 +85790 +132960 +141289 +86146 +146104 +128708 +133054 +116777 +128402 +85043 +117344 +107915 +108669 +108304 +105300 +75186 +111352 +112936 +117177 +93812 +97737 +61835 +77529 +145406 +93489 +75642 +69806 +109845 +79133 +60950 +67797 +111806 +50597 +50481 +88338 +102136 +65377 +55982 +82754 +68901 +89232 +63118 +95534 +98264 +147706 +80050 +104953 +146758 +122884 +122024 +129236 +113818 +58099 +134318 +136312 +75124 diff --git a/2019/day02A.py b/2019/day02A.py new file mode 100644 index 0000000..33fbf29 --- /dev/null +++ b/2019/day02A.py @@ -0,0 +1,15 @@ +op_list = [1,12,2,3,1,1,2,3,1,3,4,3,1,5,0,3,2,13,1,19,1,19,10,23,1,23,13,27,1,6,27,31,1,9,31,35,2,10,35,39,1,39,6,43,1,6,43,47,2,13,47,51,1,51,6,55,2,6,55,59,2,59,6,63,2,63,13,67,1,5,67,71,2,9,71,75,1,5,75,79,1,5,79,83,1,83,6,87,1,87,6,91,1,91,5,95,2,10,95,99,1,5,99,103,1,10,103,107,1,107,9,111,2,111,10,115,1,115,9,119,1,13,119,123,1,123,9,127,1,5,127,131,2,13,131,135,1,9,135,139,1,2,139,143,1,13,143,0,99,2,0,14,0] +i = 0 +break_code = 0 + +while break_code == 0: + if op_list[i] == 1: + op_list[op_list[i+3]] = op_list[op_list[i+1]] + op_list[op_list[i+2]] + i += 4 + if op_list[i] == 2: + op_list[op_list[i+3]] = op_list[op_list[i+1]] * op_list[op_list[i+2]] + i += 4 + if op_list[i] == 99: + break_code = 1 + +print(op_list[0]) diff --git a/2019/day02B.py b/2019/day02B.py new file mode 100644 index 0000000..a0d3b42 --- /dev/null +++ b/2019/day02B.py @@ -0,0 +1,27 @@ +start_list = [1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,13,1,19,1,19,10,23,1,23,13,27,1,6,27,31,1,9,31,35,2,10,35,39,1,39,6,43,1,6,43,47,2,13,47,51,1,51,6,55,2,6,55,59,2,59,6,63,2,63,13,67,1,5,67,71,2,9,71,75,1,5,75,79,1,5,79,83,1,83,6,87,1,87,6,91,1,91,5,95,2,10,95,99,1,5,99,103,1,10,103,107,1,107,9,111,2,111,10,115,1,115,9,119,1,13,119,123,1,123,9,127,1,5,127,131,2,13,131,135,1,9,135,139,1,2,139,143,1,13,143,0,99,2,0,14,0] +op_list = [] + + +for noun in range(0, 100): + for verb in range (0, 100): + op_list = start_list.copy() + op_list[1] = noun + op_list[2] = verb + i = 0 + break_code = 0 + error_code = 0 + while break_code == 0 and error_code == 0: + if op_list[i] == 1: + op_list[op_list[i+3]] = op_list[op_list[i+1]] + op_list[op_list[i+2]] + i += 4 + if op_list[i] == 2: + op_list[op_list[i+3]] = op_list[op_list[i+1]] * op_list[op_list[i+2]] + i += 4 + if op_list[i] == 99: + break_code = 1 + print(f'i: {i}; break: {break_code}; error: {error_code}') + print(f'Output: {op_list[0]}, Noun: {noun}, Verb: {verb}, Result: {100*noun+verb}') + if op_list[0] == 19690720: + break + if op_list[0] == 19690720: + break diff --git a/2019/day03A.py b/2019/day03A.py new file mode 100644 index 0000000..656dddf --- /dev/null +++ b/2019/day03A.py @@ -0,0 +1,42 @@ +wire1 = ["R1009", "U286", "L371", "U985", "R372", "D887", "R311", "U609", "L180", "D986", "L901", "D592", "R298", "U955", "R681", "D68", "R453", "U654", "L898", "U498", "R365", "D863", "L974", "U333", "L267", "D230", "R706", "D67", "L814", "D280", "R931", "D539", "R217", "U384", "L314", "D162", "L280", "U484", "L915", "D512", "L974", "D220", "R292", "U465", "L976", "U837", "R28", "U68", "L98", "D177", "L780", "U732", "R696", "D412", "L715", "U993", "L617", "U999", "R304", "D277", "R889", "D604", "R199", "U498", "R302", "U958", "R443", "U957", "R453", "U362", "R704", "U301", "R813", "U404", "L150", "D673", "L407", "D233", "L901", "D965", "R602", "U615", "R496", "U467", "R849", "U530", "L205", "D43", "R709", "U127", "L35", "U801", "L565", "D890", "R90", "D763", "R95", "D542", "R84", "D421", "L298", "D58", "R794", "U722", "R205", "U830", "L149", "D759", "L950", "D708", "L727", "U401", "L187", "D598", "L390", "D469", "R375", "U985", "L723", "U63", "L983", "D39", "L160", "U276", "R822", "D504", "L298", "D484", "L425", "U228", "L984", "D623", "L936", "U624", "L851", "D748", "L266", "D576", "L898", "U783", "L374", "D276", "R757", "U89", "L649", "U73", "L447", "D11", "L539", "U291", "L507", "U208", "R167", "D874", "L596", "D235", "R334", "U328", "R41", "D212", "L544", "D72", "L972", "D790", "L282", "U662", "R452", "U892", "L830", "D86", "L252", "U701", "L215", "U179", "L480", "U963", "L897", "U489", "R223", "U757", "R804", "U373", "R844", "D518", "R145", "U304", "L24", "D988", "R605", "D644", "R415", "U34", "L889", "D827", "R854", "U836", "R837", "D334", "L664", "D883", "L900", "U448", "R152", "U473", "R243", "D147", "L711", "U642", "R757", "U272", "R192", "U741", "L522", "U785", "L872", "D128", "L161", "D347", "L967", "D295", "R831", "U535", "R329", "D752", "R720", "D806", "R897", "D320", "R391", "D737", "L719", "U652", "L54", "D271", "L855", "D112", "R382", "U959", "R909", "D687", "L699", "U892", "L96", "D537", "L365", "D182", "R886", "U566", "R929", "U532", "L255", "U823", "R833", "U542", "R234", "D339", "R409", "U100", "L466", "U572", "L162", "U843", "L635", "D153", "L704", "D317", "L534", "U205", "R611", "D672", "L462", "D506", "L243", "U509", "L819", "D787", "R448", "D353", "R162", "U108", "R850", "D919", "R259", "U877", "R50", "D733", "L875", "U106", "L890", "D275", "L904", "U849", "L855", "U314", "L291", "U170", "L627", "U608", "R783", "U404", "R294"] + +wire2 = ["L1010", "D347", "R554", "U465", "L30", "D816", "R891", "D778", "R184", "U253", "R694", "U346", "L743", "D298", "L956", "U703", "R528", "D16", "L404", "D818", "L640", "D50", "R534", "D99", "L555", "U974", "L779", "D774", "L690", "U19", "R973", "D588", "L631", "U35", "L410", "D332", "L74", "D858", "R213", "U889", "R977", "U803", "L624", "U627", "R601", "U499", "L213", "U692", "L234", "U401", "L894", "U733", "R414", "D431", "R712", "D284", "R965", "D624", "R848", "D17", "R86", "D285", "R502", "U516", "L709", "U343", "L558", "D615", "L150", "D590", "R113", "D887", "R469", "U584", "L434", "D9", "L994", "D704", "R740", "D541", "R95", "U219", "L634", "D184", "R714", "U81", "L426", "D437", "R927", "U232", "L361", "D756", "R685", "D206", "R116", "U844", "R807", "U811", "L382", "D338", "L660", "D997", "L551", "D294", "L895", "D208", "R37", "D90", "R44", "D131", "R77", "U883", "R449", "D24", "R441", "U659", "R826", "U259", "R98", "D548", "R118", "D470", "L259", "U170", "R518", "U731", "L287", "U191", "L45", "D672", "L691", "U117", "R156", "U308", "R230", "U112", "L938", "U644", "R911", "U110", "L1", "U162", "R943", "U433", "R98", "U610", "R428", "U231", "R35", "U590", "R554", "U612", "R191", "U261", "R793", "U3", "R507", "U632", "L571", "D535", "R30", "U281", "L613", "U199", "R168", "D948", "R486", "U913", "R534", "U131", "R974", "U399", "L525", "D174", "L595", "D567", "L394", "D969", "L779", "U346", "L969", "D943", "L845", "D727", "R128", "U241", "L616", "U117", "R791", "D419", "L913", "D949", "R628", "D738", "R776", "D294", "L175", "D708", "R568", "U484", "R589", "D930", "L416", "D114", "L823", "U16", "R260", "U450", "R534", "D94", "R695", "D982", "R186", "D422", "L789", "D886", "L761", "U30", "R182", "U930", "L483", "U863", "L318", "U343", "L380", "U650", "R542", "U92", "L339", "D390", "L55", "U343", "L641", "D556", "R616", "U936", "R118", "D997", "R936", "D979", "L594", "U326", "L975", "U52", "L89", "U679", "L91", "D969", "R878", "D798", "R193", "D858", "R95", "D989", "R389", "U960", "R106", "D564", "R48", "D151", "L121", "D241", "L369", "D476", "L24", "D229", "R601", "U849", "L632", "U894", "R27", "U200", "L698", "U788", "L330", "D73", "R405", "D526", "L154", "U942", "L504", "D579", "L815", "D643", "L81", "U172", "R879", "U28", "R715", "U367", "L366", "D964", "R16", "D415", "L501", "D176", "R641", "U523", "L979", "D556", "R831"] + +def wire_trace(traceroute = []): + origin = [0,0] + current_location = origin.copy() + route = [] + for instruction in traceroute: + direction = instruction[0] + magnitude = int(instruction[1:]) + + while magnitude > 0: + if direction == "U": + current_location[1] += 1 + magnitude -= 1 + if direction == "D": + current_location[1] -= 1 + magnitude -= 1 + if direction == "L": + current_location[0] -= 1 + magnitude -= 1 + if direction == "R": + current_location[0]+= 1 + magnitude -= 1 + route.append(tuple((current_location[0], current_location[1]))) + return route + +route1 = wire_trace(wire1) +route2 = wire_trace(wire2) + +intersect = list(set(route1).intersection(route2)) +closest_pair = intersect[1] +closest_dist = abs(closest_pair[0]) + abs(closest_pair[1]) + +for item in intersect: + distance = abs(item[0]) + abs(item[1]) + if distance < closest_dist: + closest_dist = distance + closest_pair = item + +print(closest_dist) diff --git a/2019/day03B.py b/2019/day03B.py new file mode 100644 index 0000000..8431c6f --- /dev/null +++ b/2019/day03B.py @@ -0,0 +1,41 @@ +wire1 = ["R1009", "U286", "L371", "U985", "R372", "D887", "R311", "U609", "L180", "D986", "L901", "D592", "R298", "U955", "R681", "D68", "R453", "U654", "L898", "U498", "R365", "D863", "L974", "U333", "L267", "D230", "R706", "D67", "L814", "D280", "R931", "D539", "R217", "U384", "L314", "D162", "L280", "U484", "L915", "D512", "L974", "D220", "R292", "U465", "L976", "U837", "R28", "U68", "L98", "D177", "L780", "U732", "R696", "D412", "L715", "U993", "L617", "U999", "R304", "D277", "R889", "D604", "R199", "U498", "R302", "U958", "R443", "U957", "R453", "U362", "R704", "U301", "R813", "U404", "L150", "D673", "L407", "D233", "L901", "D965", "R602", "U615", "R496", "U467", "R849", "U530", "L205", "D43", "R709", "U127", "L35", "U801", "L565", "D890", "R90", "D763", "R95", "D542", "R84", "D421", "L298", "D58", "R794", "U722", "R205", "U830", "L149", "D759", "L950", "D708", "L727", "U401", "L187", "D598", "L390", "D469", "R375", "U985", "L723", "U63", "L983", "D39", "L160", "U276", "R822", "D504", "L298", "D484", "L425", "U228", "L984", "D623", "L936", "U624", "L851", "D748", "L266", "D576", "L898", "U783", "L374", "D276", "R757", "U89", "L649", "U73", "L447", "D11", "L539", "U291", "L507", "U208", "R167", "D874", "L596", "D235", "R334", "U328", "R41", "D212", "L544", "D72", "L972", "D790", "L282", "U662", "R452", "U892", "L830", "D86", "L252", "U701", "L215", "U179", "L480", "U963", "L897", "U489", "R223", "U757", "R804", "U373", "R844", "D518", "R145", "U304", "L24", "D988", "R605", "D644", "R415", "U34", "L889", "D827", "R854", "U836", "R837", "D334", "L664", "D883", "L900", "U448", "R152", "U473", "R243", "D147", "L711", "U642", "R757", "U272", "R192", "U741", "L522", "U785", "L872", "D128", "L161", "D347", "L967", "D295", "R831", "U535", "R329", "D752", "R720", "D806", "R897", "D320", "R391", "D737", "L719", "U652", "L54", "D271", "L855", "D112", "R382", "U959", "R909", "D687", "L699", "U892", "L96", "D537", "L365", "D182", "R886", "U566", "R929", "U532", "L255", "U823", "R833", "U542", "R234", "D339", "R409", "U100", "L466", "U572", "L162", "U843", "L635", "D153", "L704", "D317", "L534", "U205", "R611", "D672", "L462", "D506", "L243", "U509", "L819", "D787", "R448", "D353", "R162", "U108", "R850", "D919", "R259", "U877", "R50", "D733", "L875", "U106", "L890", "D275", "L904", "U849", "L855", "U314", "L291", "U170", "L627", "U608", "R783", "U404", "R294"] + +wire2 = ["L1010", "D347", "R554", "U465", "L30", "D816", "R891", "D778", "R184", "U253", "R694", "U346", "L743", "D298", "L956", "U703", "R528", "D16", "L404", "D818", "L640", "D50", "R534", "D99", "L555", "U974", "L779", "D774", "L690", "U19", "R973", "D588", "L631", "U35", "L410", "D332", "L74", "D858", "R213", "U889", "R977", "U803", "L624", "U627", "R601", "U499", "L213", "U692", "L234", "U401", "L894", "U733", "R414", "D431", "R712", "D284", "R965", "D624", "R848", "D17", "R86", "D285", "R502", "U516", "L709", "U343", "L558", "D615", "L150", "D590", "R113", "D887", "R469", "U584", "L434", "D9", "L994", "D704", "R740", "D541", "R95", "U219", "L634", "D184", "R714", "U81", "L426", "D437", "R927", "U232", "L361", "D756", "R685", "D206", "R116", "U844", "R807", "U811", "L382", "D338", "L660", "D997", "L551", "D294", "L895", "D208", "R37", "D90", "R44", "D131", "R77", "U883", "R449", "D24", "R441", "U659", "R826", "U259", "R98", "D548", "R118", "D470", "L259", "U170", "R518", "U731", "L287", "U191", "L45", "D672", "L691", "U117", "R156", "U308", "R230", "U112", "L938", "U644", "R911", "U110", "L1", "U162", "R943", "U433", "R98", "U610", "R428", "U231", "R35", "U590", "R554", "U612", "R191", "U261", "R793", "U3", "R507", "U632", "L571", "D535", "R30", "U281", "L613", "U199", "R168", "D948", "R486", "U913", "R534", "U131", "R974", "U399", "L525", "D174", "L595", "D567", "L394", "D969", "L779", "U346", "L969", "D943", "L845", "D727", "R128", "U241", "L616", "U117", "R791", "D419", "L913", "D949", "R628", "D738", "R776", "D294", "L175", "D708", "R568", "U484", "R589", "D930", "L416", "D114", "L823", "U16", "R260", "U450", "R534", "D94", "R695", "D982", "R186", "D422", "L789", "D886", "L761", "U30", "R182", "U930", "L483", "U863", "L318", "U343", "L380", "U650", "R542", "U92", "L339", "D390", "L55", "U343", "L641", "D556", "R616", "U936", "R118", "D997", "R936", "D979", "L594", "U326", "L975", "U52", "L89", "U679", "L91", "D969", "R878", "D798", "R193", "D858", "R95", "D989", "R389", "U960", "R106", "D564", "R48", "D151", "L121", "D241", "L369", "D476", "L24", "D229", "R601", "U849", "L632", "U894", "R27", "U200", "L698", "U788", "L330", "D73", "R405", "D526", "L154", "U942", "L504", "D579", "L815", "D643", "L81", "U172", "R879", "U28", "R715", "U367", "L366", "D964", "R16", "D415", "L501", "D176", "R641", "U523", "L979", "D556", "R831"] + +def wire_trace(traceroute = []): + origin = [0,0] + current_location = origin.copy() + route = [] + for instruction in traceroute: + direction = instruction[0] + magnitude = int(instruction[1:]) + while magnitude > 0: + if direction == "U": + current_location[1] += 1 + magnitude -= 1 + if direction == "D": + current_location[1] -= 1 + magnitude -= 1 + if direction == "L": + current_location[0] -= 1 + magnitude -= 1 + if direction == "R": + current_location[0]+= 1 + magnitude -= 1 + route.append(tuple((current_location[0], current_location[1]))) + return route + +route1 = wire_trace(wire1) +route2 = wire_trace(wire2) + +intersect = list(set(route1).intersection(route2)) +closest_pair = intersect[1] +closest_dist = route1.index(closest_pair) + route2.index(closest_pair) + 2 + +for item in intersect: + distance = route1.index(item) + route2.index(item) + 2 + if distance < closest_dist: + closest_dist = distance + closest_pair = item + +print(closest_dist) diff --git a/2019/day04A.py b/2019/day04A.py new file mode 100644 index 0000000..a0f2034 --- /dev/null +++ b/2019/day04A.py @@ -0,0 +1,29 @@ +from collections import Counter + +minVal = 353096 +maxVal = 843212 +matchingVals = [] + +def testForSequence(inputVal): + stringVal = str(inputVal) + tallyList = Counter(stringVal) + for digit, quant in tallyList.items(): + if quant == 2: + return True + return False + +def testForAscend(inputVal): + stringVal = str(inputVal) + i = 0 + while i + 1 < len(stringVal): + if int(stringVal[i]) <= int(stringVal[i+1]): + i += 1 + else: + return False + return True + +for testVal in range(minVal, maxVal): + if testForSequence(testVal) and testForAscend(testVal): + matchingVals.append(testVal) + +print(f'{len(matchingVals)}') diff --git a/2019/day05a.py b/2019/day05a.py new file mode 100644 index 0000000..e69de29