Initial commit: AoC solutions 2023-2025
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+1000
File diff suppressed because it is too large
Load Diff
+1000
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,63 @@
|
||||
import re;
|
||||
|
||||
numbers = [
|
||||
"zero",
|
||||
"one",
|
||||
"two",
|
||||
"three",
|
||||
"four",
|
||||
"five",
|
||||
"six",
|
||||
"seven",
|
||||
"eight",
|
||||
"nine"
|
||||
]
|
||||
|
||||
def main():
|
||||
totalvalue = 0
|
||||
with open("1-input.txt", 'r') as file:
|
||||
|
||||
for line in file:
|
||||
line = line.strip()
|
||||
word = ''
|
||||
digits = []
|
||||
for s in line:
|
||||
nr = get_number(s)
|
||||
if nr == None:
|
||||
word += s
|
||||
nr = get_number(word)
|
||||
if nr != None:
|
||||
digits.append(nr)
|
||||
break
|
||||
word = ''
|
||||
for i in range(len(line) - 1, -1, -1):
|
||||
s = line[i]
|
||||
nr = get_number(s)
|
||||
if nr == None:
|
||||
word = s + word
|
||||
nr = get_number(word)
|
||||
if nr != None:
|
||||
digits.append(nr)
|
||||
break
|
||||
if len(digits) == 2: totalvalue += digits[0] * 10 + digits[1]
|
||||
print(totalvalue)
|
||||
|
||||
def get_number(s):
|
||||
if s.isnumeric():
|
||||
return int(s)
|
||||
for n in numbers:
|
||||
if s.count(n) > 0:
|
||||
return numbers.index(n)
|
||||
return None
|
||||
|
||||
def isDigit(s: str, a: list):
|
||||
digits = re.findall("\d", s)
|
||||
if (digits.__len__() > 0):
|
||||
return a.append
|
||||
for n in numbers:
|
||||
if (s.contains(n["s"])):
|
||||
return n["n"]
|
||||
return a;
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,140 @@
|
||||
F-L----F7-7.F-7JJ.F--L-.F|F77.L|7.FLF-7.JJ--7FF-F-F7F7.7-F-7.L.FL7F|7--777.FJ-|7J-F-J-77-FF-F-7.JF77.L.JFL.L-|-FF7-77FL--F77.7-|77F7|7FF7-7-
|
||||
J|F7.LL|.F7.FL|J-77--JJ7L|-|-F-7L7-|LJ|F|JL|L-JJ|L|--7FF77.|-L7|LFLF-7FL--LL.FLJL-JFF-F7.-LJLF|J-LJ|FJ.|7-7L-JF|.J.LF7|L7.LF-|7F7-|-7-J7|7.|
|
||||
FF7J.7L|-7|FF7|L7|L|.LF7-JFLJJ.J7JJFJ-7.L-LLJJ|LJ7LL|.JLL---.LFJ7L-LJL-|JJ-|-F.LJ7|FLF-J.L7.FJ||F||L|L7--F..FLF7-L7|LLJ7L7.-7||||J|FJ.LLJ7F-
|
||||
FJ.LF-7-FJLJ-|7-7J777..|-FJ7.FJ.|.F|LFL-L7L|..--L|7.F-7-L|..FF|JF|7J.|7|FF-|.LF7LL77.J.LJL|7LF-77.|FFJ|7FLJF|-F7..FJF7L7.FJF7LJ||--|JJLLJF.J
|
||||
|FF7LFL7LJJL|.|.||L77--|7F---L.F|77JFL7.F|7FL7.F7LJ-7-JJLJ.--JLJFJ77F|7F|-.|L-LJ7-LJ7FJ7.|J|-F-J|FL7|-L-J7|-.L7JJ-L||L-|7J.LF7FLL-|||.FF-7J.
|
||||
FFJ-7LL7JF-.LL|-L--||.F|FL7J..LLJ|J.J.FF7L||JFJLL.J-J7LF7J77.7.||.F-FJ-|J.77.F-LLJJ|L-7|L---7JFL-7FJ-7FFL|7FLFJ|L|F-JL|.|.|-J7-LL-FL-.FFLJJ7
|
||||
LL7.L--|7LJ7J.7|FL7.F77FF..-|7-L-|F7.L7JLFJ|LL|.LF-FLL7LLL-|7|F7F-7-J.FL-F|-J77-|.F-.L-J.L|||F|JLJJ7FJF7|J|7FL77FL|.|L|J7FF-L--..L|.F-77JL7-
|
||||
|LF-7L.|FLLJ.LJ7-7FJL--FJ7L.7J.|JL|J-7|F7-.J7L|L-L77J|L7..FJF7LF77|J-.L--.-7L-F7F-J.F-|J|.FL7-7-F|JF.FL|---J-FFJF|.F|7F-FF.FL7--..J.|LL---JJ
|
||||
|.--7.F|F7.J-LLJJLFJ.|.|-||-|LF77-7|FF||||7.JFFJF-J7|.F7FFF7||FJ|7|.|.|.L-FJFLJL|7|F|.L7.L|L|.-.LJF|F7|..FFJ-LJF.JJ7L||LLJ7---JLL-|7LFF7-7.|
|
||||
F-LJJF-FJ-|..||L.JJ|-77|LF-F77F-7|LF7-L--7-|.FJ-JJ-JFF|L--J||LJFJJ-F-FJ.|FJFJJ..L7.|.F7J--L.|7.JJ.--7L7JF7L|J|FF7.LF7LJ-|||.|L-JL7-7-FJ-FJ-7
|
||||
FJ||FF7-J|L|-LF7LF7J7F7F7|FJ|FJFJJ--J|L|7LL|7LL-77J7FFL7F-7LJF7L7J.7-|.-F7|||-F|-FFF-J|J.F|7F-7.|FL-J-LJ-|7LFF7||7-|L7-F77-LJ|.FFLJL-|L|L|..
|
||||
J.LJ-|LL-77F7.||-J|F-JL|L7L7|L7|.|-|FF-F..LJ|.LL|-F7-F7LJFJF7|L-JLFF.L-|JF7F7F7JJF7L7FJF7JLF|FJ777.|.7.|F77-FJLJ|F7L7|.||..JJFLJ77F7|F-J.|-7
|
||||
|77JFL77L|-J|--|7F-||LFL7|F||-|L77--F7J|7L.F-|J|LFJ|||L7JL7||L7F7F7J|..L||LJL-7F-JL7|L7||7-FJL-777.F.F-7||F7L7F-J|||||FJL777FL-L---.JJ|LJ.L|
|
||||
7JL--7.|.|77L7.F7-FF7FF-JL7||-L7|F7.||.77L|--7FF7L7L7|FJ77LJ|FJ|LJ|7|FF7-L-7F-JL--7||FJ||F7|F--JF--77L7LJ||L7|L7FJL-J||F-J||J.77F|.|-|7FL.FF
|
||||
.F7F7F7JF.F--7-L7.F||7L--7LJL--J|||-||FF7F7JFF7||.L7||L-77F-JL-JF7|F7FJ|7|FJ|F7F--JLJL7||||||F7||F-JF7|F-JL7|L7||F---J||||7|-J-L-|7L7F-|77F-
|
||||
FL||-L7F|7JL7J77F7FJL7F-7L-7F---J|L7||FJ|||7FJ|||7-|||F7L7L-7F-7|LJ||L7L-7L7|||L--7F--J||||||||-|L-7|||L-7.||FJ||L--7FJL-7L7LL|J.|J-LJ||LJJ.
|
||||
|JLF-.LL|-J|L7FF||L7FJ|FJJFJL7FF7|FJ||L7||L7L7||L-7||||L-J|FJL7LJ|L|L7|F-J|||||F7.|L7F7|||LJLJL7L7FJ||L7FJFJ|L7LJF--J|F--J7J..F7FL.|-LFFJ|F7
|
||||
.|7||.L|J.FL7FF-JL7|L7||F7L7FJFJ|||F||.|||FJFJ|L-7||||L7F7FJF7L-7F7L7LJ|F7FJLJ|||FJFJ||||L-7F--JFJL7|L7|L7L7|FL7FJ-F7||-LF7JFFJL7LJ77F7-.||7
|
||||
L7FFL7-|-J--7-L--7|L7||||L-J|FJFJ|L7||FJLJL7L7L7FJLJ||FJ||L7|L7FJ|||L-7|||L--7|||L7|FJ|||F7||F-7L-7LJFJ|FJFJL-7||F7|||L-7||77L7JJL|-FJJ-77JL
|
||||
L7LLJJ.JFLL7JFF--JL7|LJ|L--7||FJFJFJ||L7F--J|L7|L--7|||FJ|FJL7||FJ|F7-||||FF-J|||L||L7||||||||FJ|FJF-JFJL7L--7LJLJLJLJF-J||LFFJ.7JL.|L|.|F.|
|
||||
F|.|--F7|-FJ7L|F--7LJF-J.F7|LJL7L7|FJL-J|F7FF7||7F-J|||L7LJF-JLJL7||L7|LJL7L-7LJL-JL-J|||||||||F7L7L-7|F7L7F7|F------7L--JL-7|--7F|FJ.|FJ|7.
|
||||
7F-7-JLJLF-7LLLJF-JF7L7-FJ|L7F-JFJLJF---J|L7|||L7L-7LJL7|F7L7-F--J|L7||F--JJ|L----7F--J|||||LJLJ|LL7FJLJL7||||L77F7F7L------JJ7LL777|-F7||7F
|
||||
|FJJ..LL-7|||FF7L-7|L7L7L7|||L-7L7F7|7F7.L7||LJFJF7|F--JLJL7L7L--7|FJ||L7F-77F7.F7|L-7FJLJLJF---JF7||F7F-J|||L7|FJLJL7F7F-7||-F7L--77LJLJJ7|
|
||||
LL.F-|7JJ.J-FFJL-7LJFL7|FJ|FJF-J.|||L7|L7FJ||F-JFJLJL7F7F7F|FJF7FJ|L7LJFJL7|FJL7|||F-JL---7FJ-F7-||||||L-7|||FJLJF--7LJLJFJF7FJL77FLL-JLL7|L
|
||||
|FJ|LJ|L-F-LFL7F7L-7F7||L7||FJJF7LJL7||FJL7||L-7L--7FJ||||FJL7|||FJL|F-JF-J|L-7LJ||L7F7F7|||F7|L7|||LJ|F7|||||F--JF7L----JFJ||F-J-|7JJ|-|JJJ
|
||||
JJ-J-JJF-7|L|-LJ|F7LJLJL-JLJ|F7|L7F7|LJ|F-J||F-JF7F||.|||||F-J||||F-JL-7L-7L-7L7FJ|FJ|LJ|FJ||||FJ||L7FJ|||||S|L---J|F7F7F7|FJ||F7JJF-L|-|L77
|
||||
JLF-7..|7||F|JF-J||F7F7F-7F7LJ|L7||||F-JL-7|||F7||FJ|FJ||LJ|F7||||L7F-7|F7|F7|FJ|FJL7L-7LJFJ|||L7|L-J|FJ||||LJF----J|||LJ||L7||||FF777|F7FFJ
|
||||
FL|F7-|FJ-L-L.L--JLJ||LJ|LJL7FJFJ||LJL7JF7|LJ|||||L7||FJL-7|||||||FJL7LJ||LJ||L7|L7FJF7L-7|FJLJFJL--7|L7||||F-J7F--7|||F-JL7||LJ|FJ|.|7JL-JJ
|
||||
|.-|J.L-J|FJ|7|LF--7LJF-----JL7L7|L-7FJFJ|L-7||||L-JLJL-7FJLJLJLJLJF-JF7|L7FJL7||FJL7||FFJ|L-7FJF7LFJL7||||||F--JF-J|||L7F7|LJF-J|FJF77J||..
|
||||
F-LL--.FL-7.|J-FL-7L--JF-----7L-J|F-JL7|FJF-J|||L--7F---JL--7F----7|F7||L7|L-7|||L-7LJL7L7|F7|L7||FJF7||||||||F--JF7||L7LJ||F7L7FJ|FJL7.J7FF
|
||||
777F7F-J-|.LF7--JFJF7F-JLF--7L-7FJL-7FJ|L7L7FJ||-F-JL7LF7F7JLJF7JFJLJ||L7||F7|LJL-7L--7L7||||L7LJLJFJLJ|||LJLJ|F7-||||FJF-J||L-JL7||F-J7FLJ.
|
||||
J--L7F.J.7FL||FFFL7|||F-7L-7L--JL--7|L7|FJFJ|FJL7L--7L7|LJ|F7FJL7L7F-JL7LJ|||L-7F-JF-7L7||LJ|LL7F--J||FJLJF7F-J|L7||||L7L--J|F--7|LJL--77.L7
|
||||
F--LLLL7LL7LF7F7F7LJLJL7L-7L----7F-J|FJ||FJFJ|F-JF7-L7|L7FJ|||F-JFJ|F-7L7FJ||F7||F7L7||||L-7|F7||F7F7FJF--JLJ-FJFJ||||FJF---JL7FJ|F-7F7L-77J
|
||||
J|-7.|J|FJ-FJLJ|||F--7LL-7L-----JL--JL7|LJFJ7|L-7||F7||FJL7|||L7FJFJL7L7||FJ|||||||FJ|FJL7FJ||LJ||||LJFJLF-7F7L7|L|LJLJFJF--7FJL-J|-LJ|F-J77
|
||||
LL-F-JF|L.FL-7FJ||L7FJF7FJF--7F7F--7F-JL7FJF7L7FJ||||||L7FJ|||FJ|FJF7L7|||L7|||||||L7||F-JL7|L7FJ|||F-JF7|FJ||J||FJF7F7L-JF7LJF7F7L--7LJFJLJ
|
||||
7JLJL-FJJ|7F7||FJ|FJ|FJ|L-JF-J|LJF7||F-7|L7|L7|L-J|||||FJ|FJLJ|FJL7|L7|||L7|||LJ||L7|||L7F7|L7|L-J|||F7|LJL-JL7|LJFJLJL-7FJL7FJ|||F-7L777-J.
|
||||
|..L7LJ.LF-JLJ|L7|L7|L7|F7FL--J-FJLJLJ7||FJL7|L--7LJ||LJJ||F--JL-7|L7LJ|L7|||L7FJ|FJ|LJL||LJFJ|F--J|||||F-----J|F-JF7FF7|L-7LJFLJ|L7L7L77-7J
|
||||
7.77||.F||F7F7L-J|FJL7||||F7F--7L-----7||L7FJ|F-7|F7|L--7||L7F7F7|L7|F-JFJ||L7|L7|L7L-7FJ|.FJFJL7F7|||LJL7F--7FJL-7||FJ||F7L----7|FJ-L7|JFF.
|
||||
|..FF7.F-LJLJL--7LJF-J||||||L-7|F7F---JLJFJ|FJ|.LJ|LJF7FJLJJLJ|||L7||L-7L7||-LJ|||FJF7|L7L7|FJF-J||||L7F7LJF7LJF-7LJLJFJ||L-7F7FJLJ|FFLJFJ..
|
||||
|.F7L|-J-|LF----JF7L-7||||||F7||||L-----7L-JL7L-7-L7FJ|L---7F-J|L7||L7FJFJ|L-7F-J|L7|||FJFJ||.|F7|||L-J||F-J|F7L7|F-7FJ|LJF7LJLJJLL7F-7LJ-FJ
|
||||
JJ.|7L7LFJ-L-----JL-7||||LJ||||LJL---7F7|F---JF-JF7|L7|F7F7|L-7|FJ|L-J|FJFJF7||F7L7||||L7|-LJFJ|LJ||F--JLJF7LJ|FJ||-LJF7F7|L--7F7-7L7J-7L.7.
|
||||
||F||-J7LL7|JF------JLJLJF7LJLJF7F--7LJLJ|F7F7|F-JLJFJ||||LJF-J|L7L-7JLJ.L7|||||L7|||||FJL--7L-JF-J|L-----JL-7||7|L---JLJLJF--J||.L7|JF|FF-J
|
||||
.-J-F.L|7FJ-FL-7F--7F---7|L-7F-JLJF-JF7F7LJ||||L7F-7|L|||L-7L-7|L|F7L--7F7||||||FJ|||||L7F7FJF-7L-7|F------7FJ|L7L---------JF7FJL7|LLJF.JJ|.
|
||||
FLL7|FFL77JJF-7LJF-J|F--J|F7||F--7L-7|LJ|F7LJLJLLJFJL7LJL7FJ|FJ|FJ||F-7LJ|||||||L7|||||FJ||L7L7L--J|L7F7F7-LJ|L-JF-7F7F-----J||F-J7.|.|.|..F
|
||||
FJ|L--J7LFJ-L7|F7L--JL-7FJ|LJ|L-7L--JL-7LJL7F-77F7|F-JF7J||7FJFJ|FJ|L7|F-J||||||FJ||||||FJL7|-L---7|FJ|LJL-7|F7F7|FJ|LJF-----J|L---7FL7F-F7|
|
||||
|-JJJ7|7F|FF-JLJL------JL7L7FJF7L---7F7|F--J|FJFJLJL--J|FJL7L7|J|||L7||L-7||LJLJL-JLJ||||7JLJF7F-7LJ|FJF7F7L-JLJLJL-JF-J.F7F7.|F---J7.LJ7|FL
|
||||
L7|.LLL7-||L7F7F---------J.LJFJL--7FJ||||F7FJL7L7F-7F7FJL7FJ|LJFJL7FJ||F7||L--7F--7F-J||L7F--JLJFJF7||FJLJL7F7F7F-7F7L---JLJL-JL--7|F77|--.J
|
||||
.FJF7JLJ.FF-J||L7F-7F7F7F7F7FJF--7|L-JLJLJLJF7L7|L7||||F-JL---7|F7|L7|LJLJ|F--JL-7LJF7||FJL-7F-7|FJ|LJL---7LJLJLJL||L7F--7F7F-7F7FJFJL7|J|7.
|
||||
|J-L-77.F|L-7||FJL7|||||||||L-J|FJL-7F-7F7F7||FJL-JLJ|||F7F7F-J||||FJL-7F-J|F7LF-JF7|||LJF--J|-||L7||F----JF-----7||7|L-7||||J|||L-JF-J7F|FL
|
||||
|.F7LJ|7L||LLJLJF-JLJLJLJLJL7LF7L--7|L7LJ|||||L-----7||LJ|||L-7LJ||L-7FJL-7LJL7L7FJ||LJF-JF--JFJ|FJL7L-----JF----JLJFJF7||||L7LJ|F-7L--7-L-.
|
||||
.F7JJ---JL7|F---JF---------7|FJ|7F-JL-JF7LJLJ|F-7F--JLJF-J||F7|F-J|F-JL--7L7F-JFJ|FJL7FL7FJJF7L7|L-7L7F7F---J|F7F-7|L-JLJ||L7|F-JL7L7F7|J7--
|
||||
LLJ-F7JL|FF-JF---JF--------JLJFJFJF7F7FJL7F-7|L7|L---7-L-7|||LJ|F7|L7F7F7L7|L-7L-JL7FJF7LJF-J|FJL--JFJ||L----7|||FJF7F--7LJ7LJ|F7FJFJ|LJLJ.L
|
||||
J7|F-F--JFL--JFF-7L----------7|JL-JLJ|L7FJL7|L-JL----JF-7|||L-7||||FJ|||L7||F7|F---JL7||F-JF7LJF-7F7L-JL--7F-J|LJL-JLJF7L----7LJ|L7L-JJ-FJF.
|
||||
LFF7JJ.F7FFF7F7L7L----------7||F-7.F7L-JL-7|L------7F7|FJLJ|F-JLJ||L7||L7||||LJL7F-7FJ||L--JL7FJFJ||F7F7F7LJF-JF------JL-7F--JJLL-JJL|-77-77
|
||||
LL|JLF-F-7FJLJL-JF-----7F7F7LJ|L7L-JL----7LJF------J|LJL-7FJL-7F7LJFJ||FJ|||L7F-J|FJ|FJL7F7F7LJFJFJLJ||||L--JF7L-----7F-7|L---7-L7|.-.FLJLJJ
|
||||
--777L7L7||F-7F--JF7JF7LJLJL-7|FJF-----7FL-7L---7F7||F-7FJL-7FJ|L7FJFJ||FJ||FJL--JL-J|F7LJ|||F7L-JF7JLJLJF---JL---7F7LJFJL-7F7|FL|7FJ7F|77|7
|
||||
LLF-J|LFJLJ|FJL7F-JL7|L-7FF7||LJFJLF---JF77L-7F7LJL-JL7||F--JL7|FJL7|FJ|L7|LJF7F7F7F7LJL-7LJLJ|F7FJL-----JF------7LJ|F-JF7-LJLJ-7.|JF7J.L7||
|
||||
F.|7FFJL---JL--JL7F-JL-7|FJL-JF7|F7L-77FJL--7||L--7F7FJLJL7F-7LJL-7||L7|FJ|F-JLJLJLJ|F--7|F7F7LJ|L--------JF7F7F7L-7|L--JL--7J-LJ7LLJ||-J.|7
|
||||
777|7..FF---7F---JL7F--JLJF7F7||||L-7L-JF7F-JLJF77LJLJF7F7||7|F7F7|||FJ||FJL7F----7FJL-7|LJLJL-7|F--7-F----JLJLJL--J|F-----7|-F-LF7FLL-JF-JJ
|
||||
L-|J-L-FL--7|L----7LJF--7FJ||||LJL-7L---JLJ|F7J|L-----JLJ|LJFJ|||LJ|||FJLJJ-LJF---J|F7FJL------JLJF7L-JF-------7F7F7|L----7LJ7|--.|-...--7.F
|
||||
FLF.FLF7|F7|L7F7F-JF-JF-J||LJLJF---JF7F7F---JL-JF-7F-----JF-JFJ|L-7||LJJJ.LFJFJF--7LJLJF7F7F-7F7F7|L7F-JF---7F7LJLJ||F7F7FJF-7--FF|LF|77FF--
|
||||
J|L-7-|L7||L7|||L--JF-JF7|F7-F7L----JLJLJF--7F7FJFJL--7F-7L-7L7|F7|||JJ|L7-F7L7|F-JF--7|||||FJ|||||FJ|F7L--7LJ|F---JLJLJ|L-JFJLF-F|7FJLFJ-J.
|
||||
FFFL7-L7LJ|FJLJL--7FL--JLJ|L-JL---7F7F-7FJF-J||L7L---7LJFJFFJFJLJLJLJJF|7L-|L-J||F7|F-J|||LJL-JLJ||L7||L---JF-JL-----7F7L---J7-|L7L7L7LL.F-|
|
||||
L-FF7|FL-7LJF-7F-7|F7F----JF-7F--7LJLJFJL7L-7||FJF--7|F-JF7L7|J7L|||JF-F-JLL7F7|LJ||L7FJ|L-7F----J|FJ|L7F7F7L-----7F7LJL7F-7.JJLLL-F--FL-7-|
|
||||
.F7LL7F--JF7|FJ|FJLJLJF7F--JFJL7JL---7L--JF7LJ||FJF-JLJF-JL7||J|7.|.LL.J.F-FJ|||F-JL7||LL--JL--7F-J|FJ7LJLJL-----7LJL---J|FJ7-F77FFL7J|L7L-|
|
||||
-|77|L|F7FJLJL7||F7F7FJLJF--JF-JF----JF7F7||F7LJ|FJ-F-7|F--JLJ.|J7L77L----J|FJLJL---J||F7F-7F-7LJF-J|F7F7F---7F-7L-7|F7F-JL7--FFJ---J.JF7FFJ
|
||||
..L77L||||..F7LJLJ||||F--JF-7|F-JF----JLJLJLJL--JL--JFJ|L-----7.||F7J7|F|..LJJL7JF7F7LJ||L7LJFJF7L--J|LJLJF77LJ|L-7L-JLJF7FJFF|.F-J||-LL-7LF
|
||||
|.JL-JLJLJF-JL----J|LJ|F7FJLLJL7FJF----7F7F7F7F-7F--7L7|F7F7F-JFF7|JLLJJ77.JL77FFJLJL--J|FL7FJFJL7FF7L----JL---7F7L7F---JLJ-LJ|F|7FJ-F-JLLJL
|
||||
L-||-||F--JF7F-----JF7LJ|L7FF7FLJLL---7LJLJLJ|L7|L-7L-J||LJLJ-LFJ|J|.F|JLF7..L|JL7F-7F-7L--JL7L-7L7||F---------J|L7|L-----77L7|F777|JJ..FJ-J
|
||||
L-JF-JFL7F7|LJF----7||F7|FJFJL--------JF7-F7-L-JL--JF--JL--7.F-|FJ.LFLJJ.|F7..|FFJ||||JL--7F7|F7L7|||L-----7F--7|FJL-----7L-7F7F777JJ.L-|JF7
|
||||
.-.F7L|JLJLJF7L---7||||LJL7L-----------JL7|L---7F--7|F-----J-7-||LJFLJ-LLFLJ-F-7L-JFJ|F--7LJ|LJL-JLJL7F----J|F-J|L7F7F7F7L--J||||||J-F.JJF-F
|
||||
FL7L-JF.|.|FJL-7F-JLJLJF--JFF------------J|F---JL-7|||F---7F-77||7JF7|7LL77.-L7|-|7L-JL-7|F-JF------7LJF-7F-JL7F|FJ|LJLJL7JF7|LJL-7F7|..FF7|
|
||||
7FJ-J-JLJF7L7F7LJF-7F-7L7F--JF-7F7F---7F-7||F7LF7-|||||F--JL7|FJL7.||F7.7LJ-.F|L7F7F7F7F||L--JF-7F-7L--JFJ|F--JFJ|FJF--7FJFJ||F---J-7J7FFL77
|
||||
|-7-|..|7|L-J||F7|FJ|FJFJL-7FJLLJLJF--J|FJ||||FJL7|LJLJL----JLJF7|.|LJ|7L7..7-L7||LJ|||FJL--7JL7LJFJJF-7L-JL-7||FJ|FJF7LJ|L7|||F-7..LFJ7-FJ7
|
||||
7||F|.7LFL---JLJLJL7|L7|F-7LJF7F7F7L---JL-JLJLJF-J|F---7F------JLJ.L-7L7F7F7J-F||L-7LJLJF7F7L-7L-7L-7L7L--7F7L-JL-JL-JL-7F7|LJLJFJ7L.F-FF-JJ
|
||||
L7-L7.777LLF---7|F-J|FJ|L7L--JLJLJL-----7F--7F7L--JL--7|L--7F-7F7FJJ7L7|||||7F7||F7L--7FJLJL-7L-7L-7|FL7F7LJL7F-7F-7F--7LJLJF---JF7L7L7.JJ.J
|
||||
F|7.J..-7.LL7F7L7L--J|FJFJF---7F------7FJ|F7LJ|F7F7F-7|L---JL7|||7JJF7||||||FJLJLJ|F7-LJF7F7FL-7|F-J|F7LJL--7|L7|L7|L-7L---7L----JL-77.-J|7.
|
||||
-J|7L77JLFFFJ|L7L-7F7LJJL-JF7|||F-----JL-J||F7||LJ|L7|L------JLJL-7.|LJLJLJ||F---7||L---JLJL---JLJF7LJL-----JL-J|FJL-7L-7F7L-7F7F7F-J--J.FJ.
|
||||
|JLF.|J|F-LL-J7L-7LJL-7F7F-JL7LJL7F7-F--7FJLJ||L7LL7||F7F7F--7F7F7|-L7F7F-7|||F-7||L---------7F7F-J|F7F--------7|L-7FJF7LJL7.LJLJLJ.J.LF-JJ.
|
||||
L7LL7JF-L-FF7F7F7L---7||||F-7|F7JLJL-JF-J|F--JL7L-7||||LJ|L-7||||LJF7LJ||.LJLJL7||L-7F-7F----J||L7FLJLJF------7||F7||FJ|F-7L--7F7.LF|---J7.F
|
||||
LJF-JFF.|FFJ||LJL7F--J|||LJFJLJL-7F--7L--JL--7JL--J||||F7L--JLJLJ.FJL--JL-7F7F7|LJF7|L7LJF7F-7|L7L7F-7FJF--7F7LJLJLJLJJLJFJF7FJ|L---7..|.--J
|
||||
L7J.FJ|LF7L7LJF-7LJF-7LJL7FJF7F-7|L-7|F-7F7F7L----7LJ|||L7F7F7F7F7L----7F-J|||||F7|LJL|F7|LJLLJ-L-JL7|L-JF-J|L7F7JF-7F--7L-JLJFJF-7FJ777...|
|
||||
.L|FLJL.||LL--J|L7FJLL--7LJFJLJFJL--JLJ-|||||F7F7FJF7LJL7LJLJLJ|||F7F7FJL7L|LJ|LJ||7F7||LJF7-F7F7FF7||F7FL-7L7LJ|FJFJ|F-JF7F--JFJ7LJLF-7---J
|
||||
|||LJ..F|L7F7F7F7LJF----JF7|F7FJF--7F7F7LJLJLJLJ||FJL--7|F-----J|||LJLJF7L7L-7L7FJL7||LJF-JL-JLJ|FJLJLJL---JFJF-JL7L-JL--J||F--JF7F7-7J77.F|
|
||||
LJJ.|.-FJFJ||||||F7L----7|LJ||L-JF7LJLJL-7F--7F7LJL7F--J|L---7F7||L-7F-JL7|F7L7||F-J||F7L7F----7LJF-7F-7F7F7|FJLF-JF------J||-F7|LJL7J|FJ-FJ
|
||||
FF|-|.|L7L-JLJLJLJ|F77F7LJF-JL---JL----7FJ|F-J||F7F|L7|FJF7F7LJ||L7LLJ-F7||||FJ||L7FJ||L7LJFF7|L--JJ||7LJLJLJL-7|F7L7F7F7F7||FJLJF--JJL|FFJJ
|
||||
FFJF--F-JF-7F----7|||FJ|F7L----7F-----7|L-JL--JLJL7L7|FJFJ||L-7|L7|F7F7|LJLJ|L7||FJL7||FJFF-JL------J|F----7F-7LJ|L-J|LJLJLJLJF7FJF7..FF7J.|
|
||||
FF7JJ7L7FJLLJF7F-JLJ|L7||L7F-77LJF--7FJL-------7F-JL|LJFJFLJF7LJ-||||||L--7FJ7||||-FJ|||F7L--7F7F7F7FJL---7LJFJF7L7JFJF7F--7F7|LJ||L7F7|J7.F
|
||||
J|L.L|JLJJ-FFJLJF7F7L-JLJFJL7|F7FJF7LJ7F7F7F--7||F-7L7FJF7.FJ|LF-J|||||F7FJL7FJ||L7L7||LJL7F-J|LJ||||F----JF-JFJL7L-JFJ|L-7LJLJ-F7L7LJL7FJ-|
|
||||
FFL7||7|L-F-JF-7|||L--7F-J|L||||L-JL---J||LJF-JLJL7L-JL7|L7L7L7L-7||||||||F-JL7||FJ-|LJF--JL--JF-J|LJL----7|F7L-7L---J.L-7L-----J|FJF-7L7-FF
|
||||
F|7.J|LFJ-L--J.||||F--JL7F7FJLJL-7|F-7F7LJF7L-7LF7L--7FJL7L7|FJF-J||||LJLJL-7J||||F7|F-JF7F-7F7L--JF------JLJL-7L------7.L7F-7F-7LJFJ-L-J.FJ
|
||||
L.L-|L7LLFF----J|LJL-7F7|||L----7L-JFJ|L-7|L-7L-J|F--J|F7|FJ|L7|F7LJ||F-7F--JFJLJ||||L-7||L7||L----JF7F7F-7F-7.L------7L-7|||LJJL-7L777|FF-J
|
||||
.-..-FJJ.FJF--7FJF---J||LJL-7F-7L7F7L7|F7|L-7L7F7|L--7LJLJL-JFJ||L7FJLJFJ|F-7L--7LJLJF7||L7||L-----7|||LJFJL7L7F---7F7L--JLJF7-F77L-JL|LFJJ-
|
||||
F--|JL7J.L7|F7||FL---7||F7F7|L7L-J|L7|||LJF-J|LJ||F--JF-----7L7LJ-||F-7L7||FJF-7L7F--J||L7|||-F-7F7||LJF-JF7L7||F--J|L7F-7-FJL-JL-7FL7|F-JJ.
|
||||
LJLJ.LJLF7LJ|LJ|F----J|||LJ|L-JF--JFJLJL-7L--7F7LJL--7|LF7F7L-JF7FJ|L7L-J||L7L7L-JL--7LJFJ||L7L7||LJ|F-JF7||7||||F7F|FJL7L-JF7F---J7||77LL|7
|
||||
FF-7.|.F|L7|L--JL7F-7FJLJF-JF--JF--JF7F7FJF--J|L7FF7FJL7|||L7F7|LJFJJL--7||FJFJF-7F--JF7L7LJFJFJ|L7FJL--JLJL-JLJLJL-JL--JF7FJ|L----77.F7--77
|
||||
L|FL-J-FL7L-7F-7LLJ|LJF7FL--JF7-L---JLJ|L-JJF7|FJFJLJF-J|||FJ||L-7L-7FF7|LJL7|FJJ|L-7FJL7L-7L7L7||LJF---7F7F7F7F-7F------JLJ7L7F7F7L7..|.L|J
|
||||
F|FJ.FF77L-7|L7|F7F---J|F77F-JL-7F7F---JF7F7|||L7L7F7L7FJLJL-JL-7L7FJFJ|L-7FJ|L-7|F7|L7FJF7|FJ7|L-7FJF-7LJLJLJLJFJL------7F-7L|||||FJ.7JJFJJ
|
||||
J-77LL|L---JL7||||L---7LJL7L---7|||L--7FJ||LJ|L7L7LJ|FJ|F-------JFJL7L7L--JL7|F-JLJLJFJL7||||F-JF-JL-J|L-------7L--7F7F--JL7|7LJLJLJF-J|J-.|
|
||||
JJL--LL-----7LJLJ||F7.L7F7L----JLJL---J|FJL-7L7L7L7FJL-JL7F----7FL-7L7L----7LJ|F--7F7L-7|||||L7FJF7F--7F---7F-7L--7LJ|L--7FJL7F-7JJ.L7LL7.LF
|
||||
FFL|7-|.F---JF7F7L-JL--J|L7F----------7|L7F7|FJL|FJL-7F-7LJF---JF7.|FJLF7|FJF-JL7FJ||F7|||LJ|FJL7||L-7|L--7LJFJF-7L-7L---JL7FJ|FJ|J|7F.FF|.L
|
||||
F7||LFFFL-7F7|||L-7F-7F7|FJ|F---------JL7LJ||L7FJ|F7F||-L--JLF7FJ|FJL7FJL7L7L-7FJ|FJ||LJ|L-7||F-J||F-JL---JF7L-JLL-7L------JL-JL7J.7-JL-7|L7
|
||||
F|7F-LJF7L|||||||FJ|FJ||||FJL-7F7F-7-F77L-7||FJL7|||FJ|F7F--7||L7|L7FJ|F-JFJF-JL7|L7|L7FJF7|LJ|F7||L-7F7F--JL-----7L7F7F-7F7F---JLF|.F|LFJF7
|
||||
.LL--J7|L-J|||LJFJFJL7|||LJF--J|LJJL7|L7F7|||L-7|||LJFJ|||F-J||FJ|FJL7|L7FJFJF-7|L7|L7|L7|LJF-J|||L7|LJLJF--------J-LJ||7LJ|L---7L7LF.|.J.L7
|
||||
|JJJ.J7L-7FJLJFLL7|F-J|||F7L--7|F---J|FJ|||||F-J||L-7|7||||F7||L7||F-JL7||FJ-|FJ|FJ|FJL7|L7FJF7|||FJF7|F7L------7F---7|L--7|F-7FJFF7--7-L7J|
|
||||
|JFF|.FLLLJLF-7F7|||F-JLJ|L---J|L7F-7|L7|||LJ|F7||F7|L7|||LJ|||FJ||L7F7||||F-J|FJL7||F7|L7||FJ|||||FJ|FJ|F-----7LJF--JL-7FJ|L7LJFFJ||FJ--.F|
|
||||
|LJJ-LJ7|LJ|L7|||||||F---JF7F--JJ||.|L7||||F-J|LJ||||F|||L7FJ|||FJ|-||LJ||||-FJL-7|||||L7LJLJFJ||||L7||.|L-7F7F|F7L----7LJ-L7L---JFJJ7.|L|7|
|
||||
F7J|.|JFL|JFF|LJLJ|||L7F--JLJF7F7||FJFJLJ||L-7L-7|||L7||L7||FJ||L7|FJL7FJ||L7L7F-JLJ||L7L---7L7|LJL7|||FJF7LJL7LJ|F7F-7L-7F-JF7F7FJJLF-7-J|L
|
||||
FJFFFJL-7|JF7|F7F7|||7LJF----JLJLJ|L7L--7LJF-JF-JLJ|FJ|L7|||L7||7LJL7FJ|FJL7|FJL---7||FJF7F7|FJ|F--J|LJL7||F-7|F7LJ|L7L--JL--JLJ||J-FF7L.FJ7
|
||||
|LF.L-7J-J-|LJ|LJ||||F--JF7F7F7F7FJJL7F7L-7|F7L---7|L7L7|LJ|FJLJF7F7||L|L-7|||F----J||L7|||||L7|L7F7L--7|||L7|LJL-7|FJF------7J.LJ7FJLJ|-FLJ
|
||||
L||L7.7F77.L-7|F7||||L---JLJ||||||F--J|L7FJ||L7F-7|L7L7||F-J|.F-JLJLJL7L7FJ|||L--7F7||FJ|LJ|L7||FJ|L7F7|LJ|FJL-7F-JLJFJF-7F-7|JF.|JL-FLL.L-7
|
||||
FLL.|-|LF----JLJ|||||F------J|LJ||L7F7L7|L7LJ.||L|L7|FJLJ|F7L7L--7F--7|FJL7LJL7F7LJ|||L7L-7L7|LJL7|FJ|||JFJL-7FJL7F--JFJFJL7|L77-L-JF-J|--L7
|
||||
|7|F--LJL-7F7F7FJ||LJL----7F-JF-J|FJ|L7|L7L-7FJL7|FJLJ-LFJ|L7L-7FJL7F||L-7L-7||||F7|LJ7L7FJFJL7F7||L7||L7L7F-JL7FJ|F--J-|F-JL-J|FLJ7FJFJ.L||
|
||||
|--F7FJ.|LLJLJLJJ||F------JL7FJF-JL7|FJ|FJF-JL7FJ||-F7-FJFJFJF7||F7|FJ|F-JF-JFJ|||LJF7F7|L7L7FJ|LJ|FJ||FJFJL7F-JL-JL-7F7LJ-L|-FL7J-7|L|.|F-.
|
||||
7.F-J-JFF-J.|||--LJL------7FJ|FJF--J|L7|L7L--7LJ7|L7|L-JFJ.L7|||||LJL7|L-7L-7L-J|L-7|LJ|L7|FJL7L7FJL7|LJLL7FJ|F-7F7F7LJL7||FJ-L.7J|LFF7-LJ-|
|
||||
FLJJ7|FJJ7.LLJF--|LF------J|LLJLL-7FJ|||FJF7FJ|F-JFJL-7FJ.FFJ|LJ|L7F7LJF7L7FJF--JF-J|F-J.||L7FJ.LJ|FJL7FF-J|LLJ|||||L7F7L77|J7|7L77-FJJ|.J.|
|
||||
FJJL-7-J.77FJF7|FLFJF-7F7F7L-7F---J|F-J||FJLJF-JF7|-F-JL-7FJFJF-JFJ|L--JL-JL7L7F7L--JL--7LJFJ|.F--7L-7L7|F7L---7||||J||L7L7|J-|F7.LL-J.|7|FJ
|
||||
F7FF-J|F--.L7-LF|-L7|.LJLJ|F7|L7F7FJ|F7||L--7L-7||L7L-7F-JL7|FJF7L7L--7F--7FJL|||F7F7F-7|-FJFJFJF7L--JFJLJL7F7FJLJLJFJL7L-J-7J|-77|7|.FL7JJ.
|
||||
|--7LL|JFL-.77..LFLLJF7F--J|LJ.LJ|L7||||L-7FJF-J||FJF-JL--7|||FJL-JFF7LJF-JL-7||||LJ|L7|L7|FJ7L7|L7F7FJF---J||L-7F7FJF7L-7|7J..F77LL--|F-.FL
|
||||
LL|L..7--J|F|7.L|LLF-JLJF-7L-77F7L-JLJ|L7L||7L7FJ|L7L7F7F-J|||L--7F-JL--JF7F7||||L-7|FJL7||L7F7||F|||L7L-7F7||F7LJ|L7||F7L77FJ-J.L-L-JL7--7J
|
||||
7F--L7L7|.FJL|7-JFLL-7F7L7L7FJFJL-----JFJFJL-7|L7|FJLLJ||F-J||F-7||F7F7F7|LJLJ||L7FJLJF7||L7LJ|LJFJ|L7L7FJ||||||F7L7||||L7L7-|.LL-7-L.F|FJJ|
|
||||
F|7FFJJ77F7-F7|FJJJ||||L-J||||L7F7F--7FJ|L7F7|L7|||-F--J|L7FJ|L7LJLJLJLJ|L---7||FJL-7FJ|||FJF7|F-JFJJL7||FJ|||||||FJ|||L7L-JFJ-L-7..|7FJL--J
|
||||
-F-L|7LJL-J-LF|-J-F-L||F---JL7FJ|||F-J|.F7||LJFJ|||FJF-7|FJ|LL7L7F7F----JF7F7||||F-7LJFJLJ|FJLJL7FJ.F7LJ||FJ||||||L7LJL7L-77JJ|L||-LL-FJF.FJ
|
||||
||F||7|.-..LFJL7.L-.LLJ|F-7F-JL7|LJL-7L7|LJL7FJFJLJL7|FJ|L7L7-L7||LJF-7F7|LJLJ|||L7L7FJFF-JL-7F-JL-7||F-J|L7|LJ|||FJL|L|F7L7.FF-JF.L|LJ7JFL.
|
||||
--FJ77J||J.F7L-L-7F7JF7||JLJ7LFJL7F--JFJL-7FJL7|7FF-J||FJFJFJF-J||F7|JLJ|L---7|||FJ-LJF7L-7F-JL7F-7LJ|L7FJL||F7LJLJ|.|FJ|L-J7FJF7.F-F7J--||7
|
||||
FFFJ.|--L.7.|.|.FLJ-F|LJL-7J|JL--JL7F7L--7||F-JL7FJF7||L7L7|JL-7|LJLJF--JF7F-JLJ|L----JL7FJL7LFJL7|F7|FJ|LFJLJL-----7-L-JJ|.F|LL77J.JJ7J-|J7
|
||||
FF.F|J..|7F7FFFFJ|J-LL7F--JL-JLF---J||F-7|LJ|F7FJL-JLJ|FJ-||F--J|7F7FL7F7||L77-FJF---7F7|L--JFJF7|||LJ|FJFJF7F7F----J.||FLL-7J|LJF77|.|-FJ-L
|
||||
7L-L7FF7-F7F---JFJF-JLLJ-JLFJJL|F-7FJ|L7|L-7|||L--7-F-JL7FJ|L7F7|FJL--J|||L7L-7L7L--7|||L7|LLL7|LJ|L-7||LL-J|||L-7J7|7J-F.JF|-FJ-F7-J-L-|J||
|
||||
J77F|-LJ|LFLJ|J.-JFL7.|L7..J7F.LJFJL7|FJ|F-JLJ|F-7L7L--7|L-JFJ|||L7F7F7|LJFL7FJF|F--J||L-J--FFJL-7L--JLJJL|L|||F7|F|7.|L77-F7-J.FJ.F.FJJ|FL|
|
||||
L7-F|.L-J7|LFJJFJ|7L7-F-J7F-J77.FJF7|||FJL--7FJL7L-JL|7|||F-JFJ||FJ|LJ|L--7FJ|FFJL7|7LJJJJ|F-L7F-JJL|J|J7||.LJLJLJ-JF-F7J7|L|JL--F7|-J7F77||
|
||||
FL-J.FLJF-7JJ|FL7J-J|L|-FJ|J..LFL-JLJLJ|F7F7||F-JJ.L|FFJ|FJF7|FJ|L7L-7|F7FJL7L7L-7L--7-|-FFJJ-LJJJ-LLFF.77|-.L|.LF|-L7J|7L-7J7.JJL7||L-.J-J7
|
||||
L..|FJJ.FJ|7L-J|L|F-7.F-J.--77F.L|7||LFJ|LJLJLJJ.|7-J|L-JL7||||FJL|F7|||LJF7L7L7FJF7FJ-L--J.|.L-J7F7J.J7|LLLJ-LJFJJLLJF-|-FJ||J|||.|-JFFJ.||
|
||||
FJ.77JF---JJ||.7-F|-|7LJJ..FL7L7----J||FJLJ|-|-|.LF7-LLJ7FLJLJ|L7FJ||||||FJL-JFJ|FJLJJ77.LLLJ.LFF-JJ.F.|L.LJ|-LF-JJ.LJ7.L-7.|..LLJF7FL|-7|L-
|
||||
LF7.F.|.LF7FL--L7LJ7.L7J.7.|.F-F.|LJLFLJ7LLJLJ7|.LJ7|||7FJFLF-JFJL7|||LJ-L-7F-J-||JJJF--7.LL.F.F|FJ.FL7|.-77|7.7.-77LL7-L7|F|-F7|FLL7|L|LF7|
|
||||
.LJ|LJ|7|LF7JJ.L7.--7JL77|.F7J7L--.|.77.L-7J-LFF-FJL7--77-J7L7FJ7.LJ|L7J|FLLJJFL||J|F---LJ-L-7J-JJFF.L-77LF-|J-FLJ|FF.||FJ-|JJ||LFJ.-7L7.FJ7
|
||||
|-|||JF-7-7||LJ7J-|7|..F7LFJ7.F7F|.F7.---7||J.|L.F-77L|-|7F7FLJ.L7FLL-JFF7J|-F7L||7LJJ||||||LJ|F7FLFJJJ||7J|.LFFJLL7JFL-7J7L-F||.JF|FJ-|7L|-
|
||||
|.LFJ-|JLF7-7-||L|||J.FFJ7.|F-7J|7.LL-7|FJF-7F||FF7||7L-|-LJLJLF.F|-|JL--7F77F--||-.LFJ-LL7F-FF.FL--JJ.LJ7-F.F7F7L||.-.FJLF.-J|-FJJL7..J|FFJ
|
||||
F-|.F7|.FJ7FL-|-7F||L-J|F7F-L7J-7--F7FFLJLFFL7J|7|F-7F|.|LF7|.L|-LLJFJJ..L-JF7|FLJ.F||J||-J.F-JFL.-7|F-JFF7.--JJJFJ|||-|F|L-.FJLLJL7LFF-L|J7
|
||||
.FJF|JFFJLL77||L-7LJ77F-||L-|J.||J.L7-7-L--77F7L-J7JL--7L-F-|7-F7LF-L7LFF-J.||7FL|7.F--J7F|.F777-LL7LL.|LF7-LFJLF7|L7|.LJ777F|-7|-FJ-.L7-7||
|
||||
F-J-L--|.LFJ-F|-J-----|.LLLJL7-JJ.F-L-7-F---JLJLLLL.7LL|LFJ|L--LL---L7-FJ.L|--L-JLL7L7.LLLJ-FJL|J-LLJL.|.JJLLLJ.LLF.L77LL|-J-|-7JJ..L-7JJ.-J
|
||||
@@ -0,0 +1,5 @@
|
||||
..F7.
|
||||
.FJ|.
|
||||
SJ.L7
|
||||
|F--J
|
||||
LJ...
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
import numpy as np
|
||||
import math
|
||||
|
||||
|
||||
# | is a vertical pipe connecting north and south.
|
||||
# - is a horizontal pipe connecting east and west.
|
||||
# L is a 90-degree bend connecting north and east.
|
||||
# J is a 90-degree bend connecting north and west.
|
||||
# 7 is a 90-degree bend connecting south and west.
|
||||
# F is a 90-degree bend connecting south and east.
|
||||
def main():
|
||||
with open("10-input.txt", "r") as file:
|
||||
arr = []
|
||||
for line in file.readlines():
|
||||
char_array = []
|
||||
for char in line.strip():
|
||||
char_array.append(char)
|
||||
arr.append(char_array)
|
||||
matrix = np.array(arr)
|
||||
print(matrix.shape)
|
||||
indices = np.nonzero(matrix == "S")
|
||||
row_indices, col_indices = indices
|
||||
starting_pos = (row_indices[0], col_indices[0])
|
||||
current_position: tuple = starting_pos
|
||||
last_position: tuple = starting_pos
|
||||
steps = 0
|
||||
visited = []
|
||||
while True:
|
||||
visited.append(current_position)
|
||||
current = matrix[current_position]
|
||||
next_position = find_next(current, current_position, last_position)
|
||||
print(f"steps: {steps}: current {current} next {next_position}")
|
||||
last_position = current_position
|
||||
current_position = next_position
|
||||
steps += 1
|
||||
|
||||
if next_position == starting_pos:
|
||||
break
|
||||
half = steps / 2
|
||||
print(math.ceil(half))
|
||||
rows, cols = zip(*visited)
|
||||
new_matrix = matrix[rows, cols]
|
||||
print(new_matrix.shape)
|
||||
|
||||
|
||||
def find_next(pipe: str, position: tuple, last_position: tuple):
|
||||
row_index, col_index = position
|
||||
last_row_index, last_col_index = last_position
|
||||
# print(pipe)
|
||||
match pipe:
|
||||
case "|":
|
||||
if last_row_index > row_index:
|
||||
return (row_index - 1, col_index)
|
||||
return (row_index + 1, col_index)
|
||||
case "-":
|
||||
if last_col_index > col_index:
|
||||
return (row_index, col_index - 1)
|
||||
return (row_index, col_index + 1)
|
||||
case "L":
|
||||
if last_col_index > col_index:
|
||||
return (row_index - 1, col_index)
|
||||
return (row_index, col_index + 1)
|
||||
case "J":
|
||||
if last_col_index < col_index:
|
||||
return (row_index - 1, col_index)
|
||||
return (row_index, col_index - 1)
|
||||
case "7":
|
||||
if last_col_index < col_index:
|
||||
return (row_index + 1, col_index)
|
||||
return (row_index, col_index - 1)
|
||||
case "F":
|
||||
if last_row_index > row_index:
|
||||
return (row_index, col_index + 1)
|
||||
return (row_index + 1, col_index)
|
||||
case "S":
|
||||
return (row_index + 1, col_index)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,140 @@
|
||||
.....................................................................................#......#...............................................
|
||||
..#.....#.................................................................#........................#........................................
|
||||
...............................#...............................................................................#.....#......................
|
||||
.................................................#.............#...............................#...................................#........
|
||||
..............#......#.................#...............#............#.............#..........................................#..............
|
||||
.........................................................................................#.................#...............................#
|
||||
.#..........................................................................................................................................
|
||||
..........................#......#............................................#......#.................................#....................
|
||||
.................................................................................................#..........................................
|
||||
.........................................#..........#..........#............................................................#...............
|
||||
......#.....#......#..........................#........................#....................................................................
|
||||
....................................#.........................................................................#..........................#..
|
||||
..................................................................................#.........................................................
|
||||
...................................................................................................................#........................
|
||||
.................................................................#........................................#.................................
|
||||
.............................#..............................#..........................#.......#............................................
|
||||
..........................................#.....#.............................#.............................................................
|
||||
#..................#..................................................................................................................#.....
|
||||
....................................#...................#..........................#...........................#..............#.............
|
||||
........#................#...................#.............................................................................................#
|
||||
...............................#....................#...........................................#...........................................
|
||||
.......................................#..............................................#.....................................................
|
||||
........................................................................#........#...........................#..............................
|
||||
..................................#........#...................#........................................#.........#.................#.......
|
||||
#................#........................................................................................................#.................
|
||||
.........#.......................................#...............................................#.............................#........#...
|
||||
...............................................................................................................#............................
|
||||
.........................................................................................#..................................................
|
||||
...........................................................#..................................#..........#...........................#......
|
||||
......#.........................#..........................................................................................#................
|
||||
....................#.....................#.......#...............................#.................................#.......................
|
||||
..........................#..............................................#..................................................................
|
||||
..........#..........................#.......................#...................................#..............#..............#...........#
|
||||
......................................................#.....................................................................................
|
||||
............................................................................................................................................
|
||||
#...............................................#................#............................#.............................................
|
||||
..................#......................#............................#................................#................................#...
|
||||
............................................................................................................................................
|
||||
....................................................#....................................#.............................#....................
|
||||
..............#...................#................................#..........#..............................#.............................#
|
||||
............................#...............................................................................................#...............
|
||||
....#.................#.....................................#..........#............................................................#.......
|
||||
......................................................#.....................................................................................
|
||||
...........#..............................#.................................................#..........#.................#..................
|
||||
.................................#..............#................#..........#.......#.......................................................
|
||||
...................................................................................................................#..............#.........
|
||||
#...........................................................................................................#...............................
|
||||
........#.......#............................................................................................................#..............
|
||||
............................#.....................#..........#......................................#.....................................#.
|
||||
.....................................#.................................................#........................#...........................
|
||||
.........................................................................................................................#...........#......
|
||||
.......................#.............................#........................#.............................................................
|
||||
..............#...............................#.................#..................#........#...............................................
|
||||
...#......................................................................#.................................#..............................#
|
||||
...................#..................#.............................................................................#........#..............
|
||||
............................................................................................................................................
|
||||
.........................#.........................#........................................................................................
|
||||
......#......#.............................................#.............................#............#.....................................
|
||||
.................................#......................................#...................................................................
|
||||
.........................................#........................#..............................#.................#..............#.........
|
||||
............................................................................................................................................
|
||||
......................................................#.................................................#..............#..................#.
|
||||
......................#......#...............#...................................#............................#.............................
|
||||
....#...........#.................#............................................................#...............................#............
|
||||
..........................................................................#..........................#......................................
|
||||
..........................................#................................................#...............................#............#...
|
||||
................................................................................................................#...........................
|
||||
..........#....................................#...................................................................................#........
|
||||
................................#....................#..............................................................#.......................
|
||||
......#.......................................................#...............................#.............................................
|
||||
#.......................#.....................................................................................................#.............
|
||||
.................#...................#...........................................#..........................#...............................
|
||||
.....................................................................#....................#.................................................
|
||||
..............................#.................#.......#.........................................#.........................................
|
||||
..#........................................................................#....................................#.........#.................
|
||||
...........#............................#..........................................#.............................................#..........
|
||||
......#.............................................................................................................#.....................#.
|
||||
........................................................................................................#...................................
|
||||
..............#...................#.........#...............................................................................................
|
||||
........................................................#.............#..........#.....#..........#............................#............
|
||||
.........#......................................................#...........................#...............................................
|
||||
.........................................#...................................#.................................#............................
|
||||
............................................................................................................................................
|
||||
................#...................................................................#.................#..................#..................
|
||||
.................................#..........................#.............#....................#................................#..........#
|
||||
...#........................#.........................................................................................................#.....
|
||||
.................................................#......................................#.....................#......#......................
|
||||
...........................................#.........................#........#.............................................................
|
||||
........#......#...................................................................................................................#.....#..
|
||||
.#..................#..................................#.........#..........................................................................
|
||||
..................................#.....#.................................#.................................................................
|
||||
...................................................#.................................#......................................................
|
||||
............................................................#...............................................................................
|
||||
.............................................#......................#..........#............#.........................#......#..............
|
||||
................................#...................................................................#.......................................
|
||||
.....................................................#..................#......................................#............................
|
||||
...#......................#.....................................................................................................#...........
|
||||
...........#...........................................................................#..............................................#.....
|
||||
................#..................................................#..............................................#.........................
|
||||
.......................#......................................................................#.............................................
|
||||
................................#........#.........#.....................#.....#......................#.....................................
|
||||
.#..........................................................................................................................................
|
||||
........................................................#................................#...................#..................#...........
|
||||
.....................................#........#.................................................#.......................................#...
|
||||
.........#...........#......................................................................................................................
|
||||
....................................................#.............................................................#.................#.......
|
||||
.............#............#........................................#.............#.....................#...................#...............#
|
||||
..................#....................#.................................#.............#....................................................
|
||||
................................................#...........................................................................................
|
||||
.......................#...............................................................................................#....................
|
||||
....#..........................................................#.....#..............#...........................................#...........
|
||||
...............................................................................................#..................#.......................#.
|
||||
.........#...................#............................................#.................................................................
|
||||
.............................................................................................................#..............#......#........
|
||||
...........................................................................................#................................................
|
||||
.#...........................................................#..............................................................................
|
||||
..............#..............................#........................................#.............#.......................................
|
||||
....................................#..............#..............#.........#.............................#.............#.............#.....
|
||||
....................#............................................................................................#..........................
|
||||
.........................................................................................#..................................................
|
||||
...........#............................#................#....................................................................#.............
|
||||
.....#......................................................................................................#...............................
|
||||
..................................#................................................#........#.............................................#.
|
||||
.#................#......#...........................................................................#......................................
|
||||
..............................................#.......................#................#............................................#.......
|
||||
.........#............................#........................#..........................................#.....#......#....................
|
||||
..............................................................................................#.............................................
|
||||
........................................................................................................................................#...
|
||||
..........................#........................#...............#................................#............................#..........
|
||||
..#........................................#............#............................................................#......................
|
||||
...............................#.....#........................................#.......#......................................#..............
|
||||
.......................................................................................................#....................................
|
||||
.....................................................#..............................................................................#.......
|
||||
........#......................................#...........................#.............................................#.................#
|
||||
...................#.....#......................................#.............................#.............................................
|
||||
............#.........................#......................................................................#.......#.................#....
|
||||
..............................#...................................................#.........................................................
|
||||
............................................#.........................................................#.....................................
|
||||
.......#..........................#................#.....#.............#....................................................................
|
||||
..................#.........................................................#.............#.......................................#.........
|
||||
@@ -0,0 +1,10 @@
|
||||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
||||
@@ -0,0 +1,10 @@
|
||||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
import numpy as np
|
||||
|
||||
def main():
|
||||
with open("11-input.txt", "r") as file:
|
||||
arr = []
|
||||
for line in file.readlines():
|
||||
char_array = []
|
||||
for char in line.strip():
|
||||
char_array.append(char)
|
||||
arr.append(char_array)
|
||||
matrix = np.array(arr)
|
||||
dot_columns = np.all(matrix == ".", axis=0)
|
||||
dot_rows = np.all(matrix == ".", axis=1)
|
||||
coordinates = np.array(np.nonzero(matrix == '#'))
|
||||
distance = []
|
||||
for i in range(0, coordinates.shape[1]):
|
||||
row = coordinates[0, i]
|
||||
col = coordinates[1, i]
|
||||
for ii in range(i + 1, coordinates.shape[1]):
|
||||
next_row = coordinates[0, ii]
|
||||
next_col = coordinates[1, ii]
|
||||
empty_rows_passed = get_rows_passed(dot_rows[min(row, next_row):max(row,next_row)])
|
||||
empty_cols_passed = get_cols_passed(dot_columns[min(col, next_col):max(next_col, col)])
|
||||
d = (abs(next_row - row) + (abs(next_col - col))) + (empty_cols_passed * 999_999) + (empty_rows_passed * 999_999)
|
||||
item = i, ii, d
|
||||
if distance.count(item) == 0:
|
||||
distance.append(item)
|
||||
print(distance)
|
||||
print(len(distance))
|
||||
s = 0
|
||||
for d in distance:
|
||||
s += d[2]
|
||||
|
||||
print(s)
|
||||
|
||||
def get_rows_passed(rows: []):
|
||||
passed = 0
|
||||
for r in rows:
|
||||
if r:
|
||||
passed += 1
|
||||
return passed
|
||||
|
||||
def get_cols_passed(rows: []):
|
||||
passed = 0
|
||||
for r in rows:
|
||||
if r:
|
||||
passed += 1
|
||||
return passed
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
+1000
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
???.### 1,1,3
|
||||
.??..??...?##. 1,1,3
|
||||
?#?#?#?#?#?#?#? 1,3,1,6
|
||||
????.#...#... 4,1,1
|
||||
????.######..#####. 1,6,5
|
||||
?###???????? 3,2,1
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
import numpy as np
|
||||
import itertools
|
||||
from itertools import groupby
|
||||
import timeit
|
||||
|
||||
filename = "12-input.txt"
|
||||
|
||||
def main():
|
||||
with open(filename, "r") as file:
|
||||
combinations = []
|
||||
for line in file:
|
||||
combinations.append(get_combinations(line))
|
||||
|
||||
print(sum(combinations))
|
||||
|
||||
def get_combinations(line: str):
|
||||
start_time = timeit.default_timer()
|
||||
#print(f"Finding combinations for {line}")
|
||||
split = line.split(" ")
|
||||
springs = np.array(list(split[0]))
|
||||
|
||||
config = np.array(split[1].strip().split(",")).astype(int)
|
||||
question_marks_indices = np.nonzero(springs == '?')[0]
|
||||
|
||||
all_combinations = []
|
||||
combinations = itertools.product(['#', '.'], repeat=len(question_marks_indices))
|
||||
for combination in combinations:
|
||||
test_array = springs.copy()
|
||||
for i, index in enumerate(question_marks_indices):
|
||||
test_array[index] = combination[i]
|
||||
if validate_combination(test_array, config):
|
||||
all_combinations.append(test_array)
|
||||
|
||||
end_time = timeit.default_timer()
|
||||
|
||||
execution_time = end_time - start_time
|
||||
print(f"combinations for {line} done in {execution_time} seconds. {len(all_combinations)} combinations found.")
|
||||
return len(all_combinations)
|
||||
|
||||
def validate_combination(springs: [], config: []):
|
||||
hash_indices = np.nonzero(springs == '#')[0]
|
||||
if len(hash_indices) != config.sum():
|
||||
return False
|
||||
groups = [list(group) for key, group in groupby(springs) if key == '#']
|
||||
for i, group in enumerate(groups):
|
||||
if len(group) != config[i]:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
+1377
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,32 @@
|
||||
#.##..##.
|
||||
..#.##.#.
|
||||
##......#
|
||||
##......#
|
||||
..#.##.#.
|
||||
..##..##.
|
||||
#.#.##.#.
|
||||
|
||||
#...##..#
|
||||
#....#..#
|
||||
..##..###
|
||||
#####.##.
|
||||
#####.##.
|
||||
..##..###
|
||||
#....#..#
|
||||
|
||||
.#.##.#.#
|
||||
.##..##..
|
||||
.#.##.#..
|
||||
#......##
|
||||
#......##
|
||||
.#.##.#..
|
||||
.##..##.#
|
||||
|
||||
#..#....#
|
||||
###..##..
|
||||
.##.#####
|
||||
.##.#####
|
||||
###..##..
|
||||
#..#....#
|
||||
#..##...#
|
||||
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
import numpy as np
|
||||
|
||||
|
||||
filename = "13-input.txt"
|
||||
|
||||
def main():
|
||||
with open(filename, "r") as file:
|
||||
arr = []
|
||||
nr_reflections = 0
|
||||
pattern = 0
|
||||
for i, line in enumerate(file):
|
||||
if line == "\n":
|
||||
if arr:
|
||||
pattern += 1
|
||||
print(f"Pattern {pattern}")
|
||||
matrix = np.array(arr)
|
||||
r = get_reflections(matrix)
|
||||
print(f"Found {r} reflections")
|
||||
if r <= 0:
|
||||
print("Rotating 90 degrees")
|
||||
r = get_reflections(np.rot90(matrix)) * 100
|
||||
print(f"Found {r} reflections")
|
||||
nr_reflections += r
|
||||
arr = []
|
||||
continue
|
||||
char_array = []
|
||||
for char in line.strip():
|
||||
char_array.append(char)
|
||||
arr.append(char_array)
|
||||
|
||||
print(nr_reflections)
|
||||
|
||||
def get_reflections(matrix: []):
|
||||
f = {}
|
||||
for i in range(0, matrix.shape[0] - 1):
|
||||
for ii in range(i, matrix.shape[1] + 1, 2):
|
||||
part_matrix = matrix[:, i:ii]
|
||||
first, second = fold_matrix(part_matrix)
|
||||
if first.size > 0 and second.size > 0 and np.all(first == second):
|
||||
#if np.all(np.any(part_matrix == '#', axis=1)):
|
||||
print(f"Found reflection at {i}, {ii}")
|
||||
f[part_matrix.size] = ((ii - i) // 2) + i
|
||||
|
||||
if not f:
|
||||
return 0
|
||||
# Sort the dictionary in descending order of keys
|
||||
sorted_f = dict(sorted(f.items(), key=lambda item: item[0], reverse=True))
|
||||
# Return the value of the first item in the sorted dictionary
|
||||
return sorted_f.popitem()[1]
|
||||
|
||||
def fold_matrix(matrix: []):
|
||||
if matrix.shape[1] % 2 != 0:
|
||||
return np.empty(0), np.empty(0)
|
||||
half = matrix.shape[1] // 2
|
||||
first_half = matrix[:, :half]
|
||||
second_half = np.flip(matrix[:, half:], axis=1)
|
||||
# if len(matrix) % 2 != 0:
|
||||
# second_half = np.vstack([second_half, np.zeros_like(first_half[0])])
|
||||
return first_half, second_half
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,100 @@
|
||||
#....O#O.......O.......#O.......#...#O#.O...O...O..O#..#.O......OOO.OOO...#O.O.........OO.#..O....O.
|
||||
##.#O..........OO.#.#..#...O..O.O##....O.....#....O.#....O....O.#..OOO..#..O.OO..##.#O#OO..##OO..#..
|
||||
#.O.#O.O.O.......#.....##.##......#.###..###........OO...#..OO.....O....O......OOO.OOO.......OO.O#.O
|
||||
O#.....#......#..##O#O.#..#O#.O.O.#...O....O.#......#....#.....O.#........O....O...O..O#...O...#O...
|
||||
O#..#.OO.O#..#O##.#.#..O...OO..#..O#...#.....O.#.OO#...O.OO.O.O.....#...#.O..##...O.#.O.....O.##..O#
|
||||
..OOO...#O#...O...OO.#...#OO.....#O..#.#.#OO...O.O#.......#..O..O..##..O#.O.....#O..OO#......O.O.O.O
|
||||
..O.......O.....##OO#OO.#..#...O.O...O...O...#OOOO.O.O..#..O....O....OO#O.O.OOOO...#OO#.OO.O.#...#.#
|
||||
#..O.......O.O...O.....#.O...O.#.....##.#...#.#.O...O...#.O.....O....#........#.O.#.#O#......O#..O.O
|
||||
..#.#OO..#..OO.#..O.O.OO....OOOO...OO#..O..O...OO.O..O.O...#..#.....#.......O...O.......##O#....#.O#
|
||||
.O.O#..O..O.#OO..O...#.O..O##O..##OO.OO.O.OO.O#...O...O........#.O..#......O#O#.O........OO..O......
|
||||
.O#...........O..#...O.O......#O..###O....#O...OO...........#OO....O..OO..O..O.#O..O......#.O.O..#..
|
||||
O..O#....OO....#.##.O#....OO.......O.......O....##.O.O....O#...#.O.O###...#....#..#...#...#OO....O##
|
||||
###.O..#O..#O.#.#......##...OO...#.....OO.#O#..#...#..##O..#...O#....#O#...O..O...O...O..O.O..O..#.O
|
||||
OOO.#.#..O..O#.O....#...O.OO###.#........OO.#.O#.#.....O..O..O#...O.O.O#.#O......O.#OOO#.#O.#O.O..OO
|
||||
...##O#..O.#O......OO.#..OO....OOOO#...O...O.#....#..O...........OOO#.O.OO..O..O...O.#..O..OO##.O#..
|
||||
.#.....#..#.....#..#OOO.O#O..O#O#..O.....OO..O##.O.OOO...#O....#O...O#...#O..O#O##....#.....O.O..O.#
|
||||
OO............O....O##..OO.#..O.O.....#O...#.##O.#.O.OO#....#...O..O.#.##...........##....O.OO..O...
|
||||
.##O#OO......O#...OO#...##O.O.......O....OOO..O..#.#...OOO.#..#.#..O..O#..O.....#.#.OO...O.....O##.O
|
||||
O..#OOO#.O...O.......O#....O.O...O......O.......OO....##......OO#.....##...O#.............O#.....O#.
|
||||
..O..##OO..O...#..OO..#...#.O.O..#..O...O.###..O.......#.O....O.##....OO.#..O.......#.O.O...O.O.####
|
||||
.....O..OOO##..#.........O......O..O.#O##O#..O#O......##..O.O..#.......#.O##.#..#.#....O.OO.O.#O....
|
||||
##....O..#.....#O.O...O#O#O.#.....O#.O.#..#O..O...O.#.#.....O.......#O...............#O......OO#..#.
|
||||
..#O....#.......O..#O..#.OO..O...##.O.....O.#....#O..O.#O.O#O...O...O........#..OOO#..#....OO.##..O.
|
||||
.#O#OO....OO.O...O..#..#O.O..#...#..#O.O....O#..OO.....O.#....#O..#....O.....#O.#......OO#O.........
|
||||
.O..#.O#..O#.O..#.#.......#O......O.....O.#O...#O.#.#..OO.O..#..O............#OO#..#..O..#O..O.O.#..
|
||||
..#..O.......#O##O.......O.O#O....OOO..OOO..O.#..OO..#O..O#......#.###O.O.#O.#.....#..O.##.OO.#.....
|
||||
.O.#...O...O...O#..O.##O...#.OO......OOO.OO..#...#...OO#..O.#...OO#....###..O.#..#.....#....O.O.....
|
||||
....O.OO..O#........#.#.#O..#.O....O...###.....O.O.#O#....O...O...##.#O#..O.#......OO.#####..#...#O.
|
||||
O...#OO..##O##.......O#.O#...OOO.....O.O..#..OO......O#.##....#......O##......#OO#.#.........OOOO..#
|
||||
O.O..##..O..#.#O.....#.OO.O...OO..#...O...###.....O..#....#.....#..O.O..#O.O#OO....#..OO.OO#....OO..
|
||||
.OOO#..#.O.........O..O...O........OO#....#..#..##....O.....#......O....O#.O.O.OO..##...O.#....#....
|
||||
....O...##O...#...OO.#O....O..O.O.O....#...O#O#..##.O.......O#.#..OO.#...#....O.....O..O#O#..#.O....
|
||||
..#....O.O....#..O.OO.......O#..OO......O.O...OO.......O..#..O....OO#..O.O......#.......#...#....#.O
|
||||
.....O#.........#...O.O..O.O#..O....OO..O.....O....O..#O..O.O....#...#.OO..O.#.#..O.#O...#..O..#....
|
||||
#....#..##...O#OO....#..#.#O...............#.O........O..#.##............#.O#...#..##...O.....#..#.O
|
||||
#.OO...O...O##...#O#..O....O.O..OO..O.OO.#OO.O..O...O#........#O.O....#.#.OO.....O....#..#O..O.#.###
|
||||
......O....#...........#...#.........O.O....#..#...#..#.O#....#.O.#.O..#...O..#.......O.#..O#...#...
|
||||
.#O.OO#.#...#.O.#..OO....O.......O#OO.O...........#.OO..#...##.O.#....O....##O....#..#...O#..O.O..O.
|
||||
.#..##...#.O#O.O..O.......O..#...OO#......##.#O.#.O#O...##..#.O...#O.....O....O.....#......O..#.....
|
||||
#O.O.O.OO.....O#..#....O.O#.O.OO.O#..O.#O.....O#.O#.O.O.........O...#...O.O..#O.#.#O#......#OO...##.
|
||||
....#O....#.#.#O.O.OO.O.#..O.O...#...#...O....O........O#O.......#OO.#.........#....OO...O..O.......
|
||||
.#.O#O..#.O.#...O#O.#......#.....O.O.O.#OOOO..##OOO.O.O....O..O#OO......OOO..O.##...O.O.#.....O.O#O.
|
||||
##..........O...O.#...#O............#O.O......O..O#.....O......O..##.O.#O#.#......#..#....O...#..O..
|
||||
..#..#..O#..#..O#O.........O##......##O.O....##.OOO#..#........O#OO..#.#.O.OO.#.OO#O.#.O..#.......##
|
||||
.OO....O..OO...O.#..O....#O......##O.OOO..#.#O...#......O..#.#.....O#...OO.#...#O###...O...#........
|
||||
O...O..OO..#.....OOO.#..O.##....#.O..O.OOO..#...O.#O..........#...O##....O.O..O...O...O.O.#O..O#.O#.
|
||||
OO.O#O.##O.#.#..O.O.#.#..#...O..O..#...OO.OOO..O.O...OOO.#..O..O..OO.O##O#.#O...O...#...O.#O.#......
|
||||
..OO.#.##.............#..#O.......O.O.#O..O.OOOO....OO..O..........#O.#..O.##.........#.....O.......
|
||||
.O..O.##O#...O.#.O.#.......##.#...#....O#..O..OO............###.....#.O.O......##.#..O...........O.#
|
||||
.##...#OO.O.O#.....O..O.OO##O.#..O..O...OO..#..O.O..O.O.O....O..............O#.###OO.#.#.#O#....#...
|
||||
..O#...#.....O.OOO.....#O..O.#.#.....##....##O#..............O...O..#O##.#..O.....O..#...O.#O...O..O
|
||||
O..OO.O....##O##O#......O..#O.O........O##O...#...O..O.....O.##..#....OO#O..O..#.....##..OO....O..O.
|
||||
OO#.#OO.....O###....#O..O...#...#O..#O.#.O#.O.....O#O.O..O....O....##.....#....O.....#O...##....O.#.
|
||||
#.#..#O#..O.#.#OO..##...#...#..OO.#..O....O..#...OO....OO..#..#....#....#O#.O...OO...#O..........O..
|
||||
O..O.O.....O.....#.........O....O#......OO#..O..#.#.O##..#O.#..#...#..O.O......#.O..O..#.O......OO..
|
||||
.#.......#..#.O.....O.#O#.#.#.....#O####.......O.#O........###..##...##..O..##...O.OO..#..O.O......#
|
||||
.#.O.#.........#O.O.O...O..OO...O..O.O..O....O#..........O...O.O#.OO#..OOO.O..#O.O.O#O..O#.#..#OO..O
|
||||
#.#.#...#.#.....#..#........O..#..#..###..O..O...O.O#..##.OOO.O...O.#O...O.......OOO#....#.#...O.#..
|
||||
...#.O...O#O..O...#..O..O..O#.#...#..#....O.O..O...OO.#..O.OO.##O..OOOOO..#......#..OO##...OOO..O..O
|
||||
.O...O..O.#O.....OO...#OO#..O#.....O..#.O.#.O#.O.##.O.OOO#OO..#..OO#OOO.O....O.....O#O.O..O..O##.O##
|
||||
O.O.............O.......OOO#.....#.......#....#.O..##.#...#...OO......#..#..O.O...O.#.O.O..##O#..#..
|
||||
O...#...##.O.#.##.O#.#..............O.O.#......###...OO......O.#..#.#O.......O#.#.O..O.OO#..O.....O.
|
||||
OO#.....#.....#.#.#O.O#..#.#...........#...##.....#....O#...#....O#..#O.#O......O#.#.#.O..#.O##...#.
|
||||
..#....O..##..#.###.OO.#......O..................##O#O....#OO#......O..O...##.##O....OO..#..#OO##.##
|
||||
...#........O.#...O.##.#..#O..O......#....O##.#..OO..O#..#O......O.....#..O..#.OO.O.#..OO....O..#.#O
|
||||
.O#..O......O.#OOO.....#.O...OO#.#.........#...O...O.#...##O.........#O#.O.#.#O.#..#.##.....O...OO..
|
||||
.....OOOO..O.O####..#.O....#..OO......O.O.......OO#OO#O.OO..O##....#.........OO...#....O.O..O..#....
|
||||
#O...#..#...O.OO#..##O...O.#......O..O##.#...#....OO..#...#..O....#.O...O##.#O#....#...#...O.O...#.O
|
||||
..#.OOO.....O#......##.....#..O#O...#..#...........O#O.OO...#....#.........O....#..O.#...#..#..#.#O.
|
||||
...OO.#..O...O..#.#O.##O.#..O.O.#O....O.....#..#O#.O....O.OO#.O..#..#...#...O...##.#.....O......O#O.
|
||||
.###O....#......O.O..O...#...O..#......O.........O..O...##....#.#...#..........O##O...#..O..O.OO##..
|
||||
..O.#O.O#...#..O#...O..#O..#.OO.....#.O.....##.O##.##...O..#...#O.O...#......#O...O...OO.#....O#..O.
|
||||
...O.O...O.O.O.O#O.###..#.##O......O.O.O#..O...#.#O.O...##..##O.OOOO...#...O....O.##O#O.....#O#..O#O
|
||||
....OOO#.....O..O.......#O#...........#.....#.#.#.....O..OO#.....O.OO..#...####.O.#O#.....#..#....OO
|
||||
O##..OO..O#.#..O...#.....OOO......O.....O.....O#OO....O...O....O.#...#...OO...#..#....#.......O#.O.#
|
||||
..#OOOOO.O#..#....##O.O#.....O.O.......O#......O#..#......#.O##.#...#O...O........O......O.O..O.....
|
||||
..OO........O..O#..O.O.#..O.O#.O#...O.......##..O#......#O.O.#.#......O..#..#O.O.#.#.O#......##O.O..
|
||||
.#......#..#...O..OOOO#.O#..........O.....#...OOO...O...O.#O..O..O...O..O...#.O....#O#......OO..OO..
|
||||
...OO....O#O#OO...O.OOO.#...O.....#.O..O.O....#.O.#.O.#.#O.....O..#.##...OO#..#.O....#O.#.O.#O.O.#..
|
||||
..#..#..O......#.#O.O...#.OO.....OOO...###.....O...O#..##.O...##O#..#.O.#.....O..#..O.O.OOOO..O...##
|
||||
.#....O.O.O..O.O........O.#O..#OO#.##..O#..#.....OO#..O.#O..O..#.......O..#.....##....O..O.O#.......
|
||||
....O...#OOO..##O...#OO...O...O......##......O....O..O..O....OO..#O..#....#..OO##.O.#.#.#...#.OO#...
|
||||
.OO#..#...O.......O..#....OO..O#.....OO.##...##...#O......O.....#........#.##.O.....O..O..O..O.....O
|
||||
.O..O#...#..O.OO...O....##.O..##...O..##O.#....O#.O....O...O.#O....#O......OO#..........O....##OO.#.
|
||||
..OO..##.#.O.O....O....#O...O#......##......O.O.O#......O.#O......##.O.......O....OO#O.O..##O.O...O.
|
||||
#.O....#..##........O#O.OO.#.#..OOO.#.O...#.##...#.O#....#.......#..O#O....O.O...O..O....OO.O#....O.
|
||||
..#....OO..........O##.##..O..#..O.......#.........##OO....#.O...O.O##.......OO...#O#....O..##..OO..
|
||||
#O.##O#....#.OOO.......O..#.O.O..O.#.OOOO#.#.#...##.O.OO......O..OO#.#...#.O##O.O........O.#...O.#..
|
||||
#....O.OO#.#....O.#...O....#..O...#..O.OO..O..#..#..O#.#..OOO.O.O..#.O.#.#.......#.O#..O.##....OO...
|
||||
..#.....#.O...O.O...O...O.#.#.O...OO#.#.#.....O#O.OOO.O.#......O.O.....O.#..O....O.O.OOOO#...O#.##.#
|
||||
..O.O#O..OO......O......OO.#.#.....OO#...O..O......OOO..#..O...O#.##..O...#.......#.#.O....#..##.O.O
|
||||
...O..#O..O#O...#..#...##.#....O.#...#.OOO.#O.......O...O....#...O...##...O..O..#..#...O#O..#...#.O.
|
||||
..#..##.O#O...OO##..#..OO.#......O......O....#.#.O..O.......OO.#O.......#O...#.O.O.#....##O#O..OO...
|
||||
.OO...O..O...#.OOO..OO.O...#O.......#.#.....OO..O..#.OO###.O.#O........#O.O#.O...............O.....#
|
||||
....#O..#..#....O.##O.O#.O...#O..O#..#....O#.O...O....O......##...##O...#.#...#..#.O..O..#..#..O.O#O
|
||||
.....#..O#...O.#.#.#......#O.O..#.#....O....##.O##O..O.#O..O.O.....#O....#..#.#..O.#O#......OOO#...O
|
||||
.#..O...##.O.....##.#....#O.O.##..#.......O.....#.#..O##........#.O..........#.#O.#..#......#O#..#O.
|
||||
OO.#...O...O#.......OO.OOO#.O#....#.OO...O..OO....OO#O.O#....O..O....O..O.O..O....O........O.O.#....
|
||||
.O...#.......O..#OO.....#O.O...#O.#O..#.#.....#....O....#.....O..#O.#.O......O.O.OOOO.....O...#....#
|
||||
.#OO.....#.#O..O........O.#O..O..#......O.O....OO.#..OO#..O#.#O.#O.O...#......O#O....#.#O...#...#.OO
|
||||
@@ -0,0 +1,10 @@
|
||||
O....#....
|
||||
O.OO#....#
|
||||
.....##...
|
||||
OO.#O....O
|
||||
.O.....O#.
|
||||
O.#..O.#.#
|
||||
..O..#O..O
|
||||
.......O..
|
||||
#....###..
|
||||
#OO..#....
|
||||
@@ -0,0 +1,56 @@
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
import numpy as np
|
||||
|
||||
sys.path.insert(1, os.path.join(sys.path[0], ".."))
|
||||
file_path = '14-test-input.txt'
|
||||
with open(file_path, 'r') as file:
|
||||
lines = file.readlines()
|
||||
|
||||
map_ = {"#": -1, "O": 0, ".": 1}
|
||||
array = np.array([[map_[char] for char in line.strip() ]for line in lines])
|
||||
nrows, ncols = array.shape
|
||||
|
||||
def cycle(array):
|
||||
for i in range(4):
|
||||
array = roll(array)
|
||||
array = np.rot90(array, -1)
|
||||
return array
|
||||
|
||||
|
||||
def hash_(array):
|
||||
return tuple(array.ravel())
|
||||
|
||||
def score(array):
|
||||
rolls = np.where(array == 0)[0]
|
||||
return (nrows - rolls).sum()
|
||||
|
||||
|
||||
def roll(array):
|
||||
for i in range(ncols):
|
||||
rocks = [-1] + list(np.where(array[:, i] == -1)[0]) + [None]
|
||||
for j in range(len(rocks) - 1):
|
||||
left, right = rocks[j] + 1, rocks[j + 1]
|
||||
array[left:right, i] = np.sort(array[left:right, i])
|
||||
return array
|
||||
|
||||
|
||||
|
||||
seen = {}
|
||||
scores = {}
|
||||
maxval = 1_000_000_000
|
||||
reverse_map = {-1: "#", 0: "O", 1: "."}
|
||||
for i in range(maxval):
|
||||
h = hash_(array)
|
||||
if h in seen:
|
||||
print(array)
|
||||
print(f"Found cycle at {i+1}")
|
||||
break
|
||||
seen[h] = i
|
||||
scores[i] = score(array)
|
||||
array = cycle(array)
|
||||
cycle_length = i - seen[h]
|
||||
index = seen[h] + (maxval - seen[h]) % cycle_length
|
||||
print(scores[index])
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
import numpy as np
|
||||
|
||||
def hash_(array):
|
||||
return tuple(array.ravel())
|
||||
|
||||
def score(matrix):
|
||||
total_count = 0
|
||||
for i in range(matrix.shape[0]):
|
||||
row = matrix[i, :]
|
||||
count_O = np.count_nonzero(row == 'O') * (matrix.shape[0] - i)
|
||||
total_count += count_O
|
||||
#print(f"Row {i + 1} has {count_O} 'O's")
|
||||
print(f"Total count: {total_count}")
|
||||
return total_count
|
||||
|
||||
# Read the file
|
||||
file_path = '14-input.txt'
|
||||
with open(file_path, 'r') as file:
|
||||
lines = file.readlines()
|
||||
|
||||
# Split each line into individual characters
|
||||
lines = [list(line.strip()) for line in lines]
|
||||
|
||||
# Build a NumPy matrix of all the lines
|
||||
matrix = np.array(lines)
|
||||
seen_matrices = []
|
||||
seen = {}
|
||||
scores = {}
|
||||
maxval = 1_000_000_000
|
||||
# Loop through each column in the matrix
|
||||
for cycle in range(maxval):
|
||||
print(f"Cycle {cycle + 1}")
|
||||
h = hash_(matrix)
|
||||
if h in seen:
|
||||
print(matrix)
|
||||
scores[cycle] = score(matrix)
|
||||
print(f"Found cycle at {cycle + 1}")
|
||||
break
|
||||
seen[h] = cycle
|
||||
s = score(matrix)
|
||||
scores[cycle] = s
|
||||
for s in range(4):
|
||||
for i in range(matrix.shape[1]):
|
||||
column = matrix[:, i]
|
||||
c_length = column.shape[0]
|
||||
if np.any(column == 'O'):
|
||||
for c in range(c_length):
|
||||
if column[c] == '.':
|
||||
for r in range(c, c_length):
|
||||
if column[r] == '#':
|
||||
break
|
||||
if column[r] == 'O':
|
||||
column[c] = 'O'
|
||||
column[r] = '.'
|
||||
break
|
||||
|
||||
matrix = np.rot90(matrix, -1)
|
||||
|
||||
print(scores)
|
||||
cycle_length = cycle - seen[h]
|
||||
index = seen[h] + (maxval - seen[h]) % cycle_length
|
||||
|
||||
print(f"Total count: {scores[index]}")
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
class Box:
|
||||
def __init__(self):
|
||||
self.lenses = []
|
||||
|
||||
def add_lens(self, lens_to_add):
|
||||
for i, lens in enumerate(self.lenses):
|
||||
if lens[0] == lens_to_add[0]:
|
||||
self.lenses[i] = lens_to_add
|
||||
return
|
||||
self.lenses.append(lens_to_add)
|
||||
|
||||
def remove_lens(self, lens_to_remove):
|
||||
for i, lens in enumerate(self.lenses):
|
||||
if lens[0] == lens_to_remove[0]:
|
||||
self.lenses.pop(i)
|
||||
return
|
||||
|
||||
def power(self, idx: int):
|
||||
total = 0
|
||||
if len(self.lenses) == 0:
|
||||
return 0
|
||||
for i, lens in enumerate(self.lenses):
|
||||
if lens[1] is None:
|
||||
continue
|
||||
total += lens[1] * (i + 1) * (idx + 1)
|
||||
|
||||
return total
|
||||
def __str__(self):
|
||||
return str(self.lenses)
|
||||
|
||||
def get_hash(word: str):
|
||||
array_total = 0
|
||||
ascii_num = [ord(char) for char in word]
|
||||
for num in ascii_num:
|
||||
array_total += num
|
||||
array_total *= 17
|
||||
array_total = array_total % 256
|
||||
return array_total
|
||||
|
||||
|
||||
# Read the file
|
||||
file_path = '15-input.txt'
|
||||
with open(file_path, 'r') as file:
|
||||
line = file.readline()
|
||||
|
||||
# Split each line into individual characters
|
||||
words = line.split(',')
|
||||
|
||||
boxes = [Box() for _ in range(256)]
|
||||
|
||||
print(words)
|
||||
total = 0
|
||||
|
||||
for word in words:
|
||||
if word.count('-') == 1:
|
||||
start, end = word.split('-')
|
||||
box_idx = get_hash(start)
|
||||
boxes[box_idx].remove_lens((start, None))
|
||||
else:
|
||||
start, end = word.split('=')
|
||||
box_idx = get_hash(start)
|
||||
boxes[box_idx].add_lens((start, int(end)))
|
||||
|
||||
for i, box in enumerate(boxes):
|
||||
total += box.power(i)
|
||||
|
||||
print(total)
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
import numpy as np
|
||||
|
||||
|
||||
class Beam:
|
||||
def __init__(self, start_loc: tuple, current_loc: tuple):
|
||||
self.start_loc = start_loc
|
||||
self.current_loc = current_loc
|
||||
self.direction = None
|
||||
self.beam_length = 0
|
||||
self.energized = set()
|
||||
self.active = True
|
||||
|
||||
def move(self, matrix: np.ndarray):
|
||||
if self.direction is None:
|
||||
self.direction = matrix[self.current_loc]
|
||||
next_loc = get_next(self.current_loc, self.direction, matrix.shape)
|
||||
if not (0 <= next_loc[0] < matrix.shape[0] and 0 <= next_loc[1] < matrix.shape[1]):
|
||||
self.active = False
|
||||
return None
|
||||
self.current_loc = next_loc
|
||||
self.beam_length += 1
|
||||
return next_loc
|
||||
|
||||
def get_next(prev_loc: tuple, direction: str, shape: tuple):
|
||||
match direction:
|
||||
case '-':
|
||||
return (prev_loc[0], prev_loc[1] - 1)
|
||||
case '/':
|
||||
return (prev_loc[0], prev_loc[1] + 1)
|
||||
case '\\':
|
||||
return (prev_loc[0] - 1, prev_loc[1])
|
||||
case '|':
|
||||
return (prev_loc[0] + 1, prev_loc[1])
|
||||
case '.':
|
||||
return prev_loc
|
||||
|
||||
file_path = '16-input.txt'
|
||||
with open(file_path, 'r') as file:
|
||||
lines = file.readlines()
|
||||
# Split each line into individual characters
|
||||
lines = [list(line.strip()) for line in lines]
|
||||
|
||||
# Build a NumPy matrix of all the lines
|
||||
matrix = np.array(lines)
|
||||
shape = matrix.shape
|
||||
traverse = True
|
||||
current_loc = (0, 0)
|
||||
beams = []
|
||||
beams.append(Beam(current_loc, current_loc))
|
||||
while(traverse):
|
||||
for beam in beams:
|
||||
if beam.active:
|
||||
next = beam.move(matrix)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
Game 1: 2 blue, 3 red; 3 green, 3 blue, 6 red; 4 blue, 6 red; 2 green, 2 blue, 9 red; 2 red, 4 blue
|
||||
Game 2: 4 red, 1 green; 3 red; 13 green, 5 red, 3 blue; 3 green, 2 red; 3 blue, 5 red, 3 green; 2 red, 3 blue, 12 green
|
||||
Game 3: 4 red, 1 green, 1 blue; 1 red, 1 blue; 6 red, 1 green; 6 red, 3 blue, 1 green; 4 red
|
||||
Game 4: 4 blue, 12 red, 4 green; 6 green, 3 blue, 19 red; 3 blue, 2 red, 2 green
|
||||
Game 5: 1 red, 5 blue, 16 green; 1 red, 6 green, 3 blue; 2 red, 12 blue; 17 blue, 3 green; 7 green, 2 red, 6 blue
|
||||
Game 6: 3 green, 1 blue, 5 red; 5 green, 5 red; 2 green, 2 blue, 3 red; 5 green, 2 red; 3 green, 6 red, 3 blue; 5 green, 4 red
|
||||
Game 7: 15 blue, 1 red, 6 green; 4 blue, 7 green, 2 red; 14 blue, 5 green, 2 red
|
||||
Game 8: 6 blue, 3 green, 10 red; 2 blue, 1 green, 5 red; 6 blue, 3 green, 12 red; 11 red, 1 green, 1 blue; 5 blue, 14 red, 3 green; 3 red
|
||||
Game 9: 15 red, 3 blue; 1 blue, 16 red; 1 red, 3 blue; 1 blue, 1 green, 9 red
|
||||
Game 10: 1 red; 1 blue, 7 green; 1 green, 5 blue; 3 blue, 3 green; 1 green
|
||||
Game 11: 19 blue, 13 green; 19 blue, 2 green; 10 blue, 3 red, 12 green; 11 blue, 1 red, 6 green
|
||||
Game 12: 7 green, 5 blue; 6 green, 3 red, 6 blue; 2 red, 5 blue, 15 green; 2 red, 1 blue, 1 green; 4 red, 4 green, 2 blue; 3 blue, 6 green
|
||||
Game 13: 9 red, 2 blue, 2 green; 1 blue, 2 red, 15 green; 9 green, 2 blue, 9 red; 5 blue, 8 green, 5 red; 2 blue, 11 green, 5 red
|
||||
Game 14: 9 blue, 1 red; 10 blue, 4 green, 3 red; 2 red, 6 blue; 4 green, 2 blue, 1 red; 5 green, 2 red, 11 blue; 12 blue, 2 red, 1 green
|
||||
Game 15: 9 blue, 7 green, 12 red; 9 red, 17 green, 8 blue; 6 red, 4 blue, 4 green; 5 red, 17 green
|
||||
Game 16: 5 green, 4 red; 3 blue, 3 red, 14 green; 6 red, 5 blue, 12 green
|
||||
Game 17: 8 blue, 5 green, 2 red; 6 red, 6 blue; 9 red; 5 blue, 2 green, 8 red; 13 red, 4 blue, 4 green; 9 blue, 3 green, 5 red
|
||||
Game 18: 8 green, 1 red, 2 blue; 4 green, 4 red, 1 blue; 6 blue, 2 red
|
||||
Game 19: 3 green, 9 blue; 4 blue, 10 red; 6 red, 3 green, 3 blue; 6 red, 4 green, 9 blue
|
||||
Game 20: 11 green, 3 blue; 6 green; 3 green, 6 blue; 1 red, 5 green; 6 blue, 7 green
|
||||
Game 21: 1 green, 1 blue, 12 red; 6 red, 2 blue; 5 green, 4 red, 2 blue; 11 red, 8 green, 1 blue
|
||||
Game 22: 10 red; 1 red, 13 green, 9 blue; 6 blue, 12 red, 12 green; 10 red, 8 blue, 11 green; 2 green, 1 red, 3 blue; 7 red, 1 blue, 8 green
|
||||
Game 23: 11 red, 15 blue; 10 blue, 16 red, 1 green; 14 blue, 5 red; 1 green, 9 red, 9 blue; 1 red, 7 blue, 3 green; 6 red, 2 green, 3 blue
|
||||
Game 24: 6 blue, 11 red; 16 green, 2 red, 1 blue; 8 red, 7 blue; 14 blue, 9 green, 9 red; 13 green, 4 red, 8 blue; 2 red, 7 blue, 1 green
|
||||
Game 25: 2 green, 12 blue, 1 red; 10 blue, 5 red, 5 green; 2 blue, 9 red, 3 green; 5 blue, 4 red, 2 green
|
||||
Game 26: 7 blue, 6 red, 1 green; 2 blue, 3 green, 12 red; 2 blue, 6 red, 5 green
|
||||
Game 27: 2 green, 3 red; 4 green; 2 red, 1 blue, 1 green; 2 red, 1 green, 2 blue
|
||||
Game 28: 11 blue, 1 red, 5 green; 2 blue, 2 red, 4 green; 10 blue, 4 red, 1 green
|
||||
Game 29: 6 blue, 17 red, 1 green; 8 blue, 4 red; 14 blue, 1 red, 3 green
|
||||
Game 30: 2 blue, 4 green; 7 green, 1 blue, 1 red; 1 blue, 8 green
|
||||
Game 31: 15 blue, 9 green, 2 red; 5 green, 4 blue, 1 red; 1 green, 15 red, 7 blue; 5 red, 2 blue
|
||||
Game 32: 1 blue, 5 red, 3 green; 3 green, 8 red, 1 blue; 5 green, 1 red; 4 green, 3 blue, 15 red; 2 green, 1 blue; 4 blue, 15 red, 4 green
|
||||
Game 33: 3 red, 10 blue; 4 red, 9 blue; 1 green, 10 blue
|
||||
Game 34: 3 blue, 1 green, 9 red; 4 green, 2 red, 9 blue; 7 blue, 3 red; 6 blue, 13 red; 4 green, 13 blue, 9 red
|
||||
Game 35: 14 red, 1 green; 1 red, 2 green, 4 blue; 3 blue, 10 red, 6 green; 5 blue, 6 red, 7 green; 7 blue, 5 red
|
||||
Game 36: 2 blue, 8 red, 9 green; 9 green, 3 red, 10 blue; 6 red, 8 blue, 1 green; 6 green, 8 red, 4 blue
|
||||
Game 37: 10 green, 3 red, 6 blue; 2 blue, 9 red, 5 green; 13 green, 9 red, 10 blue; 2 blue, 4 green, 9 red
|
||||
Game 38: 4 red, 14 blue, 12 green; 6 red, 12 green, 18 blue; 6 green, 1 blue, 1 red
|
||||
Game 39: 5 red, 1 blue, 3 green; 1 blue, 3 green, 8 red; 15 red, 1 blue, 5 green; 3 green, 5 red; 1 blue, 14 red; 3 green, 1 blue, 12 red
|
||||
Game 40: 8 green, 4 blue; 5 blue, 7 red, 8 green; 5 blue, 8 green; 6 green, 3 red, 12 blue; 14 blue, 7 green, 2 red; 1 green, 7 red, 5 blue
|
||||
Game 41: 7 red, 10 green; 10 red, 6 green; 9 red, 7 green, 1 blue; 3 red, 1 blue
|
||||
Game 42: 3 green, 2 blue, 13 red; 1 blue, 3 red; 11 green, 16 red; 3 green, 1 blue, 16 red; 5 red, 8 green
|
||||
Game 43: 12 blue, 9 red; 16 blue, 2 red, 7 green; 4 red, 1 blue, 11 green; 15 blue, 4 red, 9 green
|
||||
Game 44: 17 green, 5 blue, 2 red; 9 green, 11 blue, 1 red; 20 green, 3 blue, 8 red; 2 red, 13 green, 9 blue; 15 green, 12 blue; 4 blue, 7 green, 9 red
|
||||
Game 45: 5 green; 5 green, 1 red; 3 green, 2 blue; 1 green, 1 blue, 1 red
|
||||
Game 46: 10 red, 11 green; 16 green, 8 blue, 12 red; 9 green, 9 blue
|
||||
Game 47: 20 green, 17 red, 1 blue; 16 red, 2 blue, 11 green; 3 blue, 19 red, 1 green; 3 blue, 17 red, 17 green; 12 green, 2 blue, 7 red
|
||||
Game 48: 1 red, 4 blue, 6 green; 19 green, 1 red, 1 blue; 16 green, 3 blue, 1 red; 3 blue, 17 green; 4 blue, 12 green
|
||||
Game 49: 13 green, 2 blue, 1 red; 1 green, 8 red, 2 blue; 11 red, 11 green, 3 blue; 7 red, 8 green, 4 blue
|
||||
Game 50: 11 blue, 1 red, 2 green; 1 green, 10 blue; 1 blue; 6 blue; 1 green, 2 blue
|
||||
Game 51: 3 red, 3 green, 1 blue; 3 green, 3 red; 10 green, 4 red; 3 red, 2 green
|
||||
Game 52: 1 red, 4 blue; 1 green, 11 blue; 1 green, 3 red, 6 blue; 4 red, 1 green, 4 blue; 9 blue, 1 green; 10 blue, 1 green
|
||||
Game 53: 2 blue, 4 green, 1 red; 8 blue, 4 red, 7 green; 9 red, 7 blue, 6 green; 3 red, 7 green, 1 blue; 2 red, 9 blue, 5 green; 1 green, 7 red, 10 blue
|
||||
Game 54: 1 red, 1 blue, 5 green; 2 red, 1 green, 2 blue; 3 green, 3 blue, 2 red; 4 red; 12 red, 5 green, 2 blue
|
||||
Game 55: 2 red, 11 blue; 16 green, 7 red, 16 blue; 4 blue, 11 green, 7 red; 8 green, 18 blue, 8 red
|
||||
Game 56: 2 blue, 2 green, 1 red; 1 red, 1 green; 1 red; 4 green; 1 blue; 1 blue, 7 green
|
||||
Game 57: 4 blue, 3 green; 16 green, 2 red, 5 blue; 1 red, 13 green, 2 blue; 3 blue, 12 green, 2 red; 2 red, 5 blue, 4 green; 10 green, 2 blue
|
||||
Game 58: 3 blue, 8 green; 4 green, 3 blue; 7 green, 5 blue, 5 red; 8 green; 3 red, 6 blue, 9 green; 2 red, 10 green, 4 blue
|
||||
Game 59: 7 blue, 6 green, 5 red; 7 red, 2 blue; 5 red, 11 green, 14 blue; 8 green, 17 red
|
||||
Game 60: 3 green, 8 blue, 2 red; 4 green, 7 blue, 6 red; 13 blue, 8 green, 2 red; 10 red, 6 blue, 5 green; 11 green, 3 blue, 4 red; 9 red, 5 green, 9 blue
|
||||
Game 61: 4 red, 18 blue, 13 green; 9 green, 5 red, 3 blue; 4 green, 3 blue, 4 red; 8 red, 4 green, 7 blue; 8 red, 4 blue, 6 green; 10 green, 5 red, 14 blue
|
||||
Game 62: 12 red, 14 blue, 9 green; 9 blue, 6 red, 4 green; 2 red, 5 blue; 1 red, 12 blue
|
||||
Game 63: 11 blue, 13 red, 11 green; 4 blue, 9 green; 8 blue, 9 red; 7 red, 11 green, 7 blue
|
||||
Game 64: 10 blue, 8 red, 12 green; 10 red, 12 blue, 9 green; 3 green, 17 red; 12 green, 15 blue, 16 red; 6 green, 15 blue, 1 red; 9 red, 6 blue, 10 green
|
||||
Game 65: 7 red, 7 blue; 3 blue, 1 red, 1 green; 3 red, 8 blue
|
||||
Game 66: 1 blue, 3 red; 10 green, 5 blue; 4 green; 3 red, 11 green; 3 blue, 15 green, 3 red
|
||||
Game 67: 1 red; 2 blue, 2 green, 1 red; 6 green, 1 blue
|
||||
Game 68: 7 red, 4 blue; 4 blue, 6 red, 7 green; 2 green, 19 red, 11 blue; 11 green, 9 red
|
||||
Game 69: 4 blue, 3 green, 1 red; 7 blue, 1 red, 3 green; 5 blue, 1 green; 2 blue, 10 green, 2 red; 2 red, 6 green, 5 blue; 1 red, 4 green, 2 blue
|
||||
Game 70: 9 blue, 7 red, 6 green; 19 blue, 4 red, 5 green; 6 blue, 7 red, 4 green; 3 blue, 4 red, 2 green
|
||||
Game 71: 6 green, 12 blue, 4 red; 11 red, 10 green, 11 blue; 3 red, 14 blue, 13 green; 4 blue, 3 green
|
||||
Game 72: 2 green, 1 blue, 9 red; 10 red, 3 green, 1 blue; 11 red, 2 green; 2 green, 1 blue, 5 red; 1 red, 1 blue, 3 green; 13 red, 4 blue, 1 green
|
||||
Game 73: 11 green, 6 blue; 7 green, 6 blue, 7 red; 12 green, 8 blue, 11 red; 4 red, 2 blue, 9 green; 4 green, 7 blue, 2 red
|
||||
Game 74: 3 blue, 7 red; 3 blue, 5 green, 2 red; 5 red, 1 green, 3 blue; 8 green, 2 blue, 11 red; 3 blue, 8 green, 10 red
|
||||
Game 75: 2 green; 5 blue; 1 blue, 1 red; 1 red, 9 blue, 2 green; 2 blue, 2 green
|
||||
Game 76: 12 blue, 13 green; 5 red, 11 blue, 9 green; 12 green, 6 red
|
||||
Game 77: 1 blue, 15 green, 12 red; 15 green, 5 blue; 14 green, 3 blue, 8 red
|
||||
Game 78: 11 green, 8 blue, 1 red; 9 green, 8 blue, 1 red; 13 green, 5 red, 6 blue; 5 red, 7 green, 20 blue; 10 blue, 5 red
|
||||
Game 79: 3 blue; 6 blue, 5 red; 4 red, 1 green, 4 blue; 7 blue, 6 red; 7 red, 1 blue; 1 red, 1 blue, 1 green
|
||||
Game 80: 11 green, 3 red, 8 blue; 2 red, 15 green, 2 blue; 5 green, 8 blue, 2 red; 8 blue, 14 green; 2 blue, 13 green
|
||||
Game 81: 9 red, 4 green; 7 green, 4 red; 2 red, 4 blue, 6 green; 6 red, 4 blue, 9 green; 1 green, 3 red; 6 green, 1 blue, 8 red
|
||||
Game 82: 5 blue, 3 red, 3 green; 5 red; 2 red, 3 green, 8 blue
|
||||
Game 83: 10 green, 1 red, 1 blue; 3 red, 1 green, 1 blue; 4 red, 10 green
|
||||
Game 84: 16 red, 2 green, 6 blue; 6 red, 3 green, 8 blue; 3 green, 10 red, 5 blue; 4 blue, 3 green; 15 red
|
||||
Game 85: 3 green, 2 red; 5 green, 4 blue; 5 green, 8 red, 3 blue
|
||||
Game 86: 7 green, 16 blue, 7 red; 1 green, 12 red, 2 blue; 15 green, 16 blue, 7 red
|
||||
Game 87: 1 red, 6 green, 5 blue; 2 green, 1 blue; 2 green, 1 red, 1 blue; 5 green, 4 blue
|
||||
Game 88: 3 green, 3 red, 4 blue; 1 red, 1 green; 6 blue, 9 red, 1 green; 1 green, 11 red, 3 blue; 7 red, 6 blue
|
||||
Game 89: 2 blue, 3 red, 4 green; 5 red, 7 blue, 14 green; 8 blue, 5 red, 16 green; 2 blue, 5 red, 7 green; 5 green, 9 blue, 1 red
|
||||
Game 90: 1 blue, 3 red, 7 green; 11 green, 4 red, 1 blue; 1 red, 1 blue, 6 green; 2 blue, 2 green; 8 green, 2 blue; 3 red, 2 blue, 4 green
|
||||
Game 91: 6 blue, 4 red, 1 green; 8 red, 3 blue, 3 green; 1 green, 2 blue, 5 red; 1 blue, 3 green
|
||||
Game 92: 8 green, 1 red, 5 blue; 2 green, 7 blue; 11 blue, 5 green, 8 red; 7 blue, 3 red, 4 green
|
||||
Game 93: 3 green, 1 red, 9 blue; 13 red, 5 blue, 8 green; 5 green, 2 red, 7 blue
|
||||
Game 94: 4 green, 10 blue, 8 red; 4 red, 10 blue, 2 green; 2 green, 10 blue, 5 red; 5 green, 2 red, 10 blue
|
||||
Game 95: 5 green, 1 blue; 3 blue, 11 green, 8 red; 8 blue, 2 red, 12 green; 4 green, 4 blue, 4 red
|
||||
Game 96: 1 blue, 13 green; 8 blue, 3 red, 4 green; 1 red, 3 blue, 10 green
|
||||
Game 97: 18 green, 4 red; 1 blue, 2 red, 9 green; 6 red, 3 blue, 10 green; 3 blue, 15 green, 4 red
|
||||
Game 98: 2 blue, 3 green, 6 red; 1 green, 1 blue, 8 red; 8 red, 3 green, 1 blue; 2 blue; 8 red, 2 green, 2 blue
|
||||
Game 99: 1 green, 2 red, 1 blue; 8 green, 4 blue, 1 red; 7 blue, 1 red, 11 green; 9 green, 3 blue; 1 red, 2 blue; 1 red, 6 blue
|
||||
Game 100: 7 blue, 9 green, 2 red; 5 red, 9 green; 1 blue, 8 red, 13 green
|
||||
@@ -0,0 +1,63 @@
|
||||
import re
|
||||
|
||||
class Max:
|
||||
def __init__(self, id, red, blue, green):
|
||||
self.id = id
|
||||
self.red = red
|
||||
self.blue = blue
|
||||
self.green = green
|
||||
|
||||
def isValid(self, maxRed, maxBlue, maxGreen):
|
||||
valid = self.red <= maxRed and self.blue <= maxBlue and self.green <= maxGreen
|
||||
return valid
|
||||
|
||||
def power(self):
|
||||
return self.red * self.blue * self.green
|
||||
|
||||
|
||||
def main():
|
||||
maxRed = 12
|
||||
maxBlue = 14
|
||||
maxGreen = 13
|
||||
with open("2-input.txt", 'r') as file:
|
||||
array = []
|
||||
for line in file:
|
||||
array.append(parseLine(line))
|
||||
result = 0
|
||||
power = 0
|
||||
for a in array:
|
||||
if(a.isValid(maxRed, maxBlue, maxGreen)):
|
||||
result += a.id
|
||||
power += a.power()
|
||||
print("power: " + power)
|
||||
print("id addition: " + result)
|
||||
|
||||
def parseLine(s: str):
|
||||
idSplit = s.split(":")
|
||||
id = getID(idSplit[0])
|
||||
green = 0
|
||||
blue = 0
|
||||
red = 0
|
||||
roundSplit = idSplit[1].split(";")
|
||||
for round in roundSplit:
|
||||
colorSplit = round.split(",")
|
||||
for color in colorSplit:
|
||||
green = max(green, getColor(color, "green"))
|
||||
blue = max(blue, getColor(color, "blue"))
|
||||
red = max(red, getColor(color, "red"))
|
||||
return Max(id, red, blue, green)
|
||||
|
||||
|
||||
def getColor(s: str, color: str):
|
||||
split = s.strip().split(" ")
|
||||
if(color == split[1]):
|
||||
return int(split[0])
|
||||
return 0
|
||||
|
||||
def getID(split1):
|
||||
digs = re.findall("\d+", split1)
|
||||
id = digs[0]
|
||||
return int(id)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,10 @@
|
||||
467..114..
|
||||
...*......
|
||||
..35..633.
|
||||
......#...
|
||||
617*......
|
||||
.....+.58.
|
||||
..592.....
|
||||
......755.
|
||||
...$.*....
|
||||
.664.598..
|
||||
@@ -0,0 +1,140 @@
|
||||
416.........................559...............417...............785.......900.......284...........503...796....992..........................
|
||||
.........702*....772............378..569.........&.49..606...14*..............$.453*.........307....*......$.....-.................995......
|
||||
.....................458...856......+.........+....&..............680.......104.............%....516.................................*......
|
||||
...........822..174..*.....&...........711.746.......&............$....../.............656....#...........265=......634.*.............430...
|
||||
..827.137..*...*....39................*..............856..............767........522......$..773....619..............*...287....501.........
|
||||
..........726...511.............*.....320........476...............................*................%...899....72..731...........%....$.....
|
||||
.....861..............232....223.933...............*.@........424*618.858.......................................$.......338.205........535..
|
||||
.......#.............-....................676...713...427.................-.......615.........126...................=..*.......*...&........
|
||||
....40..........996..............520.974.*..........#......*.566........907......................&...214...996*911.115.363..960..897........
|
||||
....+.............*....................$..172.....559...763.....*............554......*.............*.......................................
|
||||
.......527...#.....90.+....66.................................890..............=...802.93.131..791...209......&........928......303....$....
|
||||
950.....*....773......105..............725........................................................%............886.......*........$.384.....
|
||||
........383......741..............@..=....#.....179.18..%974..........624.......64.266.................701...........%..671.721.........942.
|
||||
..................*.............914..548..........+.*.................*...........*...................*.........834.394.....*...............
|
||||
.......502*80..960........................25........464.........831.846........25.........329..985...458.+.....&................377..659....
|
||||
..........................................*.....292...............*............/..................@......350........938............*....$...
|
||||
...738..............428......+.......311...742.........236*631....816.&......+....86.........81.......................*.973*341.266.........
|
||||
......*.....673......*......614.........*.......689.48.................450...816.....754...........258..@585.......154..............@.......
|
||||
...231.....#.........681...........855...775..........*.....=..257...................................*.............................469..=682
|
||||
........#...................807...&.............418.19.....259....*459..906...185.356.......778.......230....................556............
|
||||
.......924.........459......*..............804.=.........................*...*...........&....*................=........836..+......618.....
|
||||
.....=............#.......900........+...........702..383........%..*...250..503.......637.808.......97/....@...370.......&........#.....710
|
||||
..988........685............../663.273...........*...@..........16.251...........$..............*..........964.......658.....537........*...
|
||||
...............*......171*......................714.....543............737.....372.............941.............113..*....=.......853....733.
|
||||
............470..161......508.....56...170.............$...................389.....544.....208.....98.........%.....617...884......-..@.....
|
||||
.766.591............../.........-......*.......210.........618......*874....-.........#...*....129.=..194......../...................992....
|
||||
....../....170@..140+..753....918....467.854....*................989..........979...............*.............-.907...276...931*618.........
|
||||
..700............................................801....929..859.....#..........*.............594.493......981..........*...................
|
||||
....+............173..............................................251........629..........970........*................136.........388...*...
|
||||
......721.......$......911....766..................541.234....=...........47......614....@.....*217..885.680.742....................#..84...
|
||||
.377*....*81.............*.......&...937...........+...*....155..@......*............*......648............&...*.....&401......493..........
|
||||
.....1.................533............*..399...........861......951..709.331..126.....876.....................289.........@.....*.......*...
|
||||
..........107....452-......594.888.431....*..+660...........79................................$......275*876.......978.....594..400...39....
|
||||
.........+................*....*.........925..........$.......*........599.......228..........60....................+....#..................
|
||||
...283...................177...708...........642....661........294........*............................288*793.867.....482.479.769....73....
|
||||
...........617..855*...&.............605................783.91.........847................&...../...............*..#..........*.......+.....
|
||||
.672..303+...*........967...............*453.....884@......*...208.949........*..........986.....249.....352..818.596.56....................
|
||||
...*..........88...............569.....................975.....*.....*..638....619.......................+.............*.......*.......462..
|
||||
....500.....=...................*.................*205..*..-...228.508....&........................395..............845.....683.365....*....
|
||||
........197.672.841..............214.=...847...912.....24.349...................%....584.257............152.................................
|
||||
.626....-..........*..447............714....&.....................463....287...360........*............*...............*.................717
|
||||
..........53......334...*........................*167......................*.......................554..246...........295.396......./.......
|
||||
.......24..............92...........897.......220...........................930..703...414.....711..*.........723.........*....117...146....
|
||||
.......&...........548.....324.21......................622.........820.404...............*....../..139......&......*.......578...*..........
|
||||
.....*......204......*..........*.............226...........663.......*......555.992.....502...........631..49.#....366........677..........
|
||||
..958.350.....*......44...694...449..-39........*...........-...786.........*......*............................140.........................
|
||||
...............477.........*...................815..............*..........815.................521....................&...273........103....
|
||||
.........828............781....464..................276......646....665-............924..........*.......955........759.........934...#.....
|
||||
........*..........*..........*..........15.193.......*.....................&.................808....347*......963........*....+............
|
||||
.........810.....360........638...434.....*....*751....812.....573...........85.........+.........95.......892...*...153...220..........187.
|
||||
....714*....................................................80*....162=.................214...........842...&...39..........................
|
||||
........265.........................51.......285$.......................586.......=.................................*.....*..............948
|
||||
..989..........22.=......374.......%....................142.......736..@.....507.636.797.....273.........872.....567.978..334.....382...*...
|
||||
..........@.......68..=......................116.130.......%.250../......-...=........*.........*486.415..........................*....813..
|
||||
.......505............61..140..........435..........*691......*........852..........571....408..............12......80.......228...109......
|
||||
.........................*.........207...*..24................402.=...........................@....................../...162................
|
||||
....285.................672.552........492....$./..................3..620.391...............................179............*................
|
||||
...*..........159...428.......*.................390.111.........$.....*...*..................348.355.481.......&.210..99...41...............
|
||||
...52......12..@..........808.810.897...................663..280....57..............476.............*............*.....*........208=........
|
||||
..........*...............*.........@.286..................*...........................*..........................905.296..............148..
|
||||
.......298......119.....172.................622$..637................#......342.......679.111......-968..104*478............#.......*.......
|
||||
.../.............*........../......................*..............658..........*718..........*136.....................503.899....889.498....
|
||||
....691........341.262..36.549...........386........437.............................662...........848............#......*...................
|
||||
.......................*..........936...*...............................-...........*......516....%......358....707..535...........841......
|
||||
......$..............639............*..798.../..67%............137...716.......313.247......................-............@.....371..........
|
||||
....433.677..605.267................1.......930........478........*........565*................................869.......372..@....228......
|
||||
...........@..*..$...794.........................74.......#./......833.348.......................................+................*.........
|
||||
......865...............*.........................*..........839.....................=......................................916..84.@.......
|
||||
.................-....451........541@......468..684....18............759.............499................124.....426*.........*......882.....
|
||||
...68*...........614........509...............*.........&...956*308.%........&....36...........480+....../..........917....32....#..........
|
||||
......363..377.............*..........441.....418..........................279.....*.................139..........................944.......
|
||||
........................412............*..........%....920*585....526*............931.346&.807..840.....*.626-...#....................923...
|
||||
.....283.....924...+..................628.......33....................908..766..............*........336..........446...........191.........
|
||||
...............*.249........@264..35...................502.791.#...........*......=............126....................957....71....*.768....
|
||||
.........144&.36.....216.........*...........................&.730..........201..581.704.........$......715.............=......*.......%....
|
||||
...349..............*....598...949.........189....981.....#.............524...................*............=................440...847.......
|
||||
.................967....#..........999*6..%.........-......604............&.189.626...#774.159.647....................168.........../...329.
|
||||
..............................................481.....*........................*.................................747..%.................#...
|
||||
..........245...878.......495....57....841.........351.517..........-297........................343.599/........&.......360..........-......
|
||||
430........&..............&.....*...&.....*885...........................9....392.......93..336*...........................*321.....86......
|
||||
....469......#.................999..796..................899.........250*........$.......*........247............................+.......328
|
||||
......*...696...615..300..603..............................*....232...................402...501......*.......77.271.....@.........146.......
|
||||
......170......%....$.........*..991..........782.49.......128.............................*........161........*.....648......123...........
|
||||
..........646................901..*.............*......134...........517..2..287........513...............................644...*...........
|
||||
...................999*620.........541.379.....488..18*.......................*...............208....931.338..%143...........*...19.........
|
||||
...+.......938...........................*...%.............&........626......268.418......841*..........*...............820.395..........913
|
||||
.723...834*..........+............162.667.....84............803.804...*............*................399........172..530*....................
|
||||
.....................596............*............................./.287............852....623....@.*..............@........168...965..*17...
|
||||
.....=488...................758....607.....&......53%......................105.683......-...*.860..244.....&....$....232....................
|
||||
.............................*..........333....................197........+....*......334.954.............686...464...............544.......
|
||||
.139=..............754...993.677..../.......933..........391....*....357*.....952......................@..........................*.........
|
||||
..........831............../.........94.600................+.121.........183........18..686.....665*..823...........575...........68........
|
||||
141...800....*....692...........254@.....*...819-.....................................*..@...................17.......*...815...........686.
|
||||
........%.602........%.................186..........562.93....774.....................11....948....912.........*328..243.*..................
|
||||
.......................................................*..........607....280..................&....+.....................548.&897.100@...955
|
||||
......504.....605...........889@.............975..664....$.....#............*....141.................378%.........812.......................
|
||||
.....=...........*.....730...............%...............899..480.....*....375.....-.444.........47*.........@63...........828.....468..462.
|
||||
.......607.../...23....=......=........383.............................522............*.............433..360..................*372...*......
|
||||
........*...975.............428...................592*......@258...114......%......431...................*......+........658.......560.163..
|
||||
........16........................329.......315.......973............*...333....@.......$....782..18...58....533........*...............*...
|
||||
..327.............563...889.......*...........*..595...............913........671..354..937...%..*...&...........&.787...975.......676...247
|
||||
.....+..&...401..*..............713........=.757...#.873*47...#465..................................440..588/..859.%..................*.....
|
||||
.665....133...%..196....907..............348..................................162........305...................................163.-........
|
||||
....*....................*...........170.........222.804....784..............*...................................................=.742......
|
||||
..239..338.....27-.437..543.........*....609......*..*......-...............582..-...........343*560....852.../....636..263.................
|
||||
..........*900.......*............17...........948.....597.....=....922...........682./255................@..35.......*.......211-..#.......
|
||||
.......*...........686........984..........78......896*......13........+....................985...&....................278.........876.835..
|
||||
....630.82....$851.....905.......*..281...*...............................352..........*746........215.877....845..........471.852.....*....
|
||||
.........................*.....757.*......625...........924......878..........912...............-.........*../.....538%......+.........871..
|
||||
..954*712..977.....-..762..........236.........527*674.*.........*........811*.....228....&.....5........739...483..........................
|
||||
..........*.......470..................................707....363.................*......525.......303..........*........463....537.........
|
||||
...460...947...............130.....757./96........*.................=...529....+..466........527................65..%648....=.....*.........
|
||||
.....*......................$....../..............968..............479.&....630............................598.................952..........
|
||||
.......&..........793...................................514...............-...................311..........=....83......#.............124...
|
||||
.975....399.......*...-.......*814...663..................*....*...........381../...............*.............@.........284............*....
|
||||
...*............367....198..........@.....992.....716*529....96.................729.329.688...%.322.-......67.79......-.......335....997....
|
||||
488............................632........*...../......................387.............*....225......491.............391..750...%...........
|
||||
.......861.527......778.165.......*........187..916.......845....-....*.......873.................................@.........................
|
||||
..545.....*.....$.....*..*......627............................736.376..845...*....594........+.......171.........292...........*750..-.....
|
||||
.................407.403............+...342.................+..........*.......897..........400.......$......................910.......350..
|
||||
...........................40..284.66...*......494..........255.......653..............866.................942=..................*52........
|
||||
....&........827.......296...*........$.401......*..............892*...................$.............1.164.......343..........485...........
|
||||
.930............*.........*..944...308...........763....../.........62.....113....=...........421........*..........................580+....
|
||||
........50*.....934......705............................999..................*....541...............847-.950..............*131..............
|
||||
...........209....................................&404...............276..242.............723.652................873...313..............24..
|
||||
......*........606....550#.....2./........@..................899.......*.....................*..........235..112...........704.....337......
|
||||
.......837....*...............*...83...993.....*416.........-....580%..535......../.....-204...............#..*.....93+....*...723./........
|
||||
..............168.....753..593..............504......./........................488..............=.............458.......872...*.............
|
||||
...#85...................&......911/...................880........315..872..........=....494..349....466..428..................40...........
|
||||
........939........648......................*................227...*......*.......924...*...........*.....*.................................
|
||||
918*......&.@........*...902..269..834....87.826.........../...*...919.118...817......109..........933..643...........&..............-......
|
||||
....949......883...111..%......*...%..................710.464.943.........../...................................842....305.....469..289.....
|
||||
..........................%...974......*407..168.647...*..............617.......498/.....848...........@99........*...........+.............
|
||||
..........176...........120.........469........&...#....997......464.......274.............*......./............477.417../.......738........
|
||||
.........*.......964.........291..........................................-.............2..29...272..465...............-..819........718*265
|
||||
....298...747.......#.......*.....+745...........460...741*762.275...491.......+.735*34.*............-....*841......+............*..........
|
||||
...*........................593..............298...#............%....$......225.........943........................23.....702.601.616.......
|
||||
..889................695........654..750.....*.............637........./...............................780....*726....233...*...............
|
||||
..................../.................*.....453.....642....*.........828......@...94...........152/...*....790.......*.....445......../.....
|
||||
...........................51.......681........................271..........719.......................964......399..426...............456...
|
||||
@@ -0,0 +1,78 @@
|
||||
import re
|
||||
|
||||
def main():
|
||||
with open("3-input.txt", 'r') as file:
|
||||
lines = file.readlines()
|
||||
total = 0
|
||||
for line_index, line in enumerate(lines):
|
||||
print(f"Line: {line_index + 1}")
|
||||
digit = ""
|
||||
for index, char in enumerate(line):
|
||||
if char == '*' :
|
||||
nr = []
|
||||
print(f"found *")
|
||||
for i in get_number(line, index-1, index +1):
|
||||
print(f"found {i} on same row")
|
||||
nr.append(i)
|
||||
if(line_index - 1 >= 0):
|
||||
for i in get_number(lines[line_index - 1], index-1, index +1):
|
||||
print(f"found {i} on above row")
|
||||
nr.append(i)
|
||||
if(line_index + 1 < len(lines)):
|
||||
for i in get_number(lines[line_index + 1], index-1, index +1):
|
||||
print(f"found {i} on lower row")
|
||||
nr.append(i)
|
||||
if len(nr) == 2:
|
||||
total += int(nr[0]) * int(nr[1])
|
||||
|
||||
print(total)
|
||||
|
||||
def get_number(line: str, from_index: int, to_index: int):
|
||||
res = find_digits_with_index(line)
|
||||
numbers = []
|
||||
for seq, idx in res:
|
||||
if ranges_intersect(range(idx, idx + len(seq) - 1), range(from_index, to_index)): numbers.append(seq)
|
||||
return numbers
|
||||
|
||||
def find_digits_with_index(input_string):
|
||||
pattern = re.compile(r'(\d+)')
|
||||
matches = pattern.finditer(input_string)
|
||||
|
||||
result = [(match.group(), match.start()) for match in matches]
|
||||
return result
|
||||
|
||||
def ranges_intersect(range1:range, range2:range):
|
||||
# Check if either range's start is within the other range
|
||||
if range1.start <= range2.stop and range2.start <= range1.stop:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
# titta i en line från index -> index
|
||||
def has_symbol(line: [], from_index: int, to_index: int):
|
||||
if from_index < 0: from_index = 0
|
||||
for i, char in enumerate(line[from_index:]):
|
||||
if(i + from_index > to_index):
|
||||
return False
|
||||
if(not notDigit(char)):
|
||||
return False
|
||||
if(isSymbol(char)):
|
||||
return True
|
||||
return False
|
||||
|
||||
def isPartNumber(line: [], first_index: int, last_index: int):
|
||||
is_match = False
|
||||
if(first_index > 0):
|
||||
is_match = isSymbol(line[first_index])
|
||||
return is_match or (last_index < len(line) and isSymbol(line[last_index]))
|
||||
|
||||
def isSymbol(s: str):
|
||||
pattern = r'[^0-9.\n]'
|
||||
return re.match(pattern, s)
|
||||
|
||||
def notDigit(s: str):
|
||||
match = re.findall("\d", s)
|
||||
return len(match) == 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,3 @@
|
||||
416.........................559...............417...............785.......900.......284...........503...796....992..........................
|
||||
.........702*....772............378..569.........&.49..606...14*..............$.453*.........307....*......$.....-.................995......
|
||||
.....................458...856......+.........+....&..............680.......104.............%....516.................................*......
|
||||
@@ -0,0 +1,186 @@
|
||||
Card 1: 10 5 11 65 27 43 44 29 24 69 | 65 66 18 14 17 97 95 34 38 23 10 25 22 15 87 9 28 43 4 71 89 20 72 5 6
|
||||
Card 2: 25 43 15 31 45 19 36 73 34 85 | 92 11 85 68 74 20 19 71 1 36 43 32 77 33 14 31 73 15 45 83 34 25 6 88 57
|
||||
Card 3: 4 46 42 23 18 98 59 75 19 57 | 22 3 75 80 42 23 59 39 98 38 18 21 67 57 20 25 71 26 64 4 83 79 91 65 90
|
||||
Card 4: 92 13 56 27 19 44 70 93 32 66 | 38 4 19 75 87 93 32 1 23 14 51 22 42 44 33 63 13 56 70 66 18 92 47 53 27
|
||||
Card 5: 25 18 30 45 23 80 91 13 47 61 | 62 45 71 30 39 19 61 68 23 80 91 96 25 58 13 88 67 29 60 2 74 55 12 83 46
|
||||
Card 6: 20 36 26 18 61 35 94 58 79 19 | 85 68 56 7 53 58 19 20 79 59 26 61 18 15 94 33 29 71 35 89 17 36 3 67 72
|
||||
Card 7: 29 21 71 91 74 6 12 53 50 55 | 29 51 12 74 82 18 21 55 53 33 65 91 95 69 2 62 57 50 3 79 71 61 47 6 14
|
||||
Card 8: 24 72 46 88 65 12 48 97 76 73 | 17 97 87 18 83 11 49 44 88 79 64 55 19 25 63 74 73 14 82 15 72 43 76 48 46
|
||||
Card 9: 86 38 55 52 33 61 41 75 87 26 | 38 97 88 91 33 36 54 64 40 52 68 71 43 55 72 75 4 61 58 49 56 86 30 15 17
|
||||
Card 10: 15 37 72 5 66 81 33 6 80 76 | 52 34 21 68 72 82 91 81 7 19 86 67 94 87 16 63 43 9 14 23 44 60 18 4 74
|
||||
Card 11: 24 21 17 27 34 80 18 79 56 32 | 18 45 21 63 82 69 48 54 89 5 83 80 92 93 49 8 55 12 97 35 4 3 42 94 56
|
||||
Card 12: 90 61 45 54 64 93 69 85 58 88 | 79 89 74 45 27 61 9 56 69 88 13 80 66 4 16 62 34 51 71 54 48 64 58 63 50
|
||||
Card 13: 80 39 35 27 56 94 25 77 84 26 | 24 19 72 54 96 63 56 15 25 16 59 35 20 57 52 65 95 66 45 31 77 60 42 93 37
|
||||
Card 14: 33 83 94 41 7 79 18 40 24 97 | 49 27 45 21 20 8 93 26 12 42 94 33 96 57 98 91 19 52 78 2 18 80 65 72 44
|
||||
Card 15: 16 83 92 40 13 35 94 23 47 17 | 55 61 75 43 18 5 22 65 67 7 49 63 71 13 45 78 53 21 57 34 98 99 64 32 56
|
||||
Card 16: 14 76 72 8 42 61 60 82 24 21 | 56 10 38 11 37 45 29 22 51 98 86 49 26 13 16 52 50 14 70 30 87 73 66 77 88
|
||||
Card 17: 63 32 83 13 81 89 33 49 5 34 | 99 85 12 6 27 93 78 44 14 76 1 51 36 9 4 62 91 84 8 37 45 66 75 42 40
|
||||
Card 18: 43 97 37 61 69 94 60 67 91 99 | 87 25 65 98 26 62 42 11 61 32 34 76 14 20 44 92 22 5 12 46 21 33 3 15 59
|
||||
Card 19: 32 96 10 49 26 86 67 85 50 75 | 58 98 84 43 23 33 64 74 37 80 63 40 51 95 13 55 31 25 87 97 81 52 53 24 6
|
||||
Card 20: 7 70 41 40 16 15 20 72 47 93 | 93 41 7 79 62 86 69 70 75 67 51 72 81 15 22 48 47 80 71 38 40 97 20 82 16
|
||||
Card 21: 90 76 52 48 36 37 89 45 20 17 | 23 48 86 7 99 50 20 58 93 43 16 91 5 76 52 45 17 68 89 22 61 36 90 37 83
|
||||
Card 22: 85 71 20 58 32 83 53 94 61 80 | 88 59 66 80 49 53 19 97 5 20 62 8 94 54 67 73 93 12 10 61 32 41 71 72 85
|
||||
Card 23: 60 61 30 65 11 28 89 54 22 78 | 88 71 97 46 60 45 54 26 22 42 59 57 80 9 69 61 47 3 85 7 32 78 11 66 33
|
||||
Card 24: 35 16 5 85 87 58 66 39 88 12 | 51 32 59 41 73 21 58 79 72 10 74 28 95 69 16 92 88 18 34 46 77 17 65 76 99
|
||||
Card 25: 67 41 62 96 40 22 81 12 98 9 | 92 66 87 35 50 38 19 14 74 93 1 76 59 6 84 99 58 61 34 13 63 30 53 90 24
|
||||
Card 26: 10 78 28 1 72 94 60 71 37 89 | 71 9 28 11 4 72 43 90 74 37 18 14 40 16 21 97 59 13 73 89 63 60 5 10 70
|
||||
Card 27: 65 7 45 59 32 51 22 16 2 64 | 65 37 72 7 26 86 49 3 63 67 16 52 51 21 89 14 70 78 36 27 92 39 8 64 42
|
||||
Card 28: 89 17 93 57 78 33 52 97 53 4 | 23 20 66 55 42 28 52 61 35 41 60 51 84 83 49 67 22 5 48 9 2 7 87 38 93
|
||||
Card 29: 64 12 30 16 87 59 76 34 85 28 | 47 21 32 37 94 25 6 26 49 59 81 45 87 70 23 5 91 8 34 58 72 89 52 93 63
|
||||
Card 30: 11 69 86 19 59 28 41 68 81 66 | 92 33 1 43 88 75 42 29 38 55 24 89 4 95 47 70 30 65 83 72 25 82 14 85 21
|
||||
Card 31: 48 43 14 54 80 70 93 64 42 77 | 91 19 62 79 30 23 29 11 37 13 41 54 97 52 7 90 33 17 96 28 20 9 47 31 38
|
||||
Card 32: 78 91 2 56 93 3 88 50 20 12 | 2 20 18 84 12 82 43 76 39 53 32 79 57 17 63 28 30 9 1 55 96 70 29 25 87
|
||||
Card 33: 99 93 14 28 36 68 11 97 58 9 | 94 4 67 66 40 87 96 83 78 23 71 41 92 24 77 1 15 42 12 57 3 89 46 72 59
|
||||
Card 34: 20 88 61 67 31 21 90 30 26 56 | 6 71 18 34 66 10 41 37 58 32 13 76 3 96 86 47 50 91 17 15 39 68 73 27 12
|
||||
Card 35: 5 58 96 48 47 70 19 34 63 84 | 21 59 88 32 37 33 20 49 55 62 7 66 1 2 40 77 22 82 39 13 45 61 56 44 17
|
||||
Card 36: 36 66 44 13 33 2 60 46 4 31 | 73 99 13 72 44 80 60 77 65 19 46 4 59 97 61 98 31 92 83 2 68 36 66 33 22
|
||||
Card 37: 95 71 87 60 17 19 97 30 48 55 | 30 53 35 19 94 27 95 44 47 13 69 87 12 56 4 26 85 17 63 7 70 60 71 41 3
|
||||
Card 38: 61 16 20 92 98 19 79 62 45 91 | 79 44 60 23 25 83 92 19 16 38 66 48 75 20 2 98 24 87 45 62 61 32 91 69 13
|
||||
Card 39: 49 2 18 74 99 30 54 16 93 68 | 8 74 75 72 68 67 89 86 31 30 97 47 24 71 18 99 54 22 16 70 3 7 49 50 25
|
||||
Card 40: 12 45 7 15 65 84 77 36 28 1 | 51 35 63 43 59 81 88 58 56 71 94 46 9 86 28 13 30 99 20 17 95 23 32 54 47
|
||||
Card 41: 8 99 26 60 56 69 48 47 31 16 | 83 9 66 73 95 67 21 86 94 2 99 51 98 80 57 36 82 4 23 19 12 68 88 44 59
|
||||
Card 42: 99 48 94 50 91 55 2 12 67 36 | 47 45 62 66 31 84 26 20 52 41 40 55 21 35 37 15 69 53 72 65 79 60 25 48 57
|
||||
Card 43: 41 75 61 39 67 88 48 42 51 79 | 85 99 95 79 64 92 34 8 46 15 56 28 12 6 81 48 41 49 20 97 91 67 51 55 74
|
||||
Card 44: 10 99 33 96 21 6 49 62 82 38 | 68 41 88 24 6 28 98 66 96 49 30 33 94 85 1 75 21 61 60 99 89 81 31 54 20
|
||||
Card 45: 46 61 60 2 29 45 7 55 83 16 | 25 34 84 91 97 61 55 17 16 79 67 53 59 27 69 58 29 46 24 93 3 32 60 49 33
|
||||
Card 46: 93 25 42 68 22 85 58 61 63 50 | 8 46 4 15 96 83 94 13 19 65 24 80 64 38 89 44 52 78 98 36 47 51 97 2 57
|
||||
Card 47: 11 59 80 10 72 76 43 86 56 7 | 59 67 35 5 47 81 99 21 38 90 73 55 64 24 34 42 58 51 56 11 68 60 23 92 43
|
||||
Card 48: 97 88 28 44 24 10 17 27 83 12 | 67 92 74 50 4 35 77 47 6 40 11 20 76 16 42 9 3 79 68 82 43 41 60 94 89
|
||||
Card 49: 35 98 90 92 42 12 13 83 53 95 | 36 34 51 96 24 94 53 7 31 6 71 48 16 75 77 83 68 46 14 66 65 22 9 74 93
|
||||
Card 50: 1 65 66 2 76 36 78 56 99 90 | 12 13 3 38 96 20 10 14 57 81 7 35 88 55 68 48 31 52 89 9 70 15 79 80 16
|
||||
Card 51: 70 41 53 40 55 82 69 7 5 71 | 56 4 54 46 65 17 91 94 72 88 90 31 85 14 97 95 44 26 92 8 21 73 38 77 37
|
||||
Card 52: 62 16 85 42 56 1 82 92 43 37 | 74 28 19 42 82 21 85 37 75 50 17 16 1 76 56 86 91 31 3 92 6 62 43 64 83
|
||||
Card 53: 69 91 12 9 63 50 58 57 67 13 | 40 42 70 62 6 69 9 82 78 19 89 56 57 83 47 25 98 46 30 53 72 28 10 58 44
|
||||
Card 54: 73 44 64 21 16 50 63 41 36 51 | 6 4 66 39 21 14 67 50 15 1 35 40 64 44 24 73 28 47 80 13 2 43 91 46 16
|
||||
Card 55: 47 55 14 43 1 54 81 65 19 33 | 19 10 97 44 84 61 5 25 96 81 32 73 75 83 65 17 3 41 14 92 9 80 27 63 8
|
||||
Card 56: 43 26 93 75 33 51 89 60 1 81 | 9 10 16 60 84 81 93 26 4 96 17 91 79 18 43 67 47 92 1 33 21 63 51 75 89
|
||||
Card 57: 76 70 7 31 8 39 63 99 30 13 | 31 63 76 17 68 39 30 50 27 72 84 79 70 57 28 13 29 97 67 8 75 87 3 7 99
|
||||
Card 58: 28 29 86 65 7 36 38 3 20 43 | 70 20 65 64 43 98 18 19 78 87 7 55 30 35 28 37 56 29 39 38 3 40 36 86 75
|
||||
Card 59: 55 10 23 31 17 37 22 92 14 44 | 67 11 60 92 42 68 44 78 3 43 76 16 97 55 8 35 49 54 18 40 46 52 95 84 69
|
||||
Card 60: 34 13 63 27 44 11 80 9 43 28 | 48 44 95 59 41 13 30 40 73 33 10 19 74 14 78 12 37 28 35 63 87 39 53 11 93
|
||||
Card 61: 42 75 7 20 73 47 16 28 5 92 | 12 65 7 5 38 74 58 28 62 85 10 47 18 75 86 52 73 77 1 43 36 93 80 13 20
|
||||
Card 62: 47 35 92 12 61 25 83 96 6 87 | 5 21 56 66 24 13 19 54 68 92 87 12 93 35 88 11 49 79 69 31 42 96 47 59 84
|
||||
Card 63: 43 97 21 67 11 40 81 53 23 42 | 65 52 24 80 71 6 3 88 72 17 66 77 41 57 44 91 1 36 56 27 39 43 8 67 34
|
||||
Card 64: 96 73 20 69 19 93 98 99 41 24 | 20 19 52 63 60 34 8 40 14 6 89 1 94 62 98 96 22 71 65 35 28 18 25 59 42
|
||||
Card 65: 5 40 14 19 36 93 59 9 12 75 | 60 15 90 21 71 66 86 59 62 31 82 76 38 14 9 98 53 32 6 8 19 4 11 33 29
|
||||
Card 66: 97 35 40 5 62 15 79 72 38 32 | 69 8 94 75 35 9 64 96 42 76 67 91 31 92 52 71 77 45 18 12 61 25 88 20 50
|
||||
Card 67: 55 89 12 98 71 16 36 87 91 25 | 32 39 83 13 10 81 51 29 43 7 70 60 40 78 44 17 23 94 57 22 20 11 86 34 99
|
||||
Card 68: 53 37 26 55 34 39 62 35 68 86 | 44 85 58 41 42 31 52 35 66 49 77 65 27 60 7 2 45 21 26 40 20 18 69 4 99
|
||||
Card 69: 45 7 89 51 21 97 38 33 84 28 | 72 39 65 64 24 1 62 56 54 12 5 60 80 49 88 26 42 19 71 46 87 70 9 8 82
|
||||
Card 70: 50 92 10 16 56 40 14 6 61 30 | 11 68 37 3 74 32 58 66 18 20 69 33 22 19 97 7 53 39 64 91 57 55 51 87 83
|
||||
Card 71: 16 38 60 51 15 56 26 46 76 64 | 26 65 51 88 63 56 64 76 61 40 20 16 55 81 29 58 7 38 46 62 37 23 4 15 60
|
||||
Card 72: 48 3 37 4 61 7 63 69 18 38 | 7 63 22 48 8 91 2 77 40 44 69 86 51 74 37 53 38 96 49 3 4 61 18 15 43
|
||||
Card 73: 22 59 55 78 44 99 96 29 76 46 | 59 23 44 31 29 63 18 92 46 22 4 56 85 43 82 94 95 48 14 64 78 76 55 99 96
|
||||
Card 74: 49 46 66 52 68 64 62 93 81 96 | 83 31 15 98 68 17 74 79 81 20 25 66 16 53 43 46 30 21 24 70 63 1 82 71 72
|
||||
Card 75: 25 56 3 78 52 87 6 5 54 99 | 1 4 66 17 87 5 52 79 88 25 36 99 86 3 65 61 70 71 78 54 56 39 69 68 6
|
||||
Card 76: 62 66 78 11 51 71 42 84 39 33 | 26 29 45 7 32 58 83 72 19 82 67 91 76 59 39 93 41 5 12 47 79 49 21 11 20
|
||||
Card 77: 98 80 42 61 82 18 34 66 2 1 | 84 33 16 9 91 86 22 42 1 34 46 99 41 82 85 61 49 26 18 88 98 66 80 72 2
|
||||
Card 78: 74 69 73 62 50 86 14 34 15 57 | 73 40 62 15 52 9 68 82 46 86 89 22 83 74 50 58 38 8 34 16 14 69 57 64 60
|
||||
Card 79: 99 36 21 35 10 43 32 69 74 6 | 10 14 75 66 48 15 17 43 74 2 16 50 56 6 69 61 87 36 99 32 90 21 35 60 28
|
||||
Card 80: 63 3 55 47 54 20 95 72 36 57 | 80 57 63 66 47 44 49 38 3 54 15 52 11 75 16 72 50 55 36 95 33 81 26 45 20
|
||||
Card 81: 46 61 5 40 70 1 65 18 74 78 | 70 66 57 55 9 33 83 71 78 37 74 18 92 38 65 84 40 1 97 61 91 59 5 46 24
|
||||
Card 82: 85 25 81 91 76 71 8 12 24 21 | 37 76 74 34 85 91 44 41 99 8 25 28 98 39 24 12 71 75 95 47 21 69 46 81 40
|
||||
Card 83: 98 57 78 67 90 55 53 74 59 85 | 20 52 73 61 41 64 85 4 68 70 87 14 32 99 55 48 84 74 94 80 50 42 25 44 35
|
||||
Card 84: 22 56 11 9 47 49 1 91 78 55 | 52 28 97 67 44 37 4 61 36 53 96 30 2 19 9 43 29 15 49 41 68 72 7 38 94
|
||||
Card 85: 84 66 28 12 30 82 69 57 72 76 | 37 48 69 96 47 78 98 59 43 27 29 35 15 81 32 64 66 57 94 95 44 12 2 89 70
|
||||
Card 86: 47 5 23 50 56 45 25 54 60 42 | 34 71 3 94 42 46 43 5 39 83 95 27 40 18 13 14 47 59 65 12 38 11 15 82 28
|
||||
Card 87: 93 58 92 44 94 78 80 26 39 50 | 75 47 94 20 9 85 79 26 56 44 14 67 95 5 12 6 31 30 39 40 8 58 80 34 59
|
||||
Card 88: 61 20 91 64 69 87 50 2 8 45 | 61 14 28 67 11 91 82 51 18 52 66 24 62 59 92 69 2 49 3 46 42 35 4 27 20
|
||||
Card 89: 32 38 6 48 14 60 82 1 9 5 | 97 29 67 21 7 46 12 19 65 14 34 35 44 82 64 5 40 98 57 13 45 55 10 22 79
|
||||
Card 90: 89 54 9 27 86 29 17 26 20 47 | 46 51 40 60 2 41 59 89 79 47 73 52 15 29 81 84 96 22 44 13 10 72 87 28 86
|
||||
Card 91: 98 15 46 26 72 22 71 82 90 39 | 63 62 29 7 90 79 12 49 54 96 21 70 6 13 2 9 86 53 99 3 33 72 66 28 22
|
||||
Card 92: 65 33 98 12 70 18 47 71 69 59 | 58 66 85 27 26 43 87 51 39 83 73 33 17 54 90 5 99 29 8 49 34 71 45 19 78
|
||||
Card 93: 62 50 63 30 80 74 32 70 31 12 | 28 3 9 71 34 40 12 77 55 69 2 44 76 58 83 11 23 17 10 13 33 81 93 94 85
|
||||
Card 94: 21 23 14 63 32 5 70 79 81 44 | 4 1 18 35 64 58 80 42 47 92 25 78 82 11 9 83 65 86 17 90 69 56 98 85 84
|
||||
Card 95: 88 44 69 23 3 34 22 59 72 10 | 30 87 25 88 72 57 34 10 3 1 4 64 44 17 42 33 20 69 93 65 73 11 23 59 22
|
||||
Card 96: 51 94 55 41 65 57 59 98 39 96 | 38 54 83 39 96 94 88 65 32 41 9 55 51 73 93 59 58 63 64 98 45 57 8 33 74
|
||||
Card 97: 4 5 90 20 15 14 49 40 84 11 | 73 75 29 47 15 64 53 66 74 43 50 84 12 28 90 5 3 20 4 11 40 49 14 71 95
|
||||
Card 98: 74 49 44 95 50 71 77 22 41 57 | 4 75 47 3 45 82 58 53 88 69 59 17 51 68 66 67 36 25 7 14 78 12 49 73 9
|
||||
Card 99: 48 4 79 15 61 85 92 45 22 81 | 30 23 78 35 17 14 24 68 90 74 37 32 46 19 79 42 22 43 50 41 7 92 39 10 15
|
||||
Card 100: 26 67 9 17 82 11 34 47 10 20 | 56 10 73 34 59 62 97 67 12 48 47 20 17 90 7 40 50 13 55 9 27 65 31 38 26
|
||||
Card 101: 79 10 29 36 95 26 94 40 50 89 | 6 54 33 88 74 46 67 70 51 39 94 78 31 59 37 5 56 53 36 42 1 87 29 64 40
|
||||
Card 102: 50 40 34 30 2 32 95 70 10 16 | 57 66 90 83 94 31 79 67 14 93 28 52 32 22 9 43 54 39 49 40 35 21 87 78 88
|
||||
Card 103: 85 35 6 42 31 71 49 17 95 55 | 61 67 34 99 52 59 46 38 51 36 73 43 94 97 91 76 37 4 25 18 30 64 41 22 26
|
||||
Card 104: 89 73 65 69 94 68 28 49 19 55 | 14 33 51 92 40 70 73 91 45 20 72 21 69 43 19 52 56 27 4 37 67 1 13 80 83
|
||||
Card 105: 65 98 51 74 36 45 61 87 42 50 | 70 6 30 26 84 75 1 96 37 31 53 95 24 66 40 52 72 22 44 54 77 99 25 19 69
|
||||
Card 106: 35 46 52 34 28 3 36 42 80 10 | 53 43 20 22 62 75 83 11 44 85 78 39 72 90 73 18 86 16 65 19 98 47 41 45 88
|
||||
Card 107: 92 17 73 3 72 57 63 66 1 9 | 61 67 98 59 31 3 48 83 33 1 72 2 13 42 50 68 19 53 15 32 14 9 49 52 23
|
||||
Card 108: 9 27 28 88 4 82 63 73 36 92 | 99 45 20 57 31 94 7 22 39 55 86 79 95 62 96 58 97 12 15 56 34 40 17 51 33
|
||||
Card 109: 48 43 25 17 34 83 3 19 18 86 | 61 71 38 28 96 1 36 25 16 37 52 33 67 83 50 47 10 46 51 34 11 7 77 68 80
|
||||
Card 110: 36 41 13 69 51 66 48 79 60 93 | 94 80 37 81 66 97 17 73 13 35 27 67 88 29 84 57 96 77 12 75 33 85 15 82 58
|
||||
Card 111: 88 65 71 66 39 67 50 42 86 99 | 20 10 87 41 45 63 31 40 64 35 97 99 53 98 72 11 85 19 79 13 22 55 24 25 34
|
||||
Card 112: 75 37 68 18 90 88 42 20 50 40 | 31 5 15 80 33 66 35 69 64 97 11 92 85 94 24 65 44 22 71 36 17 12 29 39 98
|
||||
Card 113: 81 60 57 44 33 56 89 36 50 1 | 27 76 64 89 85 68 42 36 22 67 32 60 4 57 74 28 16 17 44 65 14 31 43 45 12
|
||||
Card 114: 34 92 35 43 65 63 29 49 48 13 | 13 16 12 31 14 75 2 30 3 37 28 11 91 50 69 72 87 52 95 85 58 94 49 19 23
|
||||
Card 115: 11 80 20 25 93 96 19 99 74 58 | 41 45 39 22 19 31 20 99 25 62 37 77 58 78 3 1 81 96 56 14 32 85 83 53 57
|
||||
Card 116: 86 83 81 62 55 80 77 46 53 38 | 62 80 30 83 70 54 38 51 25 46 84 81 27 53 58 55 56 41 9 77 22 49 18 86 78
|
||||
Card 117: 25 95 92 2 7 30 81 76 96 61 | 12 52 25 2 34 92 82 58 96 85 76 67 70 81 16 61 7 19 37 95 18 43 45 79 30
|
||||
Card 118: 91 45 52 34 15 28 48 83 67 38 | 98 6 92 67 38 79 34 4 80 48 58 91 88 72 3 33 52 73 45 89 28 63 41 54 17
|
||||
Card 119: 71 82 4 62 58 44 60 34 79 14 | 40 62 82 60 58 34 3 27 22 14 72 65 4 85 53 96 7 46 11 97 35 47 67 19 71
|
||||
Card 120: 63 80 9 4 94 46 66 61 81 76 | 47 35 81 21 73 23 63 38 55 65 94 76 54 15 87 43 8 72 70 75 9 3 66 80 85
|
||||
Card 121: 67 50 91 52 64 43 30 75 34 85 | 95 32 8 64 43 42 85 45 98 76 7 52 80 22 46 9 36 30 15 40 54 81 44 67 57
|
||||
Card 122: 19 62 83 56 46 1 47 64 25 23 | 67 50 30 79 58 90 39 80 69 20 91 37 94 65 88 98 18 92 73 33 66 44 70 11 64
|
||||
Card 123: 87 36 39 75 4 6 85 9 54 82 | 44 50 45 57 27 34 86 21 97 53 93 75 39 26 61 41 81 49 51 29 13 66 37 30 87
|
||||
Card 124: 74 32 61 26 52 21 3 30 5 58 | 38 69 20 31 68 60 44 61 97 79 29 66 23 62 37 94 33 54 96 71 87 1 9 50 11
|
||||
Card 125: 99 26 61 20 66 13 40 62 89 29 | 66 3 60 19 8 43 48 28 70 23 45 35 64 5 42 58 95 15 56 59 44 1 51 49 80
|
||||
Card 126: 51 1 62 49 98 34 36 74 73 17 | 67 92 29 10 21 59 91 89 11 15 83 9 63 99 41 60 31 73 78 25 72 96 35 87 71
|
||||
Card 127: 90 94 39 24 60 8 53 14 78 27 | 54 51 77 16 1 67 6 20 15 18 71 41 81 10 66 63 13 11 64 4 58 43 83 65 98
|
||||
Card 128: 43 40 76 96 65 82 15 5 23 16 | 70 24 56 40 52 71 96 7 87 91 11 75 43 41 5 45 30 33 34 15 80 27 61 76 17
|
||||
Card 129: 90 76 62 9 60 2 48 87 80 52 | 10 7 96 17 8 71 47 52 59 91 1 4 33 56 58 66 92 2 37 53 9 29 25 98 13
|
||||
Card 130: 88 44 46 35 38 33 86 60 40 83 | 86 92 43 88 40 26 80 4 11 54 46 44 50 60 58 33 35 83 82 48 67 18 55 89 38
|
||||
Card 131: 54 34 30 7 66 16 81 71 98 9 | 57 65 78 81 98 24 34 88 96 69 7 54 41 53 63 30 52 8 71 66 59 16 9 79 11
|
||||
Card 132: 51 40 52 69 64 83 5 39 2 58 | 58 5 88 83 93 56 78 50 40 63 39 62 89 52 75 81 6 43 65 55 69 2 64 33 51
|
||||
Card 133: 34 96 6 68 85 44 60 66 3 64 | 67 60 64 82 53 85 55 99 44 34 6 68 66 92 70 84 3 45 88 19 78 24 74 96 49
|
||||
Card 134: 60 85 79 76 9 68 49 67 5 44 | 79 2 68 59 76 14 3 96 67 13 7 73 88 4 77 71 43 44 11 5 27 95 60 80 20
|
||||
Card 135: 24 84 80 20 88 19 73 22 74 56 | 67 3 13 94 50 6 8 98 87 68 17 82 99 77 14 32 23 72 93 95 60 53 41 48 51
|
||||
Card 136: 40 21 95 86 63 78 61 49 14 67 | 92 84 85 79 55 56 96 52 34 22 57 26 65 93 43 5 50 8 36 94 46 30 97 64 80
|
||||
Card 137: 89 69 19 24 83 11 97 42 18 9 | 43 38 89 82 75 14 9 58 24 29 4 19 46 42 11 2 23 97 67 17 18 69 83 81 16
|
||||
Card 138: 70 72 41 78 17 85 93 97 99 73 | 11 93 97 81 52 17 49 10 91 20 99 58 13 89 74 47 70 23 65 90 7 4 64 28 85
|
||||
Card 139: 18 38 96 48 37 73 80 89 7 19 | 77 13 3 51 4 45 76 21 93 33 43 47 57 17 24 11 35 75 59 60 44 5 90 55 32
|
||||
Card 140: 52 2 39 85 65 97 5 87 20 90 | 42 26 34 60 65 50 90 94 23 84 73 16 89 37 79 3 17 55 33 14 9 98 70 96 56
|
||||
Card 141: 85 56 58 55 62 47 92 76 95 89 | 41 58 67 78 4 61 10 17 23 1 50 21 18 90 45 94 15 37 48 31 91 54 73 35 64
|
||||
Card 142: 71 70 76 83 96 52 33 66 6 50 | 16 82 5 21 55 80 51 52 72 65 1 86 15 11 54 57 77 70 59 18 48 12 78 67 25
|
||||
Card 143: 89 67 6 13 59 12 81 61 57 25 | 27 37 13 70 68 52 82 2 74 50 92 5 85 78 93 95 34 91 87 36 55 39 32 8 48
|
||||
Card 144: 69 50 46 63 88 9 7 20 49 79 | 5 91 95 71 86 32 66 76 56 33 96 15 42 22 34 27 6 67 43 19 36 23 63 20 75
|
||||
Card 145: 69 23 76 4 13 41 50 78 17 60 | 16 57 68 43 34 11 18 66 72 7 82 5 19 91 61 36 70 15 87 59 65 21 67 2 8
|
||||
Card 146: 27 79 9 28 56 36 48 31 20 6 | 78 94 48 1 97 12 99 19 74 47 30 98 14 70 44 23 35 42 73 60 17 29 89 58 95
|
||||
Card 147: 46 80 82 8 50 77 28 85 38 41 | 27 42 57 31 45 76 67 53 13 94 68 90 89 16 11 35 51 92 10 66 63 52 6 83 65
|
||||
Card 148: 80 44 24 98 26 78 4 1 55 88 | 53 8 55 79 86 16 77 93 88 58 23 44 64 73 11 83 24 29 26 74 13 40 21 62 9
|
||||
Card 149: 81 29 26 20 92 62 50 49 69 74 | 10 26 69 96 27 74 44 70 32 31 8 95 25 90 3 89 35 1 40 20 49 29 58 59 80
|
||||
Card 150: 32 43 16 36 73 18 22 30 63 38 | 38 91 18 45 67 22 96 32 71 5 95 93 28 69 33 34 14 72 36 11 35 83 43 70 30
|
||||
Card 151: 65 61 49 29 51 72 96 71 37 94 | 33 42 51 94 62 91 29 96 61 35 92 37 30 8 24 77 72 58 23 64 65 73 49 46 71
|
||||
Card 152: 32 35 90 5 81 84 76 63 41 52 | 11 76 29 77 81 80 4 18 16 88 90 98 41 35 43 84 28 52 63 1 65 5 72 32 56
|
||||
Card 153: 13 34 18 11 77 61 94 88 7 90 | 46 25 17 93 5 43 72 28 69 1 14 55 66 63 53 62 26 68 13 37 70 78 65 34 16
|
||||
Card 154: 74 84 32 51 5 93 4 13 87 83 | 85 62 75 36 10 43 68 47 90 79 6 66 26 67 34 60 65 1 25 81 98 91 16 28 82
|
||||
Card 155: 60 7 42 76 1 18 29 93 19 83 | 49 97 62 78 15 99 71 94 25 41 28 4 51 6 3 80 87 81 75 12 26 89 91 2 17
|
||||
Card 156: 95 57 27 1 97 33 50 38 22 64 | 38 65 67 27 85 57 3 97 60 21 34 79 20 89 86 22 13 8 64 50 11 39 41 12 2
|
||||
Card 157: 59 52 71 70 92 48 42 17 75 79 | 86 75 5 68 16 55 72 70 94 60 6 1 79 31 42 61 59 38 52 97 92 53 81 67 17
|
||||
Card 158: 31 58 68 7 24 18 30 32 19 92 | 57 2 92 33 60 84 76 51 79 31 42 99 81 3 88 17 47 67 48 13 6 28 20 23 56
|
||||
Card 159: 13 42 26 92 53 33 44 45 19 90 | 59 95 2 51 25 81 17 30 3 71 36 22 58 90 33 52 8 92 37 6 11 19 45 96 88
|
||||
Card 160: 94 76 70 63 43 53 59 19 20 64 | 5 68 35 74 79 19 62 40 33 11 63 69 60 24 1 85 96 55 91 70 10 12 71 50 42
|
||||
Card 161: 34 29 98 99 81 52 96 77 57 39 | 78 96 67 3 5 20 85 10 58 79 45 62 46 92 15 97 88 2 57 40 81 74 69 61 32
|
||||
Card 162: 38 24 86 51 80 1 16 83 58 34 | 77 58 45 18 80 39 31 23 11 13 46 28 65 62 60 33 20 6 10 99 37 35 40 91 64
|
||||
Card 163: 14 97 5 33 34 96 50 47 55 74 | 6 66 77 79 37 45 39 82 90 9 50 38 14 31 19 13 29 15 89 30 17 88 12 44 53
|
||||
Card 164: 56 31 76 6 69 27 65 74 39 49 | 4 89 2 75 20 12 53 73 14 40 86 24 82 11 88 90 57 22 35 54 30 64 15 32 41
|
||||
Card 165: 62 75 48 65 43 85 8 80 45 91 | 84 74 86 98 57 38 69 78 28 22 7 19 83 60 3 55 23 34 94 13 2 58 90 11 39
|
||||
Card 166: 17 21 56 71 10 84 50 83 25 61 | 39 83 68 27 43 4 15 10 21 25 54 7 17 29 14 28 56 64 24 58 33 62 44 22 48
|
||||
Card 167: 24 89 68 2 90 36 25 82 38 59 | 28 24 83 43 46 7 56 2 38 89 6 61 59 31 50 68 32 25 36 9 88 19 82 90 14
|
||||
Card 168: 58 22 65 47 99 85 72 29 25 12 | 11 21 39 51 26 77 2 31 99 33 15 95 4 62 69 22 38 50 97 20 55 72 8 12 89
|
||||
Card 169: 99 18 97 9 10 76 72 75 26 87 | 44 94 63 21 54 96 19 8 50 9 86 16 49 41 60 5 57 7 38 27 95 12 40 85 1
|
||||
Card 170: 43 35 76 13 27 60 70 54 23 83 | 46 56 59 54 62 70 76 29 23 83 13 27 68 15 11 7 60 4 28 43 61 33 35 47 99
|
||||
Card 171: 27 58 57 48 76 97 1 86 25 40 | 36 32 61 74 82 31 38 79 33 34 46 2 27 89 50 10 22 55 72 91 39 64 43 98 42
|
||||
Card 172: 12 13 84 55 27 67 10 78 11 16 | 24 9 11 96 12 60 46 6 76 31 85 49 53 8 64 74 65 15 18 90 82 67 16 57 73
|
||||
Card 173: 60 84 36 23 82 27 14 54 74 9 | 9 37 31 62 91 14 74 13 39 38 23 87 1 84 80 92 30 54 32 60 36 48 61 82 27
|
||||
Card 174: 25 21 34 45 32 86 99 42 72 98 | 95 34 91 32 25 86 98 21 80 75 84 70 7 99 72 45 17 40 79 63 1 19 61 42 87
|
||||
Card 175: 83 24 18 84 45 38 23 42 56 14 | 14 76 98 92 46 44 97 20 13 64 72 96 16 68 57 21 6 34 3 19 55 89 9 83 1
|
||||
Card 176: 25 71 31 38 3 55 96 76 6 69 | 63 66 19 98 27 87 96 8 54 31 67 46 53 33 28 12 99 88 80 17 13 71 93 14 1
|
||||
Card 177: 38 25 67 43 18 3 16 72 57 51 | 79 52 12 72 23 56 77 80 31 42 18 99 83 60 24 33 64 32 75 85 9 90 43 8 1
|
||||
Card 178: 39 62 57 1 11 79 8 99 56 52 | 20 81 94 41 95 1 39 82 5 97 7 68 24 64 99 98 67 53 9 86 33 43 17 46 88
|
||||
Card 179: 19 63 34 49 71 38 94 17 1 33 | 86 35 94 70 38 10 33 99 54 2 39 11 92 91 34 43 67 18 12 15 95 1 23 20 49
|
||||
Card 180: 45 81 55 44 80 73 7 25 31 59 | 83 93 49 20 72 29 92 35 91 89 52 70 27 75 48 33 21 41 46 74 56 4 6 87 36
|
||||
Card 181: 42 34 76 85 33 27 66 79 58 73 | 80 71 26 6 41 39 68 36 15 19 13 33 34 62 82 88 10 3 76 46 51 99 78 85 72
|
||||
Card 182: 68 80 84 58 75 67 44 92 18 65 | 34 89 9 87 40 88 72 73 33 74 11 6 69 4 63 70 86 2 7 82 66 81 24 77 22
|
||||
Card 183: 60 22 7 19 93 32 31 23 36 41 | 6 35 77 49 29 45 39 21 57 61 22 15 70 48 94 53 31 18 87 99 52 3 62 67 33
|
||||
Card 184: 95 26 39 98 51 33 67 43 59 11 | 19 44 30 10 18 47 57 95 25 78 53 61 2 87 88 22 37 45 75 83 29 34 48 97 84
|
||||
Card 185: 7 16 46 63 13 2 99 9 93 26 | 37 28 50 41 55 75 73 6 96 82 17 92 87 10 49 72 15 86 64 36 95 32 13 5 53
|
||||
Card 186: 14 21 68 8 64 78 15 89 19 59 | 43 22 10 85 63 60 90 62 97 17 33 39 7 6 58 51 47 54 11 50 36 2 31 46 34
|
||||
@@ -0,0 +1,50 @@
|
||||
import re
|
||||
|
||||
class T:
|
||||
def __init__(self, id, winning, card):
|
||||
self.id = id
|
||||
self.winning = winning
|
||||
self.card = card
|
||||
self.instances = 1
|
||||
self.intersect = len((list)(set(winning) & set(card)))
|
||||
|
||||
def addInstance(self):
|
||||
self.instances += 1
|
||||
|
||||
|
||||
def main():
|
||||
with open("4-input.txt", 'r') as file:
|
||||
array = []
|
||||
for line in file:
|
||||
array.append(parseLine(line))
|
||||
for i, card in enumerate(array):
|
||||
for ii in range(0, card.instances):
|
||||
for iii in range(i+1, i + 1 + card.intersect):
|
||||
array[iii].addInstance()
|
||||
instancesArr = list(map(lambda x: x.instances, array))
|
||||
|
||||
print(sum(instancesArr))
|
||||
|
||||
def parseLine(s: str):
|
||||
idSplit = s.split(":")
|
||||
id = getID(idSplit[0])
|
||||
|
||||
cardSplit = idSplit[1].split("|")
|
||||
winning = re.findall(r'\d+', cardSplit[0])
|
||||
card = re.findall(r'\d+', cardSplit[1])
|
||||
cardInstance = T(id, winning, card)
|
||||
return cardInstance
|
||||
|
||||
def getColor(s: str, color: str):
|
||||
split = s.strip().split(" ")
|
||||
if(color == split[1]):
|
||||
return int(split[0])
|
||||
return 0
|
||||
|
||||
def getID(split1):
|
||||
digs = re.findall("\d+", split1)
|
||||
id = digs[0]
|
||||
return int(id)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env python3
|
||||
# 2023 Day 5: If You Give A Seed A Fertilizer
|
||||
|
||||
def process_input(filename):
|
||||
"""Acquire input data"""
|
||||
with open(filename) as file:
|
||||
input = file.read().splitlines()
|
||||
|
||||
seeds = []
|
||||
maps = []
|
||||
|
||||
for line in input:
|
||||
if line == '': continue
|
||||
|
||||
token = line.split()
|
||||
|
||||
if token[1] == 'map:':
|
||||
maps.append([])
|
||||
map_index = len(maps) - 1
|
||||
continue
|
||||
|
||||
if token[0] == 'seeds:':
|
||||
st = 1
|
||||
while st < len(token):
|
||||
seed_start = int(token[st])
|
||||
seed_end = seed_start +int(token[st+1]) - 1
|
||||
seeds.append((seed_start, seed_end))
|
||||
st += 2
|
||||
continue
|
||||
|
||||
dest = int(token[0])
|
||||
source = int(token[1])
|
||||
range_len = int(token[2])
|
||||
source_end = source + range_len - 1
|
||||
adjustment = dest - source
|
||||
maps[map_index].append((source, source_end, adjustment))
|
||||
return seeds, maps
|
||||
|
||||
def apply_maps():
|
||||
lowest = 99999999999999999
|
||||
for seed in seeds:
|
||||
destinations = []
|
||||
destinations.append(seed)
|
||||
for map in maps:
|
||||
sources = destinations
|
||||
destinations = []
|
||||
while len(sources) > 0:
|
||||
source = sources.pop()
|
||||
source_start, source_end = source
|
||||
for range in map:
|
||||
map_start, map_end, adjust = range
|
||||
if source_start >= map_start and source_end <= map_end:
|
||||
destinations.append((source_start+adjust, source_end+adjust))
|
||||
break
|
||||
if source_end < map_start or source_start > map_end:
|
||||
continue
|
||||
if source_start < map_start:
|
||||
sources.append((source_start, map_start-1))
|
||||
sources.append((map_start, source_end))
|
||||
break
|
||||
if source_end > map_end:
|
||||
sources.append((source_start, map_end))
|
||||
sources.append((map_end+1, source_end))
|
||||
break
|
||||
else:
|
||||
destinations.append(source)
|
||||
seed_lowest = lowest_location(destinations)
|
||||
lowest = min(lowest, seed_lowest)
|
||||
return lowest
|
||||
|
||||
def lowest_location(locations):
|
||||
lowest = locations[0][0]
|
||||
for location in locations:
|
||||
lowest = min(location[0], lowest)
|
||||
return lowest
|
||||
|
||||
#-----------------------------------------------------------------------------------------
|
||||
|
||||
filename = '5-input.txt'
|
||||
#filename = 'sample.txt'
|
||||
|
||||
seeds, maps = process_input(filename)
|
||||
|
||||
lowest = apply_maps()
|
||||
|
||||
print()
|
||||
print('Location:', lowest)
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
import re
|
||||
import time
|
||||
|
||||
def main():
|
||||
with open("/Users/samuelenocsson/dev/advent-of-code/5-input.txt", 'r') as file:
|
||||
row_cache = {}
|
||||
start_time = time.time()
|
||||
seed_string = file.readline()
|
||||
lines = file.readlines()
|
||||
maps =[]
|
||||
for idx, line in enumerate(lines):
|
||||
numbers = [int(digit) for digit in re.findall(r'\d+', line)]
|
||||
if len(numbers) > 0:
|
||||
maps.append(numbers)
|
||||
|
||||
seeds = [int(digit) for digit in re.findall(r'\d+', seed_string)]
|
||||
for seed in seeds:
|
||||
sources = []
|
||||
sources.append(seed)
|
||||
for m in maps:
|
||||
current = sources.pop()
|
||||
current_start = current[0]
|
||||
current_end = current[1]
|
||||
|
||||
|
||||
|
||||
location = -1
|
||||
next = 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,250 @@
|
||||
seeds: 1263068588 44436703 1116624626 2393304 2098781025 128251971 2946842531 102775703 2361566863 262106125 221434439 24088025 1368516778 69719147 3326254382 101094138 1576631370 357411492 3713929839 154258863
|
||||
|
||||
seed-to-soil map:
|
||||
2056129205 3495540274 7275274
|
||||
2093671499 2217398614 16037515
|
||||
144190400 1167267743 4402289
|
||||
685148999 560842720 46363553
|
||||
148592689 1382926008 71816170
|
||||
241575914 1243634776 139291232
|
||||
1686196783 543577846 17264874
|
||||
2601917866 2486088541 222990187
|
||||
1703461657 1454742178 45658441
|
||||
4200618033 2052611543 79792525
|
||||
2063404479 2445531749 30267020
|
||||
3026695548 4113017544 181949752
|
||||
73663477 607206273 70526923
|
||||
3412143232 2195535041 20126067
|
||||
1381626519 809568775 38912495
|
||||
4280410558 3277485604 9635485
|
||||
1285511345 435930218 30230711
|
||||
2009679577 4060471919 23976534
|
||||
491535670 129136847 193613329
|
||||
3016405776 2475798769 10289772
|
||||
2035393617 2709078728 12153762
|
||||
1760083914 1171670032 71964744
|
||||
3988522413 2233436129 212095620
|
||||
2824908053 4084448453 28569091
|
||||
799335774 434222608 1707610
|
||||
2109709014 3568263067 492208852
|
||||
2047547379 3502815548 8581826
|
||||
1275917650 466160929 9593695
|
||||
731512552 475754624 67823222
|
||||
380867146 698900251 110668524
|
||||
1315742056 1500400619 65884463
|
||||
801043384 848481270 151647344
|
||||
3208645300 3292042342 203497932
|
||||
952690728 0 129136847
|
||||
1081827575 1000128614 167139129
|
||||
0 1731434235 73663477
|
||||
1749120098 423258792 10963816
|
||||
2853477144 3511397374 56865693
|
||||
1585688167 322750176 100508616
|
||||
3432269299 2721232490 556253114
|
||||
1420539014 1566285082 165149153
|
||||
2973473810 2009679577 42931966
|
||||
220408859 677733196 21167055
|
||||
4290046043 3287121089 4921253
|
||||
2033656111 2215661108 1737506
|
||||
1248966704 1805097712 26950946
|
||||
2910342837 2132404068 63130973
|
||||
|
||||
soil-to-fertilizer map:
|
||||
3192416630 3819045895 47516706
|
||||
39972266 597632895 4546595
|
||||
2584201752 2580457211 100644566
|
||||
2272135078 174545609 40291463
|
||||
2819419661 2681101777 89335599
|
||||
3239933336 3528823147 72816699
|
||||
44518861 2232362178 145175982
|
||||
2519969464 2377538160 64232288
|
||||
1852478702 2770437376 313570784
|
||||
2166049486 2441770448 106085592
|
||||
4133995881 3866562601 160971415
|
||||
1626150228 975660836 106177604
|
||||
2908755260 422379995 175252900
|
||||
3312750035 4178991584 115975712
|
||||
1142288544 1324281099 483861684
|
||||
833150172 1928293653 304068525
|
||||
1732327832 1808142783 120150870
|
||||
2684846318 39972266 134573343
|
||||
3133663001 4027534016 58753629
|
||||
189694843 602179490 373481346
|
||||
3758375673 4086287645 92703939
|
||||
3428725747 3199173221 329649926
|
||||
1137218697 2547856040 5069847
|
||||
4068485661 3133663001 65510220
|
||||
590707513 1081838440 242442659
|
||||
2312426541 214837072 207542923
|
||||
563176189 2552925887 27531324
|
||||
3851079612 3601639846 217406049
|
||||
|
||||
fertilizer-to-water map:
|
||||
153835826 1814144363 127150990
|
||||
1926426485 1614900585 14868868
|
||||
2139872846 3136260217 42408895
|
||||
3310771078 2202805875 59788141
|
||||
83898078 1578023222 36877363
|
||||
652411041 1574694502 3328720
|
||||
2080480520 3785135933 59392326
|
||||
3370559219 3272622808 82257970
|
||||
3132498144 2037809941 164995934
|
||||
2678755579 3455437189 65205729
|
||||
3674754588 3844528259 234175097
|
||||
2182281741 3520642918 59000325
|
||||
570340096 1492623557 82070945
|
||||
2779822218 2446205321 138940597
|
||||
2037809941 2703025450 42670579
|
||||
3515202222 2342244856 103960465
|
||||
3998026660 4136896949 144793347
|
||||
955105072 0 84792564
|
||||
3452817189 3073875184 62385033
|
||||
77176799 1459627033 6721279
|
||||
4142820007 4078703356 58193593
|
||||
280986816 1091602584 230166265
|
||||
1701766245 1321768849 78671169
|
||||
2987155826 2872940965 145342318
|
||||
2418013523 3615504153 169631780
|
||||
2587645303 2262594016 79650840
|
||||
2667296143 3354880778 11459436
|
||||
2743961308 3579643243 35860910
|
||||
1880850385 1046026484 45576100
|
||||
3297494078 4281690296 13277000
|
||||
2918762815 2804547954 68393011
|
||||
1854575140 1466348312 26275245
|
||||
3908929685 3366340214 89096975
|
||||
511153081 1400440018 59187015
|
||||
655739761 864167436 181859048
|
||||
120775441 1629769453 33060385
|
||||
2241282066 2745696029 58851925
|
||||
2300133991 2585145918 117879532
|
||||
4201013600 3178669112 93953696
|
||||
837598809 84792564 117506263
|
||||
1039897636 202298827 661868609
|
||||
3619162687 3018283283 55591901
|
||||
0 1736967564 77176799
|
||||
1780437414 1662829838 74137726
|
||||
|
||||
water-to-light map:
|
||||
279076302 606101520 367597147
|
||||
3291538704 3736283841 125013874
|
||||
0 1709355698 279076302
|
||||
2106348780 1988432000 822929157
|
||||
2929277937 0 362260767
|
||||
890514202 2811361157 924922684
|
||||
3416552578 973698667 444745137
|
||||
1815436886 1418443804 290911894
|
||||
646673449 362260767 243840753
|
||||
|
||||
light-to-temperature map:
|
||||
208346365 819874354 29069132
|
||||
731840321 689055790 58614896
|
||||
4186248520 4104876526 108718776
|
||||
3429769554 3384048873 23936103
|
||||
1459123931 2691296758 217855736
|
||||
790455217 952719646 105546549
|
||||
1416544830 2047230764 42579101
|
||||
0 1202755810 208346365
|
||||
1399364673 1598820754 17180157
|
||||
2576491919 747670686 452381
|
||||
901868462 2408707242 282589516
|
||||
3626168682 4259315983 35651313
|
||||
341191657 748123067 71751287
|
||||
2721433915 1411102175 187718579
|
||||
3822370242 3740998248 198425166
|
||||
3245552556 4213595302 45720681
|
||||
1676979667 100628240 254569707
|
||||
896001766 2041364068 5866696
|
||||
3291273237 3245552556 138496317
|
||||
3661819995 3580448001 160550247
|
||||
2063025564 380090092 308965698
|
||||
4020795408 3939423414 165453112
|
||||
237415497 848943486 103776160
|
||||
1931549374 1909887878 131476190
|
||||
2576944300 1058266195 144489615
|
||||
717031505 2089809865 14808816
|
||||
412942944 2104618681 304088561
|
||||
1209350123 0 100628240
|
||||
1309978363 1820501568 89386310
|
||||
3453705657 3407984976 172463025
|
||||
2371991262 1616000911 204500657
|
||||
1184457978 355197947 24892145
|
||||
|
||||
temperature-to-humidity map:
|
||||
4116612848 1770461885 178354448
|
||||
475467700 3077125572 130863723
|
||||
1272723717 1181397963 5578998
|
||||
3758341401 495891106 279864899
|
||||
1687813623 1591451985 2235236
|
||||
2530388822 2518678506 215908033
|
||||
2282034531 2032693852 208761140
|
||||
1471990450 379604394 116286712
|
||||
1817301926 3588566075 238614487
|
||||
3086830522 2960704657 28309403
|
||||
3692580145 2002277669 19886809
|
||||
616860797 3221548716 360840790
|
||||
3115139925 1226570112 16611162
|
||||
336172750 170230298 133118381
|
||||
977701587 1693223682 77238203
|
||||
1366414227 775756005 105576223
|
||||
2055916413 2734586539 226118118
|
||||
4038206300 2287329439 78406548
|
||||
3712466954 2241454992 45874447
|
||||
3556277513 2516499157 2179349
|
||||
1278302715 2989014060 88111512
|
||||
1588277162 1593687221 99536461
|
||||
2746296855 3827180562 340533667
|
||||
469291131 3582389506 6176569
|
||||
1054939790 1960273136 42004533
|
||||
1247816059 3207989295 13559421
|
||||
2490795671 1186976961 39593151
|
||||
1261375480 1948816333 11348237
|
||||
36107015 881332228 300065735
|
||||
1096944323 2365735987 150763170
|
||||
3131751087 303348679 76255715
|
||||
3558456862 36107015 134123283
|
||||
3208006802 1243181274 348270711
|
||||
606331423 2022164478 10529374
|
||||
1690048859 4167714229 127253067
|
||||
1247707493 1960164570 108566
|
||||
|
||||
humidity-to-location map:
|
||||
3760908805 3662107228 155796250
|
||||
1580497895 3884288658 144897726
|
||||
3166374808 442179790 213926492
|
||||
121876139 656106282 138383174
|
||||
393463083 2300882189 128101885
|
||||
2948945727 3512929162 110263469
|
||||
521564968 2652674020 210495874
|
||||
1940349169 3864399213 19889445
|
||||
1197505529 794489456 93759960
|
||||
904168980 2539693608 75416982
|
||||
1725395621 3623192631 38914597
|
||||
2881030575 888249416 49678445
|
||||
2116891732 1943237764 146499392
|
||||
979585962 2615110590 37563430
|
||||
3143485439 3262014106 22889369
|
||||
791255257 4029186384 109003936
|
||||
4209132419 4140663408 85834877
|
||||
1764310218 192277746 165625801
|
||||
2023373170 2466550792 73142816
|
||||
4140663408 4226498285 68469011
|
||||
2269931546 1003317103 611099029
|
||||
1291265489 0 119152028
|
||||
2930709020 3243777399 18236707
|
||||
732060842 1884043349 59194415
|
||||
1410417517 1614416132 170080378
|
||||
1960238614 937927861 63134556
|
||||
1929936019 2089737156 10413150
|
||||
3380301300 2863169894 380607505
|
||||
3916705055 3291443897 221485265
|
||||
355896365 2428984074 37566718
|
||||
2254686 3817903478 46495735
|
||||
2096515986 2280506443 20375746
|
||||
1017149392 2100150306 180356137
|
||||
0 1001062417 2254686
|
||||
260259313 1784496510 95637052
|
||||
48750421 119152028 73125718
|
||||
3059209196 357903547 84276243
|
||||
2263391124 3284903475 6540422
|
||||
900259193 1880133562 3909787
|
||||
@@ -0,0 +1,33 @@
|
||||
seeds: 79 14 55 13
|
||||
|
||||
seed-to-soil map:
|
||||
50 98 2
|
||||
52 50 48
|
||||
|
||||
soil-to-fertilizer map:
|
||||
0 15 37
|
||||
37 52 2
|
||||
39 0 15
|
||||
|
||||
fertilizer-to-water map:
|
||||
49 53 8
|
||||
0 11 42
|
||||
42 0 7
|
||||
57 7 4
|
||||
|
||||
water-to-light map:
|
||||
88 18 7
|
||||
18 25 70
|
||||
|
||||
light-to-temperature map:
|
||||
45 77 23
|
||||
81 45 19
|
||||
68 64 13
|
||||
|
||||
temperature-to-humidity map:
|
||||
0 69 1
|
||||
1 0 69
|
||||
|
||||
humidity-to-location map:
|
||||
60 56 37
|
||||
56 93 4
|
||||
@@ -0,0 +1,96 @@
|
||||
from concurrent.futures import ProcessPoolExecutor
|
||||
import re
|
||||
import time
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
with open("/Users/samuelenocsson/dev/advent-of-code/5-input.txt", 'r') as file:
|
||||
row_cache = {}
|
||||
start_time = time.time()
|
||||
seed_string = file.readline()
|
||||
lines = file.readlines()
|
||||
for idx, line in enumerate(lines):
|
||||
numbers = [int(digit) for digit in re.findall(r'\d+', line)]
|
||||
row_cache[idx] = numbers
|
||||
|
||||
digits = [int(digit) for digit in re.findall(r'\d+', seed_string)]
|
||||
seeds = []
|
||||
location = -1
|
||||
next = 0
|
||||
|
||||
with ProcessPoolExecutor() as executor:
|
||||
for i, d in enumerate(digits):
|
||||
if i != next: continue
|
||||
first = digits[i]
|
||||
first_range = digits[i+1]
|
||||
print(f"{first} -> {first + first_range}")
|
||||
results = []
|
||||
get_location(first, first_range, row_cache)
|
||||
|
||||
|
||||
next += 2
|
||||
#seeds = getSeeds(seed_string)
|
||||
|
||||
#for seed in seeds:
|
||||
#seed = get_location(lines, seed)
|
||||
#locations.append(seed)
|
||||
#location = min(f.result() for f in seeds)
|
||||
location = min(seeds)
|
||||
print(f"Closest location {location}")
|
||||
end_time = time.time()
|
||||
elapsed_time = end_time - start_time
|
||||
print(f"Elapsed time: {elapsed_time} seconds")
|
||||
|
||||
def chunks(lst, chunk_size):
|
||||
for i in range(0, len(lst), chunk_size):
|
||||
yield lst[i:i + chunk_size]
|
||||
|
||||
def process(list, row_cache):
|
||||
seeds = []
|
||||
for s in list:
|
||||
#seeds.append(executor.submit(get_location, s))
|
||||
seeds.append(get_location(s, row_cache))
|
||||
#return min(f.result() for f in seeds)
|
||||
return min(seeds)
|
||||
|
||||
def get_location(from_seed, to_seed, row_cache):
|
||||
nrLines = len(row_cache)
|
||||
init_seed = seed
|
||||
#print(f"finding location for {seed}")
|
||||
new_seed = seed
|
||||
fast_forward = False
|
||||
for i in range(0, nrLines):
|
||||
mappings = row_cache.get(i)
|
||||
if len(mappings) > 0 and fast_forward: continue
|
||||
if len(mappings) == 0:
|
||||
fast_forward = False
|
||||
continue
|
||||
source = mappings[1]
|
||||
destination = mappings[0]
|
||||
r = mappings[2]
|
||||
if source <= seed <= source + r:
|
||||
diff = seed - source
|
||||
new_seed = destination + diff
|
||||
fast_forward = True
|
||||
|
||||
#print(f"{seed} -> {new_seed}")
|
||||
seed = new_seed
|
||||
#print(f"Location {init_seed} -> {seed}")
|
||||
return seed
|
||||
|
||||
def getSeeds(s: str):
|
||||
digits = [int(digit) for digit in re.findall(r'\d+', s)]
|
||||
seeds = []
|
||||
next = 0
|
||||
for i, d in enumerate(digits):
|
||||
if i != next: continue
|
||||
first = digits[i]
|
||||
first_range = digits[i+1]
|
||||
for nr in range(first, first + first_range):
|
||||
seeds.append(nr)
|
||||
next += 2
|
||||
return seeds
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,2 @@
|
||||
Time: 44 89 96 91
|
||||
Distance: 277 1136 1890 1768
|
||||
@@ -0,0 +1,2 @@
|
||||
Time: 7 15 30
|
||||
Distance: 9 40 200
|
||||
@@ -0,0 +1,25 @@
|
||||
import re
|
||||
|
||||
def main():
|
||||
with open("6-input.txt", 'r') as file:
|
||||
winning_distances = []
|
||||
lines = file.readlines()
|
||||
time = ''.join(re.findall('\d+', lines[0]))
|
||||
distance = ''.join(re.findall('\d+', lines[1]))
|
||||
result = calcualte_distance(int(time), int(distance))
|
||||
winning_distances.append(len(result))
|
||||
winning_totals = 1
|
||||
for value in winning_distances:
|
||||
winning_totals *= value
|
||||
print(winning_totals)
|
||||
|
||||
def calcualte_distance(time: int, distance: int):
|
||||
reaches_longer = []
|
||||
for i in range(0, time):
|
||||
d = i * (time - i)
|
||||
if d > distance:
|
||||
reaches_longer.append(d)
|
||||
return reaches_longer
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
+1000
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,14 @@
|
||||
AAAAA 2
|
||||
22222 3
|
||||
AAAAK 5
|
||||
22223 7
|
||||
AAAKK 11
|
||||
22233 13
|
||||
AAAKQ 17
|
||||
22234 19
|
||||
AAKKQ 23
|
||||
22334 29
|
||||
AAKQJ 31
|
||||
22345 37
|
||||
AKQJT 41
|
||||
23456 43
|
||||
@@ -0,0 +1,94 @@
|
||||
from functools import cmp_to_key
|
||||
|
||||
value = ["J","1", "2", "3", "4", "5", "6", "7", "8", "9", "T", "Q", "K", "A"]
|
||||
|
||||
class Hand:
|
||||
def __init__(self, hand: str, bet: int, power: int, unsorted_power: int):
|
||||
self.hand = hand
|
||||
self.bet = bet
|
||||
self.power = power
|
||||
self.unsorted_power = unsorted_power
|
||||
|
||||
def bet(self):
|
||||
return self.bet
|
||||
|
||||
def main():
|
||||
with open("7-input.txt", 'r') as file:
|
||||
hands = []
|
||||
for line in file.readlines():
|
||||
line = line.strip()
|
||||
split = line.split(' ')
|
||||
hands.append(Hand(split[0], int(split[1]), power(split[0]), unsorted_power(split[0])))
|
||||
p = list(sorted(hands, key=cmp_to_key(custom_comparator), reverse=True))
|
||||
mapped= list(map(lambda x: (x.hand, x.power, x.bet), p))
|
||||
print(mapped)
|
||||
result = 0
|
||||
for i, hand in enumerate(p):
|
||||
rank = (len(p)-i)
|
||||
product = hand.bet * rank
|
||||
result = result + product
|
||||
print(result)
|
||||
|
||||
def custom_comparator(element1: Hand, element2:Hand):
|
||||
# Replace this with your own logic to compare two elements
|
||||
# Here, we are comparing based on the length of the strings
|
||||
|
||||
if element1.power < element2.power:
|
||||
return -1
|
||||
elif element1.power > element2.power:
|
||||
return 1
|
||||
else:
|
||||
for i in range(0,5):
|
||||
v1 = value.index(element1.hand[i])
|
||||
v2 = value.index(element2.hand[i])
|
||||
if v1 < v2:
|
||||
return -1
|
||||
elif v1 > v2:
|
||||
return 1
|
||||
return 0
|
||||
|
||||
def unsorted_power(hand: str):
|
||||
unsorted_hand_power = 0
|
||||
for i, char in enumerate(hand):
|
||||
unsorted_hand_power += value.index(char) * (1000 - (pow(i, 2)))
|
||||
return int(unsorted_hand_power)
|
||||
|
||||
def power(hand: str):
|
||||
power = []
|
||||
j_count = hand.count("J")
|
||||
if j_count == 5: return 500
|
||||
for char in hand:
|
||||
if char == 'J': continue
|
||||
count=hand.count(char)
|
||||
t = (count, char, value.index(char))
|
||||
if count > 0 and power.count(t) == 0:
|
||||
power.append(t)
|
||||
s = sorted(power, key=lambda x: (x[0],x[2]),reverse=True)
|
||||
highest = s[0]
|
||||
nd_highest = None
|
||||
if len(s) > 1:
|
||||
nd_highest = s[1]
|
||||
|
||||
count = highest[0]
|
||||
if count == 5 or count + j_count == 5:
|
||||
return 500 #+ value.index(first[1])
|
||||
if count == 4 or count + j_count == 4:
|
||||
return 400 #+ value.index(first[1])
|
||||
if count == 3 or count + j_count == 3:
|
||||
j_count = 0
|
||||
if nd_highest != None:
|
||||
second = nd_highest[0]
|
||||
if second == 2 or second + j_count == 2:
|
||||
return 300# + value.index(first[1]) + value.index(second[1])
|
||||
return 200# + value.index(first[1])
|
||||
if count == 2 or count + j_count == 2:
|
||||
j_left = count - j_count
|
||||
second = nd_highest[0]
|
||||
if second == 2:
|
||||
return 150# + value.index(first[1]) + value.index(second[1])
|
||||
return 100# + value.index(first[1])
|
||||
return 1
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -0,0 +1,740 @@
|
||||
LLRLLRRLRLRRRLRRLLRRRLRLRLRRLRRRLRRLRLRLLRLLLRRRLRRLRRRLRRRLRRRLRLRRLLRRLRRLRRLRRRLRLRRRLLRLRRLRRRLRLRRRLRRRLRLRRRLLRRRLRRRLRLRRLRLRRRLLRRLRRLRRLRRLRLRLRRRLLRRRLRRLRRRLRLRLRRRLLRLRRLLRLRRLRLRRRLRLRRLLRRRLLRRLRLRLLRLLRRLRRLLRRLRLRRLRLRLRRRLRRLRLLLLRRLRLRLRRRLLLRRRLRRLRRLRLLRLRRRLLLRRRLRRRLRRRR
|
||||
|
||||
NQT = (TXC, RVJ)
|
||||
FPT = (PNS, KJL)
|
||||
BNQ = (THG, LCV)
|
||||
SPL = (VBH, NNV)
|
||||
TLM = (LVQ, PGT)
|
||||
GHC = (XKN, SPR)
|
||||
PHT = (HMF, DST)
|
||||
FSF = (JCM, SMT)
|
||||
GDD = (FHJ, RBS)
|
||||
GVR = (FVD, FVD)
|
||||
SST = (PMF, MGC)
|
||||
ZZZ = (VLV, SQV)
|
||||
SDV = (DBL, GTL)
|
||||
XSP = (GRV, RFM)
|
||||
SKG = (NGH, VDX)
|
||||
BPK = (RMK, LCQ)
|
||||
VSC = (DRN, SFR)
|
||||
BFR = (BJR, GMD)
|
||||
HTM = (PFM, LVD)
|
||||
XVP = (LDP, LDP)
|
||||
DRD = (SCH, LKD)
|
||||
DSJ = (GSQ, JTN)
|
||||
VTS = (BNQ, VFX)
|
||||
KVF = (HTP, MQK)
|
||||
GPS = (FXQ, TPF)
|
||||
VRC = (RTK, RTK)
|
||||
HRD = (PMQ, JCR)
|
||||
DJK = (FTC, KXH)
|
||||
VGJ = (PCJ, TVH)
|
||||
QMN = (TLC, HNG)
|
||||
DMH = (QSD, PDP)
|
||||
CRL = (VFR, MDR)
|
||||
XGV = (CMV, FTV)
|
||||
XJX = (HTM, HHG)
|
||||
SQP = (XKK, KJF)
|
||||
PXZ = (JCK, PTH)
|
||||
BDV = (JMH, CND)
|
||||
FBD = (CQS, QCN)
|
||||
TRS = (FGM, NKF)
|
||||
TLC = (HBC, FRC)
|
||||
DKR = (LCP, VLD)
|
||||
GTF = (QHD, PBB)
|
||||
NCC = (HJF, LNR)
|
||||
KGS = (KPF, GTB)
|
||||
CPQ = (SLR, DRD)
|
||||
RJQ = (KXK, BFR)
|
||||
XSQ = (PNN, NMG)
|
||||
DVP = (MBH, QLV)
|
||||
CQL = (DVP, VHQ)
|
||||
CPV = (MDL, VFB)
|
||||
VHV = (CQS, QCN)
|
||||
NRD = (KSC, HKX)
|
||||
STX = (CGJ, PGK)
|
||||
CNP = (FVB, MCN)
|
||||
JXT = (DXT, LHK)
|
||||
GHG = (MCL, MPB)
|
||||
PGK = (RMS, SBC)
|
||||
DNH = (FSV, RNS)
|
||||
TFZ = (NQT, PBD)
|
||||
MBQ = (DPH, FDK)
|
||||
SJQ = (JLB, LJJ)
|
||||
MBN = (FTD, CDB)
|
||||
TDJ = (FJB, PQX)
|
||||
DXT = (FJP, HGQ)
|
||||
MSG = (MSM, CXN)
|
||||
RTK = (GVR, GVR)
|
||||
SDX = (VTS, MRG)
|
||||
VCX = (QTL, NVV)
|
||||
XCS = (KLR, THD)
|
||||
RDD = (QDS, JST)
|
||||
FVB = (BLD, NPF)
|
||||
LVD = (JXC, FQR)
|
||||
TMR = (SNJ, DML)
|
||||
RCH = (JST, QDS)
|
||||
RVJ = (XMN, SDT)
|
||||
SQV = (MVP, MKC)
|
||||
HDB = (LTL, JJP)
|
||||
LVC = (CLL, CLL)
|
||||
FGM = (TPG, PHK)
|
||||
SCS = (MLK, TKF)
|
||||
PRF = (TLB, KTT)
|
||||
MPM = (NMN, KGS)
|
||||
MGC = (NLT, MGS)
|
||||
CNK = (BFR, KXK)
|
||||
FXQ = (JMX, LLL)
|
||||
GTB = (MFM, PMV)
|
||||
VXS = (DPN, FPN)
|
||||
NRB = (SCS, SGH)
|
||||
QLJ = (NLL, VMM)
|
||||
PNN = (SFJ, HSR)
|
||||
BRJ = (RMQ, XLJ)
|
||||
SNF = (FMH, MNR)
|
||||
VLD = (SHN, FBG)
|
||||
FSM = (GKF, DBC)
|
||||
MHP = (LBX, KQH)
|
||||
NSQ = (QKK, KND)
|
||||
RRT = (RMK, LCQ)
|
||||
BCX = (GTM, MVV)
|
||||
XSX = (XFK, XNF)
|
||||
TKF = (MFF, VCV)
|
||||
HPD = (GHC, RKN)
|
||||
MRG = (BNQ, VFX)
|
||||
QTK = (QRT, RRB)
|
||||
HFF = (NKD, SXP)
|
||||
MFM = (BRB, DDN)
|
||||
VVL = (GPC, BRJ)
|
||||
CST = (GQT, NLG)
|
||||
THD = (MVK, DRJ)
|
||||
XFN = (JNC, MNF)
|
||||
NKH = (PMD, BDV)
|
||||
NLT = (HKK, KCD)
|
||||
VXR = (XCS, GRX)
|
||||
SDS = (JBV, JFM)
|
||||
BFM = (XXG, CHQ)
|
||||
PMD = (JMH, CND)
|
||||
VVF = (GQT, NLG)
|
||||
FGG = (NRD, SNP)
|
||||
LKD = (NGK, SQP)
|
||||
RSV = (TXL, GPD)
|
||||
LNR = (RDB, NTD)
|
||||
RPL = (SNB, MHK)
|
||||
CCG = (JDT, PJD)
|
||||
TKR = (TMD, VCL)
|
||||
DRJ = (CQL, XFH)
|
||||
JFM = (MMV, GPS)
|
||||
FJP = (BDM, QXN)
|
||||
QJS = (BFM, RHM)
|
||||
KTT = (PXV, VJV)
|
||||
XXB = (VKG, HXL)
|
||||
RMK = (DBR, HFQ)
|
||||
NGK = (KJF, XKK)
|
||||
NPF = (SMK, BTJ)
|
||||
RBS = (PGN, GNH)
|
||||
PNS = (VTJ, KSM)
|
||||
BCK = (SDX, NRF)
|
||||
RNS = (XVS, KFX)
|
||||
PDB = (BHH, BHH)
|
||||
GMQ = (MRD, JRG)
|
||||
DGM = (HDV, GSD)
|
||||
TLB = (PXV, VJV)
|
||||
QRT = (FRS, FFT)
|
||||
VSX = (NLL, VMM)
|
||||
GSQ = (JRJ, LGV)
|
||||
TXC = (XMN, SDT)
|
||||
HGQ = (QXN, BDM)
|
||||
PMQ = (KBB, NRH)
|
||||
KRC = (DGM, XCR)
|
||||
QLZ = (TKM, HTF)
|
||||
NJM = (GPC, BRJ)
|
||||
FRG = (QLS, GXP)
|
||||
NMG = (SFJ, HSR)
|
||||
JDT = (TDF, QHT)
|
||||
LFC = (RFM, GRV)
|
||||
TXL = (XSX, FTP)
|
||||
DKG = (JNL, XBR)
|
||||
VKF = (GTM, MVV)
|
||||
VQV = (RHT, SDS)
|
||||
SJH = (LPV, TRQ)
|
||||
KSM = (LHX, CPQ)
|
||||
QMH = (MMD, GPB)
|
||||
VNP = (TRQ, LPV)
|
||||
NBM = (JPF, KRM)
|
||||
RGQ = (TMH, KQR)
|
||||
RSM = (SMP, KSG)
|
||||
HDV = (VXS, VQG)
|
||||
TTD = (CDB, FTD)
|
||||
GXF = (SLN, SCF)
|
||||
QHT = (TMR, QTH)
|
||||
MNR = (VXR, GDS)
|
||||
GSA = (THS, NKH)
|
||||
XKN = (GNB, VLQ)
|
||||
HHQ = (RRB, QRT)
|
||||
CLC = (THS, NKH)
|
||||
BSN = (QKN, QKN)
|
||||
QRB = (KDT, JSL)
|
||||
JCX = (VCX, DXP)
|
||||
BDM = (SQN, TBH)
|
||||
GQT = (DNB, NTS)
|
||||
QSF = (KXH, FTC)
|
||||
HFQ = (NNQ, LLM)
|
||||
VFB = (NGF, NXB)
|
||||
JMX = (HFB, DNR)
|
||||
VKS = (NBM, NQF)
|
||||
PGN = (FBD, VHV)
|
||||
PNQ = (KQR, TMH)
|
||||
QLM = (VVL, NJM)
|
||||
PRB = (KQD, QRB)
|
||||
GTL = (VQJ, DJR)
|
||||
KNL = (JRN, KVF)
|
||||
VMT = (LTL, JJP)
|
||||
QKN = (PHM, VQS)
|
||||
QBL = (LXK, PRF)
|
||||
PCT = (VNP, SJH)
|
||||
QLV = (HXF, DXH)
|
||||
HNN = (DSJ, XDN)
|
||||
LGV = (VVD, XXB)
|
||||
XCB = (XXQ, CHX)
|
||||
GXC = (FGG, MSX)
|
||||
SLN = (VLP, SST)
|
||||
NQQ = (SXP, NKD)
|
||||
DRN = (DPC, TCV)
|
||||
JHF = (QTK, HHQ)
|
||||
GPM = (GTF, NCX)
|
||||
PFM = (JXC, JXC)
|
||||
KBT = (KQH, LBX)
|
||||
XFH = (VHQ, DVP)
|
||||
CPT = (VSD, TKR)
|
||||
GSX = (CTF, XXX)
|
||||
SPR = (GNB, VLQ)
|
||||
XBP = (MXH, TBJ)
|
||||
VKG = (PKS, CPT)
|
||||
THG = (FRP, FRP)
|
||||
SHN = (FRG, TCF)
|
||||
BFS = (RPL, JRV)
|
||||
PHK = (BQG, BMH)
|
||||
SMK = (VRV, FDG)
|
||||
PBF = (MSG, XGT)
|
||||
NKF = (TPG, PHK)
|
||||
VDQ = (MHP, KBT)
|
||||
JRG = (DXJ, JCX)
|
||||
MHK = (QTS, CRL)
|
||||
CXN = (FBR, FCT)
|
||||
DHT = (XXQ, CHX)
|
||||
DML = (SPL, TBX)
|
||||
BTJ = (FDG, VRV)
|
||||
KVG = (TJJ, TRS)
|
||||
JPH = (CLC, DXZ)
|
||||
HXL = (PKS, CPT)
|
||||
RDB = (PKM, FLG)
|
||||
CTF = (NLX, SJQ)
|
||||
BMH = (GVP, NSQ)
|
||||
GTP = (NMG, PNN)
|
||||
KJL = (KSM, VTJ)
|
||||
SLR = (LKD, SCH)
|
||||
TJJ = (NKF, FGM)
|
||||
DPH = (HHT, NRB)
|
||||
PBN = (CLC, CLC)
|
||||
FFT = (DJK, QSF)
|
||||
RTL = (TBJ, MXH)
|
||||
PJD = (TDF, QHT)
|
||||
HTP = (BGK, NCC)
|
||||
MDL = (NXB, NGF)
|
||||
CGJ = (SBC, RMS)
|
||||
RTR = (LHK, DXT)
|
||||
MLR = (JNC, MNF)
|
||||
DXL = (RKN, GHC)
|
||||
QTS = (VFR, MDR)
|
||||
LLM = (KSK, BHN)
|
||||
FFJ = (HGD, HGD)
|
||||
PQX = (VRC, KXG)
|
||||
XFK = (QNM, TMC)
|
||||
FVD = (HTF, TKM)
|
||||
CSR = (XDN, DSJ)
|
||||
VPN = (DPH, FDK)
|
||||
TJN = (HGC, HJH)
|
||||
KSC = (SVX, SVX)
|
||||
TLH = (FSV, RNS)
|
||||
QTH = (DML, SNJ)
|
||||
VQJ = (SMR, KCL)
|
||||
GNP = (JRQ, GBR)
|
||||
TKB = (TLC, HNG)
|
||||
FBV = (BFM, RHM)
|
||||
DMS = (BTG, NXV)
|
||||
VDX = (BCM, RNG)
|
||||
MSN = (QTK, HHQ)
|
||||
TKM = (LSM, PBF)
|
||||
FSS = (MCN, FVB)
|
||||
DLA = (PHM, VQS)
|
||||
LXK = (KTT, TLB)
|
||||
JBV = (MMV, GPS)
|
||||
FFQ = (QJS, FBV)
|
||||
MXH = (RPP, LKF)
|
||||
RKN = (SPR, XKN)
|
||||
FDG = (RSC, QMH)
|
||||
NLL = (VKS, FPF)
|
||||
XDN = (JTN, GSQ)
|
||||
FLS = (JNL, XBR)
|
||||
MLA = (PTH, JCK)
|
||||
GTM = (FSS, CNP)
|
||||
NVV = (LLR, NLV)
|
||||
TBX = (VBH, NNV)
|
||||
HTG = (VDQ, GFH)
|
||||
VLQ = (HXR, QNQ)
|
||||
JSL = (MVC, DJM)
|
||||
BPX = (VVL, NJM)
|
||||
FBG = (FRG, TCF)
|
||||
PFS = (HMH, KFF)
|
||||
GPB = (DDH, RSM)
|
||||
JFB = (FXX, GXC)
|
||||
XJZ = (VQS, PHM)
|
||||
FRS = (QSF, DJK)
|
||||
NKP = (PDB, SGT)
|
||||
KSB = (CTF, XXX)
|
||||
DTL = (FMH, MNR)
|
||||
HSN = (PBN, JPH)
|
||||
JCQ = (XCB, DHT)
|
||||
GBR = (NKP, GHV)
|
||||
BKL = (CKM, XJX)
|
||||
JLH = (XGV, MXR)
|
||||
TBJ = (LKF, RPP)
|
||||
RSJ = (HVN, KKH)
|
||||
SVX = (BSN, BSN)
|
||||
GRV = (CHT, NMV)
|
||||
TKX = (RHT, SDS)
|
||||
MQK = (BGK, NCC)
|
||||
KLR = (DRJ, MVK)
|
||||
NCH = (BCX, VKF)
|
||||
NLX = (JLB, LJJ)
|
||||
VHQ = (MBH, QLV)
|
||||
QXR = (NCH, FRT)
|
||||
FQS = (VGJ, HFG)
|
||||
LCP = (SHN, FBG)
|
||||
NCX = (QHD, PBB)
|
||||
SXK = (HGD, ZZZ)
|
||||
RNR = (RTR, JXT)
|
||||
VQG = (FPN, DPN)
|
||||
RMJ = (HNN, CSR)
|
||||
KSL = (BCK, QQJ)
|
||||
HCK = (QMN, TKB)
|
||||
LBX = (HFD, XQH)
|
||||
MTL = (NCH, FRT)
|
||||
XHR = (KFL, TLM)
|
||||
LLH = (LFC, XSP)
|
||||
JRJ = (XXB, VVD)
|
||||
KGM = (FQS, KGC)
|
||||
SDT = (MNQ, GTN)
|
||||
GJQ = (KLG, DMS)
|
||||
RNG = (RNR, GHB)
|
||||
DCK = (TXL, GPD)
|
||||
DXJ = (DXP, VCX)
|
||||
SNP = (KSC, HKX)
|
||||
KRS = (BMQ, GBP)
|
||||
GPC = (RMQ, XLJ)
|
||||
CDB = (MXQ, XLM)
|
||||
NLV = (FGS, KNL)
|
||||
GNB = (HXR, QNQ)
|
||||
KFL = (PGT, LVQ)
|
||||
HQL = (QXR, MTL)
|
||||
BJR = (PBH, PHT)
|
||||
QTL = (LLR, NLV)
|
||||
SNB = (CRL, QTS)
|
||||
LDP = (PBN, PBN)
|
||||
DFJ = (FHJ, RBS)
|
||||
JJP = (XMJ, VVQ)
|
||||
GQC = (QRB, KQD)
|
||||
SFR = (DPC, TCV)
|
||||
MPB = (FSM, GGL)
|
||||
SXP = (QFP, GFQ)
|
||||
MNF = (DKG, FLS)
|
||||
KLG = (NXV, BTG)
|
||||
TVH = (JFB, PJJ)
|
||||
SHJ = (SFX, TMT)
|
||||
RHF = (SRD, KBV)
|
||||
XBR = (NQQ, HFF)
|
||||
PBD = (RVJ, TXC)
|
||||
XXQ = (KSL, DDL)
|
||||
FTP = (XNF, XFK)
|
||||
HBC = (JTF, LLH)
|
||||
BTG = (HDB, VMT)
|
||||
KFX = (DMH, GBM)
|
||||
SGH = (MLK, TKF)
|
||||
CVS = (GBP, BMQ)
|
||||
DDL = (BCK, QQJ)
|
||||
PKM = (QNV, DPJ)
|
||||
QSR = (KJL, PNS)
|
||||
KPD = (PCT, MCP)
|
||||
BHH = (LVC, LVC)
|
||||
MDR = (HTG, SFD)
|
||||
HKK = (DXL, HPD)
|
||||
SMD = (RCQ, NJD)
|
||||
XMJ = (MKM, NTN)
|
||||
CQS = (DNH, TLH)
|
||||
PBH = (HMF, DST)
|
||||
MKC = (CJH, JDQ)
|
||||
KLL = (FJB, PQX)
|
||||
CXP = (VGS, HFX)
|
||||
JPF = (STX, BXV)
|
||||
CRV = (RCQ, NJD)
|
||||
FDK = (NRB, HHT)
|
||||
BTT = (CRV, SMD)
|
||||
RHT = (JBV, JFM)
|
||||
MXR = (FTV, CMV)
|
||||
DBL = (DJR, VQJ)
|
||||
CHX = (DDL, KSL)
|
||||
JKX = (VDX, NGH)
|
||||
MQA = (HTF, TKM)
|
||||
DJQ = (DLT, SBS)
|
||||
VFR = (SFD, HTG)
|
||||
NMN = (KPF, GTB)
|
||||
JNK = (VNQ, TPT)
|
||||
KJH = (GTF, NCX)
|
||||
QLS = (GXF, SCK)
|
||||
NHR = (PNQ, RGQ)
|
||||
FPF = (NBM, NQF)
|
||||
BKP = (KLL, TDJ)
|
||||
SBC = (TTF, SSS)
|
||||
XMN = (GTN, MNQ)
|
||||
PBB = (RRT, BPK)
|
||||
XVS = (GBM, DMH)
|
||||
HFX = (MPN, JLH)
|
||||
KDS = (TXG, DBT)
|
||||
DDN = (GDD, DFJ)
|
||||
SSS = (CST, VVF)
|
||||
NGH = (RNG, BCM)
|
||||
HNG = (HBC, FRC)
|
||||
CND = (RCH, RDD)
|
||||
HFD = (NHR, RDV)
|
||||
FRC = (JTF, LLH)
|
||||
TBH = (KDS, CNQ)
|
||||
QNQ = (TFB, KGM)
|
||||
SMT = (MBK, TJN)
|
||||
NGF = (BPV, JNR)
|
||||
XLM = (XVP, QCK)
|
||||
JLB = (SNF, DTL)
|
||||
NXV = (HDB, VMT)
|
||||
VSD = (TMD, VCL)
|
||||
TMT = (GHG, PVG)
|
||||
NNV = (JKX, SKG)
|
||||
HFB = (QQK, BKP)
|
||||
BLD = (SMK, BTJ)
|
||||
JGH = (TKB, QMN)
|
||||
XXX = (NLX, SJQ)
|
||||
LQH = (VLD, LCP)
|
||||
KRM = (BXV, STX)
|
||||
HVN = (FTH, QBL)
|
||||
QXM = (KLG, DMS)
|
||||
DBR = (LLM, NNQ)
|
||||
MVP = (CJH, JDQ)
|
||||
FBR = (MBQ, VPN)
|
||||
SFP = (HRD, SGC)
|
||||
HGD = (SQV, VLV)
|
||||
CJH = (JNK, DXR)
|
||||
DJM = (XSQ, GTP)
|
||||
KXG = (RTK, RKV)
|
||||
HTF = (LSM, PBF)
|
||||
FXX = (MSX, FGG)
|
||||
MFF = (VSC, QCP)
|
||||
TMH = (HQL, GSJ)
|
||||
KBB = (CHN, FSF)
|
||||
XTV = (SBH, SGR)
|
||||
MFH = (JGH, HCK)
|
||||
SGC = (JCR, PMQ)
|
||||
TRQ = (LVM, FFQ)
|
||||
VCL = (DXK, RBD)
|
||||
QSD = (VQF, JCQ)
|
||||
FQR = (FFJ, SXK)
|
||||
KQD = (KDT, JSL)
|
||||
XLJ = (DCG, MPM)
|
||||
FXL = (TFF, SSP)
|
||||
RRN = (DBL, GTL)
|
||||
CKM = (HTM, HHG)
|
||||
VLP = (MGC, PMF)
|
||||
KPQ = (MDL, VFB)
|
||||
XQH = (RDV, NHR)
|
||||
JRN = (MQK, HTP)
|
||||
JMH = (RCH, RDD)
|
||||
JRV = (SNB, MHK)
|
||||
QCP = (DRN, SFR)
|
||||
LLR = (KNL, FGS)
|
||||
NMV = (DLJ, DJQ)
|
||||
KBV = (GQC, PRB)
|
||||
JXC = (FFJ, FFJ)
|
||||
LFS = (MHB, VXT)
|
||||
DST = (XHR, PCS)
|
||||
SNJ = (TBX, SPL)
|
||||
KND = (FDH, CCG)
|
||||
CMT = (KPK, RMJ)
|
||||
HHG = (PFM, LVD)
|
||||
RPP = (MBN, TTD)
|
||||
MBK = (HJH, HGC)
|
||||
NQF = (JPF, KRM)
|
||||
FPN = (BFS, RVB)
|
||||
GFQ = (RTL, XBP)
|
||||
SCH = (NGK, SQP)
|
||||
VFX = (THG, LCV)
|
||||
CTG = (TMT, SFX)
|
||||
PGT = (CMT, RFB)
|
||||
RLB = (TFF, SSP)
|
||||
STD = (SJT, TFZ)
|
||||
VMM = (FPF, VKS)
|
||||
SFX = (GHG, PVG)
|
||||
BXV = (CGJ, PGK)
|
||||
FBT = (TBM, RHF)
|
||||
LJJ = (SNF, DTL)
|
||||
LKF = (MBN, TTD)
|
||||
QNV = (KRC, VMF)
|
||||
VGS = (MPN, JLH)
|
||||
MKM = (JJD, BKL)
|
||||
HKX = (SVX, RKF)
|
||||
MSL = (CRV, SMD)
|
||||
RHM = (CHQ, XXG)
|
||||
FRP = (MSF, MSF)
|
||||
VCV = (VSC, QCP)
|
||||
FMH = (VXR, GDS)
|
||||
FLR = (VGS, HFX)
|
||||
GHV = (PDB, SGT)
|
||||
FHQ = (MRD, JRG)
|
||||
HJF = (RDB, NTD)
|
||||
MSM = (FBR, FCT)
|
||||
GHB = (JXT, RTR)
|
||||
BMQ = (MFH, GTR)
|
||||
MCP = (VNP, SJH)
|
||||
SRD = (PRB, GQC)
|
||||
DXR = (TPT, VNQ)
|
||||
RFB = (KPK, RMJ)
|
||||
GSJ = (MTL, QXR)
|
||||
FHJ = (PGN, GNH)
|
||||
LCQ = (DBR, HFQ)
|
||||
GBM = (PDP, QSD)
|
||||
TPT = (JHF, MSN)
|
||||
MVV = (CNP, FSS)
|
||||
KXD = (LQH, DKR)
|
||||
PXV = (QXM, GJQ)
|
||||
BHN = (KPQ, CPV)
|
||||
SBS = (RRN, SDV)
|
||||
LHX = (SLR, DRD)
|
||||
TBM = (KBV, SRD)
|
||||
DXK = (PLP, FGX)
|
||||
NKD = (QFP, GFQ)
|
||||
PVG = (MCL, MPB)
|
||||
TTF = (VVF, CST)
|
||||
PDP = (VQF, JCQ)
|
||||
MSX = (NRD, SNP)
|
||||
CMV = (RSV, DCK)
|
||||
PMF = (NLT, MGS)
|
||||
MSF = (SJT, SJT)
|
||||
NTC = (DKR, LQH)
|
||||
GNH = (VHV, FBD)
|
||||
GSD = (VQG, VXS)
|
||||
VBH = (JKX, SKG)
|
||||
GTR = (JGH, HCK)
|
||||
SSL = (MHB, VXT)
|
||||
NLG = (NTS, DNB)
|
||||
JRQ = (NKP, GHV)
|
||||
MLK = (MFF, VCV)
|
||||
BLF = (HRD, SGC)
|
||||
BGK = (HJF, LNR)
|
||||
VQF = (XCB, DHT)
|
||||
GVP = (QKK, KND)
|
||||
FTD = (MXQ, XLM)
|
||||
JST = (JFC, KVG)
|
||||
JFC = (TJJ, TRS)
|
||||
MMD = (DDH, RSM)
|
||||
SBH = (TKX, VQV)
|
||||
PDH = (CVS, KRS)
|
||||
NRH = (CHN, FSF)
|
||||
MRD = (JCX, DXJ)
|
||||
KGC = (VGJ, HFG)
|
||||
RRB = (FFT, FRS)
|
||||
KQR = (GSJ, HQL)
|
||||
FSV = (XVS, KFX)
|
||||
DBC = (PSR, QXX)
|
||||
GMR = (KKH, HVN)
|
||||
CLG = (CLL, PXZ)
|
||||
JNL = (HFF, NQQ)
|
||||
JCR = (KBB, NRH)
|
||||
FTV = (DCK, RSV)
|
||||
DPC = (FHQ, GMQ)
|
||||
MVC = (XSQ, GTP)
|
||||
KXK = (GMD, BJR)
|
||||
DPJ = (KRC, VMF)
|
||||
FTC = (GSX, KSB)
|
||||
TBK = (QKN, XJZ)
|
||||
VFG = (SHJ, CTG)
|
||||
VXT = (QLJ, VSX)
|
||||
MHB = (VSX, QLJ)
|
||||
MMV = (TPF, FXQ)
|
||||
QCN = (DNH, TLH)
|
||||
KPK = (CSR, HNN)
|
||||
RDV = (PNQ, RGQ)
|
||||
DCG = (KGS, NMN)
|
||||
FJB = (VRC, KXG)
|
||||
NTD = (PKM, FLG)
|
||||
DBT = (GPM, KJH)
|
||||
LLL = (HFB, DNR)
|
||||
SMR = (BPX, QLM)
|
||||
MGS = (HKK, KCD)
|
||||
HHT = (SCS, SGH)
|
||||
MVK = (CQL, XFH)
|
||||
GFH = (KBT, MHP)
|
||||
JNC = (FLS, DKG)
|
||||
QHD = (RRT, BPK)
|
||||
NTN = (BKL, JJD)
|
||||
VQS = (CNK, RJQ)
|
||||
KQH = (XQH, HFD)
|
||||
GGL = (DBC, GKF)
|
||||
QQK = (KLL, TDJ)
|
||||
LHK = (HGQ, FJP)
|
||||
RKV = (GVR, PLT)
|
||||
VKV = (TBM, RHF)
|
||||
MPN = (XGV, MXR)
|
||||
PHM = (RJQ, CNK)
|
||||
TPG = (BQG, BMH)
|
||||
CLL = (PTH, JCK)
|
||||
MXQ = (XVP, QCK)
|
||||
NXB = (BPV, JNR)
|
||||
GTN = (PFS, HGV)
|
||||
FRT = (VKF, BCX)
|
||||
GRX = (THD, KLR)
|
||||
VLV = (MVP, MKC)
|
||||
NJD = (QBX, XTV)
|
||||
VJV = (QXM, GJQ)
|
||||
KPF = (MFM, PMV)
|
||||
JCM = (TJN, MBK)
|
||||
HFG = (TVH, PCJ)
|
||||
HJH = (QNB, PDH)
|
||||
JTN = (JRJ, LGV)
|
||||
CHQ = (XFN, MLR)
|
||||
JNR = (TXN, KPD)
|
||||
BCM = (RNR, GHB)
|
||||
PCS = (TLM, KFL)
|
||||
DXP = (QTL, NVV)
|
||||
KJF = (NTC, KXD)
|
||||
DLT = (RRN, SDV)
|
||||
QXN = (TBH, SQN)
|
||||
TMC = (FBT, VKV)
|
||||
PJJ = (GXC, FXX)
|
||||
KXH = (KSB, GSX)
|
||||
GDS = (XCS, GRX)
|
||||
BQG = (GVP, NSQ)
|
||||
XNF = (TMC, QNM)
|
||||
RFM = (CHT, NMV)
|
||||
JDQ = (JNK, DXR)
|
||||
LKP = (MSF, STD)
|
||||
TFB = (FQS, KGC)
|
||||
DNR = (BKP, QQK)
|
||||
FGX = (FPT, QSR)
|
||||
HXR = (KGM, TFB)
|
||||
XKK = (NTC, KXD)
|
||||
FDH = (JDT, PJD)
|
||||
FTH = (PRF, LXK)
|
||||
TCF = (GXP, QLS)
|
||||
TXN = (PCT, MCP)
|
||||
TPF = (LLL, JMX)
|
||||
LPV = (LVM, FFQ)
|
||||
HXF = (FXL, RLB)
|
||||
HGV = (KFF, HMH)
|
||||
MCN = (BLD, NPF)
|
||||
SMP = (BTT, MSL)
|
||||
LVM = (FBV, QJS)
|
||||
TCV = (GMQ, FHQ)
|
||||
FLG = (DPJ, QNV)
|
||||
PTH = (LFS, SSL)
|
||||
SQS = (SHJ, CTG)
|
||||
GBP = (MFH, GTR)
|
||||
QCK = (LDP, HSN)
|
||||
JCK = (LFS, SSL)
|
||||
TNL = (LVC, CLG)
|
||||
GKF = (QXX, PSR)
|
||||
PCJ = (PJJ, JFB)
|
||||
MBH = (DXH, HXF)
|
||||
PLP = (FPT, QSR)
|
||||
VXQ = (JRQ, GBR)
|
||||
DDH = (KSG, SMP)
|
||||
PKS = (TKR, VSD)
|
||||
JRT = (CXP, FLR)
|
||||
HMH = (SQS, VFG)
|
||||
DNB = (JRT, BRM)
|
||||
BRB = (DFJ, GDD)
|
||||
PSR = (SFP, BLF)
|
||||
KSK = (KPQ, CPV)
|
||||
QXX = (BLF, SFP)
|
||||
SSP = (GMR, RSJ)
|
||||
VMF = (DGM, XCR)
|
||||
MNQ = (PFS, HGV)
|
||||
HSR = (VXQ, GNP)
|
||||
KSG = (MSL, BTT)
|
||||
VRV = (RSC, QMH)
|
||||
XXG = (MLR, XFN)
|
||||
RVB = (JRV, RPL)
|
||||
KDT = (MVC, DJM)
|
||||
SQN = (CNQ, KDS)
|
||||
BPV = (TXN, KPD)
|
||||
SJT = (PBD, NQT)
|
||||
LCV = (FRP, LKP)
|
||||
CNQ = (TXG, DBT)
|
||||
GPD = (FTP, XSX)
|
||||
CHN = (SMT, JCM)
|
||||
XGT = (MSM, CXN)
|
||||
TFF = (GMR, RSJ)
|
||||
QKK = (FDH, CCG)
|
||||
CHT = (DLJ, DJQ)
|
||||
BRM = (CXP, FLR)
|
||||
KFF = (VFG, SQS)
|
||||
FGS = (KVF, JRN)
|
||||
SFD = (GFH, VDQ)
|
||||
RMQ = (MPM, DCG)
|
||||
AAA = (SQV, VLV)
|
||||
JJD = (XJX, CKM)
|
||||
VVD = (HXL, VKG)
|
||||
SCF = (VLP, SST)
|
||||
RKF = (BSN, TBK)
|
||||
LVQ = (CMT, RFB)
|
||||
SCK = (SCF, SLN)
|
||||
TXG = (GPM, KJH)
|
||||
DXZ = (NKH, THS)
|
||||
HMF = (PCS, XHR)
|
||||
KKH = (QBL, FTH)
|
||||
THS = (PMD, BDV)
|
||||
FCT = (MBQ, VPN)
|
||||
VVQ = (MKM, NTN)
|
||||
QNM = (VKV, FBT)
|
||||
LTL = (XMJ, VVQ)
|
||||
TDF = (QTH, TMR)
|
||||
VNQ = (JHF, MSN)
|
||||
KCL = (QLM, BPX)
|
||||
RMS = (TTF, SSS)
|
||||
HGC = (QNB, PDH)
|
||||
JTF = (LFC, XSP)
|
||||
PMV = (DDN, BRB)
|
||||
VTJ = (CPQ, LHX)
|
||||
NNQ = (BHN, KSK)
|
||||
NRF = (VTS, MRG)
|
||||
QNB = (KRS, CVS)
|
||||
RCQ = (QBX, XTV)
|
||||
MCL = (FSM, GGL)
|
||||
NTS = (JRT, BRM)
|
||||
QQJ = (NRF, SDX)
|
||||
QFP = (XBP, RTL)
|
||||
DPN = (BFS, RVB)
|
||||
XCR = (HDV, GSD)
|
||||
SGT = (BHH, TNL)
|
||||
JGA = (PBD, NQT)
|
||||
LSM = (XGT, MSG)
|
||||
PLT = (FVD, QLZ)
|
||||
RSC = (MMD, GPB)
|
||||
DXH = (RLB, FXL)
|
||||
TMD = (DXK, RBD)
|
||||
QDS = (JFC, KVG)
|
||||
KCD = (DXL, HPD)
|
||||
GMD = (PHT, PBH)
|
||||
DLJ = (DLT, SBS)
|
||||
DJR = (SMR, KCL)
|
||||
SGR = (VQV, TKX)
|
||||
RBD = (FGX, PLP)
|
||||
SFJ = (GNP, VXQ)
|
||||
GXP = (SCK, GXF)
|
||||
QBX = (SBH, SGR)
|
||||
@@ -0,0 +1,10 @@
|
||||
LR
|
||||
|
||||
FFA = (FFB, XXX)
|
||||
FFB = (XXX, FFZ)
|
||||
FFZ = (FFB, XXX)
|
||||
DDA = (DDB, XXX)
|
||||
DDB = (DDC, DDC)
|
||||
DDC = (DDZ, DDZ)
|
||||
DDZ = (DDB, DDB)
|
||||
XXX = (XXX, XXX)
|
||||
@@ -0,0 +1,52 @@
|
||||
import re
|
||||
import math
|
||||
|
||||
def main():
|
||||
with open("8-input.txt", 'r') as file:
|
||||
maps = {}
|
||||
starting_nodes = []
|
||||
lines = file.readlines()
|
||||
directions = re.findall("[a-zA-Z]", lines[0])
|
||||
|
||||
for i, line in enumerate(lines[2:]):
|
||||
parsed = re.findall("[a-zA-Z]+", line)
|
||||
if len(parsed) == 0: continue
|
||||
if parsed[0].endswith('A'): starting_nodes.append(parsed[0])
|
||||
maps[parsed[0]] = (parsed[1], parsed[2])
|
||||
|
||||
steps = []
|
||||
for starter in starting_nodes:
|
||||
steps.append(traverse_map(maps, directions, maps[starter], 0))
|
||||
print(steps)
|
||||
print(find_lcm_of_array(steps))
|
||||
|
||||
def find_lcm_of_array(arr):
|
||||
# Ensure the array is not empty
|
||||
if not arr:
|
||||
return None
|
||||
|
||||
# Initialize lcm with the first element of the array
|
||||
lcm_result = arr[0]
|
||||
|
||||
# Iterate through the array and find the LCM
|
||||
for i in range(1, len(arr)):
|
||||
lcm_result = math.lcm(lcm_result, arr[i])
|
||||
|
||||
return lcm_result
|
||||
|
||||
|
||||
def traverse_map(maps, directions, nd, steps):
|
||||
while(True):
|
||||
step = steps % len(directions)
|
||||
dir = directions[step]
|
||||
if dir == "R":
|
||||
next = nd[1]
|
||||
if dir == "L":
|
||||
next = nd[0]
|
||||
steps += 1
|
||||
if next.endswith('Z'):
|
||||
return steps
|
||||
nd = maps[next]
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,200 @@
|
||||
26 35 42 63 136 327 729 1457 2648 4480 7229 11394 17952 28881 48234 84291 153739 289701 557511 1087187 2143197
|
||||
-6 -7 -7 -6 -4 -1 3 8 14 21 29 38 48 59 71 84 98 113 129 146 164
|
||||
10 21 39 71 124 205 321 479 686 949 1275 1671 2144 2701 3349 4095 4946 5909 6991 8199 9540
|
||||
17 36 64 110 196 368 721 1447 2915 5792 11214 21016 38030 66460 112343 184105 293221 454988 689420 1022274 1486216
|
||||
14 33 64 116 204 363 671 1289 2540 5066 10129 20190 40081 79524 158734 320937 659964 1379861 2920964 6221222 13247612
|
||||
10 17 41 95 198 375 657 1081 1690 2533 3665 5147 7046 9435 12393 16005 20362 25561 31705 38903 47270
|
||||
14 29 64 124 216 352 565 958 1808 3743 8000 16767 33646 64419 118683 213748 383770 699853 1311392 2526026 4956236
|
||||
19 30 47 86 178 369 720 1307 2221 3568 5469 8060 11492 15931 21558 28569 37175 47602 60091 74898 92294
|
||||
1 13 30 66 156 361 782 1589 3082 5828 10975 20973 41216 83707 175021 373168 802624 1726245 3691904 7830015 16453595
|
||||
7 6 12 33 86 197 399 741 1345 2591 5587 13218 32302 77760 180292 399922 849043 1730420 3398238 6454079 11895222
|
||||
20 40 66 104 168 288 538 1089 2290 4780 9636 18566 34162 60236 102272 168039 268424 418560 639342 959444 1417972
|
||||
4 1 8 49 171 457 1047 2169 4174 7572 13095 21883 36015 59804 102558 183893 343184 655371 1256114 2380229 4418451
|
||||
11 21 44 94 190 354 607 963 1421 1955 2502 2948 3112 2728 1425 -1295 -6081 -13759 -25360 -42150 -65662
|
||||
-5 2 24 67 140 257 432 667 941 1223 1565 2410 5431 15611 46111 129246 340658 851773 2042419 4740096 10722177
|
||||
30 42 54 78 144 309 666 1353 2562 4548 7638 12240 18852 28071 40602 57267 79014 106926 142230 186306 240696
|
||||
4 5 6 4 -2 -6 16 144 614 2030 5756 14577 33738 72479 146164 279025 507368 882763 1474194 2367290 3657486
|
||||
15 39 71 119 214 419 847 1704 3385 6680 13205 26287 52768 106695 216910 442638 905099 1850193 3769279 7624639 15257058
|
||||
3 12 37 84 157 259 396 590 917 1601 3217 7084 15961 35198 74558 151062 293511 549970 1000717 1781348 3124429
|
||||
30 52 78 111 156 226 363 678 1414 3032 6311 12445 23129 40681 68393 111605 180538 296816 506992 908439 1695878
|
||||
13 11 22 61 142 275 477 809 1456 2892 6241 14089 32266 73589 165430 364651 786707 1661933 3443480 7011621 14053570
|
||||
12 39 91 193 395 786 1514 2811 5024 8670 14583 24331 41297 73223 137768 274043 565775 1186884 2489910 5175384 10611406
|
||||
17 30 44 61 96 187 413 924 1999 4173 8512 17166 34394 68332 133865 257067 481789 879104 1560460 2695547 4536052
|
||||
4 11 19 37 82 184 404 887 1995 4606 10740 24810 56050 123161 263200 548769 1121742 2260137 4510825 8950315 17687738
|
||||
7 27 59 103 159 227 307 399 503 619 747 887 1039 1203 1379 1567 1767 1979 2203 2439 2687
|
||||
24 33 35 39 72 183 445 955 1832 3213 5247 8087 11880 16755 22809 30091 38584 48185 58683 69735 80840
|
||||
14 25 44 81 158 317 646 1349 2901 6354 13911 29992 63242 130402 263910 526903 1042536 2050026 4008556 7783136 14964330
|
||||
14 36 82 176 361 717 1400 2716 5251 10085 19128 35643 65091 116595 205685 359815 630008 1116030 2020826 3766194 7231721
|
||||
7 22 46 81 131 199 287 419 728 1675 4501 12052 30162 69830 150484 304688 584717 1071500 1886512 3207283 5287285
|
||||
0 13 51 141 338 752 1597 3285 6611 13106 25672 49656 94583 176907 324514 584721 1040090 1842598 3291085 6008902 11347440
|
||||
26 54 99 165 256 376 529 719 950 1226 1551 1929 2364 2860 3421 4051 4754 5534 6395 7341 8376
|
||||
5 8 30 96 252 576 1189 2266 4047 6848 11072 17220 25902 37848 53919 75118 102601 137688 181874 236840 304464
|
||||
18 30 38 43 47 60 122 355 1072 2987 7605 17945 39891 84713 173697 346423 675094 1288516 2410936 4423047 7955159
|
||||
15 33 70 148 318 690 1491 3159 6476 12736 23937 42981 73861 121799 193252 295586 435973 618611 838592 1069506 1239992
|
||||
12 25 44 83 177 411 974 2247 4940 10314 20568 39558 74189 137162 252394 465548 863972 1613295 3022404 5655077 10515841
|
||||
17 23 28 32 35 37 38 38 37 35 32 28 23 17 10 2 -7 -17 -28 -40 -53
|
||||
20 27 34 41 48 55 62 69 76 83 90 97 104 111 118 125 132 139 146 153 160
|
||||
14 28 63 140 289 549 968 1603 2520 3794 5509 7758 10643 14275 18774 24269 30898 38808 48155 59104 71829
|
||||
11 13 25 60 131 258 496 1006 2196 4970 11163 24360 51603 107183 221143 457846 954845 2000571 4182761 8660420 17643527
|
||||
1 12 46 110 209 345 517 731 1033 1584 2809 5682 12277 26869 58216 124413 263297 554524 1165328 2442470 5090777
|
||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
||||
10 19 28 36 37 21 -18 -55 28 563 2326 6990 18036 42542 94505 200604 409561 806558 1534779 2827723 5059814
|
||||
8 31 67 121 207 352 604 1053 1886 3529 6995 14671 31953 70390 153340 325587 668932 1326467 2539083 4698765 8424403
|
||||
15 39 77 136 230 387 668 1209 2294 4459 8612 16133 28911 49357 80812 129945 215765 396795 842423 2002558 4981136
|
||||
8 4 -7 -26 -38 11 245 898 2373 5351 11022 21596 41452 79760 156506 316211 658402 1402950 3024695 6519782 13912298
|
||||
24 49 97 177 299 483 776 1277 2170 3765 6547 11233 18837 30743 48786 75341 113420 166777 240021 338737 469615
|
||||
-5 -4 3 23 81 241 651 1635 3864 8647 18392 37296 72332 134610 241198 417498 700281 1141494 1812961 2812109 4268859
|
||||
13 24 37 60 120 280 664 1498 3179 6388 12267 22684 40614 70668 119806 198274 320809 508160 788977 1202124 1799476
|
||||
-8 1 27 85 201 414 780 1377 2310 3715 5761 8649 12607 17880 24714 33333 43908 56517 71095 87373 104805
|
||||
4 10 26 58 117 232 475 1002 2120 4392 8797 16987 31757 58013 104866 190153 350020 658890 1270556 2501848 5000829
|
||||
5 23 60 133 271 521 957 1692 2895 4833 8000 13465 23669 44023 85797 170932 339537 660931 1249132 2283653 4036307
|
||||
-6 0 21 76 210 510 1137 2387 4793 9279 17376 31509 55363 94335 156078 251142 393716 602474 901527 1321482 1900608
|
||||
7 26 69 161 350 715 1369 2453 4123 6547 9953 14802 22202 34730 57889 102496 188375 349816 643357 1158551 2032494
|
||||
8 24 59 124 241 451 822 1457 2502 4154 6669 10370 15655 23005 32992 46287 63668 86028 114383 149880 193805
|
||||
14 25 29 28 36 87 252 670 1597 3476 7030 13379 24181 41796 69471 111543 173656 262987 388475 561046 793826
|
||||
13 30 69 137 253 466 879 1679 3173 5830 10329 17613 28949 45994 70867 106227 155357 222254 311725 429489 582285
|
||||
19 26 27 20 5 -1 63 341 1111 2848 6299 12570 23225 40397 66911 106419 163547 244054 355003 504944 704109
|
||||
11 27 63 139 287 567 1091 2060 3840 7143 13442 25839 50726 100735 199668 390336 746521 1390611 2518849 4436587 7606449
|
||||
8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168
|
||||
24 40 58 74 78 56 3 -38 120 1023 4036 12295 32615 79211 180836 394437 831547 1710256 3459759 6934492 13857367
|
||||
21 45 80 133 233 459 998 2243 4936 10358 20569 38708 69378 119166 197385 317176 497175 764035 1156198 1729439 2564855
|
||||
-6 4 24 55 102 175 297 527 1012 2103 4618 10422 23632 52956 115951 246348 506054 1004014 1924812 3570721 6421890
|
||||
5 14 25 41 81 201 538 1392 3361 7544 15827 31267 58589 104811 180012 298258 478701 746866 1136141 1689485 2461369
|
||||
8 15 20 23 24 23 20 15 8 -1 -12 -25 -40 -57 -76 -97 -120 -145 -172 -201 -232
|
||||
13 20 30 48 76 118 195 384 904 2280 5634 13208 29381 62826 131291 272156 564999 1177756 2456894 5095984 10438354
|
||||
27 53 96 159 255 426 783 1588 3411 7409 15783 32472 64154 121681 222249 393008 677615 1148649 1931134 3246025 5487861
|
||||
27 51 87 147 252 443 811 1568 3204 6815 14760 31931 68124 142316 290137 576563 1116981 2111495 3899953 7049103 12489112
|
||||
15 38 65 106 199 432 972 2103 4287 8284 15397 27949 50166 89761 160728 288225 517106 927093 1660904 2979519 5376696
|
||||
0 6 31 85 194 412 837 1643 3145 5918 10995 20188 36667 66241 120629 226030 444760 927057 2029015 4569804 10373398
|
||||
19 26 33 40 47 54 61 68 75 82 89 96 103 110 117 124 131 138 145 152 159
|
||||
10 25 53 115 238 467 889 1678 3189 6155 12074 23913 47303 92453 177072 330656 600572 1060453 1821507 3047439 4973788
|
||||
-5 6 42 116 241 430 696 1052 1511 2086 2790 3636 4637 5806 7156 8700 10451 12422 14626 17076 19785
|
||||
13 40 92 178 320 570 1025 1832 3175 5243 8195 12175 17526 25612 41304 79628 181985 452774 1136694 2772588 6484284
|
||||
19 23 26 28 29 29 28 26 23 19 14 8 1 -7 -16 -26 -37 -49 -62 -76 -91
|
||||
17 28 51 84 122 162 210 294 504 1118 2937 8043 21309 53122 123918 271257 560267 1098336 2054903 3687062 6371412
|
||||
20 28 35 44 76 178 438 1031 2334 5162 11191 23648 48362 95284 180598 329559 580208 988128 1632419 2623084 4110032
|
||||
5 20 47 86 137 200 275 362 461 572 695 830 977 1136 1307 1490 1685 1892 2111 2342 2585
|
||||
26 38 56 87 148 291 641 1446 3149 6514 12872 24600 46007 84877 155011 280219 500340 880014 1521096 2579789 4289782
|
||||
10 18 29 45 77 160 369 829 1716 3258 5769 9790 16486 28609 52706 104067 217586 470910 1031969 2252631 4845759
|
||||
-1 10 31 62 103 154 215 286 367 458 559 670 791 922 1063 1214 1375 1546 1727 1918 2119
|
||||
8 12 20 49 121 260 489 827 1286 1868 2562 3341 4159 4948 5615 6039 6068 5516 4160 1737 -2059
|
||||
0 -4 -4 15 71 192 450 1034 2366 5263 11181 22696 44675 87230 172812 352167 738124 1573554 3362222 7111453 14767575
|
||||
19 37 73 130 204 280 340 404 636 1566 4512 12341 30798 70777 152136 310006 605061 1139971 2085359 3720200 6494028
|
||||
2 5 28 82 185 374 731 1434 2842 5621 10916 20572 37405 65522 110687 180728 285978 439741 658772 963758 1379785
|
||||
27 49 80 126 197 310 504 885 1731 3696 8158 17757 37162 74103 140767 255956 449312 771177 1316772 2284435 4111174
|
||||
-9 -14 -19 -24 -29 -34 -39 -44 -49 -54 -59 -64 -69 -74 -79 -84 -89 -94 -99 -104 -109
|
||||
6 15 27 46 76 121 185 272 386 531 711 930 1192 1501 1861 2276 2750 3287 3891 4566 5316
|
||||
10 9 8 12 42 163 524 1407 3284 6886 13297 24100 41622 69352 112641 179837 284062 445903 697366 1087532 1690458
|
||||
0 9 24 44 68 105 193 433 1055 2544 5865 12837 26717 53066 100980 184780 326266 557651 925302 1494426 2354850
|
||||
10 12 10 4 -6 -20 -38 -60 -86 -116 -150 -188 -230 -276 -326 -380 -438 -500 -566 -636 -710
|
||||
8 20 45 89 168 331 691 1470 3073 6209 12068 22530 40306 68775 111098 168065 234382 294482 323003 304787 309948
|
||||
24 49 89 155 273 496 928 1779 3491 7003 14260 29127 58966 117310 228381 434731 810146 1481285 2663507 4719187 8250799
|
||||
19 33 62 128 264 514 933 1587 2553 3919 5784 8258 11462 15528 20599 26829 34383 43437 54178 66804 81524
|
||||
8 22 53 122 270 578 1193 2355 4413 7810 13019 20456 30543 44436 66599 111605 219725 490109 1149268 2691985 6174015
|
||||
26 50 82 123 185 303 566 1175 2531 5351 10805 20662 37428 64454 105987 167132 253688 371816 527492 725693 969259
|
||||
14 35 80 158 278 449 680 980 1358 1823 2384 3050 3830 4733 5768 6944 8270 9755 11408 13238 15254
|
||||
11 11 15 23 35 51 71 95 123 155 191 231 275 323 375 431 491 555 623 695 771
|
||||
6 16 24 35 58 96 141 187 289 723 2341 7266 20135 50173 114468 242916 485416 922018 1676862 2936893 4976496
|
||||
11 20 49 110 227 453 898 1768 3424 6485 12017 21877 39339 70262 125339 224493 405397 739562 1361669 2521064 4668871
|
||||
20 37 80 158 285 497 885 1648 3160 6035 11176 19837 33870 56674 96069 171621 331201 685379 1474871 3198556 6854496
|
||||
4 6 20 55 138 338 805 1841 4037 8544 17608 35600 70923 139390 269951 514014 960066 1755866 3141164 5494709 9400256
|
||||
8 13 34 90 208 430 841 1627 3186 6356 12910 26629 55545 116404 243087 501667 1015960 2008922 3867653 7245316 13228060
|
||||
3 16 37 69 124 232 465 1001 2269 5236 11921 26249 55390 111764 215933 400645 716343 1238504 2077229 3389565 5395104
|
||||
24 45 85 166 322 598 1063 1847 3218 5732 10517 19791 37764 72135 136467 253806 462004 821311 1424917 2413252 3992990
|
||||
7 24 56 109 189 302 454 651 899 1204 1572 2009 2521 3114 3794 4567 5439 6416 7504 8709 10037
|
||||
6 6 15 43 91 159 276 558 1303 3152 7405 16728 36804 80099 174024 377639 814012 1729858 3600691 7309097 14436681
|
||||
14 20 37 71 127 210 320 440 518 446 41 -965 -2917 -6200 -11160 -17968 -26410 -35584 -43483 -46441 -38417
|
||||
12 17 16 12 25 120 460 1409 3724 8883 19602 40622 79965 151215 278256 505768 922388 1709889 3242580 6278524 12310953
|
||||
9 9 10 7 -6 -23 -1 179 775 2311 5872 13776 30987 67865 145228 303374 617945 1227749 2383562 4533485 8470988
|
||||
9 11 14 19 43 131 362 843 1689 2997 4835 7291 10709 16508 29705 65926 169073 452107 1184316 2966327 7062159
|
||||
4 19 44 77 112 138 134 62 -137 -530 -1130 -1722 -1448 2152 15406 53958 155715 410547 1025294 2459060 5690975
|
||||
17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57
|
||||
28 38 41 31 8 1 117 624 2070 5435 12324 25277 48475 89589 164469 308195 599485 1212145 2520288 5309464 11194667
|
||||
1 4 2 -6 -13 14 174 709 2139 5482 12592 26654 52881 99464 178832 309285 517069 838968 1325494 2044762 3087143
|
||||
-1 15 45 97 186 335 592 1078 2095 4347 9373 20396 44024 93710 196770 408372 838760 1704980 3427198 6805400 13340371
|
||||
24 49 98 179 297 454 662 979 1576 2850 5634 11665 24741 53576 118484 266044 599328 1336819 2921754 6216539 12835689
|
||||
21 43 91 177 313 527 903 1662 3307 6861 14233 28753 55923 104437 187529 324714 543993 884599 1400367 2163817 3271045
|
||||
10 20 48 110 232 449 817 1461 2691 5227 10583 21669 43679 85342 160622 290962 508176 858102 1405138 2237792 3475386
|
||||
11 35 84 169 305 523 890 1537 2706 4864 9012 17463 35603 75523 162993 350202 738357 1517321 3035288 5922273 11310317
|
||||
5 16 36 79 164 317 575 988 1620 2577 4149 7249 14465 32206 74610 170076 371463 771142 1522162 2866763 5173298
|
||||
23 47 91 180 355 676 1237 2209 3932 7082 12944 23827 43662 78829 139264 239902 402517 658025 1049321 1634726 2492125
|
||||
15 23 27 34 62 157 432 1136 2766 6255 13310 27042 53131 101922 192141 357660 660775 1220785 2279451 4353200 8580138
|
||||
22 35 50 71 109 182 315 540 896 1429 2192 3245 4655 6496 8849 11802 15450 19895 25246 31619 39137
|
||||
19 46 99 184 301 445 609 789 991 1240 1591 2142 3049 4543 6949 10707 16395 24754 36715 53428 76293
|
||||
16 35 78 161 304 532 886 1455 2451 4374 8370 17012 36007 77877 169678 368610 792378 1676029 3474614 7042651 13938682
|
||||
11 21 37 74 161 344 684 1257 2179 3705 6498 12267 25210 55211 124765 283528 637855 1408801 3042715 6416976 13214939
|
||||
28 50 82 125 194 336 661 1391 2939 6053 12112 23759 46217 89871 175017 340071 654974 1241980 2306406 4180161 7380828
|
||||
16 33 52 76 116 194 346 625 1104 1879 3072 4834 7348 10832 15542 21775 29872 40221 53260 69480 89428
|
||||
13 19 43 102 215 403 689 1098 1657 2395 3343 4534 6003 7787 9925 12458 15429 18883 22867 27430 32623
|
||||
23 28 25 23 41 115 318 793 1799 3774 7427 13883 24921 43365 73712 123109 202823 330384 532621 849855 1341561
|
||||
8 13 31 81 190 392 739 1348 2529 5075 10857 23969 52827 113862 237783 479848 936198 1769113 3245075 5790809 10074060
|
||||
5 -1 -3 1 24 102 309 788 1831 4088 9089 20476 46745 107008 242462 538106 1162045 2433793 4938737 9713831 18540218
|
||||
23 36 67 128 238 432 765 1304 2096 3100 4082 4498 3433 -276 -7530 -17782 -26795 -22876 18957 145468 436960
|
||||
19 19 10 -13 -55 -121 -216 -345 -513 -725 -986 -1301 -1675 -2113 -2620 -3201 -3861 -4605 -5438 -6365 -7391
|
||||
13 22 35 63 127 273 594 1257 2533 4828 8713 14951 24519 38623 58704 86433 123693 172546 235183 313855 410783
|
||||
15 29 62 138 301 623 1211 2210 3808 6273 10109 16538 28739 54658 112833 243745 531201 1142472 2405599 4965114 10110423
|
||||
22 31 40 45 47 68 173 508 1375 3376 7669 16390 33306 64775 121100 218375 380932 644509 1060270 1699819 2661361
|
||||
16 37 69 115 199 383 781 1560 2922 5084 8336 13405 22681 43553 96491 233174 574927 1390866 3252030 7329342 15962906
|
||||
25 37 46 52 55 55 52 46 37 25 10 -8 -29 -53 -80 -110 -143 -179 -218 -260 -305
|
||||
-2 -1 16 58 135 261 456 747 1168 1759 2564 3628 4993 6693 8748 11157 13890 16879 20008 23102 25915
|
||||
7 17 54 130 269 530 1052 2143 4445 9217 18788 37242 71407 132230 236630 409931 688987 1126121 1794010 2791658 4251609
|
||||
15 31 72 160 334 671 1314 2518 4741 8835 16445 30812 58307 111210 212522 404027 759535 1406459 2560962 4585380 8082232
|
||||
24 33 42 51 60 69 78 87 96 105 114 123 132 141 150 159 168 177 186 195 204
|
||||
-5 -7 8 61 189 455 970 1944 3787 7293 13979 26755 51348 99453 195748 393249 805935 1675617 3503846 7302341 15051147
|
||||
11 20 46 108 230 441 775 1271 1973 2930 4196 5830 7896 10463 13605 17401 21935 27296 33578 40880 49306
|
||||
11 12 23 66 175 396 787 1418 2371 3740 5631 8162 11463 15676 20955 27466 35387 44908 56231 69570 85151
|
||||
15 22 38 68 118 206 383 768 1612 3433 7323 15646 33567 72250 155262 330921 695341 1434220 2896652 5722340 11055780
|
||||
3 7 20 59 150 322 611 1085 1914 3548 7156 15669 36147 84904 198134 453125 1009261 2185081 4599544 9425143 18831724
|
||||
5 15 27 42 71 139 295 632 1326 2724 5557 11438 23947 50845 108404 229791 481678 998568 2056522 4234421 8765038
|
||||
30 44 56 72 112 216 447 889 1638 2784 4382 6410 8712 10924 12381 12003 8158 -1500 -20220 -52372 -103696
|
||||
16 22 30 43 71 138 296 646 1378 2880 6037 12959 28588 64067 143715 319587 702164 1525018 3279356 6987931 14747917
|
||||
5 -1 -10 -24 -33 3 180 683 1836 4211 8897 18122 36552 73767 148641 296637 581375 1112247 2070344 3745532 6588173
|
||||
-5 3 30 90 209 447 946 2018 4291 8943 18077 35324 66803 122611 219053 381840 650467 1083915 1767680 2821894 4409941
|
||||
1 -6 -22 -51 -92 -122 -67 239 1107 3058 6900 13817 25470 44110 72703 115067 176021 261546 378958 537093 746504
|
||||
19 35 71 138 255 454 787 1341 2267 3829 6479 10964 18471 30816 50683 81919 129891 201911 307735 460142 675599
|
||||
5 1 -4 -15 -36 -60 -48 122 773 2679 7552 18927 43690 94632 194650 383626 729701 1347765 2429692 4293397 7461472
|
||||
22 47 84 133 194 267 352 449 558 679 812 957 1114 1283 1464 1657 1862 2079 2308 2549 2802
|
||||
27 39 50 67 106 190 350 637 1153 2109 3918 7331 13624 24844 44122 76061 127207 206611 326490 502995 757094
|
||||
21 36 62 113 217 419 794 1493 2869 5767 12110 25974 55446 115785 234945 463719 895201 1702826 3214226 6051331 11387971
|
||||
-4 11 40 84 152 276 534 1089 2268 4728 9788 20048 40471 80195 155561 295458 551743 1021562 1897525 3580679 6928437
|
||||
-3 -5 -7 -9 -11 -13 -15 -17 -19 -21 -23 -25 -27 -29 -31 -33 -35 -37 -39 -41 -43
|
||||
21 43 73 123 229 467 976 1988 3865 7143 12583 21229 34473 54127 82502 122494 177677 252403 351909 482431 651325
|
||||
19 29 34 46 94 224 497 985 1765 2911 4484 6520 9016 11914 15083 18299 21223 23377 24118 22610 17794
|
||||
8 20 32 44 56 68 80 92 104 116 128 140 152 164 176 188 200 212 224 236 248
|
||||
13 9 14 36 82 168 347 777 1871 4603 11095 25687 56799 120029 243083 473279 888469 1612225 2833960 4834202 8014380
|
||||
25 52 95 155 233 330 447 585 745 928 1135 1367 1625 1910 2223 2565 2937 3340 3775 4243 4745
|
||||
3 -1 -2 20 104 313 751 1601 3198 6178 11813 22782 44894 90788 187635 392864 825918 1731880 3607877 7451423 15241457
|
||||
11 18 34 74 172 382 776 1446 2531 4313 7458 13519 25868 51283 102484 201989 387747 721100 1297730 2262360 3828100
|
||||
8 9 20 59 166 424 993 2158 4401 8543 16094 30140 57443 113004 229225 473103 976710 1988685 3957728 7663297 14414036
|
||||
8 17 43 97 193 355 637 1160 2170 4121 7787 14407 25867 44923 75469 122854 194252 299089 449531 661037 952981
|
||||
5 18 52 121 242 433 719 1158 1897 3263 5891 10909 20287 37707 70876 137305 277557 583511 1255976 2720254 5860036
|
||||
26 48 79 117 160 206 253 299 342 380 411 433 444 442 425 391 338 264 167 45 -104
|
||||
4 20 64 149 286 484 750 1089 1504 1996 2564 3205 3914 4684 5506 6369 7260 8164 9064 9941 10774
|
||||
5 3 -2 -7 4 66 232 572 1184 2228 3986 6935 11795 19479 30826 45940 62887 75417 69278 16573 -132522
|
||||
29 46 64 77 76 47 -27 -150 -260 -81 1250 6043 19894 55385 139172 325018 716889 1508424 3047842 5940189 11200546
|
||||
7 31 76 154 286 522 977 1884 3677 7145 13741 26179 49495 92794 172036 314672 568255 1018307 1827378 3319972 6160648
|
||||
19 43 90 171 309 555 1000 1776 3052 5057 8209 13520 23625 45116 93448 202656 443653 957187 2010888 4094557 8074321
|
||||
14 31 63 137 309 692 1505 3161 6436 12799 25035 48359 92299 173720 321469 583243 1035418 1796727 3046839 5051069 8192641
|
||||
-7 -9 1 45 169 453 1023 2063 3818 6573 10587 15954 22359 28711 32700 30500 17219 -10581 -47711 -63885 29897
|
||||
5 8 18 46 107 216 385 636 1070 2070 4761 11892 29330 68346 148806 303230 581419 1054940 1820164 2997730 4725213
|
||||
0 12 32 64 133 307 740 1752 3974 8606 17870 35802 69654 132452 247836 459451 849236 1572432 2922448 5446084 10138507
|
||||
15 22 48 120 277 570 1062 1828 2955 4542 6700 9552 13233 17890 23682 30780 39367 49638 61800 76072 92685
|
||||
-1 8 36 92 185 324 518 776 1107 1520 2024 2628 3341 4172 5130 6224 7463 8856 10412 12140 14049
|
||||
24 54 114 233 454 838 1483 2582 4571 8460 16502 33454 68859 141115 284789 564103 1098634 2113702 4040682 7716703 14777228
|
||||
20 25 26 22 13 13 87 421 1430 3916 9320 20183 41055 80282 153373 289016 539288 996203 1817478 3265284 5762801
|
||||
9 14 30 68 146 310 661 1381 2749 5136 8966 14628 22322 31820 42121 50977 54265 45178 13206 -57124 -187782
|
||||
15 29 57 109 202 360 614 1002 1569 2367 3455 4899 6772 9154 12132 15800 20259 25617 31989 39497 48270
|
||||
1 -3 -11 -24 -42 -62 -67 -1 281 1125 3361 9019 23021 56870 136134 314735 700845 1501645 3097193 6156590 11811100
|
||||
15 40 76 138 251 454 820 1509 2883 5740 11784 24555 51208 105772 214907 427910 834275 1595448 3004280 5598992 10382837
|
||||
9 21 53 124 274 582 1207 2466 4963 9783 18765 34868 62644 108832 183087 298858 474429 734137 1109781 1642236 2383286
|
||||
5 8 7 2 -3 0 23 82 197 392 695 1138 1757 2592 3687 5090 6853 9032 11687 14882 18685
|
||||
17 32 48 73 137 316 778 1868 4250 9118 18486 35601 65661 117400 207006 367840 673662 1291711 2598975 5427196 11561076
|
||||
2 8 10 15 40 116 298 695 1555 3470 7810 17562 38853 83592 173896 349294 678160 1275444 2329586 4142553 7188278
|
||||
10 19 34 65 132 270 540 1046 1958 3541 6190 10471 17168 27336 42360 64020 94562 136775 194074 270589 371260
|
||||
10 18 18 9 -7 -25 -37 -32 4 88 240 483 843 1349 2033 2930 4078 5518 7294 9453 12045
|
||||
12 28 55 106 203 370 630 1008 1533 2219 2990 3512 2955 -59 -6445 -12294 4101 115235 521500 1722951 4891122
|
||||
7 11 18 46 125 297 616 1148 1971 3175 4862 7146 10153 14021 18900 24952 32351 41283 51946 64550 79317
|
||||
-4 2 13 29 50 76 107 143 184 230 281 337 398 464 535 611 692 778 869 965 1066
|
||||
1 1 3 6 16 56 181 502 1224 2706 5573 10986 21362 42224 86628 185139 407435 908045 2021984 4462911 9729426
|
||||
18 33 64 121 214 363 613 1050 1822 3197 5745 10819 21640 45488 97833 209864 442106 909229 1825714 3590277 6941170
|
||||
5 18 44 95 192 363 652 1159 2143 4239 8878 19090 41095 87619 185057 389110 818618 1727421 3653857 7725842 16273119
|
||||
@@ -0,0 +1,3 @@
|
||||
0 3 6 9 12 15
|
||||
1 3 6 10 15 21
|
||||
10 13 16 21 30 45
|
||||
@@ -0,0 +1,44 @@
|
||||
import re
|
||||
|
||||
def main():
|
||||
with open("9-input.txt", 'r') as file:
|
||||
lines = file.readlines()
|
||||
values = []
|
||||
for line in lines:
|
||||
values.append(get_value(line))
|
||||
summerize = 0
|
||||
for v in values:
|
||||
summerize += v
|
||||
print(summerize)
|
||||
|
||||
def get_value(line: []):
|
||||
values = [int(digit) for digit in re.findall(r'-?\d+', line)]
|
||||
values.reverse()
|
||||
history = []
|
||||
history.append(values)
|
||||
for i, arr in enumerate(history):
|
||||
if all(value == 0 for value in arr):
|
||||
break
|
||||
m = []
|
||||
history.append(m)
|
||||
for ii, val in enumerate(arr):
|
||||
if ii + 1 < len(arr):
|
||||
diff = arr[ii+1] - val
|
||||
m.append(diff)
|
||||
|
||||
history.reverse()
|
||||
for i, arr in enumerate(history):
|
||||
if i == 0:
|
||||
arr.append(0)
|
||||
else:
|
||||
last_value = arr[len(arr) - 1]
|
||||
next_value = last_value + history[i-1][len(history[i-1]) - 1]
|
||||
arr.append(next_value)
|
||||
last_index = len(history) - 1
|
||||
input_value = history[last_index][len(history[last_index]) - 2]
|
||||
last_value = history[last_index][len(history[last_index]) - 1]
|
||||
print(f"{input_value} -> {last_value}")
|
||||
return last_value
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1 @@
|
||||
['AAAAA', 'JJJJJ', 'AAAAJ', 'JAAAA', 'JJJJ2', '2AAAA', '2JJJJ', 'Q2Q2Q', 'QQQJA', 'T55J5', 'T3Q33', 'KK677', 'KTJJT', 'Q2KJJ', 'T3T3J', '32T3K', 'J345A', '2345A', '2345J']
|
||||
@@ -0,0 +1,70 @@
|
||||
import re
|
||||
import time
|
||||
from concurrent.futures import ProcessPoolExecutor
|
||||
|
||||
row_cache = {}
|
||||
|
||||
def main():
|
||||
with open("/Users/samuelenocsson/dev/advent-of-code/5-test-input.txt", 'r') as file:
|
||||
start_time = time.time()
|
||||
seed_string = file.readline()
|
||||
lines = file.readlines()
|
||||
lines_count = len(lines)
|
||||
digits = list(map(int, re.findall(r'\d+', seed_string)))
|
||||
next_index = 0
|
||||
for idx, line in enumerate(lines):
|
||||
numbers = [int(digit) for digit in re.findall(r'\d+', line)]
|
||||
row_cache[idx] = numbers
|
||||
|
||||
with ProcessPoolExecutor() as executor:
|
||||
futures = []
|
||||
for i in range(0, len(digits), 2):
|
||||
first, first_range = digits[i], digits[i + 1]
|
||||
print(f"{first} -> {first + first_range}")
|
||||
end_range = first + first_range
|
||||
|
||||
for s in range(first, end_range):
|
||||
if s % 100000 == 0:
|
||||
elapsed = time.time() - start_time
|
||||
print(f"{s - first} done in {elapsed} seconds")
|
||||
|
||||
futures.append(executor.submit(get_location, lines_count, s))
|
||||
|
||||
next_index += 2
|
||||
|
||||
location = min(f.result() for f in futures)
|
||||
|
||||
print(f"Closest location {location}")
|
||||
end_time = time.time()
|
||||
elapsed_time = end_time - start_time
|
||||
print(f"Elapsed time: {elapsed_time} seconds")
|
||||
|
||||
def get_location(nrLines, seed):
|
||||
init_seed = seed
|
||||
new_seed = seed
|
||||
fast_forward = False
|
||||
|
||||
for i in range(0, nrLines):
|
||||
mappings = find_numbers(i)
|
||||
|
||||
if len(mappings) > 0 and fast_forward:
|
||||
continue
|
||||
|
||||
if len(mappings) == 0:
|
||||
fast_forward = False
|
||||
continue
|
||||
|
||||
source, destination, _range = mappings
|
||||
|
||||
if source <= seed <= source + _range:
|
||||
diff = seed - source
|
||||
new_seed = destination + diff
|
||||
fast_forward = True
|
||||
|
||||
return new_seed
|
||||
|
||||
def find_numbers(idx):
|
||||
return row_cache[idx]
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,12 @@
|
||||
def nextCharIsSymbol(line, index):
|
||||
for i, char in enumerate(line[index:], start=index):
|
||||
if not char.isdigit():
|
||||
return True
|
||||
return False
|
||||
|
||||
# Example usage:
|
||||
my_line = "416.........................559...............417...............785.......900.......284...........503...796....992.........................."
|
||||
my_index = 3
|
||||
|
||||
result = nextCharIsSymbol(my_line, my_index)
|
||||
print(result)
|
||||
Reference in New Issue
Block a user