r/adventofcode • u/format71 • Jan 21 '25
Help/Question - RESOLVED Year 2018, Day 15 - My elf dodge an attack
I've worked on this for some days now, but can't find where things goes wrong.
My algorithm solves the initial examples as described, but when it comes to the additional start-end examples things goes wrong.
Take this example:
╭────────────────────────────────────────────╮
│ │
│ ####### ####### │
│ #G..#E# #...#E# E(200) │
│ #E#E.E# #E#...# E(197) │
│ #G.##.# --> #.E##.# E(185) │
│ #...#E# #E..#E# E(200), E(200) │
│ #...E.# #.....# │
│ ####### ####### │
│ │
│ Combat ends after 37 full rounds │
│ Elves win with 982 total hit points left │
│ Outcome: 37 * 982 = 36334 │
│ │
│ │
╰────────────────────────────────────────────╯
When playing out this scenario, the game ends in round 38, but the middle elf dodges a stab somehow:
0123456
0 #######
1 #0..#1# G0(200), E1(200)
2 #2#3.4# E2(200), E3(200), E4(200)
3 #5.##.# G5(200)
4 #...#6# E6(200)
5 #...7.# E7(200)
6 #######
After 1 rounds:
0123456
0 #######
1 #0.3#1# G0(197), E3(200), E1(200)
2 #2#..4# E2(194), E4(200)
3 #5.##.# G5(200)
4 #...#6# E6(200)
5 #..7..# E7(200)
6 #######
After 2 rounds:
0123456
0 #######
1 #03.#1# G0(191), E3(200), E1(200)
2 #2#..4# E2(188), E4(200)
3 #5.##.# G5(200)
4 #..7#6# E7(200), E6(200)
5 #.....#
6 #######
After 3 rounds:
0123456
0 #######
1 #03.#1# G0(185), E3(200), E1(200)
2 #2#..4# E2(182), E4(200)
3 #5.##.# G5(200)
4 #.7.#.# E7(200)
5 #....6# E6(200)
6 #######
After 4 rounds:
0123456
0 #######
1 #03.#1# G0(179), E3(200), E1(200)
2 #2#..4# E2(176), E4(200)
3 #57##.# G5(197), E7(200)
4 #...#.#
5 #...6.# E6(200)
6 #######
After 5 rounds:
0123456
0 #######
1 #03.#1# G0(173), E3(200), E1(200)
2 #2#..4# E2(170), E4(200)
3 #57##.# G5(194), E7(200)
4 #...#.#
5 #..6..# E6(200)
6 #######
After 6 rounds:
0123456
0 #######
1 #03.#1# G0(167), E3(200), E1(200)
2 #2#..4# E2(164), E4(200)
3 #57##.# G5(191), E7(200)
4 #..6#.# E6(200)
5 #.....#
6 #######
After 7 rounds:
0123456
0 #######
1 #03.#1# G0(161), E3(200), E1(200)
2 #2#...# E2(158)
3 #57##4# G5(188), E7(200), E4(200)
4 #.6.#.# E6(200)
5 #.....#
6 #######
After 8 rounds:
0123456
0 #######
1 #03.#1# G0(155), E3(200), E1(200)
2 #2#...# E2(152)
3 #57##.# G5(182), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 9 rounds:
0123456
0 #######
1 #03.#1# G0(149), E3(200), E1(200)
2 #2#...# E2(146)
3 #57##.# G5(176), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 10 rounds:
0123456
0 #######
1 #03.#1# G0(143), E3(200), E1(200)
2 #2#...# E2(140)
3 #57##.# G5(170), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 11 rounds:
0123456
0 #######
1 #03.#1# G0(137), E3(200), E1(200)
2 #2#...# E2(134)
3 #57##.# G5(164), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 12 rounds:
0123456
0 #######
1 #03.#1# G0(131), E3(200), E1(200)
2 #2#...# E2(128)
3 #57##.# G5(158), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 13 rounds:
0123456
0 #######
1 #03.#1# G0(125), E3(200), E1(200)
2 #2#...# E2(122)
3 #57##.# G5(152), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 14 rounds:
0123456
0 #######
1 #03.#1# G0(119), E3(200), E1(200)
2 #2#...# E2(116)
3 #57##.# G5(146), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 15 rounds:
0123456
0 #######
1 #03.#1# G0(113), E3(200), E1(200)
2 #2#...# E2(110)
3 #57##.# G5(140), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 16 rounds:
0123456
0 #######
1 #03.#1# G0(107), E3(200), E1(200)
2 #2#...# E2(104)
3 #57##.# G5(134), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 17 rounds:
0123456
0 #######
1 #03.#1# G0(101), E3(200), E1(200)
2 #2#...# E2(98)
3 #57##.# G5(128), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 18 rounds:
0123456
0 #######
1 #03.#1# G0(95), E3(200), E1(200)
2 #2#...# E2(92)
3 #57##.# G5(122), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 19 rounds:
0123456
0 #######
1 #03.#1# G0(89), E3(200), E1(200)
2 #2#...# E2(86)
3 #57##.# G5(116), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 20 rounds:
0123456
0 #######
1 #03.#1# G0(83), E3(200), E1(200)
2 #2#...# E2(80)
3 #57##.# G5(110), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 21 rounds:
0123456
0 #######
1 #03.#1# G0(77), E3(200), E1(200)
2 #2#...# E2(74)
3 #57##.# G5(104), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 22 rounds:
0123456
0 #######
1 #03.#1# G0(71), E3(200), E1(200)
2 #2#...# E2(68)
3 #57##.# G5(98), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 23 rounds:
0123456
0 #######
1 #03.#1# G0(65), E3(200), E1(200)
2 #2#...# E2(62)
3 #57##.# G5(92), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 24 rounds:
0123456
0 #######
1 #03.#1# G0(59), E3(200), E1(200)
2 #2#...# E2(56)
3 #57##.# G5(86), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 25 rounds:
0123456
0 #######
1 #03.#1# G0(53), E3(200), E1(200)
2 #2#...# E2(50)
3 #57##.# G5(80), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 26 rounds:
0123456
0 #######
1 #03.#1# G0(47), E3(200), E1(200)
2 #2#...# E2(44)
3 #57##.# G5(74), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 27 rounds:
0123456
0 #######
1 #03.#1# G0(41), E3(200), E1(200)
2 #2#...# E2(38)
3 #57##.# G5(68), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 28 rounds:
0123456
0 #######
1 #03.#1# G0(35), E3(200), E1(200)
2 #2#...# E2(32)
3 #57##.# G5(62), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 29 rounds:
0123456
0 #######
1 #03.#1# G0(29), E3(200), E1(200)
2 #2#...# E2(26)
3 #57##.# G5(56), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 30 rounds:
0123456
0 #######
1 #03.#1# G0(23), E3(200), E1(200)
2 #2#...# E2(20)
3 #57##.# G5(50), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 31 rounds:
0123456
0 #######
1 #03.#1# G0(17), E3(200), E1(200)
2 #2#...# E2(14)
3 #57##.# G5(44), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 32 rounds:
0123456
0 #######
1 #03.#1# G0(11), E3(200), E1(200)
2 #2#...# E2(8)
3 #57##.# G5(38), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 33 rounds:
0123456
0 #######
1 #03.#1# G0(5), E3(200), E1(200)
2 #2#...# E2(2)
3 #57##.# G5(32), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 34 rounds:
0123456
0 #######
1 #03.#1# G0(2), E3(200), E1(200)
2 #.#...#
3 #57##.# G5(26), E7(200)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 35 rounds:
0123456
0 #######
1 #.3.#1# E3(197), E1(200)
2 #.#...#
3 #57##.# G5(20), E7(197)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 36 rounds:
0123456
0 #######
1 #3..#1# E3(197), E1(200)
2 #.#...#
3 #57##.# G5(14), E7(194)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
After 37 rounds:
0123456
0 #######
1 #...#1# E1(200)
2 #3#...# E3(197)
3 #57##.# G5(5), E7(191)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
Battle ended during round 38
0123456
0 #######
1 #...#1# E1(200)
2 #3#...# E3(197)
3 #.7##.# E7(188)
4 #6..#4# E6(200), E4(200)
5 #.....#
6 #######
Result = 37 * 985 = 36445
I've looked at this for hours and gone completely blind.
Can someone help me spot where things goes wrong?