diff --git a/src/2023/day01.html b/src/2023/day01.html index 1b85c02e..e40f3c3d 100644 --- a/src/2023/day01.html +++ b/src/2023/day01.html @@ -22,7 +22,7 @@

Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year= + + + + Day 21 - Advent of Code 2023 + + + + + + +
+
+

Advent of Code

+ +
Shahar Talmi (AoC++) 42*
+
+
+

   $year=2023;

+
+
+
+

--- Day 21: Step Counter ---

You manage to catch the airship right as it's dropping someone else off on their all-expenses-paid trip to Desert Island! It even helpfully drops you off near the gardener and his massive farm.

+

"You got the sand flowing again! Great work! Now we just need to wait until we have enough sand to filter the water for Snow Island and we'll have snow again in no time."

+

While you wait, one of the Elves that works with the gardener heard how good you are at solving problems and would like your help. He needs to get his steps in for the day, and so he'd like to know which garden plots he can reach with exactly his remaining 64 steps.

+

He gives you an up-to-date map (your puzzle input) of his starting position (S), garden plots (.), and rocks (#). For example:

+
...........
+.....###.#.
+.###.##..#.
+..#.#...#..
+....#.#....
+.##..S####.
+.##..#...#.
+.......##..
+.##.#.####.
+.##..##.##.
+...........
+
+

The Elf starts at the starting position (S) which also counts as a garden plot. Then, he can take one step north, south, east, or west, but only onto tiles that are garden plots. This would allow him to reach any of the tiles marked O:

+
...........
+.....###.#.
+.###.##..#.
+..#.#...#..
+....#O#....
+.##.OS####.
+.##..#...#.
+.......##..
+.##.#.####.
+.##..##.##.
+...........
+
+

Then, he takes a second step. Since at this point he could be at either tile marked O, his second step would allow him to reach any garden plot that is one step north, south, east, or west of any tile that he could have reached after the first step:

+
...........
+.....###.#.
+.###.##..#.
+..#.#O..#..
+....#.#....
+.##O.O####.
+.##.O#...#.
+.......##..
+.##.#.####.
+.##..##.##.
+...........
+
+

After two steps, he could be at any of the tiles marked O above, including the starting position (either by going north-then-south or by going west-then-east).

+

A single third step leads to even more possibilities:

+
...........
+.....###.#.
+.###.##..#.
+..#.#.O.#..
+...O#O#....
+.##.OS####.
+.##O.#...#.
+....O..##..
+.##.#.####.
+.##..##.##.
+...........
+
+

He will continue like this until his steps for the day have been exhausted. After a total of 6 steps, he could reach any of the garden plots marked O:

+
...........
+.....###.#.
+.###.##.O#.
+.O#O#O.O#..
+O.O.#.#.O..
+.##O.O####.
+.##.O#O..#.
+.O.O.O.##..
+.##.#.####.
+.##O.##.##.
+...........
+
+

In this example, if the Elf's goal was to get exactly 6 more steps today, he could use them to reach any of 16 garden plots.

+

However, the Elf actually needs to get 64 steps today, and the map he's handed you is much larger than the example map.

+

Starting from the garden plot marked S on your map, how many garden plots could the Elf reach in exactly 64 steps?

+
+

Your puzzle answer was 3795.

--- Part Two ---

The Elf seems confused by your answer until he realizes his mistake: he was reading from a list of his favorite numbers that are both perfect squares and perfect cubes, not his step counter.

+

The actual number of steps he needs to get today is exactly 26501365.

+

He also points out that the garden plots and rocks are set up so that the map repeats infinitely in every direction.

+

So, if you were to look one additional map-width or map-height out from the edge of the example map above, you would find that it keeps repeating:

+
.................................
+.....###.#......###.#......###.#.
+.###.##..#..###.##..#..###.##..#.
+..#.#...#....#.#...#....#.#...#..
+....#.#........#.#........#.#....
+.##...####..##...####..##...####.
+.##..#...#..##..#...#..##..#...#.
+.......##.........##.........##..
+.##.#.####..##.#.####..##.#.####.
+.##..##.##..##..##.##..##..##.##.
+.................................
+.................................
+.....###.#......###.#......###.#.
+.###.##..#..###.##..#..###.##..#.
+..#.#...#....#.#...#....#.#...#..
+....#.#........#.#........#.#....
+.##...####..##..S####..##...####.
+.##..#...#..##..#...#..##..#...#.
+.......##.........##.........##..
+.##.#.####..##.#.####..##.#.####.
+.##..##.##..##..##.##..##..##.##.
+.................................
+.................................
+.....###.#......###.#......###.#.
+.###.##..#..###.##..#..###.##..#.
+..#.#...#....#.#...#....#.#...#..
+....#.#........#.#........#.#....
+.##...####..##...####..##...####.
+.##..#...#..##..#...#..##..#...#.
+.......##.........##.........##..
+.##.#.####..##.#.####..##.#.####.
+.##..##.##..##..##.##..##..##.##.
+.................................
+
+

This is just a tiny three-map-by-three-map slice of the inexplicably-infinite farm layout; garden plots and rocks repeat as far as you can see. The Elf still starts on the one middle tile marked S, though - every other repeated S is replaced with a normal garden plot (.).

+

Here are the number of reachable garden plots in this new infinite version of the example map for different numbers of steps:

+
    +
  • In exactly 6 steps, he can still reach 16 garden plots.
  • +
  • In exactly 10 steps, he can reach any of 50 garden plots.
  • +
  • In exactly 50 steps, he can reach 1594 garden plots.
  • +
  • In exactly 100 steps, he can reach 6536 garden plots.
  • +
  • In exactly 500 steps, he can reach 167004 garden plots.
  • +
  • In exactly 1000 steps, he can reach 668697 garden plots.
  • +
  • In exactly 5000 steps, he can reach 16733044 garden plots.
  • +
+

However, the step count the Elf needs is much larger! Starting from the garden plot marked S on your infinite map, how many garden plots could the Elf reach in exactly 26501365 steps?

+
+

Your puzzle answer was 630129824772393.

Both parts of this puzzle are complete! They provide two gold stars: **

+

At this point, you should return to your Advent calendar and try another puzzle.

+

If you still want to see it, you can get your puzzle input.

+

You can also this puzzle.

+
+ + diff --git a/src/2023/day21.js b/src/2023/day21.js new file mode 100644 index 00000000..061b6ec6 --- /dev/null +++ b/src/2023/day21.js @@ -0,0 +1,66 @@ +function solve(input, steps, infinite) { + const map = input.split('\n').map(line => line.split('')); + let start; + for (let y = 0; y < map.length; y++) { + for (let x = 0; x < map[0].length; x++) { + if (map[y][x] === 'S') { + start = { x, y, steps: 0 }; + } + } + } + let t = []; + let visited = new Map(); + visited.set(`${start.x},${start.y}`, start); + const max = steps > 5000 ? map.length * 2 + (steps % map.length) : steps; + for (let i = 1; i <= max; i++) { + const next = new Map(); + for (const { x, y } of visited.values()) { + const neighbors = [ + { x: x - 1, y }, + { x: x + 1, y }, + { x, y: y - 1 }, + { x, y: y + 1 }, + ].filter(n => { + if (!infinite) return map[n.y]?.[n.x] && map[n.y][n.x] !== '#'; + return map.at(n.y % map.length).at(n.x % map[0].length) !== '#'; + }); + neighbors.forEach(n => next.set(`${n.x},${n.y}`, n)); + } + visited = next; + if (i === steps) return visited.size; + if (i % map.length === steps % map.length) t.push(visited.size); + } + + // 1. 0^2*a + 0*b + c = t[0] + // 2. 1^2*a + 1*b + c = t[1] + // 3. 2^2*a + 2*b + c = t[2] + // + // 1. 0 + 0 + c = t[0] + // 2. a + b + c = t[1] + // 3. 4a + 2b + c = t[2] + // + // 1. c = t[0] + // 2. b = t[1] - c - a + // 3. 4a + 2b = t[2] - c + // 3. 2a + 2(t[1] - c) = t[2] - c + // 3. 2a = t[2] - 2t[1] + c + // 3. a = (t[2] + c)/2 - t[1] + // + // 3. a = (t[2] + t[0])/2 - t[1] + // 2. b = t[1] - t[0] - a + // 1. c = t[0] + + const a = (t[2] + t[0]) / 2 - t[1]; + const b = t[1] - t[0] - a; + const c = t[0]; + const x = Math.floor(steps / map.length); + return a * x * x + b * x + c; +} + +export function part1(input, steps = 64) { + return solve(input, steps, false); +} + +export function part2(input, steps = 26501365) { + return solve(input, steps, true); +} diff --git a/src/2023/day21.spec.js b/src/2023/day21.spec.js new file mode 100644 index 00000000..b62673dc --- /dev/null +++ b/src/2023/day21.spec.js @@ -0,0 +1,48 @@ +import { part1, part2 } from './day21.js'; +import readInput from '../utils/read-input.js'; + +const input = readInput(import.meta.url); +const example = [ + '...........', + '.....###.#.', + '.###.##..#.', + '..#.#...#..', + '....#.#....', + '.##..S####.', + '.##..#...#.', + '.......##..', + '.##.#.####.', + '.##..##.##.', + '...........', +].join('\n'); + +describe('day21 2023', () => { + describe('part1', () => { + it('should work for part 1 examples', () => { + expect(part1(example, 6)).toEqual(16); + }); + + it('should work for part 1 input', () => { + expect(part1(input)).toEqual(3795); + }); + }); + + describe('part2', () => { + it('should work for part 2 examples', () => { + expect(part2(example, 6)).toEqual(16); + expect(part2(example, 10)).toEqual(50); + expect(part2(example, 50)).toEqual(1594); + expect(part2(example, 100)).toEqual(6536); + // expect(part2(example, 500)).toEqual(167004); + // expect(part2(example, 1000)).toEqual(668697); + // expect(part2(example, 5000)).toEqual(16733044); + }); + + it('should work for part 2 input', () => { + expect(part2(input, 65)).toEqual(3893); //0 + expect(part2(input, 65 + 131)).toEqual(34785); //1 + expect(part2(input, 65 + 131 + 131)).toEqual(96471); //2 + expect(part2(input)).toEqual(630129824772393); //26501365 / 131 = 202300 + }); + }); +}); diff --git a/src/2023/day21.txt b/src/2023/day21.txt new file mode 100644 index 00000000..858c09fc --- /dev/null +++ b/src/2023/day21.txt @@ -0,0 +1,132 @@ +................................................................................................................................... +...##......#....#...#.....#.#....#...#...#...#......#........................##......#..#..#.#........#....................##...... +...#.......#..........#..#....#................#...##.....##...................#..........###......#.....#.........#....#.#........ +........#..##.............#..#...##...#..#...##...............................#.........................#.......................... +..............#............#..#..........#.#.#....#...#......................#..#......#.##...#............................#....... +..##...............#...#...#......#.......................................#..............##...............#.....#...........#...#.. +.##............#.................#...#..#......#...................................#.......#.#..#......##................##........ +......###...#...#........#..............#....#.......##.......................##.......#..#.......#.........#...................#.. +.................#...........................................#......................#.....#.....##...........#...............#..... +..#...#....#.......##...........#..#.............#............................##........#.......#...#...#...#....#....##........... +..............#..#.....#.....#.........#..#..#..#..#.......#.#..#....##........#.....#.........#..............#........#..#...#.... +...##...............#...#.#....#............##..#.......................................#.......#...........#..#...........##....#. +.......................................#......#...........#..........#.............#..........##.............#....#..##....#....... +..................................#.............#........#...#.##.....................#....................#.##....#.............#. +.#......##...#......#..#...#...........#...#.............#.............#..#.........#..#.#........#.#...........#.................. +............#............#..........#........#..........#.....#.#...#.......#........#.#...........#....#.............#.........#.. +.....#.......##............#...#.#.#...#...#..............##..#....#......#......................#...#...#..........#......#.#..... +........#....#....#......#..........#........................#.....#....................................#.....#....#..##.##....#... +............#.................#.##.........#.........#.....#........#.........#........#....###...........#.............#.......... +....##....#..#............#...#.#..#.........................#.#....##.....................#........#.........#....#....#........#. +...#...#...........#..#..................#.......#.#..#............................................##................#............. +...........#......#....#........#.#..........................#.#......#......##.............#..#...#...#.#..................#..#... +.............................#........#............#........#........#.#.......#...............##....#........#...#..#..#.......... +..................................#...........................#.#..#.........................#...#.#......#..............##.....##. +........................#..........................#..................#...#............................#.......#...........#...##.. +.......#.#.....#....#.....#................................##...#.........##..#.....................#.............................. +......#........##..........#.................#..##......#..#.......#..........#.................................................... +....#..........#......................................................##.#..#.#.##..................#......#............##...#..... +.............#..........#.#..............................................#.#........#....#...........#.......................#..... +..#.............#....#........#.#..............#.......#......#.#..#......#.#...........................................##......... +..#.....#.....#....#...#....#..........#......#..............................#...........#............#..#.....##..........#....... +......#.#.#...#........................#..........#.#......#............#......................................#................... +.#...........#...#....................#..#..#....#.#........................................................................#.#.... +........#.#...........................#...#......#.#.#..#......##..#.#..#..#...#.#.#..................#.......##.#....#........#... +......#......#......#.....#..............#.#.........##.................#....................#............#....##........#......... +........#.............#..#............#......#........#....#............#.....#...........#..#...............###........#.....#.... +.....#.........##....#..................#..#...........#.#....##...........................#.............#..##..#.........#........ +............#....#..#.................#.............#..#.....##.....#.....#.........#........#............#........#.........##.... +.#.......#.#..........#...............#..............#.....#........#...#......#......##...........................#..#.#......##.. +.##.#.........#.............................#............................#.#..#...#.............#...#.........#...#......#......... +................................#........#..#..........##......#..................................#................#.#...#...#..... +.........#........#...........#........................#.#.##.........#.....#..#................................#.............##... +.........#.#....#..#.........#.#....#.......#.............#........#............#...#..........#...##..........#........#........#. +..............................###.....#......#......#...#....#...........#...#...............#.....##.#.....................#..#... +..........................#......#...#..............................##.#.......#........##..........#................#...##.....#.. +...........#............................#..................#...#..#.....................#...#.................................#.... +..#.#...............................................#..........#..........#..............#............##........................... +........#...#..................#.........#............#...............#.#..#.........#....#...............#.............##......... +............................##....................##......#..#....#.......#....#........................#...#.........#.....#....#. +.....#.#...............#....#..#....#...........#........#.#..................#.....##....#.......#......#......................#.. +...........#.........#.#.......#......#.#.#.......#.#...#...................#...#......#..............#...#....#.................#. +...#..#...........#.............#..........##..............................###...........#.#.....##.......#.............#.......... +...##.....................##...#..#.....#.........#.#....#.#.....................#..............#.#...#...#......#..............#.. +......##................#.................#.#........#.#..#................#............#......#.#..............#...............#.. +.......#...........#.................................##..................#...#........#.......#..##...##...........#.........#..... +..............#........#.............#..........#...............#..#.......#.........#..#...............#......#..#.........##.#... +.....#..........................................#...............#....#......#..#................................#...............#.. +...............#.......#..#.........#......#..................#........#................#.#...........#....##......#............#.. +...........................#.....##.........#...#...........#........#..#................#.#.#............#..#...#.....#........... +................#.....#..#.#......#.............#.....#...........##....#...#.#.....#.........#.................................... +....................................#...........#..............#................#............#..#...............#.##..#.##......... +.........#.#..............#........#.........#..#...#........#............##......##.......#....##.............#................... +..........##.....................#................#...#....#........#.....#..........#........#................#..###.............. +......................#............................#........................#.#..#..........#...................................... +........#...........#.#....#.........#.....#..........#..#.#..............#.......................#..#................#.#.......... +.................................................................S................................................................. +.........#.....#..#..........#.....#...........#...............##..#...............#.##....#...........#........#.#....#....#...... +.........##...#......#..#.#................#...........#..#...........#...#....#..............#......#..#.................##....... +.....................##.....................##...#.......#......#.............................#..#................................. +........................#..............#....#.................#....#...........#.................#...#.........#........#.......... +.........#..#.#...#.#..................#..............#.#...###....#......#......#.#....#..##..............#............#.......... +..#.......#...#..............#...#..##............#.........#......#.#....#.#..........................#......#..#.....#........... +..#........#......##.............................#..............#..#....................##.......#....#..#..#..........#........... +.....................#.....#...........#.##................#.#....#.#.#............#...#..##.............#.....##.................. +..##............#........#........#...#......#..........##.................#...#.#..........#...................................##. +...#.............#....#...#..#........#.........#......#..................#..#..#..........#.....#........#.#....##............#... +...#.............#...............................#.......#....#..........#..........................##......##...#.............#... +....#................#..#.#................#.....#.......#..................#.......................#.#............................ +....#.#..............#..#.........#..#..#................#..#...#.#..............#......#...................#...................... +.#......#....................#.................#........##......#......##..........#...............#..##.#.....#.............#..... +...##................#..........#......##.....#........#...#..................#........#......#....#..#.....#...................... +......#..................#......#.......#.......#..............#......#.........#.......#..#.#.#...##.....#.............#.......... +.#...................#...#....#......#.#.....#.....#..................#.#......#.......#.....#..#......................#.....#..... +...#......................#.......#..#.........#............#...#......##..........#............................................... +...#..#........#........#...........#.#...#...#.#..#.#...#..................#........#........#.#.##...#...........#............... +........#.......................#.............#....#...##.........#....................................#..............#...#........ +...#...........##........#..#.......#...............................#..................#.....#.......#.#.........#................. +..........#...............#.###...................#..................................#.....#...#................##...............#. +..#......#..........................#...........................#..................#..#........#....##...................##......#. +....#...........#..#..........................#......###................#...........................#.........#.#........#.#....... +...#...#..#........#...............#...........#.......#........................##..#...............#............#...........#..... +.....#..........................#..#........#.......#......#......#..........#..#.....#.....#..#.................#........#........ +....#...##.......................#...#.....#.....................................##.#..#....#....#................#................ +..#.....##.........#..............#.#................#.........#...#.................#.........#..............................#.... +............#...........#........#........................#.#.......#..#..#.........##...................#......##.#.......#....... +.........#......#......#............#.....#...##...#...............................#.....#..............##............#..#.....##.. +...........................#.................#...........#.........#....#.#.#....#......#..#....................#......#........... +....#.#..............................#......#..........#...........#....#.............#.#..............................#.....#..#.. +...........#...........#.............##....#......#.........#................#........#...............................#............ +...#........#.#....#.....................#..........#.......#...#.........#..........................##........#.#.#...##.......... +....#.#....#.........#.......#....................#...........#..........#....#......................#.............#.....#..#....#. +..........#................................#......#....#......#.................................................#.................. +.............#................................#...#.##.#.....#.......#....#............###.......#........##....................... +..........#......##.............#.........#............................#.#..#.......................................#.....#......#. +...#.....#.......#............#.............#.#...#.....#.............#..#..........##.......................#..................... +..........................#......#..................#..#........#............#.......##......................###.......#.....#..... +............#.#....#.#................................##......#..............#..#.#........................#......#...#...#........ +......##..........#......###...#......................#.........#.#............#..............#......#..............#.......#...... +............#........#.....#........#..#.......#...#...................#.....#..................##.............#.................#. +........#.#........##..................................#......#......................................#.....................#.#...#. +.#.......##......#.....#..........#................#...................##..#...............#.......##....................#......... +...#..#..#.............................#...................#................#....................................#........#........ +.....#....................................#.........##.............#...........................#................................... +............................#....#......#...................#..................................#...........................##...... +...............#...#..#...#.###.#...........#..............#..........#...............##........#.##.#....#.#.............##.....#. +...........#.##......#...#.#.........#.#.#...#.........................................#..........#.............#.#.............#.. +........#...............#........#........................#.#......#......#......................#...........#.........#.#...#..... +....#..#.............#......................#...................#.....##...............#...#........#.................#............ +............#......#...#.....#..........#....#...............##.....##..#.........#....#..#.......#...#..#......................... +......#...........#.......#...#.#.....#...#......#...........#......#................#................#....#.#...#................. +.......#.#...#.......#......#.................................#..............................#...........#.............#.........#. +...................................#.....#.........#.............................#..#............#...................#...#......... +...............#......#...........................#................#...............##...........#......#........#....##......#.#... +...............#....................##....#...#.....#.................................#..#.............#.#..#.....#..#.#........... +.............................#......##..#........................................##....#.................#......#....#...#......... +......#.#.#...............#.......#............................................................#................#..........#..#.... +...#.#...........#..#......#....###...............#..#..#......................#....#..............#......#................#....... +.......................#....#.....#..#.##.#..........#.....................#..................................#....####.##......... +......#..........##...#...........................#....#.................#........#.......................#.................#..#... +.................#..#...................#..#...#...##...#..................#..........#.#....#..#...........................#....#. +................................................................................................................................... + diff --git a/src/2023/events.html b/src/2023/events.html index 7b2c77e6..d02fce15 100644 --- a/src/2023/events.html +++ b/src/2023/events.html @@ -22,7 +22,7 @@

Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=   $year=<
+

Total stars: 442*

diff --git a/src/2023/index.html b/src/2023/index.html index 350b9fdb..7c59961e 100644 --- a/src/2023/index.html +++ b/src/2023/index.html @@ -22,7 +22,7 @@

Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=   $year=<
                     ...'''''''''...                    
                   .'' ~/\* ~~~~  /\ ''.            14 **
                 .' /\/\ ~~~~~~~~ * /~\ '.          15 **
            ...  :~~~~~~~~~ /\ ~~~~/ * \ :          16 **
-    .''....' '..'.||||||||||||||||||||~~~~/\*/\ ~  /\   /\ .'          13 **
+    .''....' '..'.||||||||||||||||||||~~~~/\*/\ ~  /\   /\ .'          13 **
     '.ZZ~   ~ * ~~~~.   /\  /\   /\ ..'            17 **
 .'''' ZZ* .'''.[]~~~''''.........'''               12 **
 '.... ~   '...'  *[]....'                          18 **
     .'*  ~   [^^^] '.                              11 **
-    '..''''.*.''''..,'','"",".'' ''...                       10 **
+    '..''''.*.''''.,.'."`,`.,.'' ''...                       10 **
           .'''~ ~ ~ . * ### ''.                    19 **
         .' ~  ,* ~ '", ~ ##### '.                   9 **
         : ~ '(~), ~ * ~ ~ ~ ### :                   8 **
         '. ~ " ' ~ ~ ~ * ~~~## .'                  20 **
-          '.. ~ ~ * ~ ####~~....................~~'.'''''''''...        7 **
+          '.. ~ ~ * ~ ####~~....................~~'.'''''''''...        7 **
              '''.........'''' ~ .'*. ~  ..  ''.     6 **
-
-                        :  .   '. ~     '. *'.~ :   5 **
-
               .''         '..  ~..'*   '. ~ ..'     4 **
 
 
diff --git a/src/2023/leaderboard.html b/src/2023/leaderboard.html
index fbd0f269..d3277f63 100644
--- a/src/2023/leaderboard.html
+++ b/src/2023/leaderboard.html
@@ -22,7 +22,7 @@ 

Advent of Code

Shahar Talmi (AoC++) 40*
+ title="Member of sponsor: Wix Engineering">(Sponsor) 42*

   $year=   $year=<