diff --git a/day13-input.txt b/day13-input.txt new file mode 100644 index 0000000..2561256 --- /dev/null +++ b/day13-input.txt @@ -0,0 +1,452 @@ +( +((0 (() () (10 6) 0) (5) 5 9) ((5) 7)) +((((7 10 2 0)) ((5) (10 1 7) () () 9) ((0 6 2))) ()) + +((5 ((9 3 4) (6 3 10) (5 9) 8) ((6 6 1) 5 10 1) 8) ((()) 3 ((3 3 7) 5 6) 3 6) () (8 (9 (7 10 2 3) 9) 10 (4 3 2 (7) 7)) (5)) +(((3) ((10 3 2 2) (0 1 1) (1 3) 2) (7)) ((8 1 9) 9) (2 (7 (10 7 6) 8 0 (7 7 10 8 6)) (10 () 5)) ()) + +((7 6 (())) ((() 8 5) (6 (1 4 7 9) (0 5 1 10) (6) 10) ((8 2) 9 10) (4 (2 9 3) 1 (4 9 6) 10)) ((7 (9) (4 6)) ((5 4) 3 (7 10 0 0 1)) 3)) +((6 5) (0 1 (5 ()))) + +((9) (7 (0 (1 9 4) (4 0 9))) () ()) +((6 (9 2 () (9 7)) ((5 10) () (6 0 1)) 1) (((10 1))) (0) (8 (() (2 2 2 4) (8 9 0) 9) (4) 7 0) (() 9)) + +((4 (3 (9 9 7) (0 8 1 7 5) (2) (1 0 7 0))) (() 8 () ((9) 9 3 9 1)) () ()) +(() (9 () (() () (7 4 4 5))) () (() 1 6 (1 (3 4 10) 2 (6 8 7 9 0))) (() (1 (1)) 0 9)) + +(((1) 10) ((6) 10) (() (7) 8 5 8) ((1 8 0 (7 0 8 4 6) 8) () () ((9 1 9) 7 (2 7 8 10) (9 1) (9 6 10))) (2 7 (7 (9 4 3 2 7) 3 8 (1 0 4)) 4)) +(((() 1) (7 7 (0 1 5 0)) 2) ((6 6 (9 5 6 9) () 9) (1) 5) (() ((7 7) (7 4) (1 10 4 10) 10 0))) + +((() (9 (3 2))) (0 ())) +(((3 (6 5) () 4) ((6) 9) (1 9 4 (8 2 2 4 6)) 9 ((10 7 8) (3 6 1 10 7) () (3) (10 10 4 5 7))) ((6 (10) (7 10) 4 (10 0 6 9)) 4 9 (3 1 (5 3 0 1) (4 6) 2) ((10) (6) (8 3) 2)) (((9 6 7) (3 1 1 9) 2 ()) (0 (9 5 9 5) 0 5 (4)) ((7) 3 4 1 (9)) 4 (2 2))) + +((10 4 ((10)) 9 ((6) 5 6))) +(((() 1) 3) (1 0 ((1 9)) 7) ((2 8 8 9) (7) 9 4) (((9 0 4 1) (6 10 4)) (3 10 8) 8)) + +(((9 7 5 4 2))) +((2 10 (10 (4 10 0 8) 8)) (10 (3)) (5 10 8 ((3) () (5 0 6) (6 5) 1)) (((7 6 8) (10) (10 3 10)) ((10) () 9 6 0) 7)) + +((() 3 4) (2 4) () () (((2 1 4 5 10) (2 9 6)) 3 ())) +(() (() 9 ())) + +((0) ((() 8 2 10) (() (7 8 9 4))) (2 ((7 10 4 0) 1 10) 10)) +((((0 5 3 8) 4) (5) ((0 2 2 8 0) 8 7 (4 8 10)) 1)) + +((((7 6 3 6 6) 7 7 6 9) (4 (7)) 7 ((6 7 6) 10 (4 5 10 9)))) +(((4 (8)) 5 (() 8 4) (9 (4 4 9 1 5) (9)) 4) (((6))) (10)) + +((6 0 (3 1))) +((((3 3 7 10) (8 7 8 0 4) (6 6 1 0 10)) (4 (8 6 1)) 10 5 (() (3) ())) ((0 1 8 4) (5) (0)) () ()) + +(((1)) (9 (7 1 5) (9 3 (1 4 5) 5) 7) (() 1) (((2 4 4) (5 10 2 7) 0 (3 2 3 0)) ((8 8) (4 5 0 7) (3 5 7 0 1)) (7 10 () 0 ()) 6 10)) +((()) (5) () ((6 1 (7 10 0))) ((6 (9 10 4 9) 7 ()) 2 (6) ())) + +((9 9) (10 8) (9)) +((((0 6 0) 2 (8 10) (5 8 0 5)) ((5 7) 1 () 6 0)) (5 6 ((9 4) 3 (9 5 0 9 6) 1 6) 6) (2 () ((4 5 1 9 2) () (9 5 7 1)) (3 (5 6 9 10 1)) ((0 7))) (()) (10)) + +((0 ()) () (((1 9 1) 7) (8) ((9)) ((10 9 10 1) (0 0 8 0 1) (10 4 5 6 9) (6 6 5) 5))) +((((8 7 8 9 10) (5 1 8 5)) (3 3))) + +((((9 2 9) 10 (10) () 8) ((7 10 7) 8 (4 8) 5) ((3 2 7 5 9)) 10 (9 (1) 5)) () (2) () (() (() 4))) +(((7 (0 5 7)) 6 ((4 6) 2 (7 9) 10)) (9 10) ((8 10 1) () 0 ((0 10 3 3) 0 0 9) 1) ((8) 9)) + +((((2 7 1 2) 5 6) (9) 8 ())) +(((10) (2 3 (6 2)) 2) (10) ()) + +(((6 3)) (5) () (((0 3 6 1 3) 5 7 2 6) 3 (1 7 (6 2 7) (7 7)))) +(((10 () 4) 4 (10 (0 5 1 0 10) 10 5) () 10) (() (2 (4 3) 5) 5 3) (3 (7) 3 ((7)) 8)) + +((0 3 ((5 3 10 10))) ((9 (8) (7 3 2) 6)) (1) ((6) 3 7)) +((((1 4 7 0) () 9 (5 2 4 3) (1 2 5 4 10)) 8 0 (4) ())) + +((10 3 (5 2) ((4 8 4 10 6) (6 6 1 6) 8 5 0)) (0 ((1 10) () 2) 4 ((4 9 6)) 10) (3)) +(() (((5 8) (2 10 2 2) (5 9 3 6 10) (8 6 8 4 7)) 10) (9 7 (2) (2 9 (3 3 1 10 10) 4 ()))) + +(((4 9) (10 () (7 3 5 6 2)) 2 ((8) 0)) ((0 (1 2 5 7) (10 0 3 9 7) (8) 7) 9 (3 (2 2 3 3 0)) 6) ((3 10 6 (7 4)) (2 0 1 5 10))) +((3 10 (4)) (8 (8 5)) (0 2 (1)) ((9 (4)) 2)) + +((0 1 (9) 9 6)) +((3) () () ((5 6 (2) 1) 0 (8 (3) 1 (6)) 3 (1 10 (6 9 0)))) + +((10)) +(((0 10 (6 1)) 7 5 ((8 2 7 3) (2 8 1))) (0 ((8 1 6 2 0)) (5 (8 0 10 7) (6) 2 1)) (7 1 3) (8 ((8 10 10) 9) 3 8 1)) + +((6 0 10 2)) +((1 (8 ()) ((8) (3 8 10 1) (10)) 2 (1 7 3 (10 1 4) 10))) + +(((6 7 10 (4 8 9 10 8)))) +((9 (() (6 3 6) 3 7 (0 3 9 6)) 6)) + +(() (((2 5) (3 3) 9)) ()) +((6 10) ()) + +(() ((3 (7 0 10 5 10) (2)) (8) ((10 9)) 6 ()) (2 (() 9 2 10) 2 8) (6 9 0)) +((10 () () ((3 7 9 0) 6)) () ((4)) ((1 4 6 4 (10 1 0 2 2)) ((3 5 4)))) + +((((10 4 0) (8)) ((5 0 2 9) 9 (8 1 10 10 4) 10 4)) (8 (7))) +((((7 3) 6 (0 7 7) (9 4) (4)) ((7 4 7)))) + +((() (9) 4) ((2))) +((9 ()) (2) ((8 9 5 7) (() (10)) 7 ((8 1 6 3 8) (1) (6 8 10) 2 (8 5 7 4 6)) ())) + +((((9 2) 4) 7 ((5 7) (0 2 4 10 7)) 9 6) () ((5) (5 0)) (7 8)) +(() (10 (() () 8 () 4) 0 () ()) ((1 (6 9 6 7 6) 9 ()) 3) ((4 () () 5) 1) (0 () 2 ((9 8 6 7)))) + +(10 7 3 6 3) +(10 7 3 6) + +((((1) (2 9 3 7 1) (0 2 10)) (4 3 3 9) 7)) +((((9))) (5) (((8 9 5 7 2) 5 10) 9)) + +(((6) ((0 10 8 6 2) 2 1 1 (3 7)) 5) ((0 (8 3 4 6 7) (1 8 3 3 3) (5 4 8 9 4) 5) 2 2) ()) +(() (1 ((4 8 6 6) (4 10 3)) (() 8 3 (2 4 4 1)) ((4 2) 9 ())) (((9) () (9) 7) 9 ((6 0) (8 1 7 4 0)) (10)) ((0) (9 6 5 (9 0 3) (1)) 1 (4 (10 9 10) 9) (10))) + +((0) ()) +(((9 1 7 10 (6 6))) (((6 3 2 2)) (5 9) 10 5) (((0) 3) (7 10 0) (6 (2)) (6) (2 (2 4 6) (5 6)))) + +((6 8) () (() 9 2 10 ((7 8 8 6))) ()) +((3) (((8 1 9 4 10) (1) (10)) 6 10 ((4 6 2 7) 0 1 (3 8 6 9 6))) () ((() (5 9 3 9 3) (4 8 5 3) 3) (8 8 2 6) (2 10 3))) + +(((0 () (6 1 3 1) ()) 4 (0)) (2) (6 6 6 ((1 0 2 9))) (7 7) (((7)))) +(((2 5 5 3 (5 0)) ((6 7) (3) 1)) (((8 10 7 5 1) 6 (8 10))) (6 0 6) (3 ((10)) 4 4 9)) + +(() (9 ((8 9 10 0 8) (5 6)) 8) (((8) (4 8 9) 10) 5 1)) +((9 2 ((7 9 8 9 6) 8)) (((7 3 1 8) (10) 7 (10)) 6 (() 5 6 6 1) (0 7 (10 4 3)) 7) ((0 9 () 9 (8 6 8)))) + +((3 4 7 7 0) ((10) 5 ((4) (10 7) (8 5 5 7) (8)) ()) ((10 (1 0) 0))) +(((7 2) ((10 6 8) (7 7 6 0) 10 (10)) (10 9 9 4 (0 1 1 4 5)) 8 (0 4)) (() 7) (((7 1)) 5) (8 0 2 ((7) (0 3 6 10)) ()) (7 1)) + +((4 2 (10 2 10 7 0) ((7) 1)) (6 () ((3 0)) 3 8)) +(() (((6 8 0 2 1) ()) ((8 4 6) 2 (10 2 10 5 5)) (7 () (10 6 0 10)) 3 (1 4 (6))) (8 (8 (10 4) 10) (9 8 5 1 6)) ((() 4 0) 1) ((6 (10)) ((2 5 8 0)) 1 8 (() 3))) + +((() ((0 7 7 1 10) 9) () (8 1))) +(() ((10 2 (2) 9 (0 2 5 9 4)) 8 10 (1 (7 9) (5) 10 (3 7 0 7 8))) () () (((10 10 2) () (2 6 6 9 5)) (3 (10 1 6) (9 5 4 3 5)) 2 (2 3 3 (4 10 7 3 4)))) + +((5)) +((7) (2 (6 (2 4 5 6) 2 9 (4)) 7 6) (()) (7 ((10 10 3 7) 9 (9) 8) 5 () 10) ()) + +((4 4)) +((5 0 9 5) (() 7 ((1 4 9) (10 2 3 9 1) () (3 8 5 6) 0)) () (1) (((7) (8 3 10)) 1)) + +(() (0) ()) +(((5) 3 (() (3 10 7)) 0) (6 7 4 3 6) (3 5 ((3 1 0 4))) ((3 (7) (7 1 8 6 1) 7 ()))) + +((((3 1 0 3 5) 3) 9) () (() () ((4 3) (6) 4 ())) (() 10) (10 (8))) +((9 (6 7 (7 10 4 8)) 1) (9 2 ((6 1) (10) 5 10 8) ((2 7) 5 8 (1 7 1))) (() 4 ()) (((1) 9 9) () (8) (()) 3)) + +((((1 1 8 4) 5 () (7 8 7 5) ())) (7 ((1 0 7 8 10) (0 5 7 3 6) 4 1) 9 3 ((4 8 8 1 7) 7)) (9 1 (2) 10 10) (((7 7 7)) 2)) +((()) (10 (3 () (7 0) ()) 5 ()) (0) ()) + +((2 3) (8) (5)) +((((9 8 4) 0 6 10 (2 0 5)) 1 (8 ())) ((5 6 1))) + +((6 4 10 1 4) (((10 7 4 9 7) (7 0 5 7 5) 6) 7 6 (0)) (((7 3 10 2) (9 4 1 3) ()) ((4 7 10) 9 0 (5) 7)) ((8) ((0 10) 0 8) 0 6)) +((4 8)) + +((9 ((9 1 2 5 4) 0 (4 1 2 0) ()) (1 (3 6 9 9) 1 (2 9) (9 5 8 1)) 2 4) (8 10 ((3 0) (0 8 1 10) 6)) ()) +((((3 3 8 8 7) (3 8 2 3) 8 (3 1 5 9) ()) ((7 9 4 2 3) 6 5))) + +((1 (2 (2 4 8 8) 5 9)) (8) (((10) ()) 1)) +((((10) (0 5 1) (4 1 3 8) 3 (0 8 5 10)) (() (8) 0 8) 3 8) ((8 5 (7 2) (1 1 8 6 1) (0 5 8)) 4 2 7) (() (4 8 (2) 6 3) 6) () (1 ((7 3 0 7 10) 0 1 4 8))) + +((() 2 (3 (7 7 4 3) (9 5 3))) ((() 2 6 ()) 8 (3 7) (2) 9)) +((((1 0) 2) (2 3) () ((6 1) 0 () (10 8 0) (3 0)) 1)) + +((() 5)) +(((4 7 (10 10 5 9 2)) 10) (0 ((1 4 1 4) (3 7 2 8 0) 6 () 1) (() (0 4 6)) ()) (()) (2)) + +((((5 0 3) 3 6)) (6 (0)) ((0 (7 7 7 1) (6 3 7 3) (9 8) 3) 9 (3 (9 10 7 6 8) (0 3 2 0) 8 (5 4)) 8 ((9 4) (1 5 4) (0 1 1 4 5) 7)) ()) +((3 0 3) (6 ((0 6 5 6) (3 2 2 4 10)) (() (8) (9 8 7) 2 2)) (() 7) ()) + +((2 9)) +(((3 ()) 3 0) () (() () (3 0 2) ((5 0) (7 8 1 10) (6 5) (2) 3)) (((9 8 2 8)))) + +((3) (10) (((8 4 6 5 1) (0 2 4 0) (2 2 1 4 0) 2) (5 (3 0 0 1 10) (6 8 3 7 6) 7 2)) ((6))) +((10 4 ()) ((7 2) (9 (9) (6 3) (9 1 10) 5) 6 (() 10 (0) (7) (2 7 3)) 2) ((1 () 6 (8 5 0 3 2) (8)) ((1 3 2 1 9) (0 10) (3 0) (10))) ()) + +((2 () ((2 3) (5) (4))) (1 ((1 7 9 5 4) 1 () 3)) () (8 0) ()) +((() ((6) 9) (6 (4 0 6) 7 9))) + +((5 (() (1 1 9 3 9) (4) 9 6) 7) (6 () (10 (9 7 5) (2 2 6 7 6) (0) 4) (())) (() 9 10 (() 5 (1 5 0 4) 9) 1)) +((0 (() 5 5 1 (7 5)) () 0 10) (((1 5 5 6 7) 0 (0 3) (6 4)) 0 3 6) ((1 (6 4 2 10 9)) 9 3 (8 7 (7 7 1) 5 6)) (9 0)) + +((((7 4) 5 (6 6 0)) (1 (8 1 6) 9) 3 ((0 10) (0 3 8) (7 3 5) 9) ()) (9 9 ((1 7 10 0 0) (2 1 1 6 4) (7 1) () (7 7 5 9 5)))) +() + +(((7 6 (1 8 0 7 7) (3 7 8)) ((0 6 6 2 1) 1 (5 2 5 2 8)) (() (5 0) 0 6 (9 1 2 0 0)) 4 3) (((10 9)) 10 4 (1 (10 7 1 3))) (2 6 4) (5 1 ((2 5 3 8 7) 1 7 (7 2 6 7) 1) (0))) +(() (3 10) (1 (() (2)) 5 9) (((3)) 8 0 ((0 7 10 9) 9) 2) (5 5 ((2 3) (7 7 9) 9 (4 4 0) 5))) + +((5 5 8 3)) +((8 4 ((6 1 7 2) (9 9 9)) ((8) 1 () 1 0) 9) ((() (9 10 9 2 5) 3) 6) (() 8) (((3) (5 10 7)) () (7 3 0 4) (6))) + +(()) +(((2 (4 10) (4 5 5) 1) 8 0 8) (2 ()) (((7 5 9 0))) ((10 9 (3 0 0)) () 6 6 3)) + +((10 8 0 (2) 8)) +((4 1) ((1 (8 6 10 1) (6 6 7 4 4) () 4) 4 0)) + +(() (6) (((2)) 7 7) (() () (() (5) (6 6 0 2 9)) 4) (0 () 8 () 6)) +((4) ((5 (2 2 7 10 0) (10 8 6 6 6)) (() (5 3)) (2 (9 5 2)))) + +((8 ()) (((6 2 8 3 3) 7 7 0) ((8) 3 10 0) 6) (4) (((4 2 2 0) (8) 5 2)) ((10 1 6) ((4 2)) 10)) +((() 10 8) (0 9 8 ((7 5) (3 6 7 4)) 4) (6 2) (2 (4 (10 8)) 1 (3 (9 7 8 3) 4)) ((4 (3) (10 7 2 9 10)) 0 1 9)) + +((3) () ((10 10 (3 7 2 9 7) 8) 4 8 6) (4 () 6)) +((0 5 (4 5 () (9 2) (8 2)) ((4 4) 3) (6)) ()) + +((3 10 8) (((1)) (2 () 1 4 (5 7 3)) (10 (7 6 8) 3 4) (10 8)) (() ((2 9) ()) 0 8) (8 6 2) ()) +((5 6 (10 5 ()) (5 5 0)) ((() 9 (8 1 10 4)))) + +(((() 4 3) ((1 6 1) 0 4 3 ()) (()) ((7 6 2 2 0) 8 (0) 10) ()) (((0 1) ()) ((2 1 6)) (6 0) 9) ((2 0 3 (10 10 10 3 0)) 2 (0 (4 6 7 6) 2)) (((3 2 9) 3 6) 3 9) (6 ((3 3 6 8) 0) 8 ())) +((10 (4) 10 0 1) ((2 (10 10 0) 5 8) 0 6 7) (1 8 ((10 9 10) 9 2) 3) (2 10 (0 8) (8 2 1)) (() (10 6 0 5 (4 6 7 3)) (0 9 2) (2) 0)) + +(((5) (5 6)) (0) (9 (4 (5 10) (10 3 8 9) 6) 1) (0 8) ()) +(((0 (0 9 9 1 1)) () 1 (10 ()) 4) ((5 () (1 4 6 5) ()) ()) ((3 () 0)) (4 (() (1 7 8 1)))) + +((((9) 9 (6 6 7 4) 0) 7 ((4 1 7 2) 0 (10 10)) ((8 4) 8 7)) (() ((4 9 0 6))) (5 (() 8 (5) 10) 4 (7 7 (8 10 6 0) 8))) +((() 4 1 ((6 1))) (8 ((10 0 4) (5 3 7 2 0) 4) 9) ((6 (7 6)) 5 (9 (4 1 6 10) (2 7 8) 9)) () (0 ((9)) 6 (2 10))) + +((() 6 () 1)) +((8)) + +((() ((10 3 5 1 1) (5 4 4 6 1) () (0 0 7 10) 7) ((4 7 2 8 1)) (2 (5 2 7 2 4) (7 0 7 9)) 1) (((1) 0 (6)) ((7 0) 10 (7 5 9)) ((3 0 2) (4 4) 7 3) 4 6) ((4 (6 0 3)) 9) (4 (8 (8 0 9 8 6))) (4 ((7 7 4) 2 () 5 3) (8 9))) +((8 8 1) (() ((1) (0 7 4))) (8 ((5 6) 7 (4 7 4) (1) 3) 1 (7) 1) (3) (2)) + +((8 ((2)) ((6 2) 7)) ()) +((2 9 2 0) ((3 5 3) 5 9 (4 3 5)) ()) + +(((7 () 3 8) (7)) (10)) +((3 3 4 (() 9 (10 5 1 1 8) 6 9)) ()) + +((7 4 3) (((6 2 5) (5 5 9 8 9) (9 7 6 9 3) (9 1 4 2) 7) 7) ((10 2 (7 2 3 7 3) (3 9 3 8)) 8)) +((((7 0 3) 3 (5 5 1 2 6) (2 6 5) (9 0 8 8 6)) 2) (6 7 ((0) (5 2 0 5 0) 6 (0 2 1) (1 7 6 1))) (((8 7) 1) 5)) + +(() (0 10 ((9 3) 6) (4 2 (10 4 1))) (() () (4 (6 6 5) 1 6 (3)) (2 3 6) (7 ()))) +((8) ((2 (5 7 5) 7 (2) 6) 6) (10 (9 1)) (3 5 ((10 9 1 2) (4 4 8) 2 8) 7) (1)) + +((((4))) (() (7 (8 1 10) () 10)) ((1 6 (10 7 9) 2 10) 4 7 ((7 3 5 5 6) 4 (3 10 5 6 5))) (((9 10 1 10) (10 6) (0 1 8 2 6) () 10) (() 7 (3 9 3) ()) (7 (1 0 5 3) (9 1 8 6)) 0) (2)) +((0 (() 8 10 () 8) ((3 9 4 8 8) 5 (3 6 9) (4 4 1 6 8) (10 8 9)) ()) (10 ((2 2 4) 4) (2 (9 0 9) (9 8 3)) 9 ())) + +((((3 3 2) 2 1 2) ((7 8) (10 2 3 10) 4 ())) ()) +((((1 3) 8 0) ((3)) () (10 3) (())) (10 ((2 7 8 2 0) (5 7 3 4) (0 5 0)) 10 7 4) (() (10) 4 ((9 0 0 3 1) 1 0 4)) ((1 (6 7 5 1) 9 (6 8) 10))) + +(((5 (4 0) 4 (8 2 1 7 3)) 7) (5 10 4 9) (8 2 (() (2 5 0 7) 8 3) 3 1) ((5 (0 10 10 2) (7 5 6) 0 4)) (5 ((1 7 5 9 10) () (4 4 3)))) +((((8 5 9 6) 3) () ((7 0 2 4 1)) 9 6) (4 0 8 3)) + +(() (6 (7 (7 6 4 10 10) () 0 ()) (1) ((1 4 5 9 8) 6 (6 4 2) (5 3 7) 10)) (6 (2 3 10 (0 6 9 10)) (0) ((10 2) 4)) ((() 1 0 () 7) ((0 4) 5 (9 3 7 10 1) 2) 0 4 4)) +((0 10 8) ((8 9 (1 10 9 3) 2 1))) + +((5 4 4 10) (()) (4 2 (3 6 10 10 (5 7 9))) (0 4) (9 7 9 4)) +(() (1 (()) 1 0 (10 ()))) + +(8 8 4 6) +(8 8 4 6 10) + +((((6) 1 6 4 3) 9 () ((6 3 7) 3 (5 2) 0 (10 1)))) +((7 5 5 7) () ((8) 3 9 8) (((7 10) (3 1 4 0)) (7 8 (3 1 10) (4) (7)) (()))) + +((((5 4 1 10 8) 9 (2 0 2)) ((7)) (() 2 (1 1 5 1 7) 9 (5 9 10 1 4))) ((9 6 3)) (5 (5 7 () 10 (8 1 0)) ((10 5 10) 1 10 4 (4)) 10) (1 3 9 ((0 7 7 2) 9 (4)) (0 (0 2 7 5))) (2)) +((((9 1 2) (8 0) 10) 10 (() 6)) (7 7 0 4) ((2 (4)) () () 3 ((3 1 2))) ((5)) (6 5)) + +((((1 7 5 3)) 0 6 ((3 8 0 9 0) () (6 7 10)))) +(() () (9 (0 8)) () (((0 7 7) () (2 10 2 7 6)) ((7 8 5) 5 (3 1 9 0 8) 8) (7 (8 10 6 3) 0) ())) + +((6 4 3 ((7 6 10 3 8) (6 2) 1) 7) (((4 5 3 0)) (3 (1 9 10) 2 10) 6 5) () ((10) 8 (9 7) 2 ())) +((((9) 4) (3 (7 7 6)) () 7 (10 7))) + +((2) (((3 4) 2 (9) (5 8 8 0 2))) (5) (1)) +((((2) 7) ())) + +(() (() 1 (6 (9 1 2) () (6 7) (0 7 4 3 8)) 7) (((1 7 8) 9 1 (9 2)) ((5 2 10) (6) 4))) +((10 (2 6 5 9) ((4 10 0 10 4) (8 3 3 9 7) (5 0) 8 9) 5 10)) + +(((2 0 (2 1 0 0 5)) 10 () 0 10)) +(((3) 5 (5 (4 2 2 8)) 1 (6 ()))) + +(() () (6) (() (6 0 (3 8)) 5) (6 2 1 6)) +((5 () 6 9 9) () (4 9) (2 (10 2) 8 0 (8)) (((5 2 10 8 10)) (6 10 (8 9 5) () (6)) 7)) + +((5 (10 0)) ((7 6 (6 0) 7 (4)) () 6 (5 (7 0 6 3)) (4 () 4 (1 1) 9))) +(() (((7 8) (2) (9 3 9) 8 8) ()) (((2 2 4) (2) 1 1) (4) (6 2 1)) (((5 1 0 2 0)) ((1 7 5 7) ()) () 4)) + +((((4 7 2 8)) ((9 3 0 7) 5 5) 1) (((2 9 2))) (((4 8 8 10 7) 4 (10 8 4 3 7)) 3) (((8 1) (10 8 2 7 8) 5 (5 8 6 9) (0 9)) 5 0) (4)) +(((8) ((3 2 0 1) ()) (0 () (7) (4 5 7)) 10) (1)) + +((((10 4 9 6) (5 5 4 5 4) 1 (1 1 5) 8) (7) 7 (0)) (((2 8 5) (0 5 2))) ()) +(() ((() 8 (2 5 3 9)) () (4) (10 7 8 8 ()) 8) ((7 2 (0 0 0 5 1) (10 2 10 5)) 6) (((3 5 3 9) 10 () 9) ()) ()) + +((8) ((3 (0 2 8) 8 ()) ((3 9 2 4) 1 (9 10 6)) ((7 4 6) (3 7 4) () 2) 8) () (2 (2 6))) +(() (((5 6 2 4) (1 9 10 1 10) (1 6 0 7 3)) ((10 1) (4 7 4 0 1) (3 4 4 8 7) (5 10 4 0 8)) 9 (2 9))) + +(((7 8 6 8 (2 3 7 1))) (9 (5 8)) (4 5) ((())) (((0 4 8 10) 3 5 7 2) 6 (() 8 7 6) () (8 1))) +(((() 8 (1) (6 3 8 0 3) 10) (() ()) ((7) 2 () 6 ()) 3) ((2 () 4) 7 ((6 4 1 9) (4 4 1 5) (6 7 1 3) (10 1 0 8))) ((1 0 ()) ((3 5) 1) (6 7 4) (3)) (6 () (10 (8 9 3) 1 (5 3)) ((1 3 4 9 8)) (9 10 (5 1) 1))) + +((0 ((7 2 1)) 0 (9) 9) (() ())) +((6 10 5 9 (() (0 9) 7))) + +((7 ((4) 4 (0 6) ()) (4 3 1 5 1) (6 (10 10 1)) 0) () (((10 0 10) 4 9) 7 2 2 7) (((6 10) (9 4 9) (1 9 10 7) (7) (4 3 3 7)))) +((0 9)) + +(((() 5 () (4 8 1) 8)) (0 4 (10 (8 5 10) (7 8)) ((7 3 7) (2 6 6 6) () (8 1))) (4 () ((9 1 2 1 5) (10 4 5 10 3) 8))) +((10 (4 (6))) ((2 (0 4 3 4 4) 4) 0 3)) + +((() ()) ((3 1 (3 4 10)) (1 (3 3 5 4 8)) 10) (2 7 4 ((1 4 2 8) (5 10 0 7) 2 (7 2) 1)) (() ()) (((4 0) 8 4) 9 6 ((9 2 3 3)))) +(((6 5) 5) (1 7 6 5) ((10 (0 7)) 8 0 5) (((4 1)) (() (2 6 7 4 3) 6 (9 7) (0 0)) ((6 9 9) (2 4 1 2) 0 6) (3))) + +((1 ((7 10) 5 10 5 (3 2 3 7)) (2 10 2 0) 10) ((8 9 (4 8) 8) ((5 7) (1 4 8 10) 1 5 7))) +(((5) (9 (8 4 10 3 10) 4) 9 4) ((2) 9) ((4 5 0 (7) (0 1)) ((0) (6 2 3 10)) 9 5 ((2 7))) ((0) (()) (()) 9 1) (8 (0 (9) () (2 4) (10 6)) 2 7 4)) + +((2 (1) 2 2 4) () ((9) 10 ((4 7 10 2 2) (5)) 2) ((0 (3 7 8 4) () 10) 2 (() (4 6 2 10 5) (7) 5))) +(() (10 10)) + +((() 9 (7 (1) 2 () (10 3 6)) 2 10)) +((1) (8 10 ((7 1 6) (6) () (2)) ()) ()) + +((((2 6) 10 10 (10 8 8) 3) 9 ((8 9) 2 8 (0 2 2) 5) 4)) +((2 8 0 0) (((7 8 8 7 10) (0 0 2 5 0))) (8 ((10 1) () (7 0 1 6) 5) (() 0) (6 4 0)) (4 (8 (3 2 0 4 5)) ())) + +((())) +((0 ((5 3 4 4 2) (5 7 7 7 1) (3 1 10 3 5) 4 0) (9 7 10 (4 3 4 0 3)) 7) () (((1 10 9 0 9) 8 (2 6 0 10 7) (7) 0) 5) (()) (((6 1 4 9)) 6 ((10 8)) 4 2)) + +((10 (4 (5 3) 4 1) ((0 5 1 1) 4 10 (8 6 5 1)) 0) ((5 2 ()) 4 10 (()) 7)) +(() ((5 0 0 7) 4) ((()) (1 ()) (6))) + +(() (((4 7 7 6 10) 5)) () (5 10 ((3 0) (5 1 9 0 3) 9) 3)) +((() 1 2 2 1) ((3 (0)) 1)) + +((2 4 (7 1 (2 1 10) 10) 7)) +(() ((4 (1 8 10) (0 5) (4 7 6 3 9) 1) (1 8 (4 10) 8 (6 1 3 1)) ((2 7 5) (7 10 9 2) 2) (8) (0)) (10) (((0 5 5 4)) 9 ((8 0 1 0 9) 4) ((10) (4 1 2 0))) (((4 4 3 1 8) 9 3 (5 3)))) + +((() ((7 8 8 9) 2) (3 9 6) (3 8)) (3 1) (3) ((0 0 2))) +(() ((6 8) (()) () 9 (8 () 7 7 9)) ((7 0 0) (() ()) (7) ((7 0 6 1 10) 8 (1))) (3 5 () ((1 10 0) 7 (9 7 3 10) 2) 8)) + +(((0 (5)) 4 5 1 ((3 4) 1 (5 4 7 5 1) (1 8))) (7 (1 8 8 (3 2 8) 9) () (9 7 5)) (() 1) ()) +((((1 2) (2 10)) 9 5) (((7 1 9 9) 5 0 () 7) 2 9) () (2 (3 3 (3 8 0 8 1))) (1 ((6)) ((7 10 5) 6) ())) + +((6 7 6 (() (0 4) 6 2 (1 6 9))) (5 (1 (7 5 10)) 8)) +(((3) 9) (2 9)) + +(() (8 ((9) 7))) +(() ((8 10 7 9) 8 ((4 6 4)) ((5 1 2) 4 (9 3 5 1)) 5) (() 5 ((7 5) ()) (3 0 (4 2 8 0)) 5) ((4 2 7 6 5) (3 1 5 7 (6)) 6) ((9 5) (2 (2 1) (0 9 1) 3) ((10 6 1 1) (0 9 7 6 10)))) + +(() ((6) 6 8) (8) (3 (1))) +(((6 () (4 0 10 4)) (7 6 2 (4 1 2))) (((6 1 1 7))) ((10 10 1) (10 4 1 10 (3 2 0 3)) 5 (() (0 10 9 2))) ()) + +((() 4 (5 (8 10 4) 2 4 (7 8 3 4)) 8)) +((9 (5 (4 9) (8) 4 (5 10 10 5))) (5 ((0) (10 4 10 2) ()) 5 0)) + +(((0 10 7 1 (4 6 2)) ((9 9) 5 ())) (1 ((10 2 0 7 0)) 5 7 ()) (3 (() 8 () (7 3 4 10 1) (5 6 3)) 2) () ()) +((1 5) (6 6 7) () (((9 9 7 2) 7) (0 0) 6)) + +(() (() 6) (2) (2 9 0 9)) +((3 (2 (6) 10) (() (3) 8 5) 10) (() ((0 8 2 7 1) (6 5 1) 8 (0)) ((8 4 2 8) 0) (2) 4) () (10 (4 (4 2 2 1) 2 0 2))) + +(() () (() (0 8)) () ()) +((((5 7 7 2) 7 5 2 (10 2 0 2 1)) 2) (6 10 2 ())) + +(((1) (8 4) ((3 7 5 2 5) 5 4 (0 4 7 0) (1 5)) 7 ((9 5 3))) ((9) () ((5 1) 5 1 6 1) (0 (10) 6 8 ()) ((9 5) (8 0) (7))) ((6 9) ((3) 6 (2 1) (0 3)) 9 () 4) (4 (7 (5 4)))) +((()) ((1 8 (4 8 7)) 7) (()) ((2 (2 9 5) (2 6)) ((3) (0 10 7 9) (2 4 1 3 6)) 9) ((9 9) 2)) + +((10 ((2) (7 8 7 7 9) 3 (6 4 6) 6) ((10 8 2 7) 1 (8)))) +((((4 7 4 0 1) 6 (9 6 8 1 3)) (() 9 ()) 3) ((9 () 5 () 3) ((1) 6) 3)) + +((10) () (4) (() (1 5 (5 5 6 6)) ((1 3 7) (8 6 0 3) (2 9 1)) ())) +((2 1 (6 (8) 2) (6 (9 2 0 7 3) (8 10) 2 ()))) + +((((1 5) 10 (4) 4) 7) ((6 3 (4 1))) (4 4 () 6)) +(() (0 ((5 6 7 10) 0 (6 10 2 4 7) 4 (6 10 10)) (1 0 0 (3 7 3 6)) (3 1)) (((9 3 9))) (0 (7 8 9 (4 2 4))) (0 (2 1))) + +(((1 1 () 10 (6 4)) 4) (3 6 9 ((8 9 3 1 7) 1 0 7 3))) +(((1 (8 8 4 5) ()) ((10 8 3) (3) (7 2 4 6 1) 8 (6 10)) 2) (0) (4 (2 (5 5 1 8 9) 9 8 3) (7 7 9) 7)) + +((10 8 7 (8)) (() ((8 8) 3 9 (10 0) 3) (8) 0 (0 (9 3 3) 8)) ((6) 3 10 7 (5)) (10) (() ())) +(((3 9) 8) (((3 3 2 8 8) 10 9) 6) (((4 2 4) (3 1 5 4 2) 4 1 1) 3 4)) + +(() (6) (4 ((1 2 0) (2 10) 10) 8)) +(((7 2 7 0 2) ((4 4 0 1) 6 () (2 8 1))) ((0)) ((6 (9 6 9 3))) ((3 (1 5) (8 9 2 9) 7) (() (4) 10) 1 ((4 7) 0 10 6) ())) + +((8 2 ((0 7 3 0 0) 3 2) (() (10) () (1)) (8 () (6 6 2 5 5) (6 9)))) +(((9 (7 0 1 8) () 2 ()) (5 2 (2 7 1 9 10) 5 (0 7 8))) (5 1 ((6 10 5 5) (0) 4 0 (2 5)) 0 6) (7 7 (3 2 1)) (((9)) 9 (() (3 6 8 5 10)))) + +((((9 1 5 10) 9 5 (1)) ((8 2 3) (4) (8) (4 4 5 9 5)) 8 5 9) (5 (3 (2 4 5) 3 8 2) ((3 0) 1 (9) (10 1))) () (2) ()) +((((2 1 5 9) 5 (5 0 5 9 1) 8 4) 6 1 4)) + +((((0 5 0) 0 1) ()) (((6 6) 8 (1 4) 7 (7 4 2)) () ((7) 9 10 (0 10)) (4 4 ())) (((0 5 0) 6) 0) (10) ((4 (10 0) (7) 3 (1 1 9 10)) 6 () 3 ((0 8 8 2 5) (4 6) () 10 9))) +((()) (((0 3 7 5 8) 6 6) 10 (() (7 8 10 3 9)) 1 ())) + +((2 () (5 (9) 10)) (5 (()) 3 (5 3) 2) ((() 0) (8 (5 10) 8 1))) +(((1 7 (0 4 1 2) (10) 9) ((3 9 2 10) 0 () (8 0 5 7 0)))) + +((5 () () 8)) +((5 (6 ()) ((3 0 4 4) (4 1) (1 3 2 5) 10 2) (()) ()) () (2)) + +((2 3 4 ((6 1 5) 0) 10)) +(() ()) + +((10 () 5 4 ((1 5) 1 (5) 0))) +((1 ((2) 9 ())) (() 3) (3 8 (6 1)) ((1) (10) 7 8 3)) + +(((5) (0 6 (5 7 9) 6) ())) +((() (4) 10 (())) (2 ((10 9 1) () ()) (() 7 10 (7))) ((3)) (((4 2 5) 1 (3 6 0 1 3)) 0 ((4 4) (5 8))) (0 ((6 2 10) 7 4 () ()) (8) 2 (10 6 (8 4 2)))) + +((7 (5 7 2 (8 0 2 0 3) (7 5)) ()) () ((() (5 6 3)) ((5 4 1)))) +(((2 (9 5 3)) 1) (((10 9 5 2) 5 6 () ()) 8 5 9) (7 (() 5))) + +(((10 (3 10 0 8))) ((() 8) 1)) +((4) (()) ((() 1 (7 3 1 4 0)) ((8 1 7 3) (3 8 3 7 6) (7 0 1) ()) (10 10 4 () (6)))) + +((7 ((1))) () (9 4 () ((5 9) (5) (3 4 4 2 4) 10 (7 0 6 1 6))) (() 2)) +((7) (6 (6 0 (5 8 5 2) 10 (9 8 10 8)) 0) ((7 (3) (0 4) (7 0 6 7)) ((8 6 2 9) 4) 7) (5 ((2 8 8 6 1)))) + +(() (10 (9 () 5 8 3) ((10 0) (2 2 9 8 10) (5 7) (2) 2)) (((3 10 6 1 4) (5 6) () 6 (6 8 6 0))) () ()) +((8 10 (6 () 2 4 6) 0 ((0 5 6 3) 5)) ((8 1) 2 () ((6 10 7 4 4) (8) (8 5 10)) (3 5 9 6)) ((9 (6)) ((10 4 2) 3 4)) ((3) 3) (() 5)) + +((((0 4 0 1 5) (0 10 6 10) (10 4 10) (0 2 5) (0 10 6 8)) (5 7) ((7 7 10 10) (3 0 2) 7 ())) (3 ())) +((() 0) (0 ((8 10) 3 0 10)) (5 ((5 3 5 7) 1))) + +((2 (6) 8 7 1) (((10 9) (9 10 6) 5 (8)) 6 (9 (1 9) (1 9 4 8) 6) ((9 0 8 4) (7 2 8))) (3) (((5 1 1)) (9 (0 1 3) 1 (8 5)) 7 8) (4 ((6 6) 2 4 (9 1)))) +((9 (8) () 2 2) (0) (4 (2 1 (6) () 10) ((1 5 8 0 10) 1 (1 8 10)) (10 1 (4) (8 5 8 5 5) 4)) (10 () 0) (6)) + +((((1 1 10) 8 1 (8)) (7 6 4 3) 4) (((3 2 4) 7) (10) 9 ((0 2 1 0 3) 10 2) (() (9 0 2 4 8) 1 7 0)) (((0 0 0) () 8 (7 7 7) 9) ())) +((1 (() (2 3 4 3) 3 (5 0 4 3 7) 1)) (0) () (6) (((8 6 0 3 9) 9 8 (10 3 10 10 6)) (3 (6 3 5) (4 0 7)) 8 0 (6 4 (6 6 4 8 4) (6 7 10 1 3) 9))) + +((8) () (((3 7 7 7 7) 4)) (2 (7 () 3 5))) +(((() 3 9 (10 3 8 10) ()) 10 1 4) (3 (5 (0 9 8) (3 4 0 1)) ((1 6 1 7) 1 (5 4) 5) ()) ((4 (6 9) (3 10 9 0 5)) (() 5 (1 6 9 3) 6 (5 10 6 10)) (3 (0) (6 8 6 0))) (4 7) (((2) (8 5 9 1 5) (2 8 3)) 3 (0 (9 3 1 4 9) (6)) 10)) + +((8 () (3) 3 5) (6 1 2) () () (((4 6 10 1 3) 1 1 6) 3 () ((0 2) 5 () (5)) ((9 7 0 8)))) +((10 ()) ((() 5) (4 (6 2 10 8 9) (8 4 3 10) (8 3 8 0 5)) 5 (() (2 0 10 2 5)) 7) (3 () (5 6 4) 9 0)) + +((((1 7 5 1 4) (5)) 0 ((5 6 6 7) (5) (4 2 8 6 6)))) +((6 ((4) 10) ()) () ((3 5 (2 2 1 7) (1 8 5 1)) (0 6 (6 6 10)) 0 9 5) (()) (((6 4 8) 1 (7 7 7 0)))) + +((() () 8 10 2) ()) +(() (8 ((4 8 2 9 3) (4 0)))) + +(((() 0) (() 10 8 9)) ((6 5 3 (3 7 3))) (((5 0 2 3 9) 9 8) (0 3 (3 2 5) 9) 2 3) ((2 8 0 (4 2) 2) 2 ((8 3 10 0) (3 0)) 0)) +((6 ((5 4 4)) 3 7 0) (((5 0 10 9) 6 1 (10 9 5) (4 4)) (5 (1 6 9 10) () 0 ()) () 9) (1 ((5 10) 10)) (3 () ((2 10) (7 5))) ((1 (0 7 8)) ((6 0 5)) 8 8)) + +((4 6)) +((((1) (5 0 2 7 4) (3 0 1 2)) 0 (10 (10 2) 9 (9 6 1 7) 5) ((10 0 4 4) (4) 3)) (6 2) (1 (5 9) 9 9)) + +(((2 (8 9 3) 4 2) (5 4 () (3 3)) 2 8) () (((8 5 6 7) (10 0) (7 2 5 5 4) 6 (3))) (0 (0 ()) ((4 7 9) 4 (3 3 8 2 8) 8) (10 () (4)) 5) (((7 10) 7 (0 3 8) (4 4 8 7)) ((2 0 5 1 5) 0 6 (4 1 8 4 5) 7) 3 (6) (8 () 2))) +((10 (1 (3 8 7 5) (2 3 3) (3 3 3)) (7 1 () (5 8 7 9))) ((4) (8 1 4 (2 3 9)) 4 (8 8 (8 10) (9 7 6))) (1 (10 1) 5) (() ((5) ()) ((10 10 5 4 10) (9 0 0 8 3) () (0 4 0 4 9) 3) 3 (() (5 0) 10 (3 5))) (((9 5 1) (4 5) 8 1))) + +((()) (8 ((10 4 8 4) (1) (6 2) 7 9) 8) (7 2 ((2 3 0) (5 0)) 8) ((2) 0 4 6 7)) +((1 4 ((5 10 6 5) 8) 1 10) (2) (((6 9) (3 2 9 7 6) (7 10 3)) (3 (4 3 4)) 10 4 2)) + +((() (3 ())) (((7 0 3 3 6)) (3 3))) +((0 9 8) (4 9 (3 (2 8 7 2)) 4) (8 0) (4 0 7 ()) ()) + +((8 ((2 4 0 2) (5 10 2) 9 (3 5)) 7 (5 (4 5 6 3) (4 7 10 0) 7 1)) (3 7 (2)) (((9) 3 (10 8 0))) ((4 () (9 7 0) (5 4) 8)) (() (9 (0 10 1 3) (4 5 8) 2 6) 9 (1 0 7 (0 1)))) +((((6 5) (7 7) (8 5) 1 7)) (4 (0 10 9 4)) ((6 (5) 0 7 (10 9 3 6 4))) (((0 3) (1 3 3 8 0) 2 4) (9) ()) (((8) 0 (4 6 2 4 3) 3 ()) ((6 4 10 7) 2 1))) + +((9)) +((((8 9) (2) 7 3 7)) (() ((8) () (3 4 4 2) 2 5) 2) (3 6 10)) + +((() 2 1 3 ()) (10 (() (8 1) 3 8) (() () (4 7 1 6 10) (1 9 1 6))) (() 9 (1 (1 0) (4) () 7) 8) () (4)) +(((6 8 9 (10 1 2 2 2) (4 0 4 2)) ((5 8 3 2 7) 9 0 1 (8 7 3 6))) ()) + +((1 () 4 10 ((6)))) +((9 ((9 6 10) 8)) (6 (5 2 (4 9 2 7) (9 7) 10))) + +) diff --git a/day13-scratch.lisp b/day13-scratch.lisp new file mode 100644 index 0000000..f47a622 --- /dev/null +++ b/day13-scratch.lisp @@ -0,0 +1,163 @@ +;; https://adventofcode.com/2022/day/13 + +;; so, generally i need to implement calculation of ordering on the nested structures +;; each packet is a list, containst lists or integers + +;; rules for comparison: +;; - if both are integers : lowest input is with lowest int +;; - if both are lists : compare lists in order by elements. if one runs out of items - it's lower +;; - if one is list and another is int : convert integer to list of one element and compare. i.e compare with head of list, and equal only if other list is of size 1 + +;; i'd really like to just read in Sexps + +(with-open-file (in "day13-test.txt") + (read in)) + +;; ok, i have list of the lists \ packets +;; now i'd want to compare them pairwise. what would be process? + +(defun nest-< (left right) + (cond + ((and (numberp left) (numberp right)) (< left right)) + ((numberp left) (nest-< (list left) right)) + ((numberp right) (nest-< left (list right))) + ((and (listp left) (listp right)) + (cond + ((and (not left) (not right)) nil) ; both equal and empty + ((not left) t) ; only left empty, left is smaller + ((not right) nil) ; only right is empty, left is bigger + (t (if (equal (first left) (first right)) + (nest-< (rest left) (rest right)) + (nest-< (first left) (first right)))))) + (t 'default))) + +(nest-< 4 3) +(nest-< 3 4) +(listp '(1 234)) +(listp '()) +(listp nil) + +(nest-< + '(1 (2 (3 (4 (5 6 7)))) 8 9) + '(1 (2 (3 (4 (5 6 0)))) 8 9)) + +(nest-< '(9) + '((8 7 6))) + +(nest-< + '((1) (2 3 4)) + '((1) 4)) + +;; ok, this seems to work + +;; how do i order input? hashmap would be nice? +;; if to wrap into list pairwise - should do so programmatically + +(defparameter *day13-all-list* nil) +(setq *day13-all-list* + (with-open-file (in "day13-test.txt") + (read in))) + +;; or i could break them into two lists? and map pairwise? +;; maybe with DO ? + + (defparameter *day13-lefts* nil) + (defparameter *day13-rights* nil) + + (loop for i from 0 below (length *day13-all-list*) + when (= 0 (mod i 2)) do (push (nth i *day13-all-list*) *day13-lefts*) + when (= 1 (mod i 2)) do (push (nth i *day13-all-list*) *day13-rights*)) + (setq *day13-lefts* (reverse *day13-lefts*)) + (setq *day13-rights* (reverse *day13-rights*)) + nil + +(mapcar #'nest-< *day13-lefts* *day13-rights*) + +(defparameter *day13-indices* nil) +(setq *day13-indices* (loop + for i from 0 below (length *day13-lefts*) + when (nest-< (nth i *day13-lefts*) (nth i *day13-rights*)) + collect (1+ i))) + +(apply #'+ *day13-indices*) + +(length *day13-lefts*) +(length *day13-rights*) + +*day13-indices* + +;; well, how should this compare: +;; [[9]] +;; [[[[8,9],[2],7,3,7]],[[],[[8],[],[3,4,4,2],2,5],2],[3,6,10]] +;; first is bigger, right? + +(apply #'+ '( 2 2 2 2)) +(apply #'+ *day13-indices*) ; 5739 , but not correct answer. why =C + +(defparameter *day13-artem-indices* (list 1 7 11 16 18 19 20 23 26 27 28 30 33 35 37 38 39 42 43 44 45 47 50 51 52 54 55 + 60 61 63 66 67 70 71 74 75 78 79 81 82 83 85 86 87 88 89 91 95 97 98 99 101 103 + 105 108 110 111 112 113 114 115 120 122 123 127 134 136 139 140 142 144 145 + 146 149 150)) + +(ql:quickload 'fset) +(fset:set *day13-indices*) + +(fset:set-difference (fset:convert 'fset:set *day13-artem-indices*) + (fset:convert 'fset:set *day13-indices*)) +(print *day13-indices*) +(print *day13-artem-indices*) + +;; 86, is in Artems and not in mine + +;; Comparing: +(nest-< + '(NIL (6 (7 (7 6 4 10 10) NIL 0 NIL) (1) ((1 4 5 9 8) 6 (6 4 2) (5 3 7) 10)) + (6 (2 3 10 (0 6 9 10)) (0) ((10 2) 4)) + ((NIL 1 0 NIL 7) ((0 4) 5 (9 3 7 10 1) 2) 0 4 4)) + '((0 10 8) ((8 9 (1 10 9 3) 2 1)))) + +(length *day13-lefts*) + +(numberp nil) +(not '(1)) +(not '()) + +(print (nth 85 *day13-lefts*)) +(print (nth 85 *day13-rights*)) + +(nest-< (nth 85 *day13-lefts*) (nth 85 *day13-rights*)) +;; ((2) (((3 4) 2 (9) (5 8 8 0 2))) (5) (1)) +;; ((((2) 7) NIL)) +;; +;; oh. i shouldn't just compare (list left) +;; i need to pass in rest. in what way? +;; so, comparing of the rest is required + +(nest-< '(2) + '((2) 7)) ; here it is... + +;; so in case it IS equal in (nest-< (first left) (first right)) +;; need to check tails +;; so, i need to return -1 0 and 1 i guess now +;; negative is less than + +(defun nest-2-< (left right) + (cond + ((and (numberp left) (numberp right)) (- left right)) + ((numberp left) (nest-2-< (list left) right)) + ((numberp right) (nest-2-< left (list right))) + ((and (listp left) (listp right)) + (cond + ((and (not left) (not right)) 0) ; both equal and empty + ((not left) -1) ; only left empty, left is smaller + ((not right) 1) ; only right is empty, left is bigger + (t (if (equal (first left) (first right)) + (nest-2-< (rest left) (rest right)) + (let ((head-comparison (nest-2-< (first left) (first right)))) + (if (= 0 head-comparison) + (nest-2-< (rest left) (rest right)) + head-comparison)))))) + (t 'default))) + +(nest-2-< '(2) + '((2) 7)) ; here it is... diff --git a/day13-test.txt b/day13-test.txt new file mode 100644 index 0000000..0423898 --- /dev/null +++ b/day13-test.txt @@ -0,0 +1,26 @@ +( +(1 1 3 1 1) +(1 1 5 1 1) + +((1) (2 3 4)) +((1) 4) + +(9) +((8 7 6)) + +((4 4) 4 4) +((4 4) 4 4 4) + +(7 7 7 7) +(7 7 7) + +() +(3) + +((())) +(()) + +(1 (2 (3 (4 (5 6 7)))) 8 9) +(1 (2 (3 (4 (5 6 0)))) 8 9) + +) diff --git a/day13.lisp b/day13.lisp new file mode 100644 index 0000000..50f134a --- /dev/null +++ b/day13.lisp @@ -0,0 +1,47 @@ +;; https://adventofcode.com/2022/day/13 + +;; (defparameter *day13-file-name* "day13-test.txt") +(defparameter *day13-file-name* "day13-input.txt") +(defparameter *day13-all-list* nil) + +;; 5739 is too low & incorrect +;; 6398 too high + +(defun nest-2-< (left right) + (cond + ((and (numberp left) (numberp right)) (- left right)) + ((numberp left) (nest-2-< (list left) right)) + ((numberp right) (nest-2-< left (list right))) + ((and (listp left) (listp right)) + (cond + ((and (not left) (not right)) 0) ; both equal and empty + ((not left) -1) ; only left empty, left is smaller + ((not right) 1) ; only right is empty, left is bigger + (t (if (equal (first left) (first right)) + (nest-2-< (rest left) (rest right)) + (let ((head-comparison (nest-2-< (first left) (first right)))) + (if (= 0 head-comparison) + (nest-2-< (rest left) (rest right)) + head-comparison)))))) + (t 'default))) + +(progn + (defparameter *day13-all-list* nil) + (setq *day13-all-list* + (with-open-file (in *day13-file-name*) + (read in))) + (defparameter *day13-lefts* nil) + (defparameter *day13-rights* nil) + + (loop for i from 0 below (length *day13-all-list*) + when (= 0 (mod i 2)) do (push (nth i *day13-all-list*) *day13-lefts*) + when (= 1 (mod i 2)) do (push (nth i *day13-all-list*) *day13-rights*)) + (setq *day13-lefts* (reverse *day13-lefts*)) + (setq *day13-rights* (reverse *day13-rights*)) + + (defparameter *day13-indices* nil) + (setq *day13-indices* (loop + for i from 0 below (length *day13-lefts*) + when (< (nest-2-< (nth i *day13-lefts*) (nth i *day13-rights*)) 0) + collect (1+ i))) + (apply #'+ *day13-indices*))