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:
Samuel Enocsson
2025-12-02 10:39:09 +01:00
commit 549f0c4382
90 changed files with 17360 additions and 0 deletions
+1000
View File
File diff suppressed because it is too large Load Diff
+1000
View File
File diff suppressed because it is too large Load Diff
+63
View File
@@ -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()
+140
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
..F7.
.FJ|.
SJ.L7
|F--J
LJ...
+80
View File
@@ -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()
+140
View File
@@ -0,0 +1,140 @@
.....................................................................................#......#...............................................
..#.....#.................................................................#........................#........................................
...............................#...............................................................................#.....#......................
.................................................#.............#...............................#...................................#........
..............#......#.................#...............#............#.............#..........................................#..............
.........................................................................................#.................#...............................#
.#..........................................................................................................................................
..........................#......#............................................#......#.................................#....................
.................................................................................................#..........................................
.........................................#..........#..........#............................................................#...............
......#.....#......#..........................#........................#....................................................................
....................................#.........................................................................#..........................#..
..................................................................................#.........................................................
...................................................................................................................#........................
.................................................................#........................................#.................................
.............................#..............................#..........................#.......#............................................
..........................................#.....#.............................#.............................................................
#..................#..................................................................................................................#.....
....................................#...................#..........................#...........................#..............#.............
........#................#...................#.............................................................................................#
...............................#....................#...........................................#...........................................
.......................................#..............................................#.....................................................
........................................................................#........#...........................#..............................
..................................#........#...................#........................................#.........#.................#.......
#................#........................................................................................................#.................
.........#.......................................#...............................................#.............................#........#...
...............................................................................................................#............................
.........................................................................................#..................................................
...........................................................#..................................#..........#...........................#......
......#.........................#..........................................................................................#................
....................#.....................#.......#...............................#.................................#.......................
..........................#..............................................#..................................................................
..........#..........................#.......................#...................................#..............#..............#...........#
......................................................#.....................................................................................
............................................................................................................................................
#...............................................#................#............................#.............................................
..................#......................#............................#................................#................................#...
............................................................................................................................................
....................................................#....................................#.............................#....................
..............#...................#................................#..........#..............................#.............................#
............................#...............................................................................................#...............
....#.................#.....................................#..........#............................................................#.......
......................................................#.....................................................................................
...........#..............................#.................................................#..........#.................#..................
.................................#..............#................#..........#.......#.......................................................
...................................................................................................................#..............#.........
#...........................................................................................................#...............................
........#.......#............................................................................................................#..............
............................#.....................#..........#......................................#.....................................#.
.....................................#.................................................#........................#...........................
.........................................................................................................................#...........#......
.......................#.............................#........................#.............................................................
..............#...............................#.................#..................#........#...............................................
...#......................................................................#.................................#..............................#
...................#..................#.............................................................................#........#..............
............................................................................................................................................
.........................#.........................#........................................................................................
......#......#.............................................#.............................#............#.....................................
.................................#......................................#...................................................................
.........................................#........................#..............................#.................#..............#.........
............................................................................................................................................
......................................................#.................................................#..............#..................#.
......................#......#...............#...................................#............................#.............................
....#...........#.................#............................................................#...............................#............
..........................................................................#..........................#......................................
..........................................#................................................#...............................#............#...
................................................................................................................#...........................
..........#....................................#...................................................................................#........
................................#....................#..............................................................#.......................
......#.......................................................#...............................#.............................................
#.......................#.....................................................................................................#.............
.................#...................#...........................................#..........................#...............................
.....................................................................#....................#.................................................
..............................#.................#.......#.........................................#.........................................
..#........................................................................#....................................#.........#.................
...........#............................#..........................................#.............................................#..........
......#.............................................................................................................#.....................#.
........................................................................................................#...................................
..............#...................#.........#...............................................................................................
........................................................#.............#..........#.....#..........#............................#............
.........#......................................................#...........................#...............................................
.........................................#...................................#.................................#............................
............................................................................................................................................
................#...................................................................#.................#..................#..................
.................................#..........................#.............#....................#................................#..........#
...#........................#.........................................................................................................#.....
.................................................#......................................#.....................#......#......................
...........................................#.........................#........#.............................................................
........#......#...................................................................................................................#.....#..
.#..................#..................................#.........#..........................................................................
..................................#.....#.................................#.................................................................
...................................................#.................................#......................................................
............................................................#...............................................................................
.............................................#......................#..........#............#.........................#......#..............
................................#...................................................................#.......................................
.....................................................#..................#......................................#............................
...#......................#.....................................................................................................#...........
...........#...........................................................................#..............................................#.....
................#..................................................#..............................................#.........................
.......................#......................................................................#.............................................
................................#........#.........#.....................#.....#......................#.....................................
.#..........................................................................................................................................
........................................................#................................#...................#..................#...........
.....................................#........#.................................................#.......................................#...
.........#...........#......................................................................................................................
....................................................#.............................................................#.................#.......
.............#............#........................................#.............#.....................#...................#...............#
..................#....................#.................................#.............#....................................................
................................................#...........................................................................................
.......................#...............................................................................................#....................
....#..........................................................#.....#..............#...........................................#...........
...............................................................................................#..................#.......................#.
.........#...................#............................................#.................................................................
.............................................................................................................#..............#......#........
...........................................................................................#................................................
.#...........................................................#..............................................................................
..............#..............................#........................................#.............#.......................................
....................................#..............#..............#.........#.............................#.............#.............#.....
....................#............................................................................................#..........................
.........................................................................................#..................................................
...........#............................#................#....................................................................#.............
.....#......................................................................................................#...............................
..................................#................................................#........#.............................................#.
.#................#......#...........................................................................#......................................
..............................................#.......................#................#............................................#.......
.........#............................#........................#..........................................#.....#......#....................
..............................................................................................#.............................................
........................................................................................................................................#...
..........................#........................#...............#................................#............................#..........
..#........................................#............#............................................................#......................
...............................#.....#........................................#.......#......................................#..............
.......................................................................................................#....................................
.....................................................#..............................................................................#.......
........#......................................#...........................#.............................................#.................#
...................#.....#......................................#.............................#.............................................
............#.........................#......................................................................#.......#.................#....
..............................#...................................................#.........................................................
............................................#.........................................................#.....................................
.......#..........................#................#.....#.............#....................................................................
..................#.........................................................#.............#.......................................#.........
+10
View File
@@ -0,0 +1,10 @@
...#......
.......#..
#.........
..........
......#...
.#........
.........#
..........
.......#..
#...#.....
+10
View File
@@ -0,0 +1,10 @@
...#......
.......#..
#.........
..........
......#...
.#........
.........#
..........
.......#..
#...#.....
+51
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -0,0 +1,6 @@
???.### 1,1,3
.??..??...?##. 1,1,3
?#?#?#?#?#?#?#? 1,3,1,6
????.#...#... 4,1,1
????.######..#####. 1,6,5
?###???????? 3,2,1
+52
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+32
View File
@@ -0,0 +1,32 @@
#.##..##.
..#.##.#.
##......#
##......#
..#.##.#.
..##..##.
#.#.##.#.
#...##..#
#....#..#
..##..###
#####.##.
#####.##.
..##..###
#....#..#
.#.##.#.#
.##..##..
.#.##.#..
#......##
#......##
.#.##.#..
.##..##.#
#..#....#
###..##..
.##.#####
.##.#####
###..##..
#..#....#
#..##...#
+62
View File
@@ -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()
+100
View File
@@ -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
+10
View File
@@ -0,0 +1,10 @@
O....#....
O.OO#....#
.....##...
OO.#O....O
.O.....O#.
O.#..O.#.#
..O..#O..O
.......O..
#....###..
#OO..#....
+56
View File
@@ -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
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7
+67
View File
@@ -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
View File
@@ -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)
+100
View File
@@ -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
+63
View File
@@ -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()
+10
View File
@@ -0,0 +1,10 @@
467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..
+140
View File
@@ -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...
+78
View File
@@ -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()
+3
View File
@@ -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.................................*......
+186
View File
@@ -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
+50
View File
@@ -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
View File
@@ -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
View File
@@ -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()
+250
View File
@@ -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
+33
View File
@@ -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
+96
View File
@@ -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()
+2
View File
@@ -0,0 +1,2 @@
Time: 44 89 96 91
Distance: 277 1136 1890 1768
+2
View File
@@ -0,0 +1,2 @@
Time: 7 15 30
Distance: 9 40 200
+25
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
View File
+14
View File
@@ -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
+94
View File
@@ -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()
+740
View File
@@ -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)
+10
View File
@@ -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)
+52
View File
@@ -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()
+200
View File
@@ -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
+3
View File
@@ -0,0 +1,3 @@
0 3 6 9 12 15
1 3 6 10 15 21
10 13 16 21 30 45
+44
View File
@@ -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']
+70
View File
@@ -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()
+12
View File
@@ -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)