From b13d0cce23beb6cf5b40c75c71143862cf60c5d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Del=C3=A8gue?= Date: Thu, 28 Dec 2023 21:26:10 +0100 Subject: [PATCH 1/6] day 12 --- day-12/input/vanyle.txt | 1000 ++++++++++++++++++++++++++++++++++++++ day-12/part-1/vanyle.nim | 116 +++++ day-12/part-2/vanyle.nim | 91 ++++ 3 files changed, 1207 insertions(+) create mode 100644 day-12/input/vanyle.txt create mode 100644 day-12/part-1/vanyle.nim create mode 100644 day-12/part-2/vanyle.nim diff --git a/day-12/input/vanyle.txt b/day-12/input/vanyle.txt new file mode 100644 index 0000000..77f603f --- /dev/null +++ b/day-12/input/vanyle.txt @@ -0,0 +1,1000 @@ +?#?##?#????.?..?? 9,1 +????????#???#? 1,8 +.??????#???#??????? 2,7,1,1 +???.?.?.???#.? 1,1,1,4 +??#???#?##??. 4,5 +??????##??#???????? 1,10,1 +?#?#??.???.???? 6,1,2 +?#?#??..#???#???#? 6,1,4,2 +??????.?.???#?####? 5,1,9 +.#?#??#.????#?#??#? 4,1,1,5,1 +????..????..??? 3,2,2 +.?#??#.??.? 4,2 +???#????#??? 2,4 +#.??#??#??.????#? 1,3,3,1,1 +???.#?????#. 1,1,4,2 +??#?#?.??#??. 3,1,1,3 +?????#???? 2,4,1 +?.??????.?#?#? 5,3 +.?????#???..? 7,1 +.????????.# 1,3,1 +???#.?.?.. 1,1,1 +?.???.??????#??#??? 2,2,6 +??#???.???????#??# 2,10 +?#??#?.????.???? 2,2,1,1,1 +????#?##??. 1,6 +#?#???#???.????? 8,1 +???.?????#???? 1,7 +?????#?????#?...???# 11,1,1 +?.?#?.??.#?#? 2,2,4 +???#.????#??##. 1,1,3,1,2 +??????.????? 2,1 +???#???#?..??.?#??## 1,7,2,6 +?.??#..#???#???.?? 1,1,5,1,1 +?.???###?? 1,5,1 +???.?.#??#?????.?#? 3,2,1,3,1 +???.??.???? 1,1,3 +.?##????????.. 6,1 +????????#???##?#?#. 1,2,2,8,1 +?##?#?????#.????? 4,1,2,4 +?????#??.?#? 4,3 +?##???.#??.? 2,1,1,1 +???.#???#??????# 5,4 +?.?????#.???#..? 4,1,1,1,1 +.?????#??????..#? 8,1,1 +????#??##?? 4,2 +.??##??#?????.. 1,9 +?.?????????? 1,3,1 +?#??..????..??? 1,2 +??????.?.????? 2,2 +?.??##?.?? 1,4,2 +??#?.#?.#. 3,1,1 +??.?##???????#.? 2,5,3 +???.?#?.?#?#?. 1,1,1,4 +??.#???????.# 1,1,3,1 +??###???#? 4,2 +?.?????#??#???? 1,1,1,5 +?..??.?##?????? 1,1,2,1,1 +#??#.#.?.???? 4,1,1,2 +?#?????#???#??#.#?. 6,1,5,1 +?.?###???.????#??? 1,4,1,1,1,4 +???#?.#.##?#?##? 3,1,8 +??#?#?#??????#??#?.? 1,6,7 +##???#?#.???.? 8,1,1 +?..#??.????#?#??.?? 3,5 +?????#?##??. 2,4,1 +??.???###?.?????.? 1,6,1,1,1 +??????????#?#??? 2,4,1,1,2 +?#???#???#???.?#? 2,9,2 +?#??..????? 1,3 +??#?.?.????#.? 3,1,2 +???#??#?#..???? 2,3,4 +?#.##?#?..???#?##.?# 1,2,2,4,2,2 +???.?..#?.???? 1,1,2,3 +????#?#????.? 1,8,1 +?#?????????#?? 1,1,3,5 +???.#??#????? 4,1,1 +.#????.??? 1,1,1 +??.?????#????#?#? 2,1,2,1,4 +.???.????? 3,1,1 +#????#??##???? 1,9 +????#?#?#??.?#?? 4,1,1,2 +??????..?#? 5,3 +??#?#??#????#???#??. 7,5 +??###?.???#??.#. 5,5,1 +?????##??. 3,3,1 +?.??????#????????# 1,1,12 +.????.????? 1,1 +???.??#??..?#?..?#?. 3,4,3,2 +???????.?#??? 3,3,3 +??#???.?????? 2,1 +?#?.?##?#??## 1,6,2 +.????.??#??#?.... 1,6 +.???.#???#? 1,5 +.?#.???#??? 2,2 +#...??.???#? 1,1,1,1 +#.???.?#.??????????# 1,1,1,1,11 +????#??.?? 4,1 +??#???..??? 5,1 +..??????#?? 1,5 +????##?#?.??????.? 6,4,1 +?.?????????????..? 5,3 +??#???????????##???? 5,2,2,6 +.?#??.??#???# 3,4,2 +????#?#????##? 5,3 +?#?.??.???#???#?##? 1,1,12 +??.???#.????????##?? 1,1,2,1,1,8 +.??????#??? 2,3 +?#?????#?#? 2,4 +.?????..????? 2,3 +.?.???#????.???..?. 4,2 +??.??..????????. 2,2 +??##????#???.?#? 1,10,2 +??????#??.?...? 1,3 +??##???#?.????#????? 6,6 +?#?????#?#?????? 2,5,3 +??#???????#???? 5,4,1 +#?.????..?#?. 1,1,1,2 +????????#??#####? 3,12 +????????#??#? 2,1,6 +????##??.?#. 2,3,2 +.?.?##?.????#???. 1,2,8 +?.#.????.#????? 1,4 +??????????.? 1,1,2,1 +??.????#??##?. 1,1,6 +???.?#??..# 3,3,1 +?????#??????.?#.. 10,2 +...??.???????#???#?. 1,11 +??????.#.??.?.? 3,1,1,1,1 +????.#????#?.#?#?? 2,1,2,1,1,1 +???#?#..#???? 4,1,2 +.????..?#?#??.? 2,6 +.??#??###?#?#??#??.. 4,12 +??#???#??# 2,1,1 +????..#???..???? 3,1,2,1,1 +.#??.???#? 1,1,1 +?#??#?.???#. 1,1,1,1 +?....????##?.??..? 1,1,1,3,1,1 +???.#???????#??.#?# 1,11,3 +.?.?#????#? 2,1,1 +?#??#??#.??#?.?????? 7,2,3 +???????????.?. 1,1,5,1 +??#???####?# 3,6 +??#??#.?????????? 1,4,1,1,5 +??####?##??.#.?. 8,1 +?????#??.?#?#?? 3,2,4 +?.???##?#...?? 7,1 +?#?.#?##?#?????# 1,12 +.?????#??#??#???.?#. 1,13,1 +.??##??#?????# 1,6,2 +??.??.?##????.? 1,1,6,1 +??..????#?#. 1,2,3 +?#?.?#..???? 3,1,1,1 +?.##??????? 2,2 +????#?###??.???# 3,6,1,2 +?#??????#???.??????? 11,3 +???..#?##??# 1,1,5,1 +???#?..?????? 4,2,1 +#?#????.??..?# 5,1,2 +?#???.???? 2,2 +???###?###??.#.? 11,1 +????###?#?#???. 11,1 +??#??????#??? 2,2 +#??.#...??#? 3,1,1,1 +.#.?.?##??#???#.?.#? 1,1,8,1,1,2 +?#???????#..#?? 4,1,1,1 +##??#?#.???.?.? 3,3,3,1 +????.??..????????? 1,1,1,3,1,1 +???????#????. 1,1,4 +???????#????# 1,5,1 +..#??????? 2,4 +??#???.???? 2,4 +.???#??.???##?. 5,4 +?.???##.??????..? 2,3 +.#???.?.??#???#??#?? 1,1,1,10 +.??.#???#???? 2,9 +???????##????????.? 1,10,1 +?#.?.#??#?????. 1,1,1,3,1 +???.????#.?.? 5,1 +?.?#???#??????.? 1,1,2,3,1 +??#??..?#.? 5,2 +.??#?.#.#.?? 3,1,1,2 +??#.?#?.???#?? 3,2,3 +??????#???..?.??.?? 8,2 +??..??.?#??? 2,1,3 +??.???#???? 2,2,1 +??????#???.#??# 1,2,2,4 +#??.#?#?...??????## 1,1,4,1,1,2 +???#????#????.?.???? 12,2 +?#?##?.??????? 5,3,1,1 +??????.??????? 1,2,4 +???..??????..??## 2,3,1,1,2 +?.??..????.?? 1,1,2,1 +#?.???.?..??? 1,2,1,2 +????#.#??#??????#?? 1,2,2,10 +?????###??? 7,1 +?#??#?..???.#?? 6,3,1,1 +?#??.?.?##?#??? 3,1,5,1 +??#??#???#???##? 1,2,1,2,5 +?#?#.#?....??????. 2,1,2,1,1,1 +.????##???..?#. 7,1,2 +???..?.??#?#?.?#. 1,4,2 +??.?.????.#.????#?? 1,1,2,1,7 +?#?????#??.? 1,2,1,1 +???#???#?????? 9,1 +??..???.?##..?? 2,2,3,1 +?.#??????????????? 8,1,2 +??#??#?####??.???? 1,7,2 +#.???..#.? 1,1,1 +?????#..????? 4,1,1,1 +??.???##?#???.# 1,5,1,2,1 +????.??.?#?. 3,1 +#??.???????????##?.? 1,1,13,1 +?#.???###?.?.?? 1,1,5,1,2 +??#??????#?????????? 11,2 +???..????. 1,1,3 +.?????????????? 1,4 +?.#????.???#????? 5,5 +???????.#??#?.. 1,1,1,2,2 +?????.????????????? 1,2,2,8 +.???????#?? 3,3 +??.????#??..?.??#. 1,3,1,1,1,1 +?.#??#???.?? 1,1,1,1 +.??????????? 5,2 +.???????#??? 8,1 +.#?..#???#?.#. 1,1,2,1 +.???#?#???.???? 7,2 +??.?????????#????#.. 2,9 +??##???????#????# 5,1,1,1,1 +?#????#??.#??.??? 8,3,1 +?.#??#?.#?. 1,2,1 +#???????#???#? 2,6,3 +??##?#?.?#?? 4,2,3 +???.#????????.?? 1,1,8,1 +##???.??????#???# 4,1,2,2,2 +??###?.?#???? 4,4 +#?#??.?#?.?.?#?##..# 1,1,3,5,1 +.????#?????#?#??. 2,1,7 +.???###??###????.?? 12,1 +??.???####?.??? 1,5,2 +??#????????.?##??## 1,1,1,1,6 +???##????#????????## 1,5,1,5,3 +.??#?#??#?####??.? 5,8,1 +???#??##...#????? 8,3 +.??...##????.? 1,5,1 +.??#????????#? 7,3 +.???.?##.??????.? 3,3,1,2 +????#??##??#?. 3,5 +??##??#???#.? 7,2,1 +#.??#??#??#???.??? 1,2,7,1 +...???.#.??? 2,1 +#???.?##?###??# 1,2,2,6 +????.?#??.? 2,1,1 +???..?#?#??.#???? 1,6,3 +?..?????#?? 1,1,2 +.?##??.?.?#? 5,2 +###???????#?? 3,2,2,1 +????????#?##??.. 1,1,4,3 +??.?.?#????#?..#.#?# 1,5,1,1,1,1 +.#???#?.#???? 1,1,1,5 +?????.?#?.?#?? 2,1,2,3 +?#???????????#?###? 1,1,1,8 +???#???#.#??? 1,3,1,1 +??#?#????????? 3,2,5 +?.???????#???# 2,6 +??##???##??. 4,5 +????#?.??#??#???#. 4,9 +#??.???.?.??## 2,1,1,2 +?#??.????#?.? 3,2,1 +..#?##.?.##??##???? 4,7 +.??.?##???#???#?.?? 8,1 +#.?????#?????? 1,6,1,2 +?#????.#?.??.#?? 5,1,1,1 +?.?.#?#??????.? 1,1,4,1,1 +??.?#????.??#..#?? 5,2,2 +?#??#????. 2,4 +?#????#??#?.#?? 1,1,5,1,1 +#??##??#??#? 2,3,1,2 +??.?.#???#?.??#?#. 2,2,2,3,1 +.##????.?##.?? 3,3 +#?.???.??#?#???.?#? 2,2,2,2,2 +??.????#???????#?? 2,3,1,1,3,2 +??#??#.#??#???#?.? 1,1,1,5,1,1 +??.????###.?. 1,5 +?#???###?.????? 1,5,2 +????#?#???.? 7,1 +.???#???### 3,1,3 +??#..?#??. 3,4 +?????##?.?? 1,4 +?.??#.??????#?#??#? 1,2,1,5,1 +????..??#?? 3,2 +#.????.?#???##??# 1,1,10 +??????????..?.???? 7,2,4 +?#.????????? 2,3,1,2 +.?????.#??#? 2,4 +???#?????#.????.? 1,7,2,1,1 +..???##?????#?? 8,2 +?#????????? 5,1 +????#?#????. 3,2,1 +???..?..#?..# 3,1,2,1 +.????.???????? 1,3,1,1 +.????#?.???#??##?.?? 1,3,7,1 +..??#?#???..#?#???? 3,1,1,4,1 +.??.?????.?#?##??.? 2,1,6 +???#.?#.??#?? 2,1,1,2 +?.??????#?????????. 1,5,1,2,1 +???##?##?.???#?. 1,6,2,2 +.??#....??.? 2,1 +.??????.?#???.??? 1,2,1 +??.??...?##?##????? 2,9 +.#??#?#?????????.??? 11,3,1,1 +???#??#?#????.???? 12,1,1 +???.????#??? 1,1,2,1 +?#.??#???##????. 1,12 +?.????????#?? 1,2 +.??###??????????#?## 5,1,7 +.#?##.???.?.?.???? 4,1,1,1,1,1 +?#??###??##..?##? 1,7,3 +???#.??.?###?#.? 4,1,3,1,1 +???????##?##??#.. 3,1,8 +??#?#.???#?#????? 4,1,4,1 +?##??#??#?##?? 2,1,6 +#?#?.?##?????. 1,1,8 +????????.#? 6,2 +.??#.?#?#??.?. 1,5 +?.?#?.?.????? 2,1,2 +?#????#??????.?????? 2,1,1,3,2,3 +????????#?.##.?.?? 8,2 +?#????#????????#.??? 5,3,2,1,1,2 +#?#????#..???????#? 1,3,1,4,1,1 +.#???#.???????.#???? 5,1,1,3,1,3 +.??????.?#?##???? 5,6 +?.??#.?????#####???? 1,1,9,1 +#???#????#.??.?## 2,2,4,1,3 +#????#????#.?#???#?. 1,1,1,4,5 +?#????.??. 5,1 +????##?????? 7,2 +?#?#??#?#????.?.#?? 9,1,2 +??##.?##?#??.??..?? 4,4,2 +..??.??????? 2,7 +?#??#.#?##????? 4,1,6 +??.?#?.?#?.?????? 3,1,6 +.#??????.?? 4,1,1 +##??.##??.?##?#???? 4,4,6,1 +??????#?????#?? 10,2 +?##??????? 3,5 +.??????????.#?#.? 9,1,1 +..???#????##??#? 2,1,8 +??????#??#???????# 1,1,1,8,1 +?..???.???#?##?#. 2,6 +?#????##.???#?# 2,3,6 +?#????#??? 4,3 +#?.??????????#???. 1,1,2,3,3 +????????????..?.? 1,4 +##?#??#.?#??.#??# 7,1,1,4 +??.?????????#..???. 1,1,8,2 +????#?????.?#? 2,1,3,2 +.?#??..#??? 3,1,1 +?#?#?????#????? 1,1,9 +#???#?#?#?.? 1,7,1 +#??????##??..?#?#??? 2,6,6 +.??###??????#???. 3,3,3 +?????????????##.?? 1,1,8,1 +????????#.??#???# 9,2,1 +???#????????? 1,6,2 +.?????.???.??.. 5,1,2 +?#?.??????.??# 1,6,1 +???#???.????? 2,1,3 +.#.????#..?##?.????? 1,1,2,3,2 +?#?.?#???#?.?. 2,6 +.##?#.#??#???????### 2,1,1,1,1,4 +????#???.????.#.? 7,1,1,1 +#???.????? 1,4 +##??#???#??????????? 5,10,1 +?#??????..??? 5,1 +.???#??#?##? 1,7 +??..#?#??????#. 2,4,3 +?.??????#??.???.?.?? 3,5,1,1,1 +??????#?.??. 5,1 +#??.??#?.?#?##??#? 3,1,1,5,1 +##?#?.?.#? 5,1 +????#???.? 4,1,1 +.??#?#????..?????? 1,1,3,1,1,1 +??#????#?##???????? 1,1,11,2 +#??.?#?#???.# 1,6,1 +??.??????.? 3,2 +???#?.?????#?##?#.# 4,1,7,1 +????##???#?.??.# 2,5,1,2,1 +?.?###????#?#??#???? 11,1,1 +???#.????.?.?#?#??#. 4,3,1,5,1 +?##?###?????.??? 9,1,2 +??#???.????????#???? 4,1,8,1 +#?#????.???.? 6,1 +?????..??.????.??? 1,4 +.??.???.??.?#??.?.? 1,2 +.?.??#?.??#??#??#? 3,7 +?#?????..????? 4,1,2,1 +????????????#?? 4,5 +??.?#???#??.??? 1,3,2,2 +##??#?.????#??? 6,7 +#?????.?###?##? 1,1,7 +?.??#?#??# 2,4 +?#???????# 1,2,3 +????.????..##? 2,4,2 +???????#?#? 1,6 +???#.??#??.? 1,4 +??###?###??..?????? 11,2,1 +?????.?.??.#?.? 1,1,1,1,1 +?#?????#.?#??. 2,5,4 +??.????#?????#???#. 1,1,2,7 +??###????????.? 4,2,1 +?????.?.???.? 1,1,3,1 +.?#??????#??.??##?#. 4,2,3,6 +?##???#???#?? 2,3,3 +????#????##??????? 1,13,1 +???.??????##.... 2,3 +.#??#???.???.?#?? 1,4,3,3 +#??#?????#?#???##?? 2,10,3 +?????##.??#?#??. 7,1,5 +???#????#??? 5,2 +????#???.?#??#???? 1,1,1,9 +#???##???. 2,4 +.#???..#????#??? 2,2,5 +?????????#?? 7,1,1 +?#??#????.???? 7,1,1,1 +??.?#???#????????? 2,3,6,1 +.?..??#?###. 1,7 +???#????.?#?????? 4,1,2,2,1 +.????#.???. 4,2 +.???????.? 4,1 +.?????????.??#? 1,1,2,4 +.??##?##?????.?# 2,2,1,1,2 +??????.#.?#? 2,1,2 +?#???.???.??#????. 4,3,1,1,2 +??#.???.??? 2,3,2 +.????#????#??????? 10,4 +.#.??#..?. 1,1 +????????..?#???# 2,2,2,4,1 +##??????.???.?#.?? 3,1,1,3,1,1 +###???.?#.?#?#????# 3,2,1,4,2,1 +#?.###??#.??? 2,3,1,1 +???.??#..??.??? 1,1,1,2,1 +??#?..?.?..?##???. 3,4 +?..???#?#?? 1,7 +????#?#????##??????? 10,1 +.?????????.??.??##?? 4,1,1,1,6 +?#???..?????. 2,1,1,1 +?#.??#????? 1,3,1 +.???##?#???#?. 1,4,2 +..?????##??????.? 8,1,1 +?????#?..??. 3,1,1 +????#??#?.?#??. 6,3 +????.?.##?????###? 1,1,2,2,4 +?????.?#???? 2,1 +#???#?#??.#.?. 1,6,1,1 +????#.?.#??#??#??## 1,1,11 +??##?#???#?.?.????? 1,8,1,1,2 +.##??#.?#?? 5,1,1 +.?#???.??????..??? 5,1,3,2 +.???.??????.##???? 3,1,5 +???#?#??#??????.???? 13,1 +??.?#??.?# 1,2,1 +??#????????.??.?.#? 1,9,2,1,1 +??#??#..??#.? 4,1,3,1 +#?.#??#???#???.??? 1,9,1,2 +??#?????????? 1,1,3,1 +????..?.?#?.???? 1,1,1,3,4 +?#??.?#???? 1,5 +?##??.??#.??..????? 2,3,3 +.??.?????? 1,1 +?##?#?##????????.?? 3,1,4,3,1,1 +.???#?#?#?????#?? 4,7,3 +?#??#???..? 4,1,1 +...?###????#?#??#??# 3,8,2 +???#????.??????#???? 2,1,7 +#???????##?####.?? 1,1,1,2,4,1 +??#.????#?????. 1,1,6 +#??????#?.#? 1,1,1,1 +#??#????????.?? 1,1,3,1,1 +?#?#??#??? 3,2 +..????.?#?. 1,2 +??????##????. 5,3 +????????.??#??. 6,1 +.#?##????.?#?#.??? 8,2,1,3 +??#?.????#????? 3,5 +????#???????? 1,8 +??.??#???#?? 1,1,4 +???...???..? 1,3 +..??##??#?#.?##### 9,5 +..?#?.???. 2,1 +#?#???#.#???#???? 1,2,2,2,5 +??#???.??.?? 4,1,1 +..???.?????... 2,1 +?..?#???#?..??#????? 7,7 +?.?...???#. 1,4 +?..?#???#????? 6,2 +??#???????#?????#?.. 2,9 +?#??#???###????#. 1,7,1,1 +???#..?#????.?##??# 4,5,3,1 +.??#..#??.?? 3,1 +????.#?.??..??#? 4,2,1,4 +#????????#. 1,5,1 +????#??.#.??? 4,1,1 +.#?#?#??????? 1,1,8 +???#?????.# 4,1,1 +?????#??#.???.?. 7,1 +??????????? 3,1,1 +##??#?#???????# 5,1,4,1 +?#???##?.??#??#????? 3,3,1,9 +#????#.????#.?? 3,1,1,1,1 +.??#.?#.??#?? 1,1,2,3 +?.??##?##????.??.#.? 1,7,1,1,1 +##???????.? 2,2 +??#??.?#????. 2,1,3 +?....#?#??. 1,1 +??##??.?.??#? 4,1,1,2 +??..?.?????# 1,1,1,1 +.??.?????? 1,1 +????#??..?#?#??#. 4,7 +?##????#.??# 3,3,3 +?#?#????.##?#?? 5,1,2,1,1 +.#?#???.##? 1,4,2 +.??????..?#??? 1,3,3,1 +?##??#??.????? 6,1,1 +.???.??... 1,1 +.##???###???#?#?? 14,1 +#?#?????###?.?????. 3,5,3 +???.?#?#??#?????.?? 1,1,7,1,2,1 +???#?.??##?? 1,4 +#?#.???#???. 3,4 +???.?.???.#???#? 1,1,2,1,2 +..#??????#???? 4,4 +.#???????????#??.. 1,3,6,1 +.????###???#? 1,1,5,1 +?.??????#???...?? 2,5 +?????#??????.??#???? 7,1,3,1 +??#?#..#??.#??? 2,1,2,1,1 +.?#?.?#??#? 1,5 +#???##??????????? 1,10,1 +????#?###?#?.??.?.# 3,8,1,1,1 +??.##????##. 3,1,2 +.??##.?.??? 2,2 +?#?#???????????##??? 11,4 +?.?????#?.????#?? 1,1,1,1,4 +?#?##?????##??????? 2,12,1 +?????????#????.??? 10,1 +???.#???.? 2,4 +?#????.?#.?#?..#?## 2,1,2,2,1,2 +???.#?#?#.?????? 5,2 +.##??#?#??#?? 7,3 +#.????#?#?#????.?? 1,3,7,1 +??##???#???#??.?#?? 10,3 +????#?????#. 4,1 +?????.???? 4,1 +?##??????#?##.? 2,7 +.?##?????#?#?? 6,1,1,1 +???????.???##?? 1,2,5 +.?.??#????#??#??###. 1,1,12 +??#??#???#.????. 5,3,2 +?##??#??.???#??? 8,6 +?##??.???????? 5,1,2,1 +?.???.?.????#???# 1,3,1,2,5 +??#?#????#???#??#. 3,2,9 +?#.??????.??????? 2,1,1,1,4 +?????#?????. 2,1,2,1 +???.??#?#..???# 2,1,1,1,1 +?#????????. 2,1,1 +???#??..??.??#??. 3,3 +????????..?? 2,1,1,1 +.??..??#...?#.???# 1,3,2,3 +?????###??.?? 4,1 +????#?????? 6,1,1 +.???????#??## 3,6 +.?.???#???????#? 1,10,1 +?#.???#??#?#???? 1,4,8 +.??????##??? 1,4 +#??##.?????#???##??? 1,3,1,8,1 +????#????#?###????# 3,1,7,2,1 +??.????###?????? 1,1,7 +?#?#?.???.##? 4,1,2 +????.?..???#?#? 4,1,1,5 +?#???.?#??. 1,2 +#??#????????????. 1,7,1,1,1 +.?#..#?.##?#.??? 2,1,4,2 +??.???.??#????#??#? 1,1,1,6,1,2 +?..#??#.##?.#. 4,3,1 +???###??##????# 1,7,2,1 +###?????###?#??#..?? 13,1,1 +.#?????#??? 1,6 +?#??#??.??.?.? 6,1,1,1 +.#??.?#..?#??? 3,1,4 +??#??.?##??? 1,1,4,1 +.#????#?#.?#?#?##??? 8,7,1 +?#??#?#.???????. 7,3 +#?.??#??##??????. 2,6,2 +.#??#?#??.? 1,5 +.????#??????#??? 2,7,3 +.???#?#????.? 1,4,1,1 +?#..???.#? 1,2,2 +.#??????###????? 6,7 +?.????.???#?? 1,1,1,2 +??..??????.##?##???. 2,6 +.#?#..?#????.?? 3,5 +.#?#?????????? 5,1,1,1 +.?.???#?#??.? 1,3 +???#.?#?..????#?###? 2,2,8 +.?#???.?.???##?.?.? 2,1,5,1,1 +???????..#?##? 2,1,1,2 +.?#?????.??#. 3,1,1,1 +???#????#??.?.#?? 1,8,1,1,1 +?????.????#??#?#? 3,11 +#..?.#????#??#?..? 1,9,1 +#.?.?#??.??? 1,1,3,2 +????.????.?##???? 1,1,2,3,1 +..??.?..???.?.?? 1,1 +.???.##??#??#???? 1,1,6,1,1 +#.#?????????# 1,1,3,2 +#??#?#???.?????.? 1,5,1,1,1 +??.###???..? 5,1 +?#?#??##??#??.??. 4,7 +??#?????????? 5,3 +?#???#???. 2,2 +??#??#?#??#?? 6,1,1 +?.???#.?#?# 1,3,3 +???#??????#???#?. 1,10,1 +?.?#?##?.?? 1,4,1 +#??##??.????#??. 1,3,6 +#.???????#? 1,2,2 +?#?#??.?.?#?#.?#? 3,1,1,3,2 +??#???.?#?????? 2,1,6 +.??#???##???# 1,2,7 +??#??#???#?#?.?.?. 1,1,8,1 +##???.?..??#?? 2,1,1,2 +?#..????.????????#?. 2,2,10 +??##?..?##????###.?? 4,10 +?#?..??.?? 1,1,1 +??????#??..??????.#? 8,1,1,1,1 +???????.#?????..??.? 2,1,5,2,1 +#?#????????##??? 4,1,1,6 +.???#?..?????? 1,2,1,4 +.#..???.??##??. 1,3,3,1 +????#??????#???????? 1,1,5,2,1,1 +?.?###?#?#?#?#?#?.?? 14,1 +?.?.?#??????? 1,3,2,1 +?##????????#?#??.# 5,1,3,1,1,1 +???.???#????? 1,6 +?????####?????#?#? 1,11,3 +?#?.???#??? 1,2,1 +..#??##??? 6,1 +??????.??.. 2,3,1 +.????#?.#???.?? 1,2,1,1,1 +.??##?##??..??###??? 7,5 +#???#??.??.?#.#.?. 1,2,2,1,1,1 +??????#?#??.?? 5,1,2 +#?#??#??????.????.?? 9,1,1,1,1 +#?#..????#?????###? 1,1,1,4,7 +.?.?????#.?# 1,1,2,1 +?.???#?##?????#????? 5,2 +#?????.??? 2,1,2 +?????#??#?#????#?? 13,1 +?.??#????#..?? 5,2,1 +????#??##?.?.? 1,3,3,1 +?.????.?##???#? 2,7 +#?#?????#??.??##?? 6,1,1,1,2 +???#?#??????#???.?.? 4,4,1,1,1 +???#???#?#?.#? 4,5,1 +??.?#???????????. 1,5,4 +.?#.?????#.? 2,2,1,1 +????.?#?###???#?.#.? 2,11,1 +??#??????##?#?? 2,9 +???????#?#?##??????? 3,1,7,1,1 +???##?....??????? 6,6 +?#.?#?.##?#?#. 1,1,2,3 +??????????#? 4,2 +#.?###?#???#?##?#?.? 1,13,1,1 +??#?#?.?.???.??##?? 6,3,4 +???.#?????##?.# 1,1,8,1 +??????#?#?? 8,1 +?#??????#??#?. 6,1,1 +.#?#??#.#?#?#?.? 6,5,1 +?????????#??.??#?#? 7,2,3 +.????#??#????.??#? 8,1,3 +??.?#???##?#??##??? 2,12,1 +?#???###?.???.?? 7,3,2 +#????.#???.???#..# 1,1,1,1,4,1 +????##?.#? 6,2 +??????####?.# 7,1 +????#??.#. 1,4,1 +.????#?????????##?? 15,1 +???.????#?# 1,4 +???????###. 1,5 +#?.?????#??#?? 2,6 +?????##????.#??#.?? 8,2,1 +??####????##???.# 13,1 +?..??#??#.?#?????? 1,3,1,1,1,1 +.#???#???????#??#?? 6,1,8 +??#?#..???? 4,2 +.?#?.?.???? 2,1 +.???????????? 2,1 +????????#?.??? 1,1 +??#???#???. 2,4,1 +#??.????#.?. 3,3,1,1 +?????#.?.?.????. 5,2 +???#???.???? 1,5,1,1 +#.?.?????#????? 1,6,1,1 +?#?..#?#.??.??#?. 2,3,3 +#????..???. 5,1,1 +?#??#?????#???#. 1,3,1,1,3 +???#?????????????.?? 4,2,1,5,2 +????...?..??.????? 2,1 +??.?..?####?#?#????# 1,14 +???###?##??#?# 9,1,1 +??.#??.???##? 1,3,5 +??#??#???????? 1,2,1,2 +?.###??##??.?#.. 9,1 +?????#???? 1,1 +#??????#?#???.?##?. 1,8,3 +.?.??###?# 1,7 +?????????##???.???# 1,2,1,4,2 +?.?#???#???#.???? 2,1,2,2,1 +#????#??????.?? 4,3,1,1,1 +??????????.? 3,3,1 +?????.??#?## 2,4 +?###?#??.????..? 8,2,1 +?????.##???.?? 3,4,1 +#??????.??# 1,3,2 +?#?????????#?.?? 7,3 +????#??#?.??????. 5,1,5 +.?#?#??#?.???### 8,1,3 +??.?#???.???????.? 2,4,1,5,1 +??.??#????.#?#???? 1,1,2,1,1,3 +????????.???# 1,1,1,2 +???#??#?#??.????#. 5,2,5 +??.??.?#?.#?#? 2,2,1,4 +.#????.#???????.?? 1,1,1,5 +???###??????????.?? 15,1 +???????##.??.??# 6,2,1,1,1 +???????.??? 6,2 +????????.?#?#.??#??. 3,3,3,4 +????#?..?.. 3,1 +?#??#?###???##?#?? 2,13 +????###??? 2,4,1 +??.?#??####?.??##??? 9,6 +?#???..???.????? 4,2,1,2 +??#??##???? 3,2 +?#??#?##?????# 1,2,6,1 +..????..???? 4,1,2 +?#????.???..#???? 2,2,2,2,2 +?#????????#??#??? 1,13 +#???..#???????# 1,1,1,7 +#?#.#????.?? 3,1,1,1 +?.???????..?.?? 1,4 +?.#??.????? 1,1,1 +??#?.?????#. 3,3,2 +.?.#??##?##???#? 1,12 +??#????#??.#? 8,1 +??#???..####?#??#? 5,7,2 +???.#?#?????#?????? 1,6,2,2 +??.???????#??##?#.. 1,2,4,4 +#.??????????#???? 1,1,11 +???#?#???#???. 1,4,2,2 +?????.????? 1,1,4 +??????#??##??. 9,1 +??#???#?.??? 6,1 +????.???##?.??.#??? 2,5,1,2,1 +??.#?.?..?#????.?? 1,3 +?#?#.??#.? 3,1 +##??#?.#?????#?????? 3,1,3,1,1,4 +????.?#???#??#?? 1,1,5,2,1 +?????..?????? 4,5 +??#..?#.?.????????#? 1,2,6,1 +?#??#?##???#???#???. 2,8,1,1 +????#????#.????.#? 1,5,1,1,1,1 +?????????# 1,1,2 +??#???##??. 3,4 +?#?????#???#?? 1,1,6 +??#??.#?#???#?????? 2,1,5,3 +??????????#???#. 2,6,1 +?????#?#??????#????? 11,1,1,1 +?????#.?.?...??.?# 1,3,1,1,1,1 +??#.#???#???????? 1,1,10,1 +???#?.????.??#??# 1,3,1,1,6 +#??????#.??#?.? 2,1,1,1,2 +?.???????.??? 5,1 +???#...?#?? 1,1,2 +????.?????????.? 1,8 +?##?#?##?#???###??? 3,14 +??????#???#?#?#???#? 1,16 +?.?????????????? 1,2,1,4,1 +?..?.?#??##?..?????? 1,1,6,2,1 +.?###?#?.??# 7,2 +???#.#????.???? 1,2,3,1,3 +?#.????#????? 2,1,5,1 +#.##?????.#..??#???? 1,2,2,1,5 +??#?##????.#???.?.?? 3,2,1,4,1,1 +?.??#.?????#?#.. 3,6 +????##??#??? 1,1,7 +??.#?##??.? 1,6,1 +??.???#?.??##????? 1,1,6,1 +?#??.????###??.? 2,9 +?????#??#???#.??. 1,7,1,1 +?????????#? 2,3,1 +#?????????.???? 8,4 +??.#?.#?.?? 2,1,1 +.????##?????#?#? 6,4 +#??????.?#????? 1,2,6 +?#???????. 3,4 +???.???##???.??#? 1,8,2 +.#???#??#????#??? 1,13 +?.?????#????? 1,2,1,4 +??.??????? 1,3 +.????#??#?????# 8,1,1 +.??#???#????????? 3,4,3 +#?????#???#?#?.????? 7,4,1,1 +???#.?.#??.??????? 4,1,1,1,4 +???????#?? 3,3 +??#???#???? 3,6 +?????#????.?? 5,1,1 +.???#?#..##.? 2,3,2,1 +?#?.?????#?#?? 2,1,5 +#.????.?????? 1,4,2,1 +???#???..?#??#???. 6,6 +#???.#?#?????#?? 4,10 +#????????? 2,1,3 +?#??#?#.?#?#???# 1,1,1,4,2 +???????##?#?? 2,7 +..??#?????.?#??? 5,3 +..????????.???.? 1,1,2,1 +?.??#????#?? 4,1 +???.??.????.??. 1,2 +.?????????###.?#?? 5,1,3,1 +???.?#????#????? 1,8,1 +??.??.???.??? 2,1,3,1 +?.??###???????.. 4,3 +????????????.#??? 3,3,1,2 +???#?.#?###??#??? 1,3,5,1,2 +?#??#???..??#?.. 7,4 +#.??##?????. 1,1,4,1 +?.??.#????#?#??#? 1,1,12 +????#??#?.? 7,1 +????#??.?? 2,3 +?..??#?.????# 3,1,2 +?.#?#???#???.#? 1,5,3,1 +##??#?#???###?? 2,11 +???#####??????? 2,10 +??#?#?#?.?. 6,1 +????..????..#?#. 1,1,3,1,1 +.#?????#???##?#??? 14,1 +#.??.?.??#.?.?? 1,2,3,1,1 +?#??????.????.???.? 3,1,1,2,3,1 +?.?.???#?? 1,1,2 +??#?##????? 4,1 +?.?#??.??. 2,1 +??.???#.?? 1,1 +##.?.?#?????.#? 2,5,1 +?##?#.???????. 5,1,4 +..?##???#.???? 6,2 +.???.??????#?#?. 1,7 +?????#.??#? 2,1,2 +.#?.#?????????? 1,1,1,5,1 +???.?????##??..? 2,1,1,4,1 +?????##..? 5,1 +#?????????#???? 1,3,1,3,1 +?#????..???????##? 1,1,10 +???#????#.??.????#? 1,2,1,1,2,6 +??##.?.???.??..#? 3,3,1,2 +?.?#?#?.???#?#??? 4,4 +?##???.??#?.? 2,1,1 +#?.??##??.?.#?????? 1,6,1,1,1 +???#??#???.?##?? 7,3 +?##??.?.?#????????#? 3,2,1,1 +?..?#?.##?#?.? 2,5 +?..??????? 1,2,2 +??#?????.#???#??. 4,7 +????.?????.. 2,4 +.??#?.??.??..??????# 3,1,1,4,1 +#???#?###??##?.? 1,11 +??#??.???????#??#? 5,10 +?.??#?..##?. 1,3,3 +??.???.?.? 2,2 +#??????##?##.?? 4,6,1 +???????.?#????.?? 2,1,2,3,1 +.??#???#???#?##.#.?? 13,1 +??.??#?#?? 1,5,1 +?#?#?#.?????.?? 2,3,2,2,1 +????.???#????#? 1,1,2,4 +.?????.????#. 2,1,1,1 +.???.????.?? 1,1,1,1 +?.????.?#.??#. 4,2,2 +??????.?.???#?? 1,1,5 +????????.?#???#?? 5,5 +????####??##?? 7,5 +.??##??????.???.? 10,1 +#??#???#??#??? 1,3,4,1 +.#???.????? 2,3 +..??#??#??#??#?? 2,8 +??????##??.???? 2,1,4,1 +??????##??????????? 1,5,5,1,1 +??#?.??????.?????? 3,1,1,1,1,2 +???#.?#??? 2,2 +##.??????#????# 2,2,8 +?#????????? 5,3 +?#?..????.?# 2,1,2 +#??.?.#???#????# 1,1,1,3,1 +?..??.??????? 1,1,1,2 +?#?.?######?#???? 2,7,1,1 +??##???.?###? 5,3 +??#.??##..???????? 2,4,4 +??????.#.??##?. 2,1,5 +????#?.??? 1,2,1 +.???????.?.? 2,2,1 +?????#???????? 2,3,2,1 +?.??.#?#?# 1,5 +??.???.?????.?? 1,2,1,1,1 +???.?..??? 1,1,2 +????.?.??.? 1,2 +?.????#??? 2,3 +?????#???????.?? 7,2,1,1 +???????.?## 1,4,3 +?.?#?????? 4,1 +??????#????#..?????? 11,3,1 +#?##????##???##.? 4,1,7,1 +?#???##??????##?#? 2,3,1,4,1 +??..#?????#??.?? 1,9 +?###.????.???#???? 3,2,1,6 +???#????.????##??. 3,1,4 +????#???.?##?. 1,1,2 +.???#??##?#?# 1,6 +#??.?????.?.? 3,4 +?.??#?#?#????? 8,1 +?????.????? 1,1,2 +?.#???#????????#.#? 1,8,4,2 +???#???#??#??????#.? 6,1,2,2,2 +????.???.??????#? 2,1,7 +??#.?????.?. 1,2,1,1 +?#?##???.?#???????# 1,5,1,2,1,1 +??????#?#.??? 3,3 +??##??????..#??. 7,2 +????.?.??.? 1,1 +?????#??#? 2,1,2 +???#?.???????# 4,1,3 +??##????#?#?? 5,1,1,1 +??##?.#?.#????????. 1,2,1,1,1,4 +?.??.???.#. 2,1,1 +???#??#?????###???.. 9,6 +???????.???#.?# 1,2,3,2 +???#?.####??????. 1,3,6,1,1 +#?#??#?????###?#. 1,8,3,1 +???#?????? 1,3,2 +#?#??????#??#?.?? 13,2 +.?????#.??#? 1,1,1,2 +.###..?.???#??.?? 3,1,6,1 +#??#???#?..?????###? 1,6,3,3 +.??????#???. 1,3,1,2 +#????#??.??????#?? 1,1,1,1,1,5 +?????.??#??#???#?? 4,11 +????#???#??????? 6,1 +.??##?.?..?.#??#. 4,1,1,1,1 +???#?????#??? 2,5 +#?????.?????.?#? 3,1,5,3 +??.#??#?#.? 2,1,1 +?#.?????????.?. 1,7,1 +###???#?????#????#.. 13,1,1 +..???????.?.#.?? 1,4,1,1,1 +??.#?#????????? 3,1 +.????????.??#?#??? 5,7 +?#.????????#???.? 1,2,1,4,1 +?#.??##????#??#####? 1,6,8 +???.?#?#???#?#. 2,5,3 +##..?#????.# 2,6,1 +#??#.#???##.. 1,1,1,4 +.?.?##?????.?? 3,1 +.#..#.??#??#?##?##.. 1,1,11 +.?.?????##???#?. 1,7,3 +?#???#????#???# 2,3,2,1 +?##?#????.?# 7,1 +?..??#?????? 1,1,1,4 +..#?.?#?.???#???#? 1,2,4,3 +????????.????? 3,2,4 +???.???#?.?...# 1,1,2,1 +#??###???#??? 6,2 +?.?.?.?.#.?? 1,1,1,1 +.?##?#??.??#???##?. 5,7 +??.?????#?????? 2,9,1 +.?#..?##??..#??# 2,4,4 +????.??????#?????? 1,9,2 +.????.##???? 1,2,4 +.???.??.#?? 2,1,2 +..???#???? 1,3 +.??#???..?? 2,2,1 +?#?#?????????.???? 13,2 +???.??#??... 2,3 +???.?#????#??. 1,6 +?.??##??##????? 8,1 +?.??#?###??#.?#?? 9,1 +??###.?????#????##? 1,3,8,2 +?????#??#.#.???###? 1,5,1,7 +?...?#????. 2,2 +????.??#?.???? 2,3,2 +??.?????#.. 2,3 +#??#??????.. 2,2,2,1 \ No newline at end of file diff --git a/day-12/part-1/vanyle.nim b/day-12/part-1/vanyle.nim new file mode 100644 index 0000000..e52344e --- /dev/null +++ b/day-12/part-1/vanyle.nim @@ -0,0 +1,116 @@ +from times import cpuTime +from os import paramStr + +import tables, strutils, sequtils, sugar, hashes + +func parseInput(s: string): seq[(string, seq[uint8])] = + let lines = s.strip.splitLines + for i in lines: + var s = i.split(" ",2) + + result.add(( + s[0], + s[1].split(",").map(x => x.parseInt().uint8) + )) + + +type LinkedString = object + c: char + h: Hash + n: int32 # index to next element. + +var memory: seq[LinkedString] + +proc addAtEnd(ll: int32, c: char): int32 = + var lh = hashes.hash(0) + if ll != -1: + lh = memory[ll].h + + var ls = LinkedString( + c: c, + n: ll, + h: lh !& hash(c) + ) + memory.add(ls) + return memory.len.int32 - 1 + +proc toLinkedString(s: string): int32 = + var current = -1.int32 + for i in s: + current = current.addAtEnd(i) + return current + +proc hash(ll: int): Hash = + if ll == -1: return hash(0) + return memory[ll].h + +var hints: seq[uint8] +var memoTable: Table[(int32, uint8, uint8), int] +proc possibilities(pattern: int32, hintSlice: uint8, counterSeq: uint8): int = + # Recursion, my boy!! + if (pattern, hintSlice, counterSeq) in memoTable: + return memoTable[(pattern, hintSlice, counterSeq)] + + if pattern == -1: + if hintSlice > 1: + return 0 + if hintSlice == 0 and counterSeq == 0: + return 1 + if hintSlice == 1 and counterSeq == hints[0]: + return 1 + return 0 + + var brokenCounter = counterSeq + var pp = pattern + + while pp != -1: + var el = memory[pp] + if el.c == '#': + inc brokenCounter + elif el.c == '.': + if brokenCounter == 0: + pp = el.n + continue + if hintSlice == 0: + return 0 + if hints[hintSlice-1] == brokenCounter: # ok! + var r = possibilities(el.n, hintSlice - 1, 0) + memoTable[(pattern, hintSlice, counterSeq)] = r + return r + else: + return 0 # impossible! + elif el.c == '?': + var p1 = el.n.addAtEnd('.') + var c1 = possibilities(p1, hintSlice, brokenCounter) + + var p2 = el.n.addAtEnd('#') + var c2 = possibilities(p2, hintSlice, brokenCounter) + + memoTable[(pattern, hintSlice, counterSeq)] = c1 + c2 + return c1 + c2 + pp = el.n + + # make sure the counter and the hint match here. + return possibilities(-1, hintSlice, brokenCounter) + +proc run(s: string): string = + var r = parseInput(s) + var res = 0 + memory = newSeqOfCap[LinkedString](3000) + + for i in r: + hints = i[1] + memoTable.clear() + memory.setLen(0) + var p = possibilities(i[0].toLinkedString(), i[1].len.uint8, 0) + res += p + return $res + + +var input: string = paramStr(1) + +var t0 = cpuTime() +var output = run(input) + +echo "_duration:", (cpuTime() - t0) * 1000 +echo output diff --git a/day-12/part-2/vanyle.nim b/day-12/part-2/vanyle.nim new file mode 100644 index 0000000..cca538d --- /dev/null +++ b/day-12/part-2/vanyle.nim @@ -0,0 +1,91 @@ +from times import cpuTime +from os import paramStr + +import tables, strutils, sequtils, sugar, hashes + +func parseInput(s: string): seq[(string, seq[uint8])] = + let lines = s.strip.splitLines + for i in lines: + var s = i.split(" ",2) + + result.add(( + s[0], + s[1].split(",").map(x => x.parseInt().uint8) + )) + + +var hints: seq[uint8] +var memoTable: Table[(string, int16, uint8, uint8), int] +proc possibilities(pattern: string, pslice: int16, hintSlice: uint8, counterSeq: uint8): int = + # Recursion, my boy!! + if (pattern, pslice, hintSlice, counterSeq) in memoTable: + return memoTable[(pattern, pslice, hintSlice, counterSeq)] + + if pslice == -1: + if hintSlice > 1: + return 0 + if hintSlice == 0 and counterSeq == 0: + return 1 + if hintSlice == 1 and counterSeq == hints[0]: + return 1 + return 0 + + var brokenCounter = counterSeq + + for j in countdown(pslice, 0): + if pattern[j] == '#': + inc brokenCounter + elif pattern[j] == '.': + if brokenCounter == 0: continue + if hintSlice == 0: return 0 + if hints[hintSlice-1] == brokenCounter: # ok! + var r = possibilities(pattern, j-1, hintSlice - 1, 0) + memoTable[(pattern, pslice, hintSlice, counterSeq)] = r + return r + else: + return 0 # impossible! + elif pattern[j] == '?': + var p1 = pattern[0.. Date: Thu, 28 Dec 2023 21:29:45 +0100 Subject: [PATCH 2/6] day 13 --- day-13/input/vanyle.txt | 1351 ++++++++++++++++++++++++++++++++++++++ day-13/part-1/vanyle.nim | 66 ++ day-13/part-2/vanyle.nim | 93 +++ 3 files changed, 1510 insertions(+) create mode 100644 day-13/input/vanyle.txt create mode 100644 day-13/part-1/vanyle.nim create mode 100644 day-13/part-2/vanyle.nim diff --git a/day-13/input/vanyle.txt b/day-13/input/vanyle.txt new file mode 100644 index 0000000..b2875ec --- /dev/null +++ b/day-13/input/vanyle.txt @@ -0,0 +1,1351 @@ +...##.# +.##.### +.##.### +...##.# +#...### +.#..##. +##.##.# +...#### +#.#.### +#....#. +..#.##. +..#.##. +#....#. +#.#.#.# +...#### + +###..##.######.## +..#..#.#......#.# +#.##.#..#.##.#..# +#.#.##.#..##..#.# +#..#...###..###.. +#..#...###..###.. +#.#.##.#..##..#.# +#.##.#..#.##.#..# +..#..#.#......#.# +###..##.######.## +...#.#..######..# +..###....#..#..#. +#.###....#..#.... +##.#####.#..#.### +...#.....####.... +..#...#.#.##.#.#. +...###.#......#.# + +##.##.##### +#.####.#..# +#.####.#..# +##.##.###.# +########... +.#....#.... +###..#####. + +..#.#.#...####. +..#.#...#....## +##.##.#..##.... +...#..#.....#.. +##......#.##.#. +..####.#.#.#... +..####.#.###... + +.#..#.##. +##..####. +.#..#..#. +..##....# +.#..#..#. +.#..#.### +........# +......#.# +##..##.## +##..##.#. +##..##... +##..##.## +......#.# +........# +.#..#.### + +....###...#..## +#..####..##..## +.###..###.#.### +...####...##### +#..#..#..##..## +#.##..##.#..... +#........#.##.. + +.#.#.#. +.#.#.#. +##.#.## +#.#.### +..##... +..#.... +###.### +..#..#. +#.####. +.##.### +.##.### +#.####. +..##.#. +###.### +..#.... + +#..#.###.##.# +....#...#..#. +....#..#.##.# +....##....... +.##.##.###### +####....#..#. +.##..##.#.... +.##.#.#..##.. +####.#...##.. +.##.#.#.#..#. +.....#.###### +.##.....#..#. +#..##.###..## + +#....#.#. +####.##.# +#.##..### +##..#.### +.#....#.# +...##..## +##..#.... +##..#.... +...##..## +.#....#.# +##..#.### +#.##..### +####.##.# +#....#.#. +.#...#... +.#...#... +#....#.## + +..##....#.#.##. +.####..#.##.##. +##..##..#.##### +##..##.#.#..... +#######..###### +.#....####..... +.......#.#.#### + +..#.....# +.###.#.## +##...##.. +#......#. +#.###..## +#.#.#..## +#......#. +#.##..##. +#.###.### +#.###.### +#.##..##. +#......#. +#.#.#..## +#.###..## +#......#. + +#####....#### +..##..##..##. +###..#..#..## +##..##..##..# +##..#....#..# +###...#....## +..###.##.###. +####.####.### +..##.####.##. +###.##..##.## +##...#..#...# + +#.###.###.# +#.###.###.# +...##.#..## +#..#.....#. +.....##...# +#..##.##... +...#.#..... +###.#...#.# +..#.#.##..# +#.#...#.... +#.#...#.... +..#.#.##..# +###.#...#.# +...#.#..... +#..##.#.... +.....##...# +#..#.....#. + +###.#..####.. +###.#..#.##.. +###.#..#.##.. +###.#..####.. +.#.#..#.#...# +.#....#..###. +#...##..##### + +..#.###.#.####. +.....###.###.## +..#..#.#.###### +##.#.....###### +###.#..##...... +##..#..##..##.. +..##.#.######## +..###..#..#..#. +...#####...##.. + +...##..## +.#....... +#####.#.. +##..#..## +#..#.##.. +##..#..## +.###..### +#.#..##.. +#.....#.. +.####..## +.##.#.### +.#....#.. +.#.#..#.. +.##.#.### +.####..## + +..####. +#..#.## +.###.#. +#.##..# +###...# +.#.#... +.#.#... +###...# +#.##..# +.###.#. +#..#### +..####. +..####. + +#...##.####..##.# +###.##.###.##.#.. +.#...#.#####..### +##...####.##.#..# +.##..#.#.#.#.#### +#....#.#####..#.. +#....#######..#.. +.##..#.#.#.#.#### +##...####.##.#..# +.#...#.#####..### +###.##.###.##.#.. +#...##.####..##.# +....##...##.#..## +#.##....#.#.###.. +#.##....#.#.###.. + +##..###.##. +.####.#..#. +.####.###.# +#.##.###### +##..####.#. +..###..#.## +..##...#..# +########... +.#..#.##..# +..........# +.#..#.#..## +.####..###. +......##.#. +......##.#. +.####..###. + +##.#.#..#.# +.#####..### +.##.#.##.#. +..##......# +.###.####.# +#####....## +..#.######. +##...####.. +#.######### +.##.#.##.#. +.##.#.##.#. +#.######### +##...####.. +..#.######. +##.##....## + +.##.#.###.#.... +..#...#####..## +#.##.##..##..## +..#..##........ +.##..##.#.#..#. +#.........#..#. +#.#.###..###### +...#...####..## +.#.#......####. +......####....# +#..####...####. +..##.##.###..## +...##.#####..## +....##..###..## +##.##...###..## +##.##...###..## +....##..###..## + +#.###.... +.###..### +#..#.#..# +##.#..... +##.##..## +.##.##.## +#..###... +.#...#.## +#.##.##.. +#.#..#.## +#...#.### +#...#.### +#.#..#.## +#.##.##.. +.#...#.## +#..###... +.##.##.## + +.##.#....#. +....######. +.##........ +####..##..# +#..######## +#####.##.## +#..#..##..# +#..#..##.## +#..#......# +.##..####.. +.##..####.. +#..#.####.# +.....#..#.. +......##... +####.####.# +.##........ +#..#......# + +.##.###.#######.. +.##.###.#######.. +.##.##....##..#.. +#.#.####.###.#### +..##.#.#.....###. +###.#..##.#.##..# +.##..#..#..#..#.# +...#.####..###.#. +...#.####..###.#. +.##..#..#..#..#.# +###.#..##...##..# + +######..##### +###..#..#..## +###..####..## +######..##### +####......### +##..######... +..#..#..#..#. +..#.######.#. +..#........#. +..##......##. +###........## + +.#..#.####. +#.##.#.##.# +..##...##.. +.####..##.# +.#..#...... +##..###..## +.####.####. + +#####.#..###. +#####.#..###. +#...##.#..#.. +.#....#.##.## +#..#.#.#...#. +.##..####.##. +.#...#.#.##.. +.#...#.#.###. +.##..####.##. + +##.##.##.## +########... +.######.#.. +#.####.##.. +#.####.#..# +#......#.## +.#.##.#..## +...##...#.. +..#..#..#.. + +.#........#.# +###.####.###. +...##..##.... +.....##.....# +#.##....##.## +#.##....##.## +.....##.....# +...##..##.... +###.####.###. +.#........#.# +..###..###..# +##.#.##.#.#.. +.#..#..#..#.# + +##.#...#. +#...#...# +..##..... +.###..... +#...#...# +##.#...#. +#..#.#.## +####.#### +####.#... +..#.#.### +..#.#.### + +#..#..#..#. +#######.#.# +#######.#.. +#..#..#..#. +####......# +....##.#..# +.......#.## + +.#.#####.##..##.. +#..####....#..... +#..##.#....#..... +.#.#####.##..##.. +..##.......##.#.# +##...#.#.#..#..#. +#.#.##..#...##.## +#########.##..### +#.####.#..#.#.... +#.#.#.#.####...#. +##.....###...#.## +..#...#.......### +...###.##.....### +#.##.##.###...#.. +#.##.##.###...#.. +...###.##.....### +..#...#.......### + +..###.#....#.###. +##.###.####.###.# +..#.####..####.#. +..##.#......#.##. +.....##.##.##.#.. +##...##....##...# +..#..##....##..#. +...##.##..##.##.. +####.#.#..#.#.### +#######.##.###### +###.#........#.## +.....###..###.... +##.#..######..#.# +..#####....#####. +....#.##..##.#... +...#..#.##.#..#.. +..#..########..#. + +.###.##.# +#.###.#.. +.#...#.## +##.#...## +###...#.. +#.##..### +...#..#.. +...#..#.. +#.##..### +###...#.. +##.#...## +.#...#.## +#.###.#.. + +#..#.## +.##..## +#..#... +####.## +#..#.## +#..#### +....### +.....## +.....## +....### +#..#.## +#..##.. +.##.##. +####.## +.##.### + +##....### +#.#.##... +#..##.#.# +.###..### +###.#..## +###.#..## +.###..#.# +#..##.#.# +#.#.##... +##....### +###...##. +####.#.#. +####.#.#. + +#..#....##....# +#####..####..## +..###..####..## +.###....##....# +....##########. +..###..####..## +#.............. +#.#............ +..##.##.##.##.# + +######.#.#.## +..####..#.#.# +..####..#.#.# +######.#.#.## +.#..#.##.#.## +#######.##.#. +.#...#.###### +#...##..###.. +......###.### +##..#......## +###..##...#.. +###..##...#.. +##..#......## +.....####.### +#...##..###.. + +..####### +#.#...... +..##.##.# +###...... +###.####. +##.##..## +####.##.# + +#.###.. +#.###.. +.#....# +##.#.## +##.#..# +#.#..#. +.#..#.# +.#..#.# +#.#..#. +##.#..# +##.#.## +.##...# +#.###.. + +#....##...### +.####.#....## +#######.##.## +..##..#...... +##..####.#### +#....#..#..## +#######...... +.####.##..... +#....###...## +#.##.#.#.##.. +#....##.#.### +##..##.#..### +#.##.#.#...## +#....##.#.... +.#..#...#.### +......##.#... +#....#.#.#.#. + +#######.#..#.## +.#..#....##.... +......#.#..#.#. +#.##.#.#.##.#.# +##..##.#.##.#.# +..##..###..###. +##..###.#..#.## +#.##.#........# +#....##.#..#.#. + +..#....## +..#....## +##...##.. +#####.... +..#.#...# +..#.#..## +...#...## +...##.#.. +####..#.. +.....#### +##.###.#. +..#.#.### +##.##.#.. +......##. +#.####..# + +#...##### +#....#### +#....#### +#...##..# +.#.##.... +......##. +..##.#..# + +#......######.. +#..##..#.##.#.. +...##...#..#... +#.#..#.##..#### +########.##.### +##....##....##. +##.##.###..###. +#.#..#.#....#.# +#......#....#.. + +.#..#..#### +.#.....#### +##..##..##. +..#.#.#..## +..####.##.# +.##.######. +.##.######. +..####.##.# +..#.#.#..## +##..##..##. +.#.....#### +.#..#..#### +...####..#. + +###.#...#......#. +#..####.##....##. +..######..####..# +#.#...#.#..##..#. +...#.#..#..##..#. +....###..##..#... +#.#.#.#..##..##.. +.#.##..#..####..# +.##.##...#....#.. +........##.##.##. +.#..####..#..#..# +.#..##.#.##..##.# +##.#..#..######.. +##.#..#..######.. +.#..##.#.##..##.# +.#..####..#..#..# +........##.##.##. + +...##.. +#.#..#. +#.#..#. +##.##.# +.###.## +.##..## +#.#..#. +...##.. +...##.. +#.#..#. +.##..## + +#.#..#... +##.####.# +...#...## +...#...## +##.####.# +#.#..#... +#..#..##. +##....### +##.#..### +....##... +##..##... +##......# +##....#.# + +..#..##...#..#... +..#....##....#... +#####..##..###### +####........##### +##.###.##.###.### +....#.#..#.#..... +#...#..##..#...## +#..##.#..#.##..## +.####......####.. +#..#..#..#..#..## +.#.#..#..#..#.#.. +.#.#..#..#..#.#.. +.#.###....###.#.. +#.###..##..###.## +#.#..#....#..#.## + +....##. +##..#.# +##..#.# +....#.. +.#.#... +.##..## +#...#.# +.###.#. +.###.#. +#...#.# +.##..## + +#.#...###..#. +..###...##..# +..###...##..# +#.#....##..#. +#...##.#####. +#...##.#####. +#.#....##..#. +..###...##..# +..###...##..# +#.#...###..#. +.#.#..#..##.# +...#..##.#.#. +##..##..###.# +.###..####.## +##..####.##.# +..#.#.#...#.. +#.##....##.#. + +###.#.##.#...#. +###.#.##.#...#. +.#.#.#.#..#.... +..##.##..#.##.# +#.#.###.#.###.# +.####.....#.#.. +#.#..###.###... +#.#..###.###... +.####.....#.#.. +#.#.###.#.###.# +..#####..#.##.# + +......#...#.##... +####..##.#.#..#.. +.......##.##..#.# +.......#.###...#. +......###.##.#.## +#..#.###.#.##..## +....###...#..##.# +..........#.###.# +####.###...#..#.# +#######.#..##...# +.....###...##.### +.....###.#####... +####..#.#.#.#.#.. +....####.#.##.... +####.##.###.#.... + +.##.#..#. +##....... +#.##.##.# +#.##.##.# +###...... +.##.#..#. +#........ + +###.#..#.## +###..###... +.#####.##.. +#.##..##### +.####..##.. +...##.#.### +#....#..#.. +.#..#.##.## +#.#.#..#... +#..##.#.#.. +#..#.###### +.#.##...### +##....##### +##.#.#.##.. +#.##.###... +...####.### +...#.##.### + +.#.##..#..### +##.#.####.... +#.#.#.#.#.#.. +#.#...##.##.. +#.#.#.#....## +.###.....##.. +.###.....##.. +#.#.#.#....## +#.#...##.##.. +#.#.#.#.#.#.. +.#.#.####.... + +.#.##.#.##. +.######.##. +#......#### +.#.##.#.##. +#..##..#### +##.##.##### +#.####.#..# +.######.##. +########..# +.#.##.#..#. +#......#..# +#.#..#.#..# +###..###### +#.#..#.#..# +##....##### + +#..##..#....... +###..###..####. +.#....#..#.##.# +.######...#..#. +.#.##.#.#.#..#. +...##......##.. +##.##.####....# +.#.##.#...####. +.#....#..#....# +..####.....##.. +#########..##.. +##....##..####. +..........#..#. +#..##..#.###### +.........##..#. +..#..#..####### +.######.####### + +..#.#.##. +..#.#.##. +#######.. +.##.#.#.# +....#..## +..####### +##...##.# +##...##.# +###.....# +#####..#. +####.##.# +##.....#. +..#.##..# +###..###. +..##.#.#. +...#...## +..#.#.#.. + +.....###. +####.###. +####...#. +####..##. +####.###. +.....###. +.##.#..#. +.....#..# +....###.# +####..##. +#..#.#.## +#..##...# +#..#..... +#..###..# +.##.##..# + +..#...#.####### +...####.#...##. +.####.#.#.##..# +...#.#.###..##. +..##.#.##..#..# +.....#.#..#.... +.#####..###.... +.....#####..... +#..##.#..#.#..# +#..##.#..#.#..# +..#..#####..... + +.#..#..####.# +.#..#...###.# +#....#.#..### +.####.#..###. +#.##.##...#.. +######..##.#. +#.##.##.....# +..##..#..##.# +.####.#.##.## +.#..#....##.. +#....##.###.# +#.##.#...##.. +.####.....#.# + +##..#.#.##..# +##.###.##.... +.##.#####.##. +#.####.##.... +.##.#....#..# +.####....#..# +#......#.#### +#......#.#### +.####....#..# +.##.#....#..# +#.####.##.... +.##.#####.##. +.#.###.##.... +##..#.#.##..# +..#.##.###### + +##.#..#.##.#### +#..####..#.#... +###########...# +##.#..#.###.### +####..####...## +##......###...# +..######.....#. +###.##.####.### +##..##..###.##. +####..#######.. +#.#....#.#...#. +.#..##..#.#..## +.#..##..#.#.### + +##.##......##.### +###.#.####.#.#### +#..##..##..##..## +##..########..### +..###..##..###... +..#.##.##.##.#... +.#....#..#....#.. +##.#.##..##.#.### +.#.....##.....#.. +##.###....###.### +#.#..##..##..#.## +#...##....#....## +###.##....##.#### +##.###....###.### +.#..#..##..#..#.. +.#.###....###.#.. +..#.##....##.#... + +#....###. +######.#. +#.#..#... +#....#.#. +#######.# +#....#.#. +..##...#. +.......#. +.#..#...# +#.##.###. +#.##.###. + +######. +##...#. +##..##. +..#.#.. +###.##. +.#.##.# +.#....# +.#....# +.#.##.# +###.##. +..#.#.. +##..##. +##...#. + +.#.#.#.#### +.#....#.... +....##....# +...##..#### +.#...#.#..# +..##..##..# +#######.... +#######.... +..##..##..# + +#####.#..#.###### +###.########.#### +.#.####..####.#.. +#.#...#..#...#.## +..#.#.#..#.#.#... +.##.#......#.##.. +.....##.###...... +.###.######.###.. +.##.#......#.##.. +#.####....####.## +.###..#..#..###.. +...#...##...#.... +#.#..........#.## + +#.##.######.# +..##...##...# +.####..##..## +..##...###..# +.#..#......#. +.####..##..## +######.##.### +#.##.#.##.#.# +.......##.... +......#..#... +#######..#### + +..#.#.##. +..#...### +#.#..#.## +...#.#### +...##.#.# +###....#. +####.#..# +.....#.## +..##..#.# +..##..#.# +.....#.## + +##.##...###...... +########...#..#.. +#....##.#.#.#.... +###.#.#.##...#..# +##...##..###.#..# +##.####...#...##. +#.#####..##..#..# +.#...####..#..##. +.#...####..#..##. +#.#####..##..#..# +##.####...#...##. +##...##..###.#..# +###.#.#.##...#..# + +####.#.#.#..#.. +.#.##.######.#. +.#.##.#.....### +.#.##.#.....### +.#.##.######.#. +####.#.#.#..#.. +.##.#.#.##.##.# +.##..###..#.##. +#.#######.#.##. +#.#######.#.##. +.##..###..#.##. +.##.#.#.##.##.# +####.#.#.#..#.. +.#.##.######.#. +.####.#.....### + +#..##..###..# +..#..#....#.# +#.####.##.#.. +#.#..#.####.# +...##.....#.# +###..###..... +##.##.######. +..####.....## +##.##.####### +.##..##.##..# +.######...... +.######...... +.##..##.##... + +.##..## +.###### +##.##.# +##.##.# +..#..#. +#.####. +#.####. +.#...## +...##.. +...##.. +#...... +...##.. +...##.. +#...... +...##.. + +......#.##.##.... +.####..##........ +.####..##........ +......#.##.##.... +##..####.#...#... +.####......###### +##..##..#.##..#.# +#.##.##..####.#.. +##..##.#.##.##.## +..##..#.###.#.##. +#....#####...#### +##..##.....##...# +..##...####.#...# +#.##.##.##..##### +#####.....##..#.. +......##.###.#### +#....####.####... + +#..##...##.#. +.###...#.#... +####...#.#... +#..##...##.#. +..#.......##. +###....#.#.## +...####..##.# +##...#.#.##.. +##...#.#.##.. + +.##..## +##..... +.##.... +..##... +###.... +.####.. +.#.##.. +.#.##.. +#####.. + +####..####....# +####...#.#.##.# +.#....######### +##..#..#.###### +..#..#.#....... +..#..#..##.##.# +..#..#..##....# +..#..#.#....... +##..#..#.###### + +#.#.##. +..#.##. +..#.##. +#.#.##. +#...##. +##..... +..##### +#.##.## +#.##... + +...#.####.### +#.#.##..##.## +.#.#..###.#.. +#######.#..## +#######.#..## +.#.#..###.#.. +#.#.##..##.## +...#.####.### +####.#..#.... +.#.##.######. +#.#####..#... + +....###...# +..###...##. +..###...##. +....###...# +####.###.#. +#...##..#.# +##...###... + +.#..#..#. +.######## +#.##.##.# +..#.####. +..#.####. +#.##.##.# +.######## +.#..#..#. +#..###### +..##...## +...#.##.# +##..#..#. +..####### + +.#.##...###...##. +.#.##...###...##. +..###.##.###.##.. +##..##.....###..# +#.##.......#.###. +###..###########. +#...##...##.#.##. +##....#...#..#..# +##....#...#..#..# +#...##...##.#.##. +###..###########. +#.##.......#.###. +##..##.....####.# +..###.##.###.##.. +.#.##...###...##. + +#.#..###.#..#.# +#.#..###....#.# +#.#.##.###.#..# +#######......#. +####.#.#.##...# +#.###....#.##.# +.#####...###... +##.#####.##.#.. +##...#..#...### +#..####.....#.# +####.#..##.#..# +####.#..##.#..# +#..####.....#.# + +#....#....#.. +#.##.#....#.# +.#..#..##..#. +#.##.#....#.# +##..##....##. +..##..#..#..# +.####......## +#.##.#....#.# +#.##.#..#.#.# +.#..#..##..#. +#.##.######.# +######.##.### +##..########. +.####......## +.#..#..##..#. + +.#.....###### +#..########## +#.###..##.... +...##..#..... +###.#..###..# +...####...... +..###.####### +...#...###### +.##...#.##### + +.#..#.####.#. +.###........# +.###........# +.#..#.####.#. +#.#....#..... +###.##....##. +#.#...#..#... + +......#..##.. +.#..#........ +#.####..#.... +#.##.####...# +#######.##.#. +.####.#..#### +.####.#..#### +#######.##.#. +#.##.####...# + +#.##... +#..#### +.##.##. +.###### +.#.#### +#...... +..##### +###.##. +.###### +.#..... +..##..# +.###..# +.###..# + +#..##...##... +####.#...#.## +....##..#..## +######.###... +..#..##..#### +####.#..#..#. +....#.#..#### +.##.#..###..# +.##...###.... +####.#.#.#.#. +####.#.#.#.#. +.##...###.... +.##.#..###..# +....#.#..#### +####.#..#..#. + +###..##.##..# +##.##.######. +######.##.#.. +##...#.#####. +##..###..#.## +..#....##.### +###.#.##.##.. +##.#..#...##. +##.#..#....#. + +.###.....#. +.#...#.#... +#..##.##..# +....###.### +###..#..#.# +####...##.. +#...##..#.# +#...##..#.# +####...##.. +###..#..#.# +....###.### +#...#.##..# +.#...#.#... +.###.....#. +.###.....#. + +##....##.#..... +#..##..#######. +#########.....# +.######.###..## +#......##....## +#......##....## +.######.####.## + +#..##.... +###.#.##. +...#.#..# +..#.#.... +...#..##. +..####### +#.#..#### +###..#..# +#..#..##. +##.#.#..# +.....#..# +##.##.##. +...#.#### +##..##..# +##..##..# +.#.#.#### +##.##.##. + +#####.#.##..#.. +#####.#.##..#.. +..##.##..#..#.. +#####......#..# +#..##.##.###.## +#.#....###...## +#.....###.##### +###.###..#..### +...#..##.#.###. +#...####...##.# +##.#.#..#.##### +##.#.#....##### +#...####...##.# +...#..##.#.###. +###.###..#..### +#.....###.##### +#.#....###...## + +#..#.##.#.####. +.#.#.#...##..## +.#.#.#...##..## +#..#.##.#.####. +###..##.#.#..#. +###.#..#.##...# +#...#.####....# + +##..####.## +.##.#..#.#. +..###.###.. +###.#.#.#.# +.##.#.#.#.# +..###.###.. +.##.#..#.#. +##..####.## +.###..##..# +.###..##..# +##..####.## +.##.#..#.#. +..###.###.. + +##.....#.#. +#...##...## +..#####.### +..#####.#.# +#...##...## +##...#..#.. +#...##..... +#.##.###... +#.##.###... +#...##..... +##...#..#.. +#...##...## +..#####.#.# +..#####.### +#...##...## diff --git a/day-13/part-1/vanyle.nim b/day-13/part-1/vanyle.nim new file mode 100644 index 0000000..2b5dfad --- /dev/null +++ b/day-13/part-1/vanyle.nim @@ -0,0 +1,66 @@ +from times import cpuTime +from os import paramStr + +import strutils, sugar, sequtils + +proc parseInput(s: string): seq[seq[string]] = + return s.strip.split("\n\n").map(x => x.split("\n")) + +proc isHorizontalSym(pattern: seq[string], l: int): int = + var errCount = 0 + for i in (l+1).. pattern.len : OK + # match: 0 --> l: OK (and they are disjointed!) + + for j in 0..= 2: + return errCount + return errCount + +proc isVerticalSym(pattern: seq[string], l: int): int = + var errCount = 0 + for i in (l+1)..= 2: + return errCount + return errCount + +proc findSymetry(pattern: seq[string]): (bool, int) = + for l in 0..<(pattern.len-1): + if pattern.isHorizontalSym(l) == 0: + return (false, l) + + for l in 0..<(pattern[0].len-1): + if pattern.isVerticalSym(l) == 0: + return (true, l) + + return (false, -1) + +proc run(s: string): string = + var r = parseInput(s) + var res = 0 + + for pattern in r: + var (symDir, symPos) = findSymetry(pattern) + if symDir: # vertical + res += (symPos+1) + else: + res += 100 * (symPos+1) + + return $res + + +var input: string = paramStr(1) + +var t0 = cpuTime() +var output = run(input) + +echo "_duration:", (cpuTime() - t0) * 1000 +echo output diff --git a/day-13/part-2/vanyle.nim b/day-13/part-2/vanyle.nim new file mode 100644 index 0000000..f4e398b --- /dev/null +++ b/day-13/part-2/vanyle.nim @@ -0,0 +1,93 @@ +from times import cpuTime +from os import paramStr + +import strutils, sugar, sequtils + +proc parseInput(s: string): seq[seq[string]] = + return s.strip.split("\n\n").map(x => x.split("\n")) + +proc isHorizontalSym(pattern: seq[string], l: int): int = + var errCount = 0 + for i in (l+1).. pattern.len : OK + # match: 0 --> l: OK (and they are disjointed!) + + for j in 0..= 2: + return errCount + return errCount + +proc isVerticalSym(pattern: seq[string], l: int): int = + var errCount = 0 + for i in (l+1)..= 2: + return errCount + return errCount + +proc toggle(c: char): char = + if c == '.': + return '#' + else: + return '.' + +proc run(s: string): string = + var r = parseInput(s) + + var res = 0 + + for idx in 0.. Date: Thu, 28 Dec 2023 21:53:55 +0100 Subject: [PATCH 3/6] day 14 --- day-14/input/vanyle.txt | 100 +++++++++++++++++++++++++++++++++++++++ day-14/part-1/vanyle.nim | 38 +++++++++++++++ day-14/part-2/vanyle.nim | 98 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 236 insertions(+) create mode 100644 day-14/input/vanyle.txt create mode 100644 day-14/part-1/vanyle.nim create mode 100644 day-14/part-2/vanyle.nim diff --git a/day-14/input/vanyle.txt b/day-14/input/vanyle.txt new file mode 100644 index 0000000..0320971 --- /dev/null +++ b/day-14/input/vanyle.txt @@ -0,0 +1,100 @@ +#..#.#.O...OO....##O....#....O.O#.......O.O.#.O..#..........O...#OO.O..OO..#.#..O.O.OO...#.OOO...OO. +..O..O#OO#....#.#O.#......#...O...O..O##.....O..........OOO.#......#OOO....#.#..O..O......OO....O.OO +O..#O..#O#...O#....O#.O...#.#..##O.O#OOO..OOOOOO.O.#O.O....O......OO#O#..O.........O.#....O..O...... +O.O.....#O##..OO.........#.........O.#...#..#...OO##......O.....O..OO#.#.##..OO.........O#.#....#.#. +......#....#OOOO..O#O...#...O#....O#..#..OO##..###.#.O#.O...#O.#..........O..##....O#O....OO.....O## +..##.#O...#......#.O...O.#O.O....#....#..##.........#.O#O.O.#.####..O#.O#......O...#.#.#O..#O...OO#. +.OO.O....O#.O..O.......O.OO#O....#..O.#....OO##..O.O....O...O.#....#......O....#.O..OO....OO..#....# +..OOO......#..#.....#.O.........O....OO..##.OO##...#.#.O#.#......#....###...#..#...##....#..O#...O.. +O#.O.O#.O......#..O..O.OO##...O.....O...##...O.OO.O..##....#.O......O#.....O.OO.O..O.........#..#..O +.##..#.....#....#...O.O#O#...##O....O..O.#O#.#OO.#..O#..O..#O###...........#.##O.###O...O.#....O#..O +.#.#.#O...OO....O.###........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##..#.#.OO..O#O........O#..##O....#OOO..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..OO# +.OO#.....O....O.##...#.......#O#..OO.OO#.#..O.#.O.O..O.#.O.O..OO.O...OOO...#O..........#..#.O.O#...O +O..O.#......#.O.O....#..O.....O...#....O..##.#.###....#.#...#O....O........O...O...OO...##..O.OO#..# +.O.O.####.#.O....O#..O.O#.##.OO..#.....O......OO..#.O.O...#..#....#..O..O..O#O......#O.OO...##O...O. +.O.....O.........#...O..O..O.O#..##.#...O#.......O.##O.....#.#.#..O..O...#.OO#.#.O..#...O..O.O...... +......O.O...O......O#.O.#OO.....#..#..........O..OOO...O...#.#..O#....O.#.O..O.#O..O..#.#..#.O..#... +##.#.#O...O.#O..O..#.OO..###.......O....OO......#...O...O.#...O..O.#...#...O.O#..##O#..#...O.#....OO +.OO#..#.#.#O..O.O..O#....#.O......###.O.O.O.#.......##...O##OO#.....##..O#.#..#.#.O.#.#...O..O.#...# +#...OO..O..OO......O..#..#...O....O.OOOO##.....#O.....#.#..#..##.......O..O.#...#.#..#.OO#...O.O..O. +##...O.OOO#.....#..O#..OO......OO#O.#O.#....#.OOO..#..#OO.O.O..#.O......OO.............#.O#.OO..#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.OO..O..##..O...O..O......O...OO.OO.O.O. +O......#......#OO...OO#.#O#....#....#.O.OO.#...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#.#OOO..#O...OO....O.O#O.O..O#..#..O#.#.#O.##.#O.#O..O...#...#OO. +.....O.....OO.....O.O#..OO...O.......#O....O....OO.O#.......#.O.#.O.O#O.#.....#....O.O.#..#.....O.OO +...OOOO....##.O.....OOO.O..OO...O#..O...#O....O..O#....OO...#.#....O#.O.#......#O.O....O.......O..O. +...#.##.##O#O#....O....#.#...#........#...#.O..#.#O.....####.O#....#.O#......O...#....#.O..#..O.#.O. +..O.......O..O.###.....#......##.#.##.OO..OO........OOO..#.O..O.....O...#O....##..O.OOOO......O#.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...OO..OO.#........O............#....O...O +.##OOO###..O..OO..##O#....O....OO....#.O#..#O....#.##O......O.#O.#O..O......#......#.##O#OO......O#. +.#O#.....O#.....#...##...O..#O..O.#.O..#..O........O#.....#..O..OO#O...OO......O..#...O#...#.OOOO... +.........O.#.#O....#OO...##........#.#..#.#..........OO..O..O..OOO#.........O.....O#..#OO.....#.#..# +#..O.O...#..O.O##OO#..O.#O.....O.O..O.O.O.#.O.#....#.......O#O#.OO..##.....OO...#.........O.O....O.O +OO#.#.##...#....#........OO....O..OO..O#.####.....#OO..#.....#........OO.#..#O..#.O#O#O.O..OO#O.O.O# +#....O.O#..#O...OO..O.OOO.#.O.##.##..O..#O#.....O.....#O.O#.#...#...O.O.........O..#...#....O...O.#. +....#O..OO..O......#O#....O.O....#..#....#....#.....OOO##.O..#..####..##.#..##..O...O.....O#....OOO. +O...O..O#OO.####O..#OO..#.#.O....O.#.O.##........#..OOO...O....O........O.O.O.O.OOO..#OOO.#.#OO..#.. +O#O#.#..#..O..#.....#.#......O..O...O.O...#..O..#.O.....#O.....#.......#.O.O.......O...#....O..OOO#O +.#...O...#.O......O....O....O.##.OO...O......#..O#O......O..O.........O.O...#.....#...#.##......#O.. +##O#.O......#.O..O..O.OO..##OO##.#O..O.#OO...O#..O.O.O..#.OO...O#O##O......#.#.#....O..O.......O...# +O.#O.OO##....OO.......O......#....#O##....#....O#O......O..#.#.....O.OO.....O.#..O.#OO.O..OO.#..#.#. +O.#.#.....#.O#.........O....O.#.O.#..O....O....OO.O#.#...O.O#..OO#O...#..#..#....#.##..OO.....#..... +.#O.#O...O..#.OO#..O....#....#.#####............OO.O..OO.#....OO......#O...O.....O.#O..#.....#...O.O +#.#....OO.O.O...O....O......#...#....#...##..#.#.....O..O#.#O.#.OO.##.O.#..........OO.O#.......##O#. +O.O..O..##...#..........O.#.#.....O.#...O#.O..O........#.O#O......OO.#....OO..O.....O.O......#.OO..O +#...#O..OO...#O#.OO#.O..OO.O.O.O##.O#O##......O#..O.#O...##...OOO...#O...O...O..O.O.##.#.......##..O +.#.O#O........###O.##.O#..#OO.O.....OO......O......O.O#.....#O#...#...#.O......O.#.....#.O.####.O... +..#..OOO...O#.###OOO#.#.O#....##O..#O.##......O.##...O...#...O....O.....#.O.#....#.......O..##...O.# +OOO.##.#..OOO.....O...#..##.O...#...#.O##.......#.OO#..#.#...O.....#.#...##.O.O.O....#.O....O#..O... +#..#..OO.....#O.....O#..O.O......O.###O.#..#..OO.#.O.#...OO...#..O.#O#..#.#..O.O..O....OO#...O..#... +.#.O..#...O.#.O.#.OO..O..#.O..OOO.O......O.#.#O.......OO...O#.......O.O.....#..#.......O...O.O..##O# +.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...#..O#O#....O.#.....O..#..OO.O.O...O.......#OO. +#.OO..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....O#...#O....#OO..#.#.#...#..#O.#......O.O +O#..O..#O...O..O.........O......#.OO.O#.O..O....O........#.O..#...OOO.#..O.##O....O..O#.#..#O#..O##O +.#..#.....#....#..O.O..O..#..OO##O..####.............O.#OO....#.O.....#OO...OO..#O#.#.#..OO......... +..#O..#...O.O....OO.O#.#O.##...#....#OOO...O.....#......#....O##OO....#....#....#O#.O.#.#..O...#..O. +...OO#..#..O....O.OO.#O##..O.....#..#....##.O.#.O....O....O.OO#.#O.OO.OO.#O.........#..##....O..O... +.O#.........O.....#.OO.OO.O.O..O.O...#.O...O.....O..OO..#OO....O.OO..#.#O.O.#..OO..O....O.O..O#O..OO +##.#..O#....O...#...O....#.......#.#..#..O...#O##...O#...O...#..........O.#O....OO..........#....... +.OO...O.#............O.#..#..O...#.#...#.O##OO#...OOO..O..#.OO..#.......#OO.............O.#..#O.#... +...#.#O.#....#.##..........#...#OO.O..#.O.....O.O..#.#O.....#..#O............OO#O..#O.....O...OO..O# +#O#.O.....O.......#.......OO#..O.......O#...O........O..#.#.........OO..#....#....O...O.....#..O.#.. +....O..O.##..#.....O....##..OOO....O.O....O.....OO#O.O#.....##O.##.O.O.#..OO.OO.##.O.#........OO.... +.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#OO......O........#O.O#OO#O..O.O......O.O.O#...#.O..O...O +....O..O...##...##.##.O...#......#.O..O#O...O#O..OO....OO.#..#O#.OOO.#..#..O....#OO....#...O.#O..OO. +#..O#..#..#..O.O.O..#..O.O#.O.....OO....O...O.OO#OO....O.#O..O.O......O..OOO...O#OO..OO.O#....O.OO.. +O.O.....O...##..#...#.O.#.#..O..O................O.#..OO.#....#......O#O..O.#.O.#..#O...........O..# +.....OO..O..OO...O.#..........O.#O.........OO#.............#..OO...##.#.#.OO.O.O.#.##.#.OO.OOO...... +...#...#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#O.O.OO...##......O..O.....#..O...O.O.OO.O.O.#O##.O +O....O.O..#.#...#..O.#O...#O.O..OOO.....O.#..O.O.#..#...#..O.....#..#..##...........###.....#...OO.# +..#.....O.OO...O#........O..#O.....O.....OO...#..#.OOO......O#.#.O.O.##O.#..........O.#..O..OOO..... +#..O.#O#.#.......#..O..#..#...#.O..#.....O........O.#..#OOO...O......#..O...O..#....#..O.........#.. +..O.OO..#O....OOOO...O....O#O....##OO.O.O..O.O......O..O.OO....O.OOO.O......#..O...#O....O...#.OO#.. +O.#O....OO....##.O......O...O..O.#....O#OO.O..#....O....##O..O....O..#.O...#...OO.O..O.O#.....O.OO.. +#.#O....O..#.O#..O...O#...O.O..O..........OO.......O#......O.......##.#..#.###.#O.O.......OO..#.O#O. +O..##...O#O...........OO..#.#O...#OO......O#OO.#OO.#..O#OO#.#O....OO.##..O.#O.#..#.O.#.#..#O.OO.O.OO +O.####..O#..O#....#.O#.O.#......O..O..##...#........O.......OO##.O.#.....O..O#..O...#..OO.....#....O +...####..O..O#.#..OOO.....OO..............O.#OO.O#..##OO...#....O..#.##........##.O....O.....#..#..O +..O.O..#OO#..O...O...OO...O....#...O.OO#.....#OO.....#.O......O.#O.#.#..#..........###OO#.OO...O..O. +.O#.....O...O......O.#..OO..OOO......#O#.O....O.....O..O##.O#....OO.O....O..#.....O.O.O..O....OO.O.. +....OO.....##O....O##..#..OO....O.#O.OO...#....###.O....O.##..#..OOO#O#.......O...O.O..#O.......O..# +...O...O..O.......O.#O.O........#.OOOO..............O#...O.O#O.....#......O#.#.........##.#.##O.#... +.O.....O.O.O.#.O#OO#.....#..O.O#.O#.....##.....O..............#.......O...#O.#O...#.O...#.#O.....#O. +.........##...#.O.#..#...#OOOO.#.OOOO...#O....O...O#....OO..##.OO..O.#.....##.O.#.O#...OOO..#.O##.O. +#O..#....#.O....OO..OO#...#..#..O......#...#O.O....#....O...O.#.......OO....O...#...#...#.#...O....O +.OO.#O.OOO##OO..#OO#..O.O..O.#..#..#....O...OO.O..##..#.....OO.#...#.....#.#....O.O..#...O.#......#. +OO..#..O#O.O..O.#..............##..OO#O#O.##..O#...O..O#...O....##..##O#............###OO........##. +..O..#..#.O....O.#.........OO.#...O.....OO.#..O..#....O...#..#...##..OOO....#..O#....#.......O.#O.O# +O.O.OO..O.#.O.O.#.##.##.O..O.O...###..O..##..O#O#....O....O..O#O.........##..O#.OO.O....#O.OOO...#.# +..#....O..O.....OO..#..O.OO..#OO.OOO...OO..##.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..# diff --git a/day-14/part-1/vanyle.nim b/day-14/part-1/vanyle.nim new file mode 100644 index 0000000..14cdebe --- /dev/null +++ b/day-14/part-1/vanyle.nim @@ -0,0 +1,38 @@ +from times import cpuTime +from os import paramStr + +import strutils + +proc parseInput(s: string): seq[string] = + return s.strip.split("\n") + +proc tiltNorth(s: var seq[string]) = + for i in 1..= 0 and s[pi-1][j] == '.': + s[pi-1][j] = 'O' + s[pi][j] = '.' + dec pi + +proc run(s: string): string = + var r = parseInput(s) + r.tiltNorth() + + var res = 0 + for i in 0..= 0 and s[pi-1][j] == '.': + s[pi-1][j] = 'O' + s[pi][j] = '.' + dec pi + +proc tiltWest(s: var seq[string]) = + for i in 0..= 0 and s[i][pj-1] == '.': + s[i][pj-1] = 'O' + s[i][pj] = '.' + dec pj + +proc tiltSouth(s: var seq[string]) = + for i in countdown(s.len-2, 0): + for j in 0.. Date: Thu, 28 Dec 2023 22:31:15 +0100 Subject: [PATCH 4/6] day 15 --- day-15/input/vanyle.txt | 1 + day-15/part-1/vanyle.nim | 26 +++++++++++++++++++ day-15/part-2/vanyle.nim | 56 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 day-15/input/vanyle.txt create mode 100644 day-15/part-1/vanyle.nim create mode 100644 day-15/part-2/vanyle.nim diff --git a/day-15/input/vanyle.txt b/day-15/input/vanyle.txt new file mode 100644 index 0000000..9a00a61 --- /dev/null +++ b/day-15/input/vanyle.txt @@ -0,0 +1 @@ +tsqxjb=8,hr=6,dtv=1,chhq=8,lcrbv=6,szm-,mx-,xj=4,dmm-,prdgn-,cnk-,tl=5,zhc-,xvcp=8,mpvh=5,xff=4,tx=6,vgr-,hkh=4,zjm-,kfj=5,gg=4,nltf=1,hc=1,rsn=7,hqs-,zsrs-,qjpjv=4,zxf=6,jrt-,sc-,gtnx-,jcl-,dm-,nch-,ct-,lh-,qzd-,rvv=9,vkqzk-,sq-,ptp=4,hng-,mmf-,vj-,nfdkq=6,hv=9,nsp-,fh-,fbn=5,bnmft=8,xtnl=8,xsb-,st=9,bjgs=7,pk-,slt-,jlxf-,zxf=7,qx-,scd=2,clh=3,xjdg-,flf=5,rrh=8,mg=7,bjvn-,cqcn-,pvr=7,rlsj=4,hxn=9,cds-,mhr-,lt=3,qcm=8,rfh-,gpknq=9,cp=2,msc=1,bg-,vmt-,jr=4,pxdlpv-,jkmvr-,rqxk-,hjx-,jr-,szm=1,sh=8,hrn-,lpsk-,ts=7,jdkkq-,czv=9,fddj-,gqgbf-,kkk-,bds=4,fldg-,dhb-,gx=4,dlf=4,lq=2,kx=1,bzhl=8,nqfn=6,vfpx-,bt=2,gnx=4,hrn=3,pxdlpv-,qjf-,rqxk-,pf-,nlcv-,srfl=7,zg=2,rjm=2,kgx=7,psc-,php=3,bj-,bds-,st=4,dfj=4,qrfx-,sgqlsb-,frp-,pf=9,lm-,jn=6,srfl-,njnpq=8,mpvh-,ghcd=7,dm-,kzbc=6,lh=8,jtc=6,qcqk=2,jm=3,vlcvb=7,tnz-,zfrs-,nqfn=5,cv=6,prdgn-,cqcn-,njnpq=6,bvt=3,hhp=6,hrn=5,bj-,jflv=9,hbh=2,ggd=9,qp-,cx-,pmhz-,ptp=3,jvnjh-,zz=5,bjbrrv-,gmvc-,qr-,fp=2,tqd-,bx-,qcqk=5,nm=5,jrc=1,ht-,ddz-,bn=6,dlnc=5,zvzc-,vf-,zxnq=4,ltxz=6,qrd=6,jtc=6,fgr=2,vcmrn-,tch-,fp=3,zrt-,slt=5,cn=1,sb=7,zd=2,cxptjr-,hc-,vfpx-,fx=3,gkj-,jjpk-,nh-,fh-,mpvh-,cn-,gdtqh=7,bctx=3,qsv-,gbv=1,gmvc-,gcf=7,rrh=4,cpds-,shxm-,hr=6,gz=5,rlsj-,pj=5,cqrh-,ggd-,sc-,nb-,fn-,pzv=1,cs-,ttj=4,tr=2,cdq=9,sntf=9,brx-,ht=2,jkjrx-,zhc-,vjtk-,tzdz-,qkmnn=8,vbd-,jlxf-,fc=6,xsl-,sp=4,ltxz=3,pmgjkd-,kl-,ggdb-,gl=5,hf=7,nqfn=1,bbjb-,sgnz-,px=3,dj=2,fq-,tcs-,zxf=8,rlsj-,hc-,frp=9,cds-,cqp-,bffjx-,khnv-,nvrn-,sg=1,zsfls=3,gpknq=5,mx-,czzf=9,jd-,gmvc=4,qjpjv-,qfl-,fh-,zvzc-,zsm=4,nj-,cqnpv-,fmm-,dqrx=8,fpmhbp=1,nfdkq-,rd=3,thq=6,mb-,cs-,lrlj=4,ht=3,slt-,hz=6,ggd-,ljr-,gtnx-,bctx-,bq-,stf-,shdd-,dpg=8,cpq=2,zdqxlx-,mzqmg-,nhq=2,qfv=4,qzft=8,gkxmct-,fcn-,xl-,gqgbf-,jxkh-,ctbxs=3,vkqzk-,bjf=9,njrg-,dsc=3,dsc-,gckl-,mdq=3,sgg=6,flf-,rfh=9,znzbpb-,gf-,fbn=6,xjb-,fnz=6,qkk=7,sxk-,lqh-,cqcn-,qzft-,hqs-,cs-,fq-,xhjtm=9,fcn=1,xrqhbm-,nrrr-,cq=2,ds-,fq-,tl=7,lk-,lcrbv-,bp=2,hqs=9,mmjb-,hm=8,dnx=8,sz=4,zgrn-,gp-,jn-,ccr=5,cnk-,hng-,sc=4,jmp-,zg=6,lqfr-,fz-,bz=4,jhd-,kskj=8,xvcp=8,fsgl-,ggt=4,pf-,ds=6,sc-,zhl-,vjtk-,gdg=7,fmb-,qr=9,tcs=3,lq=1,thq-,zhc-,ggdb-,bctx=6,zd-,fc=4,xr-,ddz=4,gfps-,lzs=9,qmj=9,qfv=5,hk-,hk-,vnh-,ggt-,dg=7,gx=4,zfr=4,jd-,njrg-,ttx=7,gtnx=4,nhq=2,mbdcz=1,pjc-,ngttt-,sq=3,zmk=1,hsq-,qrd-,ttjrn=3,dr=2,xtnl=6,nbg=1,rkx-,dcr-,qsv=6,vfpx=3,ld-,lzzb-,jdh-,tch=4,gdg-,kc-,rqgp=6,bt-,bj=7,stf-,zmd-,vfh-,hm=2,cv-,knmdd-,hz=7,pmgjkd=8,xsb-,jkjrx-,jdkkq-,qkmnn-,rr-,dsc-,mdq=3,pld=5,sq=9,mt-,sxk=8,xqqdv-,drv=1,qfv-,shdd-,xc=1,nbg=7,ptp-,dtv=8,ghcd=9,skrn-,qzd=7,gtnx=9,xrqhbm=1,nlcv-,bfvzh-,jflv-,hnf=2,dqrx-,gg-,tqd=4,dg-,lzs=3,ptmbcq-,gt-,hv=4,sg-,sgnz-,vh-,tnz=5,fk=5,bds-,dpj=5,xgq=2,xhjtm=6,dt-,nf-,jvzb=2,sn-,hv=3,lfbxds=5,qkmnn=7,qg=2,hxn-,pvr-,qg=4,zn=1,vv-,frp-,dt-,rrh=4,vtm=7,dcr-,jkjrx-,mbdcz=9,td-,rq=2,stg-,mdps=3,ggd-,dhb=7,mkm=9,mdps=2,xr=7,txbr-,tzz-,tk-,dhb-,rtct-,zmd=4,jc-,ttjrn=2,pvr-,hhp=9,dcr-,rg-,mdq-,jr-,khnv=7,rk-,jz-,bqq-,cpds-,tncjgs=5,ml=5,vx-,bjgs=9,mmf=9,dfj=8,rqgp-,pjtzxc-,tx=4,shdd-,jp-,qg=7,pvr=2,nnm=4,bzhl-,pzv=8,ttjrn-,qkk-,pc-,fsgl=7,hz=9,ttjrn=8,bj=5,xhb-,sg=4,tt=3,rkr=5,tqd=9,vtm=6,rvv-,vfh=4,sdkkg-,rt-,zxf=3,gpknq=2,php=4,cxptjr=1,gpknq-,psc=8,tcs-,khnv-,fk-,rq-,ngttt=9,gdtqh-,hk-,jz=3,xndq=5,ngttt=8,vh=4,mb=8,gdm=1,cbnfl=7,rbhl-,vhvpk-,lcrbv=2,knb=7,pmhz=9,tk=4,cf-,tl-,xn-,bvt=1,dlf=1,fhx=4,xsb=4,sntf=4,hf=1,sh-,vzscd-,nlcv-,gq-,bc-,qr=5,qr=2,nl-,mmjb=2,gqgbf-,gdg=7,vfh=8,pmgjkd=7,vg=2,sq=5,gg=3,zvb=5,gg=9,zrt=7,qmj=1,xn-,rlsj=1,clh-,dhrgg=4,czzf-,ds-,zhl-,fh-,dhq=3,lh-,hkh-,kkk-,hkh=2,dlnc-,thq=8,ttjrn=1,kgf=5,hqs-,zsm=8,lt-,nltf-,stf=4,ld-,qp=8,bbjb-,fzfg=5,zd-,vmt=8,lpsk-,dv-,crc-,hc-,xj-,rd-,qsv-,zmk=6,vtm-,lc=3,th=4,lt-,bbb=3,xff-,znzbpb=7,gdtqh=3,mzqmg-,kfj-,xndq=8,czv-,jjpk-,msc=5,fh-,jjpk=7,zmk=1,cf-,zfrs=6,rt-,zvzc=5,jvzb-,hr-,lt-,hcnchc-,pld=7,svz-,gf-,cn=1,gkj=3,rz-,fc-,rg-,zmd=5,pmhz=5,szj=4,ltxz=1,lm=5,qcm-,jxlg-,gckl-,znx-,xtr-,mpvh-,lq-,zdjkk=9,vl=9,zkdjf-,cvpp-,xl=9,fcn-,thq=4,zdpcrj-,mb=7,tt=7,dph=7,zfrs=7,fzfg=3,jp-,rd-,pmgjkd-,pmhz-,qpnf-,qfmjv-,ljr-,ds-,bjvn-,rd=4,cdq-,pmhz-,sb-,ngttt-,qfv-,cpnx-,hqs=5,qcqk=8,vhvpk-,jhd-,jtc-,bjbrrv=9,hjx=5,gx-,nh=9,xnj=5,fpmhbp-,jnzl=2,jpmnk=9,fhx-,qjf=3,mc=6,qp=3,nz-,fx=8,bjvn=8,fgr=4,fhgz-,jvzb-,scd=3,rvv=6,sg=3,tsqxjb=1,sgg-,zhc=8,dqk-,jhd=8,qjf-,nr=9,dph-,fp=4,nb=3,vnf=5,kx=9,slt=2,sg-,nvld-,knmdd=3,msc=9,mbdcz-,zsfls-,fnz-,hf-,svhqlj-,nf-,xj-,rt=1,gx=8,szm=2,bjgs-,dhz-,pk-,kk-,knb=7,tr=3,frvmt-,zhl-,tj=7,dg=9,ml=9,xhjtm-,frvmt=9,snhdx-,pmgjkd=9,dfj=9,sx=1,bg-,qzft-,jrt-,nhq=4,tk=6,bd=5,fbn-,lh=1,qcqk=2,jmp-,nh-,zmk-,hnf-,shb-,stg=6,tsqxjb=1,dznp-,pjc-,lpk-,gbv=5,rg=8,ggt=3,xtnl-,mp=3,xjdg=6,vf-,zsrs=2,ht=9,ttj-,dg=4,tx-,rrh=2,qfl-,msc=6,bbjb=3,ct=1,fhgz-,bjf-,dpg=8,xn-,sgnz-,xc=4,qh-,bnmft=4,zgx-,gzbg-,qzft-,hkh=8,stg-,czv-,rs=1,dlf=6,brx=9,xqqdv-,hsq-,hjx=4,hm=3,lx-,kzbc-,czzf=3,dznp=9,gfq=8,mkm=4,bjbrrv-,bzhl=1,lfbxds=9,tsz-,rvv=7,ldvl-,xl-,sc-,pmhz-,lzzb-,cp=6,nfdkq-,kzbc-,rm-,hscr-,rd=6,nqbl-,rz-,gg=3,gdg=6,vhvpk=5,cbnfl=8,kxsj=1,fvd=4,bjbrrv=8,td=1,rvv=8,bfvzh-,mb=2,px-,vx-,xc-,bjst=1,dzf=3,pjtzxc-,stf=7,gckl-,stg-,kkk=9,vgk=8,brx-,cf=1,lfbxds=5,bg=1,bcdqgj=5,scd-,jlxf=7,sz-,bjq=2,qkk-,ccr=3,cdq=8,ltxz=4,nltf-,qghqc-,dhq-,kgx=2,dj-,cxptjr-,qr=4,lt=6,rz=3,dlnc-,bzhl-,jvtl=3,skrn=3,rvv=9,rbhl-,qjpjv=6,stg=1,gtnx-,bqhxd-,slt-,dj-,xhjtm=4,vl-,mmjb-,cpq=8,xqqdv=2,qfl-,vj=6,kk-,zgx=9,qjpjv=9,tt=5,lpsk=7,vnf=8,dr=3,fnz=9,jkmvr=1,xsl-,bq-,bfvzh-,rvv=6,sgqlsb=4,sc=6,qfl-,zxf-,frp=3,clh=8,rt-,zxf-,xjb-,tsqxjb-,hhp=6,mnm-,gz-,nrrr=8,mbdcz-,fvd-,dznp=5,nbg-,vlcvb-,xsb=9,qjpjv-,xtnl-,gbv=2,cnk=6,jflv-,vgk-,lrlj=3,hf=9,dlf=7,bbjb-,lfbxds-,bcdqgj-,ctbxs-,fdc=2,mzqmg=5,kxqg-,qh=9,hnf-,xhb-,pc=3,ff=3,jhd-,dlnc-,bqq-,svz-,kskj=7,nnm=6,xtr=6,sntf=3,jpmnk=9,tms-,tsz-,dhz=1,nltf=2,phljs=2,ht-,szj=7,mpvh=2,tnngr=4,zkdjf=1,zvgx-,txbr-,bn-,rlsj-,sb=2,rkr-,hjx=8,ggt-,zjm=4,dfj=6,lpk=3,flf=4,vtm=6,qzd=3,dph-,bx=8,bctx-,ngttt-,skrn=6,dzf-,zdjkk=9,zs-,ljv-,jnzl-,bsxfk=3,xxz=5,hfcjfx=2,bctx=4,bzhl-,tch-,dj=7,vfpx=1,dlnc=3,hs=5,bffjx-,flf-,pxdlpv-,kvzd=2,pjc-,dpg=9,drv=1,rjm-,mc=8,qsv-,scd-,ds-,ldvl=6,bj=6,bds=4,qjf-,lzzb=3,lrk-,lqh-,shxm-,ds-,zn=5,cqp=5,ddz-,pnblf-,lfbxds=2,nch-,zjm-,spmz-,zfrs-,fzfg-,pxdlpv-,bffjx=7,td=4,dbs-,dsq=4,kcgr-,xgq-,qkk=4,xn-,rbhl-,kcgr-,qfv-,xrqhbm-,kl-,vtm=9,znzbpb=6,lm-,mm=3,bfvzh-,frp=9,jr-,slt=3,xndq-,bjvn-,qx-,sgnz-,dr-,mqlfsf=6,skrn=6,qdqp-,ctbxs=2,nltf-,mp=2,rm-,vtm=5,nch=2,shdd=8,jqfs=6,lrk=5,pj-,hqs=3,vvf=2,qrd=2,pvr-,zdjkk-,hc-,dg-,cpnx=2,rbhl=9,bn-,cqrh-,kvzd-,vrq=8,kcgr=7,lt-,hk=5,nbdsxb-,bp-,zxnq=8,tdg-,vcmrn=5,cpq=3,qp-,fc-,rz=9,dlf-,gf-,ksg=1,zn=6,ftd-,spmz=2,sxs=6,nhq=2,lfbxds=1,rfh-,sgg=1,nch=6,gqgbf=7,rt=6,dm=5,fbn-,nrrr=5,vhvpk=1,ljr-,bbjb=2,kfj=4,fzfg=7,qpnf=3,ttjrn-,qm-,rbhl=1,khnv=4,rx-,cbnfl-,dg=1,gfps=2,hrn-,tncjgs=6,tqd-,fc-,tj=8,mp-,tms=5,vgr=5,jmp-,fz-,zkdjf-,shb=2,nj-,dbs=5,qzft-,mv=9,ptmbcq-,fp=6,frvmt-,qjf=6,hf-,ld-,zhc-,qzd=5,zrt-,rj-,vsck=6,fvd-,czzf-,qfmjv=8,knv-,hm=2,cq-,cf-,mm-,dt-,cpnx-,rsn=1,dm=9,bslt=7,hm=8,jkmvr-,zkdjf-,qfl-,nrrr-,ts-,nj-,jp=3,qpnf-,lcrbv=3,fn-,fc=9,bn=4,xvcp=2,gcz=2,psc=5,bqq-,bd=7,rd-,ftd=7,nfdkq=6,srfl=8,vhvpk-,lh=6,khnv=5,dfj-,bp-,xqqdv-,cq=6,vsck-,cx-,tj-,szj-,mdps-,gq=2,fc-,lzzb=2,lt=5,zxf=5,crc=7,jvnjh-,cxptjr=4,vv-,zdpcrj-,jlxf-,cq-,gx-,xsb=9,bt-,jmp=4,cpq-,zsfls=5,ftd-,lpsk-,jkjrx=6,fn=8,ml=1,znzbpb=4,krhb=1,jc-,hr-,fzfg-,cqnpv-,lt-,nb=9,hv=3,zn-,xhjtm=1,vfpx=4,mmf-,fz=1,stg=3,zvb-,gmvc=2,vg=4,zfr=9,fvd-,gl=4,gqgbf-,bjq-,vf-,zd=7,bds-,gg-,ngttt-,dpg-,cz-,fcn-,rzd-,pkp=6,nvrn-,xndq-,nbg-,bzhl=8,bcdqgj-,nz-,fjv-,nbg-,thq=6,rd-,bvt-,cds-,qfl=7,gt-,dhq=9,lh=6,sb-,gdg-,fldg-,ds=9,vzscd=2,cqnpv-,xjb=9,nnm=8,fsgl=5,bds=2,hqs-,nh=1,tj=3,lqh-,njrg=4,hlx-,kxsj-,dhb=2,qmfxv=8,fz-,mt-,vgk-,gq-,lqfr=4,pxdlpv=7,xn-,frvmt=9,lpt-,dr-,fvd=9,bjvn-,gt=7,hjx=9,gnx=6,jr=6,gcf-,tdg-,mg=8,kgf=8,hrn-,td=6,sxs-,pk=9,xl=1,pnblf=3,ml=1,nz-,tx-,xrh-,dhb-,ddz-,fx=7,hbh-,vnh=8,dhz=7,knv-,ccr-,xxz-,nqbl=6,bjst-,rsn-,sxs-,qjpjv-,tzz-,hz=2,vbd=7,psc=5,bffjx-,dmm-,hbh=7,frvmt-,tnngr-,nvrn-,dpj=6,lzs=6,mv=3,qmfxv=6,hbh-,xtnl=1,dfj=1,zdjkk=3,qt-,sxk=4,cds-,jdkkq-,hnf-,mx=3,vzscd-,cpq-,vdfvp=9,hqs=2,rqgp-,xxz=5,hcnmh=9,hcnmh-,hfcjfx-,gkxmct-,bzhl=4,hng-,nr=3,xxz-,fq=7,dhb-,rbhl-,svz=1,gqgbf=5,frvmt-,vjtk=1,kl=9,hs-,jfp-,pkp-,dt=5,fdc=9,qx-,bg-,rq=8,vgr-,jxlg=7,tdg-,jtc-,zfrs=3,dhz-,rjt=5,pnblf=6,st=8,cdq=1,bsxz-,xjdg=2,zgrn=6,qx-,dqk=1,kzbc-,vn-,dpg-,pf-,dfj=9,jlxf-,znx-,hfcjfx-,qfv=5,zkdjf-,dhrgg=4,pmhz-,vcmrn=4,kkk=6,drv-,gmvc-,hsq-,lzzb=2,ggt=2,ddz-,bctx-,hlx=8,jrt=4,zs=9,bjt=9,bbb=3,fldg=8,cnk=3,vgk=4,stg=9,tsz=9,qfv-,lfbxds=8,sntf-,vn=2,vfpx=9,zkdjf=9,lh=8,qfl-,fvd=5,dv-,mt-,zsm-,nb=2,kvzd-,hr=4,njnpq=7,dsc=9,nfdkq-,dqk=8,vcmrn=9,dsc-,dmm-,hfcjfx-,dqrx=4,qzft-,hlx-,ljv-,qkk=3,msc-,cqrh=9,xxz=2,kkk=9,lfp=3,qx=8,vgr=5,rkx=7,jrt=9,cn-,gd-,fcn=8,mhr=2,tr-,dtv-,cqnpv-,cpnx=3,cdq=6,vf=4,zvb=2,jdkkq-,gq=8,zdqxlx=4,chhq-,dsq=6,xgq=1,nr=5,bfvzh-,hnf=8,hcnmh=4,gmvc=2,nvrn-,hnf=7,vv-,zxf=1,dqrx-,gkj-,fq-,xl=8,kfj-,pjtzxc=8,stg=1,vx=5,ptmbcq-,zvgx=5,lq=4,mzg-,hcnchc-,mb-,ggd=7,nltf=7,zgrn-,xtr-,szm-,ggd=7,bffjx-,cvpp-,gckl-,cn=9,pfbkbm-,knv=7,kxsj=7,nrrr=9,ggt-,flf-,qrd=7,rd-,xc=5,gnx-,dhb-,qrd-,dmm=1,st=4,hhp=1,zmk-,bbjb=1,lc-,cnk-,shxm-,bt-,gqgbf-,vj-,bj-,ts=2,bq=1,qdqp-,gg=6,bjq=3,gfq-,bjbrrv-,cl=1,vfh=9,bjq=9,qn=7,flf=9,rkx-,cnk=3,fbn=6,gkj=6,bp-,jd-,mhr=1,scd=4,dnx=5,cnk-,vtm-,bjv-,shb=4,vhvpk-,cqnpv-,kxqg=5,ttjrn-,tt-,cqcn-,lpk-,bvt-,qn-,tzdz=3,bvr=5,pvr-,gf-,tvc=3,sxk=1,dlf-,vh=3,pld=4,kgf-,rqgp-,qsv=7,bbb-,bjv=5,lcrbv-,bqhxd-,zfr-,lqfr=9,zsfls-,zkdjf-,ttj=4,szj-,ghcd=9,pfbkbm=3,jvzb=6,ts=1,vzscd-,kgx=1,tzdz-,sq-,qn-,rbhl-,lrk=1,nhq=7,sgqlsb=6,xj-,bjst=5,cx-,xl=6,sh-,qdqp=5,jkr-,pjtzxc=5,vlcvb-,vkqzk=9,gz-,jqfs=3,thq=9,srfl-,tsz=3,hrn=3,ng=6,qghqc-,ljv-,vgk-,mc=1,slt-,lrk-,sq-,fbn-,jqfs=7,hk=1,jflv=1,zgx=2,hng=1,gpknq-,qpnf-,dm-,ghcd=7,lrlj-,bp=7,bcdqgj-,hz-,cqnpv=1,gfps-,qrd=8,sgnz=8,vvf=7,nsp-,hscr-,xjb-,zdjkk=2,vj=2,tms-,zmk=6,tqd=5,bd-,cpds-,cds-,qjf=6,gd-,tdg=4,kk-,sx-,bcdqgj=6,mss-,ctbxs=2,rrh-,tt=5,tk-,jfp=2,szj=6,qghqc=7,gp=3,njnpq-,nltf-,fjv=3,zz=6,kdmd-,cz-,sntf-,knv=8,sxs=4,hm=8,zdjkk=8,qm=5,xn-,vvf-,snhdx=7,shb=4,vvf-,sn=8,pmhz=4,sgg=2,jflv-,mv=3,ccr-,scd-,ltxz-,snhdx-,rk=2,pmgjkd=7,shb=7,xxz-,jvtl-,ds=3,kxqg-,zvb-,cqcn-,ts-,czzf-,dhrgg-,mmf=1,qp=1,mv=2,scd-,bt=9,gfq=5,rrh=8,gkj-,gcz=8,ng-,rkr-,cz-,fcn=5,pfbkbm=2,nqfn=3,cbnfl=9,ksg=1,ksg=9,sxs=4,lh-,mnm-,gcz-,nvld-,tqd=7,fmm-,vfpx=5,jlxf=5,tx-,gt-,vvf=1,dsq=8,thq-,fddj-,mhr=2,tt=6,nb=7,shb=3,zvb-,szm=4,cpq-,zmk-,hng-,sb=4,rbhl-,bctx=7,mp=1,gzbg=9,tnz=2,sx-,sgqlsb=5,sgqlsb-,vnf-,fddj-,mk-,bvr-,rvv-,kfj-,pzv=5,rz-,rqgp=6,bbjb-,hk-,sgg-,ngkmdh=5,ggdb=2,fk=9,hc=1,mv=5,vrq-,rlsj-,mbdcz-,sdkkg=4,nlcv-,pj=7,bjvn-,cqnpv=1,sp=6,kfj-,xr=1,pc-,jkmvr-,cds=2,ggt=6,brx-,xxz=9,bcdqgj-,zg-,fcn=4,vdfvp=7,ggt-,nsp-,hcnchc-,cf=6,jvnjh=6,sgqlsb=5,rg=8,kxsj=2,sc-,xff-,gdtqh-,ds=2,zdqxlx=6,ds-,lx=7,pkp-,mss-,dmm-,tcs=1,gp=4,gckl-,pjtzxc-,hm=5,lzzb=8,hsq=4,bqhxd=4,qfl-,gmvc-,ldvl=7,mmf-,vtm-,zdpcrj-,nnm-,bc=2,lcrbv-,kkk=4,php-,gkj-,bsxz=6,mm-,zdqxlx=6,sz=2,tnz-,nbdsxb-,ggd=6,zvzc=3,gbv-,gg=9,qx=8,gmvc=8,jkmvr-,slt=7,td=4,bc=1,drv=5,dznp=1,nq=9,ml=7,cv-,cnk-,xtnl=6,bzhl=3,nfdkq=3,dfj-,qg-,drv-,skrn-,tzdz=4,fn-,rr-,kl-,nfdkq-,kvzd=9,nvld=9,dtv-,lcrbv-,xr-,vh-,ljr-,kzbc-,gqgbf=8,frvmt=2,dbs=6,qx=1,gmvc=8,fn-,lx-,fn-,nbp-,dznp-,bfvzh=7,cq-,vzscd-,jnzl=3,ftd=2,vcmrn=2,vj=5,tnngr-,ldvl=1,qcm-,vf=9,nsp=2,jm=5,jvnjh=2,lq-,rg-,ml=6,rjm-,bjt-,szm=9,tsz=7,jflv=3,ltxz-,mkm=1,shdd-,mk=7,cqnpv=2,hrn=8,khnv-,qr-,vf-,xhb=9,jdh=3,jcl-,svz=5,hm=8,qfv-,fp=9,vzscd=2,zvb-,ddz=3,dvn=5,rbhl-,vhvpk-,rkx-,gd=3,rs-,hsq-,ksg=8,sntf=3,gg-,hm=9,jd=7,xn=5,njrg=3,jqfs-,prdgn=6,clh-,tqd-,psc-,drv-,gkxmct=6,jkjrx-,sx-,zmd-,vsck=5,sgnz=5,vgk-,fpmhbp=8,hcnchc=9,zdqxlx-,lx=2,gkxmct-,hjx=3,hng-,bjgs-,qxm-,bg=1,gckl=6,czv=2,gkj-,px-,dg=2,xrqhbm-,fn=3,nq=8,xsb=8,qmj=1,nch-,tdg-,gfps=2,hbh-,dbs-,bc-,dhq=5,gckl-,gl-,dt-,lpk=6,gqgbf-,fgr-,bx-,slt-,fgr=5,gkxmct-,lq-,bzhl-,tdg-,zfrs=6,mqlfsf-,fzfg=8,cqp=5,dznp=9,sntf-,xzbll=7,vl-,vkqzk=9,lrk=2,tnngr-,jz-,nh=7,znx=8,ldvl=4,stg=9,sntf-,dt=6,qrd=3,cbnfl=6,bqhxd=1,mnm-,fhgz=7,kskj-,vgr=4,jxkh-,lrk-,bffjx=7,dt-,xhb-,pfbkbm-,xrh-,xzbll-,gpknq=2,kxqg-,ggd-,qg=6,tsqxjb-,dph-,nz=9,crc=3,sc=3,nl-,qpnf=8,jkr=1,xhb=9,vnf-,qxm-,rjt-,czzf=4,rd-,nh=5,qxm-,rm=4,zxf=9,lfbxds-,km-,rs=4,gp=9,vrq=6,sgqlsb=1,gbv-,mv=6,bjf=5,ttjrn-,mk=1,xzbll-,gqgbf=9,jdh-,nj=5,xxz-,kcgr=2,frvmt=3,jm=1,kxsj-,jhj=6,tzdz=7,rkx=4,lt-,fgr-,rk=5,dmm=7,nlcv-,ff=8,xrh=4,ltxz-,cds-,bnmft-,gqgbf-,nz=6,ccr=7,mdps-,td-,tzdz=4,tqd=6,nnm=9,vnf=9,kfj=3,sg=8,qpnf=8,zdpcrj-,gtnx=1,mx=2,vdfvp-,rx=7,qcm-,rrh=9,rjm-,zz-,gd=4,xc=1,zn=3,vg=7,rz-,bjt=2,ptp=1,vkqzk=8,psc=1,fjv-,zg=7,rg=8,kdmd=5,fhgz-,tk=4,tx-,vcmrn-,gnx=3,hsq=3,kskj=6,xj-,zg-,zg-,bsxfk-,bsxz=1,hrn=9,qr-,czv-,pf=5,shdd-,kfj-,brx=5,dr-,mdps-,kc-,rg-,lrk-,jn=4,xr-,gqgbf-,lpk=5,tt=4,rt-,sp-,ttjrn=1,znx-,km=7,xzbll=5,mmjb-,kfj=4,kzbc=8,qsv-,px=2,gdtqh=2,lt=6,qpnf-,xl=3,kfj-,gf=5,rtct=5,khnv=6,tnz-,jfp=1,qp=1,fsgl=9,fvd-,nsp-,hcnmh=9,nvld-,prdgn-,hcnchc=9,hv=7,mzg-,nvrn=2,gq=4,frp=2,khnv=8,tvc=4,kxqg-,bfvzh-,fcn=1,kcgr-,dzf-,vvf-,zxnq-,cvpp-,bq-,fvd=7,shdd=2,pxdlpv-,pfbkbm=4,dhz-,czv=2,zd=2,qfmjv=3,qn-,tt-,lrlj-,hr=6,chhq-,vcmrn=7,vfpx-,mzg-,kc-,gkj-,dhz-,xtnl=8,qh-,lc=9,gp=6,gkxmct-,bp-,nlcv-,tr=6,jvnjh=5,gf-,vmt-,vrq-,qfmjv-,bjv=9,fz=1,cz-,qjpjv=7,ff=6,kvzd=9,mk-,zdjkk-,qn-,hsq=9,qdqp=2,zjm-,pf=1,ggt-,jjpk-,tk-,jdh=9,gq-,lk=1,dfj=9,brx-,bjf=3,szj=7,jtc-,cs-,hf-,px-,nsp=1,zmd-,gmvc=6,dj-,rlsj=5,nrrr=6,nz-,cs-,zfrs-,hc=5,qkk-,mg-,chhq-,sq-,nfv=3,gg-,vh-,kfj-,lt=5,vh-,jfp-,nfdkq-,jrt=7,zsfls=4,qrfx-,sz-,bvt-,zvzc-,ml-,fgr=1,szm=8,rtct=1,rkr=5,jhj=2,xsl-,zgx-,pxdlpv=1,jhj-,mt-,xsl-,mkm=8,kl=8,qrfx=1,dqrx=8,ggd-,zfrs-,mmjb-,bvt=9,cz=5,qm=7,ljr-,mdps-,dfj-,gnx-,xbcm=1,bx=6,zhc=5,qjpjv=7,ptp=5,ljv-,gdm=9,dv=1,tx=5,pnblf=4,mnm-,tl=9,hr=2,jmp-,ts-,dlf-,xsl=1,dfj=8,dsc-,gc-,tnngr=9,dph=7,bjt-,fsgl=4,rjt-,njnpq=5,gdg=8,njrg=5,jvtl-,bt-,kl-,svz=6,mkm-,jqfs=4,rr=5,rs-,cpds=9,xvcp=3,gdm=3,bjq=8,tnz-,fjv-,stg-,lk-,dcr-,nltf-,zdqxlx-,nqfn=3,hk=6,xl-,rk-,vg=4,hsq=7,cqrh=8,zgx-,khnv-,sgg-,php=3,lfbxds=8,dzf-,pkp=5,nb-,qpnf-,xqqdv=9,vcmrn=4,frvmt-,nbp-,xgq-,rzd-,zfr=5,xvcp=4,bffjx-,gz=9,xtnl-,fk=8,vfpx=9,sntf-,nrrr=9,bp-,gkxmct=4,qm-,prdgn=4,jxkh-,nb-,nfdkq-,psc=9,zsfls=6,psc=4,dmm=4,qkk-,qh-,bj=6,gdm=6,zz=4,sdkkg-,thq=8,hjx=7,snhdx-,bslt-,hf-,mhr=1,bjf=7,vlcvb=9,bd-,ttj-,qpv-,prdgn=3,gdm=8,mkm=7,hmj=4,kcgr-,fsgl-,qmj=1,bz=2,zmk=1,hlx-,cpds-,fhx-,nbdsxb-,rsn-,tnz-,nfv=9,sq-,bz=9,ts-,fjv-,vh-,tcs-,zn=1,ccr=3,zhl=5,qfv-,mpvh=5,shxm-,rvv=1,msc-,qjf-,gq=4,sdkkg=5,fk=4,pjc-,mzg=9,nrrr=2,dhrgg=2,zs=8,hv-,dph-,rr=3,rbhl-,bq-,xndq=4,qsv=5,dfj-,dlf=5,vh-,jtc-,qmfxv-,kzbc-,prdgn=9,mzg-,nbg-,jqfs=3,gd-,bvr=4,cl-,gcz-,jrt-,fdc=7,lpsk=1,hrn=8,dfj=3,cqrh-,rqxk-,bjbrrv=7,dhb=8,jrc=6,zd-,bvt=9,fx=8,ldvl-,zvgx-,ljr-,snhdx=5,bz-,ljr-,jrc=4,lh=2,jkmvr-,pc-,jn-,qg=1,hr=3,lrk-,ltxz-,lk=4,dm-,ftd-,sx=9,vhvpk-,qjpjv=9,qfmjv-,ttx-,sh-,qt-,kxsj=3,hv-,xrqhbm=7,rs=8,ksg=8,cn-,vdfvp=5,tncjgs=2,hcnchc-,cz-,tms-,lzzb=1,snhdx-,pmhz=6,kfj=6,sh-,gkj=9,zkdjf=4,rqgp-,rq=4,gdm-,tms-,zfr=7,lc=2,ct-,fjv=6,nbp-,jhd=6,cv=7,zd-,mss=4,vcmrn=9,bbjb=1,qzft-,slt-,vbd=3,vrq=6,nnm=5,nl-,dr=6,spmz-,nbp-,sxk=5,znzbpb-,vfpx-,hcnchc-,gcf-,jhj-,vlcvb=1,pk-,jcl=2,zz-,cs-,nvrn=2,zgx-,xjdg=4,bd=4,sgnz-,fjv=4,psc=9,gz=5,nq=9,kcgr-,xtr=8,mx-,nltf=5,tsqxjb=1,zgrn-,fhx=4,vhvpk=3,nm=2,tr=5,qkk-,pnblf-,kcgr-,pmhz=5,tnz-,dpg=8,msc-,fmb-,lpt=9,pxdlpv=5,tnz-,hnf=7,srfl-,hf=5,bqq=2,dr-,krhb=7,nfdkq-,mm=1,ml-,xhb-,qp=9,jfp=3,zdjkk-,xr-,rkr-,czzf=2,hcnmh=7,xrh=5,jkjrx=7,dfj=6,pj-,shb-,kgx=8,fmm=5,gg=5,jxlg=3,xjdg-,zfrs-,xr=3,qkmnn-,gcf=3,st=6,ngttt-,vnh-,crc-,xhb=9,bqhxd=8,lcrbv=2,dznp-,vzscd-,bn-,zrt=4,nj-,ltxz=8,rr-,qm-,tcs=5,bqq=2,qx-,sq=2,zz=3,drv-,rvv-,php-,nh=6,chhq-,nz-,lx=5,dm=4,vfh=6,cpnx-,kcgr=8,jz=8,qxm=8,xj=8,lqh=4,zkdjf-,hnf=4,ct-,bq-,hc=5,hc-,nqbl=9,lrlj-,jjpk-,sn-,drv-,gdg=5,pxdlpv-,rx=1,cp-,cdq=4,vgk=7,kl=9,rs-,xff-,bzhl=4,dqrx=6,mzg-,xbcm=4,bnmft=7,vl=1,nqfn-,hv-,dfj=5,zfr=7,sz=1,rg-,cqrh=3,bqq=3,st-,bctx=8,kc=7,hc=3,ljv=3,zg=7,vg=2,pjtzxc-,gbv=6,jrc=1,qcqk-,jmp=8,stg-,nfdkq-,kfj-,xl=3,xrqhbm=1,rrh-,stf-,vrq=9,gc-,qmj-,rk=9,fhgz-,vtm-,vx=5,drv-,cn-,sb=8,cx=2,bslt=1,qzd=2,hk=1,vf-,zn-,ld-,jrc=2,bt=1,zsfls=3,ttx=8,nlcv-,bjbrrv-,lfp=5,cf-,dj=1,vgk=4,jvtl-,khnv=3,cqrh=3,ts-,kxsj=1,pld-,hkh=2,hbh=3,shb-,tx-,bp-,dtv=4,bffjx=1,dm-,ljr-,ksg=4,vcmrn-,cvpp-,rjt=4,jr-,pf-,znzbpb-,cqnpv-,fc=3,dhb=8,rx-,fsgl=6,stf-,tch-,vv=6,cf=6,tzz-,qfmjv-,ngkmdh-,rjm=7,jz-,cqnpv-,cpq=1,ggdb=3,jxkh-,hmj=6,qp=7,vfpx=1,ggt-,qm-,vnh=9,cx=5,zfrs=1,fk=4,hqs=2,zdqxlx-,cpnx=7,hc-,qzd=5,dznp=6,dlnc-,fmm=2,shdd=2,gx=3,cnk=8,jdh=5,zdpcrj=9,gfq-,gnx-,qdqp=8,dlf=3,vfh-,kcgr-,xff-,xsl=9,njnpq=7,tzz=4,gbv-,qjf-,zsrs=4,tsqxjb=5,mk-,knv-,nvrn-,jxlg-,nrrr-,nf-,qdqp=5,cds-,gmvc-,qfmjv-,dv=2,hs=6,szj-,knv=4,vgk-,fbn-,hlx-,tcs-,ljv=9,qmj=9,vl-,skrn=6,vhvpk-,mzqmg=7,xc=8,czzf-,ftd-,jdh=4,nj-,mpvh-,ht-,cds=8,kcgr-,gtnx=9,xzbll=5,ftd-,sb-,pld-,vnf-,pnblf-,sq-,dlf=9,tcs=7,st-,vv-,ksg-,jm=7,cqcn-,kzbc-,hng=8,sc-,phljs=4,qrd=8,xgq=2,xxz-,shxm=3,mp=9,hnf-,nq-,mbdcz-,stf-,pvr=2,tsqxjb-,bctx=8,bj-,zsfls=8,psc-,kc=1,mhr-,hc=4,vg=3,bcdqgj=2,vjtk=3,hr=3,sxs=4,zxf=9,qmfxv=3,hqs-,bjq-,sz-,bqq=4,sp=8,lx=1,jvtl=5,zdqxlx=2,fc-,xnj=3,svhqlj-,bqhxd-,cf=8,lh=8,dvn=9,jdh=6,szm=8,gx=1,vnh=2,nb=6,vj=6,xhb=6,cv-,km-,dqrx-,rrh-,zgx-,knb=5,tsqxjb=2,rx-,vvf-,nbp-,hk-,ml=8,gg=6,txbr-,vtm-,rtct=8,dlnc-,dph-,jz-,rjt=5,nf-,pjc=5,kxqg-,fldg-,dsc-,vj-,cvpp=7,qjf=9,sp-,tch=4,tsz=3,zvgx=7,vdfvp-,zfrs=1,flf=1,jkmvr-,lzzb=4,mv-,gfps-,bz-,cds=5,nh=7,tcs-,msc-,pnblf-,ctbxs-,mt-,ggt-,mbdcz-,xsl=1,dsq=6,cn-,flf-,qm-,qdqp-,bctx-,vfpx-,jdh-,fk=9,gg-,ptmbcq=7,ngkmdh-,hfcjfx-,cdq=9,jhd-,kdmd=1,kxsj=5,snhdx-,jnzl=1,zz=3,zfr-,stf=5,vcmrn=8,xsb-,zgx-,bjbrrv-,xhjtm-,xj=4,xsb=4,tzz=9,qfv=8,ljv=4,nf-,hkh=7,srfl=7,dg=5,gx-,pnblf-,dqk=2,nj-,vg=1,nh=1,td-,dqk-,xvcp-,rs-,tzz=1,fq-,phljs-,lpk-,vf=3,hcnmh-,hr-,xl=8,fk-,ds-,zrt=1,lpt=5,xqqdv=2,vfh-,bsxz-,zxf=8,jp=8,phljs=3,tzz-,kskj=3,jxkh-,bsxfk-,gqgbf=3,mzg=4,kxqg-,lpsk=6,jn=1,qpv=4,nbdsxb=7,jxkh-,ts=4,ltxz=2,tj=9,xsb-,rqxk=6,cn-,jvzb=6,hcnchc-,gmvc-,mm-,lq=5,chhq-,dnx=6,qfmjv-,hcnmh-,vg=2,fvd-,bq=6,krhb=9,nvld=7,spmz=6,mdps-,cqp=6,bj-,scd-,snhdx-,rkr=2,vzscd-,rg=3,bjv-,fhgz-,dt=4,ttj=6,hmj=4,jpmnk-,jz=6,zkdjf-,phljs-,dzf=7,hfcjfx-,ld=9,dvn=9,scd=1,njnpq-,gdtqh-,php-,zxnq=4,thq-,rzd=3,ts-,nvld=1,jdh=1,sdkkg-,qkmnn-,pf-,mss=3,vl-,bjvn=2,jvnjh=4,fn=7,jdkkq=1,bt=4,cpnx-,qsv-,fzfg-,fjv-,dph=7,hz-,tdg=3,hxn-,jcl-,fp-,vn=4,kc=9,qxm-,shxm=1,qjf-,bg=9,ds-,mkm=4,bjbrrv-,qsv=9,czv=9,rfh-,ljv=2,ljv=1,jxlg=3,mb=6,dt-,tms=8,mpvh-,cv-,jvtl-,vv=9,ttx-,jkmvr-,dqrx-,gp=4,dhrgg=9,vhvpk-,kzbc-,vf-,cq-,gq-,hscr-,rj=8,ldvl-,nltf-,vtm-,jkjrx-,cdq=1,rvv-,nz=8,mp-,gdtqh-,mzg-,vnh=3,jhj=3,qjf=4,prdgn-,cn-,cqcn=4,zxf=7,gmvc=6,jvnjh=3,vnh-,qsv=6,nfdkq=5,kskj=4,fpmhbp=2,zz=5,kkk=9,cqcn-,lcrbv=7,zd-,chhq=1,ggd-,td-,dsc-,nm=2,lk-,tch=4,bz=2,fvd=1,ng-,gfq-,vlcvb=4,jxkh=7,cn-,dtv=1,mx=9,jr-,cqcn=4,qxm-,nr=1,lx-,jtc=6,sz-,pmhz-,qfl=7,vkqzk=3,fhx=6,cqnpv-,jlxf-,txbr=8,zvb-,hng-,hr=2,txbr-,mbdcz=3,vh=8,sq=5,lk-,qfmjv=8,rkr=7,sn-,jlxf-,bjbrrv=4,lfbxds-,vnf=9,cqcn-,dznp=2,bjt-,jfp=9,qghqc=1,ct-,rqxk-,mmf-,nlcv=9,ngttt=3,ljv=2,vgk-,hbh-,flf=1,nltf=6,ts=6,cq-,zsrs=7,vf-,cq-,gmvc=1,fp-,qzd=2,bfvzh-,kxsj=9,zhl-,xnj-,kx=6,xr=2,jdh-,ggdb=7,ltxz-,rm=2,svhqlj=6,xj=4,dj=5,hkh=8,mx-,zxf-,qh=9,fcn-,gbv-,qr-,drv-,qpv=2,zgx-,bc-,pmhz-,dfj=3,gt=9,zs-,gfq=6,sb=6,dhrgg=5,zg=8,nlcv-,pf=5,mkm=3,qrfx=8,bg-,kc=4,hxn=1,szj=8,ht=5,zfr-,rfh=1,bjvn-,vnh=8,gx=6,rbhl=8,gg=5,nbg=7,bjgs-,bjst-,zgrn-,kkk=1,dfj=4,hz-,td-,qkmnn-,sgnz-,qfv=2,nsp-,tms-,jmp=4,jkjrx=9,frp-,sn-,kvzd=9,gdg-,nr-,dsc=8,jvtl=2,stf-,jr-,bffjx-,cx-,gpknq-,jnzl=3,tdg=1,vjtk-,mc=2,jlxf=9,tdg-,mbdcz-,jn-,spmz=6,hqs-,xr-,fc-,ld-,thq=6,qx=6,fhgz=9,jrc-,xrqhbm=8,zvzc=5,pnblf-,hc-,tr=2,fcn=1,gcf-,hk-,xtnl=5,nqfn-,ggt-,bt-,xqqdv-,rx-,qkmnn=6,rkx=2,ht-,bjvn-,kxsj-,zsfls-,jvnjh=5,jnzl=5,dfj-,pmgjkd=7,jvtl=7,ld-,xff-,xtr-,rkr=2,zvgx=1,jflv-,rfh=7,pvr=6,qr-,zdjkk-,hkh-,dfj-,jm=3,znzbpb=2,rm=4,sz=7,ld-,lpt=3,qmfxv=4,fc-,pjtzxc-,mdps-,ld=9,zrt=1,rkr=9,xn=2,ml-,fh-,rg=9,bsxfk=7,jdkkq-,frvmt=9,dhz-,bnmft-,fbn-,brx=5,jz-,rq-,zmd=2,vcmrn=1,tl-,pjtzxc-,zvzc=5,qmfxv-,xc=9,bx-,thq-,rkr-,pk-,zs-,bslt=2,rg=7,bjq=6,mmf-,zvb-,mmjb=4,kxsj=3,ld=9,bcdqgj=6,lq-,mv=4,fpmhbp-,szm-,jjpk=4,tzz=2,svz=8,jd=1,jkr=5,cds=1,mv=7,sp=6,qh-,rkx=3,nb-,dph-,lm=5,cl=6,ttj-,gg=2,sdkkg-,ljv=9,zvb-,hnf=1,lrk-,txbr-,bsxfk-,mzqmg-,bqq-,bbb=4,nbdsxb-,nz-,ld=8,bjq=6,cbnfl=4,vf-,dm-,lpk-,nch=1,ghcd=9,fpmhbp=7,lh-,qmj-,rqxk-,rbhl=3,bjt-,bjf-,mzqmg=8,qkmnn=6,szm-,bsxfk=7,cf-,xsb-,xgq-,slt=6,hcnchc-,lpk-,hk=7,crc=3,xsb=5,cqrh-,nnm-,nhq=9,pxdlpv-,cz-,rs-,nfv=7,bsxz-,vn=2,rm-,pjtzxc=2,xjb=8,mqlfsf=3,ngkmdh=6,cf-,mdq=4,nqbl-,jtc=5,njnpq=1,jrc-,nch=5,szj=3,jr=7,qn-,gx=1,psc-,zjm=6,tzdz-,mdps-,cdq=1,bjv=9,pkp-,gzbg-,qrfx-,mc=3,cnk=9,zdpcrj=7,qfv=3,mm-,bx-,jz=9,zdjkk-,qzft-,szj-,xnj-,xj-,fz=7,bzhl=3,jkmvr-,zdjkk-,rr-,ccr=5,tr-,szj-,hjx-,bsxz-,sgqlsb=8,td=4,qkk=8,bffjx-,zxf-,zhc=4,ccr=9,gpknq-,qcm=5,tch=8,gnx=6,vf=4,qpnf-,sxs=1,vl=6,dlnc-,fvd-,gt-,hng=2,ts-,xzbll-,prdgn-,cp-,bsxfk=5,qfmjv-,bjt=1,mhr-,mzqmg=2,chhq=3,gbv-,shxm-,fc-,qkk=3,jrt=4,fhx-,bq-,hlx-,nfdkq=2,cs-,jtc-,sx=1,ggd-,jvtl-,ctbxs=4,nrrr=8,gdg=3,cdq=7,gcz=3,jc=1,ggd-,hm-,fn-,prdgn=9,zsfls=7,bbjb=6,bjf=6,tl=6,hbh=7,vsck-,pmgjkd-,knb=1,khnv-,xn-,fzfg=5,sntf-,bsxfk-,rvv-,shb-,bj-,spmz=5,bfvzh-,pjtzxc-,vkqzk=6,rx=4,vfh=2,rzd=5,hkh-,zmd=3,sb-,ltxz-,msc-,zsrs=6,lh-,jvzb=5,hhp-,rj-,bqq-,zvzc-,dhb=1,hz-,rs-,cqrh=4,gd-,gkxmct-,frvmt-,zs-,vj=4,rx=6,kgf=2,bvt=5,njnpq-,nh=4,jp-,qm-,bctx=3,fvd=1,zfr=7,bjbrrv-,cf-,hxn-,xbcm-,pld=8,km=2,zxf=3,hscr=3,fpmhbp-,xndq=7,bjq=6,bqq=1,dhb=7,mpvh-,kl-,jkmvr=1,knmdd=7,hjx=1,tr=1,pjc=9,sxs=5,qn-,ngttt=8,cqrh=4,gqgbf=8,qfv-,mk=7,jr-,sh-,fzfg-,ttx-,xc=9,xr=1,vnf-,lqh-,drv=6,dqrx=2,sn=4,hfcjfx=1,dhrgg-,msc-,zmk=5,gtnx=1,gfq=2,qpnf=8,tsqxjb=1,kk-,fh=9,zmk=2,jkr=3,sh=8,st=8,jvtl=3,xj=4,mm=7,fcn=6,bc-,gz-,cbnfl=5,ggd-,fn-,hlx=3,mm-,qr-,kvzd-,xzbll=7,nbp-,dj=9,lzzb-,pf-,qpnf=8,bcdqgj-,svhqlj-,bcdqgj-,dhb-,vv=5,bjbrrv=6,xvcp=2,rfh=1,pj-,fvd-,pfbkbm-,flf-,mp-,qfmjv-,bqhxd=6,xqqdv-,jp-,bjf=2,svz=6,zfr=3,zsm=5,sp=6,kc-,ml-,gtnx-,mv=5,fc-,krhb-,nch-,xc=9,pkp-,lm-,bbb=5,cp=4,bn=6,rk=6,lk=8,qzft=3,bsxz=3,dvn-,znx-,pzv-,rzd=2,lc-,gd-,sh=4,rzd=6,dm=4,ts=4,ftd-,xvcp-,sx-,fsgl-,bjv-,dqk-,qg-,rqxk-,bsxfk=5,rqxk=1,bvt-,qjf-,fzfg-,ftd-,rqgp-,prdgn=7,gmvc=4,qmj=4,mdps-,qp-,vfpx-,vmt-,xgq-,hcnmh-,tsqxjb-,lqfr-,jpmnk=2,tch=2,bvr=1,vmt=8,xhb=7,xhjtm=9,vjtk-,nqbl-,fp-,jvtl=5,brx=1,pld=3,vl=6,fc=1,zg=3,gfps=7,mzg-,gc=4,gckl=6,nqfn=2,bffjx=9,hxn-,tzz=8,pj=7,ts=5,fn-,jqfs=2,rqgp=3,dsc-,gkxmct=4,ttx-,xndq-,stg=8,pnblf-,shxm=5,zvb=4,gfps-,tk-,fmb=5,psc=1,gf-,pzv-,fzfg-,xgq=2,mdq=2,nfv=2,hhp=1,zxnq-,bctx=9,cv=6,vjtk-,hz=4,lx=6,nq-,dqrx-,xgq-,hr=3,shb=9,hsq-,znx-,fvd=3,xhb=7,dbs=9,jmp-,bnmft=4,jdh-,bqhxd=8,cf-,sgqlsb=3,vvf=8,bnmft=8,xzbll=8,dqrx=2,dzf-,cqnpv=1,sg-,hqs-,tcs-,nz=9,rzd-,gdg-,xjdg=2,knmdd=3,tdg=4,xtnl=5,ptmbcq-,kgx=1,frp-,vdfvp=4,nqfn-,xgq-,zvgx=2,lzs-,hk-,rjm-,fdc=6,st=4,xtr-,pf-,vx=6,qdqp=3,bfvzh-,ldvl=8,rzd-,bjst-,bvr=2,xn=7,zhc-,sb=1,lfp-,tch-,bbb=4,fhgz-,gckl=1,hm-,hbh=8,lrlj=5,rlsj-,xqqdv=1,fldg=9,mx=9,pzv-,jvtl-,qrfx=7,xjb-,zfr=4,bds=5,bj=1,bq-,bd=8,zmxkmz-,mm-,vfh=6,jmp-,jjpk=7,zhl-,sp=8,zmxkmz=1,txbr=7,xr=8,ldvl=2,ttj=4,bffjx-,zfrs-,xc=1,jrc=2,qfv=9,nrrr=7,vsck=7,rk=7,xhjtm=8,zvgx-,jxlg-,cx=2,zgrn-,zfr-,bz-,ttj=3,ht-,qfv=1,dcr- \ No newline at end of file diff --git a/day-15/part-1/vanyle.nim b/day-15/part-1/vanyle.nim new file mode 100644 index 0000000..b656993 --- /dev/null +++ b/day-15/part-1/vanyle.nim @@ -0,0 +1,26 @@ +from times import cpuTime +from os import paramStr + +proc run(s: string): string = + var res = 0 + var h = 0 + for c in s: + if c == ',': + res += h + h = 0 + else: + var ascii = cast[int](c) + h += ascii + h = h * 17 + h = h mod 256 + res += h + return $res + + +var input: string = paramStr(1) + +var t0 = cpuTime() +var output = run(input) + +echo "_duration:", (cpuTime() - t0) * 1000 +echo output diff --git a/day-15/part-2/vanyle.nim b/day-15/part-2/vanyle.nim new file mode 100644 index 0000000..9b19b79 --- /dev/null +++ b/day-15/part-2/vanyle.nim @@ -0,0 +1,56 @@ +from times import cpuTime +from os import paramStr + +import tables, ../../lib/nim/vanyle/speed_utils + +proc parseUnsignedInt*(s: openarray[char]): int = + var i = 0 + while i < s.len and isDigit(s[i]): + result *= 10 + result += toDigit(s[i]) + inc i + +proc hashS(s: openarray[char]): int = + var h = 0 + for j in 0.. Date: Thu, 28 Dec 2023 22:43:06 +0100 Subject: [PATCH 5/6] day 16 --- day-16/input/vanyle.txt | 110 +++++++++++++++++++++++++++++++++ day-16/part-1/vanyle.nim | 114 ++++++++++++++++++++++++++++++++++ day-16/part-2/vanyle.nim | 130 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 354 insertions(+) create mode 100644 day-16/input/vanyle.txt create mode 100644 day-16/part-1/vanyle.nim create mode 100644 day-16/part-2/vanyle.nim diff --git a/day-16/input/vanyle.txt b/day-16/input/vanyle.txt new file mode 100644 index 0000000..beb93fc --- /dev/null +++ b/day-16/input/vanyle.txt @@ -0,0 +1,110 @@ +\.........|......./...|........................................................|............|-...\...-/....... +.....................\.......\........./...|...............|...\................................-...|.......\. +.......................................-....-./............/.......-.............\..|.......|......//......... +...../..../.....\.........-.........-./..-.......\./..\.............-.....\..........|-..................|.... +...........\..\...............-.............|.......-.\......\...\..........\.......-.....|..................\ +................|.........|........|............--........./\....|-.....................................-..... +........./...........\................../...................\././........./...-...-.\.-.........-............. +......|.....|............-............./...|...................-...|........./............/......./........... +......./........../..|.....-...........\|.................................................\.........|..../.... +........................|..................|.......|.................-..\...........-/.\.................\.|.. +.......|...|./....................................-...\........\.......|............................|...|..... +\..-................................\.......\........../....|.....................|........\../.........../..\ +....-|...............................\....|..............\.....................|.....\......\............../.. +.....\......-.........-.\.|..........|...............-.................|..........-............../............ +.........-...................-.............................................-.........../...................|.- +....................\..\........|-.\...............-............/....|..................../................... +.\.........-........................|..-.......|.......-...........-.-...................\/...\....|....\..... +.-........-./.....-.....\.......-..........\..-........\..-.....................................\..../...|.... +....-.........................|..\.....................................\./...............-............/....... +..........|..\....-........./..............................|........................-.......|./|........\..... +..\.........|..|..-|........\...-................|/..\......../.......-|..................||.-./.............. +.--..-.......-........./.................\....../.................-............................--.........-... +.......|.........../......./........../..\.........\...\../..\..././.......-.................................. +.........-/...............|..\|.................\...........|............../............\..................... +..........-.........\.-................|-..................../......../...|/...\..-....|-........-.......-.... +.--|.\|.......|.....-............................|.-....-...|...................|........../.................. +.....-......./..../.|...................|\..-.........../...|.............................\/../........../.... +......./........|.\......-../...........\........................./..........\.........-...\................|. +./.......................\........-......|...|............................/............\....-.....|..../...\.. +....................-..............-..-.............../..\...../.\.........\................../.....\.....-... +...................../......-....-.......|....|......../..|-...............\..\../.-.....././..........|...... +..\.....|...\............................./.../...../..../......../........................................... +./.../................................../.....-.........|.....|..........-...............................-.... +...............|..\...-................................\.........................|....\...............-.-..... +/........|.......|.....-.......-..-..-.\.................................-.\...-.......\.............-..\..... +./......|../......|................................/.........||.-....................|..\.........-....|../... +|..................................................\......|...-............................../.......-........ +....../...............-....-..................\....-../................................./.\.................-. +......-...........-...../.....-......|..........\.\...-......../......\................--..............-...... +.............\/........|...../...........-.......\...|........................................................ +...\\........\..........|...\............/........-..../....-.....................-......................../.. +.......-......../......./..........-....|....-..\.........................\.............../..........-.....-.. +.....|\/..../.........|.........../|.....\.......-........-............../..././.............|................ +.........|....|....\..-....../............/.....\/....|.............\........................|.........-...... +.\\..........................//......................\....\...........................-.|/.................... +...................|...................-.|........................................../..........\.............. +......\..|....../...........\.-.........-.......-..|../........../.............................../.......-...| +..........|................/|.....-.....\................||........./.............|.........../..-..|./....... +............../../|.......\...............-..../|..../-..|................................../......-....|..|.. +............\...............\.........................\....-.............-..|/.....--...................-...-. +.....|\......\...........................-.................-.......\...............|............|........../.. +.....\...-.............|............\........\...../.-...........|.-.................\.........|.............. +......./......\..-............|..-...\......................\..........|....../..........|........./.......\.- +..-.....|........./|............./.....................|...|.\....-.......-..........|...\.\|-........\....|.. +......................../............-...........|...................../............-.......\.........-....... +......../..............-./...................................--........................\....-.......-..//..... +........|.....-....................|...../..............-..........-......|..\................................ +.......-..//.............../.....-......................./..|........./...........-..../..|.........-......... +.-...............-...........................\.......\...........-..................-.|...\..\.....\..\.....\. +.........-../............|......|.|.........................\.......-......\...\..............-../.../-\...... +.-...........-..|.....\/........-.|...................../.|........-...........\..........\.....\/|..../...\.\ +.-..........\.\-..\....-\/................./.\.......|.........................-............./....\........./. +.............\.........|............/...........\\................./..-..........................|//.......\.. +..../-........-.........................-\...........|................./..........|.............|.\..|........ +...-..|.....\..-..\.................\-.................|...../.-..........|........|/...-.-.\................. +.-.-............................|.....\..-..........|/|.........|....\............\.....\..-...........|/...|. +......................../...............|..-............................-.........|........../.-....../....... +.........|-...................|.....................-...........|.../..............................|....-...-. +..............|....................................................|.....|.......--.....\...\.............../. +..-...............|........|..................-............|.........../.....\................................ +........................|.........|............-....-..\../..................\..|......\.........\../.../..... +.|............................./..............-....-.......--....-.../..........|.....\.........-/.....|-./... +....-..............|...-.....\.....\/.-........................................-.\.............|...../|/...... +........./..-................/........./..............-............................................-....-..... +...........-........./...................../.........-........-................./.|........................... +............................................................-.............-..-......|..........-.\............ +....\/........................-../.../.................................\............/..........|./-......-...\ +....-............../..-.\.......|......-...|...|.........../......|../...........|..-.\.................../... +...-......../....-........................|...-............-.........................|/.....|.........|......- +...|........-.......-.......|...|\.......\............-...-...................................-|........-..... +....\/..-.....-.....-..--./-..-............../................|............\.............../.......|.......... +.........-.\.......-......|........-.............|..../..............\-.....\..........-..../................. +.................-......\|.--..../../.-......-.......-........\....-...../....................../............. +...../..../....../.............-......\..........|..........\..\........-.-................................... +..............................|........./........-..................|.............-.../.................\..-.. +.....|./......-........\...\.................|....-........|..............|................................... +\...|............................-..|.............../..............|.../......-......-.........../....../..... +..../.............................-..........\.....\-..................................-........../........... +..........................\....................-...-/.|....................../................................ +\.......|.........-............\\...............-...-...................../................................... +..\...................................-................................................../.......\.|.......... +...............................-................/........\....\.......|...................-.../.....|......... +...-..-............-.||..../././..........-\\............||...............-.\.........../...\........|...\...| +....\./.|./...................\..-.-./..-.....||............../............|.......\.|...../.................. +......-.......\.\.........\......|..\...\.-|.\..............|...|......\......./...\........................-. +........./.-......../....|..............................|...|...\........//./................................. +.........................|...........\...........|.....................\........//..-.................\-/..... +.\....................\..-.-..-..........|/.\..........\././.....................|............\....|...|/..... +......./.................../...-.................\.........../.........\................|....................| +......-..\....|..................\............\........|......|....../........................................ +.........\/..............|.............\.........-............-...........\.\..\./....../.....//.............. +.........../...\.......-.../.-.............\../....\|./............/...-..\........|..|/.....\......\\........ +..|............/..............................................-./...-.|..........-......../................... +...............-..|.......\.............\..../.....................|..........\...................\.....\./\.. +.|..........\..\...|......................\...........-.......--........................-..................... +...................../................\.|..........-..|................-................................-..... +...../.........|-............|.\.|.../\.....|../........\../.................................................. +................/........\../.....................\./..../...........-............\-......../../..\.|......... +..............|.........-......|/......././.....|..../.|...........-.....................|./.-.....\...|...... +.......|..-.......\..........|................................................/..\.....-..........-........... diff --git a/day-16/part-1/vanyle.nim b/day-16/part-1/vanyle.nim new file mode 100644 index 0000000..5c20497 --- /dev/null +++ b/day-16/part-1/vanyle.nim @@ -0,0 +1,114 @@ +from times import cpuTime +from os import paramStr + +import strutils + +proc parseInput(s: string): seq[string] = + return s.strip.split("\n") + +type Dir = enum + LEFT = 0, + DOWN = 1, + RIGHT = 2, + UP = 3 + +proc dirTuple(d: Dir): (int, int) = + case d: + of LEFT: return (0, -1) + of RIGHT: return (0, 1) + of UP: return (-1, 0) + of DOWN: return (1, 0) + +iterator processLightBit(lpos: (int, int), level: seq[string], d: Dir): (int, int, Dir) = + # Returns the position of light to change, if needed. + let c = level[lpos[0]][lpos[1]] + var lightPos = lpos + var ldir = dirTuple(d) + if c == '.': + lightPos[0] += ldir[0] + lightPos[1] += ldir[1] + yield (lightPos[0], lightPos[1], d) + elif c == '/' or c == '\\': + var newDir = d + if c == '/': + if d == LEFT: newDir = DOWN + elif d == DOWN: newDir = LEFT + elif d == UP: newDir = RIGHT + elif d == RIGHT: newDir = UP + elif c == '\\': + if d == LEFT: newDir = UP + elif d == UP: newDir = LEFT + elif d == DOWN: newDir = RIGHT + elif d == RIGHT: newDir = DOWN + + ldir = dirTuple(newDir) + lightPos[0] += ldir[0] + lightPos[1] += ldir[1] + yield (lightPos[0], lightPos[1], newDir) + + elif c == '-': + if d == LEFT or d == RIGHT: + lightPos[0] += ldir[0] + lightPos[1] += ldir[1] + yield (lightPos[0], lightPos[1], d) + else: + yield (lightPos[0], lightPos[1]-1, LEFT) + yield (lightPos[0], lightPos[1]+1, RIGHT) + elif c == '|': + if d == UP or d == DOWN: + lightPos[0] += ldir[0] + lightPos[1] += ldir[1] + yield (lightPos[0], lightPos[1], d) + else: + yield (lightPos[0]+1, lightPos[1], DOWN) + yield (lightPos[0]-1, lightPos[1], UP) + +proc updateState(lstate: var array[110,array[110,set[Dir]]], y: int, x: int, d: Dir): bool = + # Check for out of bounds. + if y < 0 or y >= lstate.len: return false + if x < 0 or x >= lstate[y].len: return false + + if d in lstate[y][x]: return false + lstate[y][x].incl d + return true + +var lstate: array[110,array[110, set[Dir]]] +proc simulateLight(level: seq[string], entryi = 0, entryj = 0, entryd: Dir = Right): array[110,array[110, set[Dir]]] = + # Zero out lstate: + for i in 0.. 0: + var (i, j) = toProcess.pop() + let rays = lstate[i][j] + for r in rays: + for lbit in processLightBit((i,j), level, r): + var (y,x,newd) = lbit + if lstate.updateState(y,x,newd): + toProcess.add((y, x)) + + return lstate + +proc energized(lstate: array[110, array[110,set[Dir]]]): int = + for i in 0.. 0: + inc result + +proc run(s: string): string = + var r = parseInput(s) + var lstate = simulateLight(r) + + return $energized(lstate) + +var input: string = paramStr(1) + +var t0 = cpuTime() +var output = run(input) + +echo "_duration:", (cpuTime() - t0) * 1000 +echo output diff --git a/day-16/part-2/vanyle.nim b/day-16/part-2/vanyle.nim new file mode 100644 index 0000000..34dcfbc --- /dev/null +++ b/day-16/part-2/vanyle.nim @@ -0,0 +1,130 @@ +from times import cpuTime +from os import paramStr + +import strutils + +proc parseInput(s: string): seq[string] = + return s.strip.split("\n") + +type Dir = enum + LEFT = 0, + DOWN = 1, + RIGHT = 2, + UP = 3 + +proc dirTuple(d: Dir): (int, int) = + case d: + of LEFT: return (0, -1) + of RIGHT: return (0, 1) + of UP: return (-1, 0) + of DOWN: return (1, 0) + +iterator processLightBit(lpos: (int, int), level: seq[string], d: Dir): (int, int, Dir) = + # Returns the position of light to change, if needed. + let c = level[lpos[0]][lpos[1]] + var lightPos = lpos + var ldir = dirTuple(d) + if c == '.': + lightPos[0] += ldir[0] + lightPos[1] += ldir[1] + yield (lightPos[0], lightPos[1], d) + elif c == '/' or c == '\\': + var newDir = d + if c == '/': + if d == LEFT: newDir = DOWN + elif d == DOWN: newDir = LEFT + elif d == UP: newDir = RIGHT + elif d == RIGHT: newDir = UP + elif c == '\\': + if d == LEFT: newDir = UP + elif d == UP: newDir = LEFT + elif d == DOWN: newDir = RIGHT + elif d == RIGHT: newDir = DOWN + + ldir = dirTuple(newDir) + lightPos[0] += ldir[0] + lightPos[1] += ldir[1] + yield (lightPos[0], lightPos[1], newDir) + + elif c == '-': + if d == LEFT or d == RIGHT: + lightPos[0] += ldir[0] + lightPos[1] += ldir[1] + yield (lightPos[0], lightPos[1], d) + else: + yield (lightPos[0], lightPos[1]-1, LEFT) + yield (lightPos[0], lightPos[1]+1, RIGHT) + elif c == '|': + if d == UP or d == DOWN: + lightPos[0] += ldir[0] + lightPos[1] += ldir[1] + yield (lightPos[0], lightPos[1], d) + else: + yield (lightPos[0]+1, lightPos[1], DOWN) + yield (lightPos[0]-1, lightPos[1], UP) + +proc updateState(lstate: var array[110,array[110,set[Dir]]], y: int, x: int, d: Dir): bool = + # Check for out of bounds. + if y < 0 or y >= lstate.len: return false + if x < 0 or x >= lstate[y].len: return false + + if d in lstate[y][x]: return false + lstate[y][x].incl d + return true + +var lstate: array[110,array[110, set[Dir]]] +proc simulateLight(level: seq[string], entryi = 0, entryj = 0, entryd: Dir = Right): array[110,array[110, set[Dir]]] = + # Zero out lstate: + for i in 0.. 0: + var (i, j) = toProcess.pop() + let rays = lstate[i][j] + for r in rays: + for lbit in processLightBit((i,j), level, r): + var (y,x,newd) = lbit + if lstate.updateState(y,x,newd): + toProcess.add((y, x)) + + return lstate + +proc energized(lstate: array[110, array[110,set[Dir]]]): int = + for i in 0.. 0: + inc result + +proc run(s: string): string = + var r = parseInput(s) + + var menergy = 0 + + for i in 0.. Date: Thu, 28 Dec 2023 23:15:45 +0100 Subject: [PATCH 6/6] day 17 --- day-17/input/vanyle.txt | 141 ++++++++++++++++++++++++++++++++++ day-17/part-1/vanyle.nim | 162 +++++++++++++++++++++++++++++++++++++++ day-17/part-2/vanyle.nim | 161 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 464 insertions(+) create mode 100644 day-17/input/vanyle.txt create mode 100644 day-17/part-1/vanyle.nim create mode 100644 day-17/part-2/vanyle.nim diff --git a/day-17/input/vanyle.txt b/day-17/input/vanyle.txt new file mode 100644 index 0000000..9f7d1cb --- /dev/null +++ b/day-17/input/vanyle.txt @@ -0,0 +1,141 @@ +233244231122553122525413454522354135462222326535344662264544223642652255336664663346353252645466356456462435622214553413332454432211214411143 +223141234553125225554452413445222253233246635553325226333542552424263422323666243555565625352563233242463262245343212134422111434232123132432 +222211241414332422353143154123232224435622425635432542244626326352546424262544336555243322432452265334323634435625353134233211423335325223333 +322232223424242153454434322156223244543255665445556362542353232362553242363465623353356322354425466433346323664633124432225444231511234544333 +332334545315334114453243332464466364433664255323465255433565444463354334373422362334624463322442462434232264664443442124112355243442414251234 +133242121141341224224443146434432622365634323533462456343364634763756335446443456442433652326466222624526234652633644454443153343412234115322 +242111232112124242412443465234554263455236425536235434654756753344376453734466455435654443663636234535423533255364633332435354221345432131332 +334124233122435421244334545423235454235234226263534536466575566753354475654773667473734745556556553464464266456224322665345422331434452231141 +243223315411111451244356366462432364552556662462264547566444575463455364744746675765673333337763436424643625333252343225253232544524352423331 +144524212211331535513566546435422255553524423345447556774457553555563373554557766774556766545447333542362354662325562465252451325524314232511 +435521114224413334453546253526535655234455245563465555546537665674435746456456573644466575353564753546632222233354542466433421132325235415124 +443122134353315433453536336522526545262256444775735576745345475457663763633476754434565463374734556476656335526423425662456622151554525514153 +254344545432133514243555454223344344344235434463453346553366743433475674736654344567353475374734636335563522344434534622445663435524554314435 +555543211152424432235242543642646452246566537346745634647653544445537433437536757644565337343433776537374346323654224635525253242541414151234 +224532344111341335623565634332235565476535353637575633544547664764464765554546746644433363336643654577433753635452525665463423355325244315534 +332423132323256224435255244455363437475376445775644433674675674777636333563774756654674346447646477765355663252522553244336246432453321343113 +523325351342563622233264426223646764743735776737446465346653637633366367763454537463637556665377354755465754564353426542533534645655455424124 +543515321451323355352442453662524443777435667774765547544657675477646344663644473465676775755755376664436467345233664335654456566364114314515 +524544331415433342453636265422447355454554354733444735373767667665576644845687853773673574376363543547347656437465554666252332235222341243542 +334422354525542664452562352245656563756355654454535464446654754477586464875666884786776674577537465676556774676365446263346423446443414312332 +554115234546226433636644546564664575467746674764646336547486746446564645874746758585786836444746767667435546456336636253643265363445353134113 +555523412332545442255666524563773567545656376433463368678578788677866678474578567567884668475434446453564663553575554532364422655643542535445 +535551115322532533552622566677754647676633654656374566574746868448854776774467746575584574578653455667646536345365765623463333656546554115332 +352152455642246446646554247744444775673445334645447867886678584565565588657564888557565786655586555475555364566346573722442243256646262452354 +124252324554445242456263746376346333645753364455887777578566877656677688584768887558456756575868453446576473476456737734222236666646452341431 +512231664666236556243446476376373674657757746775856577584764846486568657556654658575446575847767778754344655567763665364353524653552246535431 +141414665522563445263633446674334444564555755766586587786665754455878676484877464657874677555877875467674435735334577534622554545224354462441 +132324222343522456562343453577374775354564465457777785545778544578654574584575857747567585884655674847335373435547644654445662232623246622554 +522265652626344325253776367756754663666587474588584658475868668556767575686678464545576745757774448676583357676773755545366232226524625554345 +324323545534644533343735675645335737334685766445646847477757547865768658874544678566746764755487844767685474365653734357344444626356532322433 +336362333335424256636565753367333746577754747878857655665487587675854554858548878577845655654685444575858563457474334364734636626363544565225 +355465564454644255645647344534766566654764877455464758467877686756668888687745656774846844866467545755657677334346774664566575536426644456536 +562463246423335335433367544334554465646447468678745864868877469558576678686778788755487486665475547486665857653655534576363756255363444456255 +155534533263244555364443447434535384658774544587686674465859676696797898776557585886854645744556777784746577473346773367645456534526222555456 +522356656362455266437377543646643758658674686864848648545957997965688678567789755596889587765764557857765778767555454677473335666633634332444 +353325243246563634755335565545465477774544676566864448978557878899765757776686979869667588745785548846587575686567735656553547344454425535453 +624564362362653565676763375453557558685678864656744468557989587765565785696886866865577599757654655457877688757835634666577633775466635523364 +463435224535356633366653546754776874456644758844559795566658785899598958555996778866776989966874484577587486865767754444665475546536562264253 +654235264466237454764535674444657766554545567487455679577779896599896757689779675879965957687545574645656458646467433646567575643343465645243 +332646435224664677736735755568876766686786666855878886567756558668765798698599986875598767756796445665574747646886437536766546665332353235663 +363532462553673354636454373784758555687774544767587656988899796789566889579998888588598595757966787856746485586844873743474776477545426654352 +523635534555654553444656646577555575584657484696855796655895679888575776856955575675585785555595775668586857786576686654677665737575565465322 +442423626457546563744563348858767687588668748686696567698785999789956579855977978866967688565899978568448476748868546747367676647333453553626 +533352235554675757776645455544686478678565476977996878975675899685588666679557787898689876675557597856865865658484756535665674734364533623453 +243236562463544673343634464875645567848776895855987676576788987577668676597578789656855576685978587787654844848585485855755733446747443535326 +445565443643447366465665654886677688847458578688769588796865968997989689966888687887865865597876586855866455747544674663473545665636543462633 +533652333476663774676654467786465675685779896768765587796869688767666998999896999967867699699569989957657546784647676566546646454676575225346 +652463352537635754437374577686556744676675879757889979887588669679679687998989679766578858568575589797956744458888646747656463747346436435333 +422524545467636665367747678585558665667556579796875677789786879999979777767767768678659659797798769769774567677577564645477647756354433566544 +332426246655565773743358884866557746575695966778865776897897977678889997866999678788687868587698697979875567564885558477454636437667544566355 +532566655373654435446384668444766686765789659557585768596689798697986668696866978696989676755556879889588756785448668546863367566755453353543 +426353343336546436434367687655858578679677558867655965788688999769888786969897678879997777858769799858769755846565747577543537664537444555533 +423522454355533556374676766475687754689596985676888996688669976778868666878878869678699676698899696969965866646878445885566454337634664552263 +246445275363774466756457647877555674798667585997799586788767986676996868688966768986889669688567768785865966757668476864784734636553444463264 +336342244766676374676448546885546849587957776666589878779667889968786866779666776979896767885687697896997787854845644864875373777747734646646 +324565637735475333675446445566547686755958858896989968667769868996976668986666776768967887699957767986967858755868745685757473364543437676565 +555642464565454445738556748775656855998567897888769788698769876667799778998886899786769878896765758976585586747858784877554345746545334365556 +245464677666533773357754864754576785787958887677787986976999996776799897699789776879678989868699857677669898667748578584767433577364567352525 +336533455537573573587685867566874889686855567676767679876769767899997889779767869877689766869799679775879998997744475685468566555577455773265 +552324436734643575585568686464754599685769867777779988669979787788777799999877898887786779666798868596878985898684756475858677666476444762554 +256567444356573636547555877447584797567875567879786969879878989899877779789989887889669677696666755755875698695867464647685567476464574445256 +562627355445536353454886776556574978868585757858867987988766666879797999777878789868878687798689859858688975657674746447855675633543436637346 +654235643563767655755657788885479886677878888587689888768698987787887879897979898867777787996997699586769986797568648587756536575366346677265 +423565333576464557446654567674456786956775969798779679689889987997889799977978987896998798888969998557979879557676888584758487476755577554222 +643443654564345344456886776868859888766656896889867968689797799788789887889988987799888986686866667869689775998848754558584766675447355767265 +546563336765745576548878584668887687759688967676876867666788979798889879989889887898766699877668699959999975797774454648686656666374333634542 +362236453757453735546844785885486577668858896777897996986788898887798888797899797878677699676978877587996556898485577657848746345653376556226 +362453555643444676446458775684468785888986965967669886788988788777787889878977778789786678798887988569955665796976854544665866466646437734224 +443336733375574377585758788857865865868698978776778986769779889797978899789877999877967886789867765897867699577758845755854577347633654343345 +664544643737563457768877885575457696879858698996799789777987778987999898898778787987998978969986887797676775858886646465474574543466374373444 +322674763355576357858848786755867567679798865988797996697689987798787977898799897889798988679688988955998555598958874576767856336447735343444 +546375645565745343775444876784685657775976875979768797876997799898898979977879787778886668697666888595657968856967675688448563777375337363455 +255563346355544345867447764857467889777976757888678979766887989889978977787889897888779689667776677765658687887586748757845876373353536437366 +453353357776454433577456876457687998575779565997877997897888897977999877998797899997889677766877785575677658797874658478886483654667537444642 +356655577537737377445466557576488968776855595987696797976998878889998899879787877797899966999966977586696777675847645884865656756446346747656 +524534555574373364754887876885555766965885679898886686799899897778878877987977877888679988797776997788979778668785565846465854763563436437246 +344646767673534643888464658686556565655695586696878889976998888898977879887999978778877998786989766998878557759788744478488586755466366745364 +336323763477443556568644456688456559756585666899696878698677879899788777777989898979888786898697675875765557868746667575486873645455364755544 +635334435545764765657575686857548765659978655679689969877866988898989987887977798876797699897787955765859798576554484487654664755537445647334 +564653454546743543875788878658455969798866656786968666987666698799778778887987979769966977989699857569998858577685874484665674636755645676654 +364345743473536754364778684784489755655595599599686679988697977787978999977887778999866677878988675796778655559557575778777733567355455434425 +634344456665754455587565544866546976987798869996966989776897677898877899889889977768797797878868665576658857988554448585866756554645357754233 +353456437744775464786874466474454786587788787687887897996789879689899779897987979976796968797887677789795776586658575866688643444634667756344 +323366574647354337644448856574455788597575867698777988789788678878789778779788986997778766766775565669889956995457744484548545457453757672255 +344555337773573345747467778578568689869999569699686999787898687988877888888779997966898799668786655856598978565657485666754733636547445364322 +342222745755445475734556447568866867766858769976987687998976999997997766978967689698686978878855958689658557545654475888457665355667557773535 +456223366773556353357775767688646865757655887958687699689978799676898666787779998979679668699978689556999555585756474877664645667353545535362 +263433573774374365775775668778465647899879769875976966866666976777768899877696777768869989988997577975675758655686658777548335667477775576523 +234242336463653736375554687485675675698776575678595877867788796888897798677779967999668876987959796686859657777646764568473773664767346343653 +646333437373545765653867865487487457698666859579555787677886697967696697696669978897898786859669677665965786885757666654855636557435533436642 +355464337347755574675455754774676768879857768567678569689688776688796767997898699897667668966685757668556758554775868586685465657363635733663 +354263456366347346673456766584475685469589976659558959889979677996976797699969977977799765787887688899757854775877678756533636574677564536265 +645556264756377567473475784877574648586976575676896876597968886667689768899796768766786789569969975687678654546458764448465456545534564442555 +226332653667747346767766746858588457466756996776766598878987996899996698698788898787997858798666869669967587858545575674376766453675674253254 +622642444353453336653668878865845754687668877778568758885599967999689768667786899686765769687658955657855657876544765686474437367444355563522 +442422645435647555537633857584764786476778797588989857957856898998789898769696677969957665978868778688956747745575657546447367445555553563454 +523665222346343364337367448557648577656667978575878978586798989699777688867987997575988855878576956599786885566467644777676643337776744265254 +254424553536435674456744475875477486767678865675698658895879655896898678876698577665798568675788568566564675447584888834755764534754552545643 +423245565674466533444547677478885575776744558765559887757868868799698975557987988577859796695587785574884864584654586564536737645763662322433 +522464556623753345635475678788547556487464779998975759675566575995599596987796959995995896987958976867786456765575644363675435673477465566554 +343224342623346676347666774466475764754478879559666586688898677569778786795858898775898666658779897845574574687865774445573567737365424554362 +653424534335366566536777653556755488548576556596976678967956858898898576565988679996565559857778598768578445747878455737364576336453264342266 +355643623335347453646734344388647586675744675676669875756889566996657678797757979666669957587869864848886785685855875776476565536446222225632 +332256566242277337556667367445456874858587755865765797976599876855687798895878785658777656658598656875745684586758476757654474333555536645524 +224236446456564673373544356777446664746564458748576699798667657758977667878968897597865665765546584487455464544477446433465454336562463333223 +552244625663234545374337453454755755687468855578645957689656985798856987977789657965795578678654878784548748785555365667657476335544424325356 +625644536362326656357476733333645848474766566447658788979876777656659995779797596698755967545746475678878786586765644737556537443263533252323 +432225456523545344637356534653557877748854788464547467857969579665686579876685598677999768458646646844775685675734654737553553564622245423662 +252246246543543577655356633556465668648546776768566857558885959976765779776989868797769667744665458754546657764553446763654336364646635325443 +464636324632334476334363666643556655465466475776644788778555596775556696697786887697558488487846775454856787646556457347544366655536342526355 +435225434624262645454347633573767654566645868658666874586888465798877579985876657868545567886444577747558447647337366363774773452424422353655 +145665643453433422673657635364356353857545848485847474677577664554498766787845476664575585657767478455457475434733766377437476536343442634323 +326654322552243545737443563355546463548468788555567666467587866664648448668768656648477764867854564786544745773544556563755445554244454664633 +221336555523446346664343537574773477374688545666647544654757656755678654877475755884655784454746867548785477374364554644374333666255432333453 +433265226565426534647343547347557353346585465776768864646474455758476776676677447847648868757464565466743454437564543645773454546326423432443 +345242444352536536463546654464563634743545455586655567558657758665554555684678644858786768556845868587336763557363647453746244632356334326321 +545124365224466425666447566353646545657647745846446466866856665448864546557758454758545488447758645685675456537775556363525262556665665343253 +355412224454626533666347764764473345566553576766777875858875565488768546677578854884658474456874454375477455475557536653256563222426256662421 +133454664232335356553665463637453766773566556357755766744448857754688578755775658584457654488774775477757337547376647364365533435544454623315 +431153452543255245665222565653375634743554345775788685654778655888586848455454655664587787886567376445433474644774473765262653644545223644242 +344452152533523344443235337357457345336643777676755876888464657676886864486877854466758445665376344554536433473654434442344356444244336542532 +344325413246453523634435653435444335475444536753453767568554478548785885586466567458588578643445343576637744447463756224255355545564334511545 +552551234533266236325466663365544636377634477354747366465655548858685668666484644644545644557635375353333357545634566243325562546465522524413 +311524545153355426432635246437643633574376346433544633573677578547444568756545786875446775437337644446465333563536643523263542554665631344433 +441132241416225343455543632356573375735746763464665747436576373857788654684755655374545536356337344566757547766673632525334546456356144135425 +342421352351353662465323542522466675567747736354644343655563444576765575334543743354735555464555645455675537547655633625232635262351454423351 +222321545413324652452225363546533457776544766556676477567553447676567446737453337737437545653446434736657535454465232652546642626443142243225 +132541345543222362365626525344333366376535367536753533463637366545474546765665477553466764336363756767777334354453565566366562325422212423355 +413455441112122663536626426454365543373734365466453664353445575355477755653334366464656454745466333456474435242445225456642252422522113411222 +312215215343523224366343223324324452343467357764366465434574643747544673763763465366733535677653674754535224343623445544632322345355345145443 +411555225233233422464456562346424352656565344575773637577634674737745563757544737674356657376735743457455334463445435345425462113443443544523 +355453454151144115636656342566224435343536547475547443444537653454353553556347775356354367554333666646363355335622555433565521125331432242232 +321112131513534552564436464562456433354544445334444634677756747736573434445555656653455355336475465235624366645224455454643224231131121314241 +241431232521135412542353326662624634546536254276337634366455456756337366745364376457777463777447544355366445554535424266224455315542112242455 +134425334145355324453556364535345355266554242656443566635664656664434466347666374673545535777453562466546552543454445365232551351123555251544 +224535223424112431121542325265666226562664653632523266665566465553553375765544734644766544336436525434666433243455532545555223533344314521111 +442243414125141241222511444444453552553465365465556256257547575374766444344436533446667326345454452324335244656553634365414214323335444555443 +341411112214154352211125143324235352246665542525246566665565575536477474635576746654523223454623646642534652264363656215114551411354515255314 +412344423255121144234125355432455346256622325444636254466252645663265745736464623544624333542566355333543662646354464322333224243332511231231 +114411234233322532214322523225432665556655435652626366666632543466426534633623653335423342454335366335236653452623431132313343323215552121214 +423123144522333242511211213533642662322324624323353366446543654442343652453363536622442526523326626535524343233442135152325133334252223142132 \ No newline at end of file diff --git a/day-17/part-1/vanyle.nim b/day-17/part-1/vanyle.nim new file mode 100644 index 0000000..57f3500 --- /dev/null +++ b/day-17/part-1/vanyle.nim @@ -0,0 +1,162 @@ +from times import cpuTime +from os import paramStr + + +import heapqueue, tables, hashes, options, strutils + +# A Star implementation, from the astar package. + +type + Distance* = int|float + Node* = concept n + `==`(n, n) is bool + `hash`(n) is Hash + + Graph* = concept g + var node: Node + for neighbor in g.neighbors(node): + type(neighbor) is Node + cost(g, node, node) is Distance + + Point* = concept p + p.x is Distance + p.y is Distance + + +type + FrontierElem[N, D] = tuple[node: N, priority: D, cost: D] + CameFrom[N, D] = tuple[node: N, cost: D] + +proc `<`(a, b: FrontierElem): bool = a.priority < b.priority + +iterator backtrack[N, D]( + cameFrom: Table[N, CameFrom[N, D]], start, goal: N +): N = + yield start + var current: N = goal + var path: seq[N] = @[] + while current != start: + path.add(current) + current = `[]`(cameFrom, current).node + + for i in countdown(path.len - 1, 0): + yield path[i] + +proc calcHeuristic[G: Graph, N: Node, D: Distance] ( + graph: G, + next, start, goal: N, + current: FrontierElem[N, D], + cameFrom: Table[N, CameFrom[N, D]], +): D {.inline.} = + when compiles(graph.heuristic(next, start, goal, current.node)): + return D(graph.heuristic(next, start, goal, current.node)) + + elif compiles(graph.heuristic(next, start, goal, current.node, none(N))): + var grandparent: Option[N] + if cameFrom.hasKey(current.node): + grandparent = some[N]( `[]`(cameFrom, current.node).node ) + else: + grandparent = none(N) + return D(graph.heuristic(next, start, goal, current.node, grandparent)) + + else: + return D(graph.heuristic(next, goal)) + +iterator path*[G: Graph, N: Node, D: Distance](graph: G, start, goal: N): N = + var frontier = initHeapQueue[FrontierElem[N, D]]() + frontier.push( (node: start, priority: D(0), cost: D(0)) ) + var cameFrom = initTable[N, CameFrom[N, D]]() + + while frontier.len > 0: + let current = frontier.pop + if current.node == goal: + for node in backtrack(cameFrom, start, goal): + yield node + break + + for next in graph.neighbors(current.node): + let cost = current.cost + D( graph.cost(current.node, next) ) + if not cameFrom.hasKey(next) or cost < `[]`(cameFrom, next).cost: + `[]=`(cameFrom, next, (node: current.node, cost: cost)) + let priority: D = cost + calcHeuristic[G, N, D]( + graph, next, start, goal, current, cameFrom ) + frontier.push( (next, priority, cost) ) + +## ======================================================================= + +proc parseInput(s: string): seq[seq[int8]] = + var lines = s.strip.split("\n") + result = newSeq[seq[int8]](lines.len) + for i in 0..= 0 and node[1] >= 0 and node[0] < grid.len and node[1] < grid[node[0]].len + if isOk: + yield node + +iterator neighbors*(grid: MyG, node: MyN): MyN = + var (y, x, d) = node + + if y == grid.len - 1 and x == grid[0].len - 1: + for i in Dir: + yield (y, x, i) + elif y == 0 and x == 0: + for i in Dir: + yield (y, x, i) + + if d == Up or d == Down: + for i in 1..3: + validatePos(grid, (y, (x-i).int16, Left)) + validatePos(grid, (y, (x+i).int16, Right)) + + elif d == Left or d == Right: + for i in 1..3: + validatePos(grid, ((y-i).int16, x, Up)) + validatePos(grid, ((y+i).int16, x, Down)) + +proc cost*(grid: MyG, a: MyN, b: MyN): int = + if a[0] == b[0] and a[1] == b[1]: + return 0 + + for i in min(a[0],b[0])..max(a[0],b[0]): + for j in min(a[1],b[1])..max(b[1],a[1]): + if i != a[0] or j != a[1]: + result += grid[i][j] + +proc heuristic*(grid: MyG, a: MyN, b: MyN): int = + return max(a[0] - b[0], a[1] - b[1]) + +proc run(s: string): string = + var r = parseInput(s) + + var start = (0.int16, 0.int16, Down) + var dest = ((r.len - 1).int16, (r[0].len - 1).int16, Right) + var pcost = 0 + + var currentPos = start + for pt in path[MyG, MyN, int](r, start, dest): + if currentPos != pt: + pcost += r.cost(currentPos, pt) + currentPos = pt + + return $pcost + + +var input: string = paramStr(1) + +var t0 = cpuTime() +var output = run(input) + +echo "_duration:", (cpuTime() - t0) * 1000 +echo output diff --git a/day-17/part-2/vanyle.nim b/day-17/part-2/vanyle.nim new file mode 100644 index 0000000..0bc858f --- /dev/null +++ b/day-17/part-2/vanyle.nim @@ -0,0 +1,161 @@ +from times import cpuTime +from os import paramStr + +import heapqueue, tables, hashes, options, strutils + +# A Star implementation, from the astar package. + +type + Distance* = int|float + Node* = concept n + `==`(n, n) is bool + `hash`(n) is Hash + + Graph* = concept g + var node: Node + for neighbor in g.neighbors(node): + type(neighbor) is Node + cost(g, node, node) is Distance + + Point* = concept p + p.x is Distance + p.y is Distance + + +type + FrontierElem[N, D] = tuple[node: N, priority: D, cost: D] + CameFrom[N, D] = tuple[node: N, cost: D] + +proc `<`(a, b: FrontierElem): bool = a.priority < b.priority + +iterator backtrack[N, D]( + cameFrom: Table[N, CameFrom[N, D]], start, goal: N +): N = + yield start + var current: N = goal + var path: seq[N] = @[] + while current != start: + path.add(current) + current = `[]`(cameFrom, current).node + + for i in countdown(path.len - 1, 0): + yield path[i] + +proc calcHeuristic[G: Graph, N: Node, D: Distance] ( + graph: G, + next, start, goal: N, + current: FrontierElem[N, D], + cameFrom: Table[N, CameFrom[N, D]], +): D {.inline.} = + when compiles(graph.heuristic(next, start, goal, current.node)): + return D(graph.heuristic(next, start, goal, current.node)) + + elif compiles(graph.heuristic(next, start, goal, current.node, none(N))): + var grandparent: Option[N] + if cameFrom.hasKey(current.node): + grandparent = some[N]( `[]`(cameFrom, current.node).node ) + else: + grandparent = none(N) + return D(graph.heuristic(next, start, goal, current.node, grandparent)) + + else: + return D(graph.heuristic(next, goal)) + +iterator path*[G: Graph, N: Node, D: Distance](graph: G, start, goal: N): N = + var frontier = initHeapQueue[FrontierElem[N, D]]() + frontier.push( (node: start, priority: D(0), cost: D(0)) ) + var cameFrom = initTable[N, CameFrom[N, D]]() + + while frontier.len > 0: + let current = frontier.pop + if current.node == goal: + for node in backtrack(cameFrom, start, goal): + yield node + break + + for next in graph.neighbors(current.node): + let cost = current.cost + D( graph.cost(current.node, next) ) + if not cameFrom.hasKey(next) or cost < `[]`(cameFrom, next).cost: + `[]=`(cameFrom, next, (node: current.node, cost: cost)) + let priority: D = cost + calcHeuristic[G, N, D]( + graph, next, start, goal, current, cameFrom ) + frontier.push( (next, priority, cost) ) + +## ======================================================================= + +proc parseInput(s: string): seq[seq[int8]] = + var lines = s.strip.split("\n") + result = newSeq[seq[int8]](lines.len) + for i in 0..= 0 and node[1] >= 0 and node[0] < grid.len and node[1] < grid[node[0]].len + if isOk: + yield node + +proc cost*(grid: MyG, a: MyN, b: MyN): int = + if a[0] == b[0] and a[1] == b[1]: + return 0 + + for i in min(a[0],b[0])..max(a[0],b[0]): + for j in min(a[1],b[1])..max(b[1],a[1]): + if i != a[0] or j != a[1]: + result += grid[i][j] + +proc heuristic*(grid: MyG, a: MyN, b: MyN): int = + return max(abs(a[0] - b[0]),abs(a[1] - b[1])) + +iterator neighbors*(grid: MyG, node: MyN): MyN = + var (y, x, d) = node + + if y == grid.len - 1 and x == grid[0].len - 1: + for i in Dir: + yield (y, x, i) + elif y == 0 and x == 0: + for i in Dir: + yield (y, x, i) + + if d == Up or d == Down: + for i in 4..10: + validatePos(grid, (y, (x-i).int16, Left)) + validatePos(grid, (y, (x+i).int16, Right)) + + elif d == Left or d == Right: + for i in 4..10: + validatePos(grid, ((y-i).int16, x, Up)) + validatePos(grid, ((y+i).int16, x, Down)) + +proc run(s: string): string = + var r = parseInput(s) + + var start: MyN = (0, 0, Down) + var dest: MyN = ((r.len - 1).int16, (r[0].len - 1).int16, Right) + var pcost = 0 + + var currentPos = start + for pt in path[MyG, MyN, int](r, start, dest): + if currentPos != pt: + pcost += r.cost(currentPos, pt) + currentPos = pt + + return $pcost + + +var input: string = paramStr(1) + +var t0 = cpuTime() +var output = run(input) + +echo "_duration:", (cpuTime() - t0) * 1000 +echo output