Skip to content

Commit 4edc8db

Browse files
committed
solved day 4
1 parent 2155634 commit 4edc8db

File tree

10 files changed

+978
-642
lines changed

10 files changed

+978
-642
lines changed

src/2025/day04.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
function countRoles(map, clear = false) {
2+
let result = 0;
3+
for (let i = 0; i < map.length; i++) {
4+
for (let j = 0; j < map[0].length; j++) {
5+
let count = [
6+
map[i - 1]?.[j - 1],
7+
map[i - 1]?.[j],
8+
map[i - 1]?.[j + 1],
9+
map[i]?.[j - 1],
10+
map[i]?.[j + 1],
11+
map[i + 1]?.[j - 1],
12+
map[i + 1]?.[j],
13+
map[i + 1]?.[j + 1],
14+
].filter(x => x === "@").length;
15+
if (count < 4 && map[i][j] === "@") {
16+
if (clear) map[i][j] = ".";
17+
result++;
18+
}
19+
}
20+
}
21+
return result;
22+
}
23+
24+
export function part1(input) {
25+
let map = input.split("\n").map(x => x.split(""));
26+
return countRoles(map);
27+
}
28+
29+
export function part2(input) {
30+
let result;
31+
let sum = 0;
32+
let map = input.split("\n").map(x => x.split(""));
33+
while (result !== 0) {
34+
result = countRoles(map, true);
35+
sum += result;
36+
}
37+
return sum;
38+
}

src/2025/day04.test.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { part1, part2 } from "./day04.js";
2+
import { describe, test, expect } from "vitest";
3+
import readInput from "../utils/read-input.js";
4+
5+
let input = readInput(import.meta.url);
6+
7+
describe.only("day04 2025", () => {
8+
describe("part1", () => {
9+
test("it should work for part 1 examples", () => {
10+
expect(
11+
part1(
12+
[
13+
"..@@.@@@@.",
14+
"@@@.@.@.@@",
15+
"@@@@@.@.@@",
16+
"@.@@@@..@.",
17+
"@@.@@@@.@@",
18+
".@@@@@@@.@",
19+
".@.@.@.@@@",
20+
"@.@@@.@@@@",
21+
".@@@@@@@@.",
22+
"@.@.@@@.@.",
23+
].join("\n"),
24+
),
25+
).toEqual(13);
26+
});
27+
28+
test("it should work for part 1 input", () => {
29+
expect(part1(input)).toEqual(1489);
30+
});
31+
});
32+
33+
describe("part2", () => {
34+
test("it should work for part 2 examples", () => {
35+
expect(
36+
part2(
37+
[
38+
"..@@.@@@@.",
39+
"@@@.@.@.@@",
40+
"@@@@@.@.@@",
41+
"@.@@@@..@.",
42+
"@@.@@@@.@@",
43+
".@@@@@@@.@",
44+
".@.@.@.@@@",
45+
"@.@@@.@@@@",
46+
".@@@@@@@@.",
47+
"@.@.@@@.@.",
48+
].join("\n"),
49+
),
50+
).toEqual(43);
51+
});
52+
53+
test("it should work for part 2 input", () => {
54+
expect(part2(input)).toEqual(8890);
55+
});
56+
});
57+
});

src/2025/day04.txt

Lines changed: 136 additions & 0 deletions
Large diffs are not rendered by default.

src/2025/events.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ <h1 class="title-global"><a href="index.html">Advent of Code</a></h1>
2222
</nav>
2323
<div class="user">Shahar Talmi <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a> <a
2424
href="https://www.wix.engineering/" target="_blank" class="sponsor-badge"
25-
title="Member of sponsor: Wix Engineering">(Sponsor)</a> <span class="star-count">6*</span></div>
25+
title="Member of sponsor: Wix Engineering">(Sponsor)</a> <span class="star-count">8*</span></div>
2626
</div>
2727
<div>
2828
<h1 class="title-event">&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">$year=</span><a
@@ -32,7 +32,7 @@ <h1 class="title-event">&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">$year=<
3232
<main>
3333
<article>
3434
<p>From here, you can access all of the events (and the corresponding puzzles, leaderboards, stats, etc) ever run on Advent of Code:</p>
35-
<div class="eventlist-event"><a href="../2025/solver.html">[2025]</a> <span class="star-count"> 6*</span> <span class="quiet">/ 24*</span> <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a></div>
35+
<div class="eventlist-event"><a href="../2025/solver.html">[2025]</a> <span class="star-count"> 8*</span> <span class="quiet">/ 24*</span> <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a></div>
3636
<div class="eventlist-event"><a href="../2024/solver.html">[2024]</a> <span class="star-count">50*</span> <span class="quiet">/ 50*</span> <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a></div>
3737
<div class="eventlist-event"><a href="../2023/solver.html">[2023]</a> <span class="star-count">50*</span> <span class="quiet">/ 50*</span> <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a></div>
3838
<div class="eventlist-event"><a href="../2022/solver.html">[2022]</a> <span class="star-count">50*</span> <span class="quiet">/ 50*</span> <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a></div>
@@ -43,7 +43,7 @@ <h1 class="title-event">&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">$year=<
4343
<div class="eventlist-event"><a href="../2017/solver.html">[2017]</a> <span class="star-count">50*</span> <span class="quiet">/ 50*</span> <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a></div>
4444
<div class="eventlist-event"><a href="../2016/solver.html">[2016]</a> <span class="star-count">50*</span> <span class="quiet">/ 50*</span> <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a></div>
4545
<div class="eventlist-event"><a href="../2015/solver.html">[2015]</a> <span class="star-count">50*</span> <span class="quiet">/ 50*</span> <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a></div>
46-
<p>Total stars: <span class="star-count">506*</span></article>
46+
<p>Total stars: <span class="star-count">508*</span></article>
4747
</main>
4848
</body>
4949
</html>

src/2025/index.html

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,42 +22,45 @@ <h1 class="title-global"><a href="index.html">Advent of Code</a></h1>
2222
</nav>
2323
<div class="user">Shahar Talmi <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a> <a
2424
href="https://www.wix.engineering/" target="_blank" class="sponsor-badge"
25-
title="Member of sponsor: Wix Engineering">(Sponsor)</a> <span class="star-count">6*</span></div>
25+
title="Member of sponsor: Wix Engineering">(Sponsor)</a> <span class="star-count">8*</span></div>
2626
</div>
2727
<div>
2828
<h1 class="title-event">&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">$year=</span><a
2929
href="index.html">2025</a><span class="title-event-wrap">;</span></h1>
3030
</div>
3131
</header>
3232
<main>
33-
<p>Starting this year, there will be <a href="/2025/about#faq_num_days">12 days</a> of puzzles each December.</p><style>
34-
.calendar .calendar-color-a { color: #999; }
35-
.calendar .calendar-color-t { color: #32211a; }
33+
<style>
3634
.calendar .calendar-color-v { color: #b6f; }
37-
.calendar .calendar-color-k { color: #666; }
38-
.calendar .calendar-color-o { color: #f90; }
39-
.calendar .calendar-color-y { color: #ff6; }
35+
.calendar .calendar-color-a { color: #999; }
4036
.calendar .calendar-color-w { color: #fff; }
37+
.calendar .calendar-color-d { color: #a74; }
38+
.calendar .calendar-color-y { color: #ff6; }
4139
.calendar .calendar-color-u { color: #06f; }
42-
.calendar .calendar-color-r { color: #f00; }
40+
.calendar .calendar-color-k { color: #666; }
4341
.calendar .calendar-color-Y { color: #ff6; text-shadow: 0 0 5px #ff6, 0 0 10px #ff6, 0 0 15px #ff6; }
44-
.calendar .calendar-color-n { color: #9b715b; }
4542
.calendar .calendar-color-m { color: #abc; }
43+
.calendar .calendar-color-t { color: #32211a; }
44+
.calendar .calendar-color-o { color: #f90; }
45+
.calendar .calendar-color-r { color: #f00; }
46+
.calendar .calendar-color-n { color: #9b715b; }
4647
.calendar .calendar-color-g { color: #0f0; }
4748
</style>
48-
<pre class="calendar"><a aria-label="Day 1, two stars" href="https://github.com/shahata/adventofcode-solver/blob/main/src/2025/day01.js" class="calendar-day1 calendar-verycomplete"> <span class="calendar-color-w">____</span> <span class="calendar-color-w">''</span> <span class="calendar-color-w">'..</span> <span class="calendar-color-w">.</span> <span class="calendar-color-Y">*</span> <span class="calendar-color-w">''</span> <span class="calendar-color-w">.</span> <span class="calendar-color-w">.</span> <span class="calendar-color-o">&lt;</span><span class="calendar-color-w">o</span> <span class="calendar-color-w">'</span> <span class="calendar-color-w">.</span>
49+
<pre class="calendar"><a aria-label="Day 1, two stars" href="https://github.com/shahata/adventofcode-solver/blob/main/src/2025/day01.js" class="calendar-day1 calendar-verycomplete"><span class="calendar-color-w">.</span> <span class="calendar-color-w">'</span> <span class="calendar-color-w">'</span> <span class="calendar-color-w">____</span> <span class="calendar-color-w">'</span> <span class="calendar-color-Y">*</span> <span class="calendar-color-w">'</span> <span class="calendar-color-w">.'</span> <span class="calendar-color-w">.</span> <span class="calendar-color-w">.</span> <span class="calendar-color-o">&lt;</span><span class="calendar-color-w">o</span> <span class="calendar-color-w">.</span>
4950
<span class="calendar-color-w">________/</span><span class="calendar-color-a">O___</span><span class="calendar-color-w">\__________</span><span class="calendar-color-r">|</span><span class="calendar-color-w">_________________O______</span> <span class="calendar-day"> 1</span> <span class="calendar-mark-complete">*</span><span class="calendar-mark-verycomplete">*</span></a>
50-
<a aria-label="Day 2, two stars" href="https://github.com/shahata/adventofcode-solver/blob/main/src/2025/day02.js" class="calendar-day2 calendar-verycomplete"> <span class="calendar-color-a">_______</span><span class="calendar-color-m">||</span><span class="calendar-color-a">_________</span> <span class="calendar-color-t">'</span> <span class="calendar-color-t">.</span> <span class="calendar-color-t">.</span> <span class="calendar-color-t">'</span> <span class="calendar-color-t">.</span> <span class="calendar-color-t">.</span> <span class="calendar-color-t">.</span> <span class="calendar-color-t">.''.'</span>
51-
<span class="calendar-color-a">|</span> <span class="calendar-color-n">_</span><span class="calendar-color-v">@</span><span class="calendar-color-n">__</span> <span class="calendar-color-m">||</span> <span class="calendar-color-n">_</span><span class="calendar-color-u">o</span><span class="calendar-color-n">_</span> <span class="calendar-color-r">'.</span><span class="calendar-color-a">|_</span> <span class="calendar-color-a">_________________________</span> <span class="calendar-day"> 2</span> <span class="calendar-mark-complete">*</span><span class="calendar-mark-verycomplete">*</span></a>
52-
<a aria-label="Day 3, two stars" href="https://github.com/shahata/adventofcode-solver/blob/main/src/2025/day03.js" class="calendar-day3 calendar-verycomplete"> <span class="calendar-color-t">'</span> <span class="calendar-color-a">|_</span><span class="calendar-color-r">&amp;</span><span class="calendar-color-a">_</span><span class="calendar-color-y">%</span><span class="calendar-color-a">__</span><span class="calendar-color-m">||</span><span class="calendar-color-a">_</span><span class="calendar-color-u">o</span><span class="calendar-color-o">o</span><span class="calendar-color-a">__</span><span class="calendar-color-m">^</span><span class="calendar-color-n">=</span><span class="calendar-color-a">_</span><span class="calendar-color-n">[</span> <span class="calendar-color-a">\|</span><span class="calendar-color-g">..'</span> <span class="calendar-color-m">_</span> <span class="calendar-color-r">.</span><span class="calendar-color-k">.</span> <span class="calendar-color-r">.</span><span class="calendar-color-k">.</span> <span class="calendar-color-r">.</span><span class="calendar-color-k">.</span> <span class="calendar-color-a">|</span>
51+
<a aria-label="Day 2, two stars" href="https://github.com/shahata/adventofcode-solver/blob/main/src/2025/day02.js" class="calendar-day2 calendar-verycomplete"> <span class="calendar-color-a">_______</span><span class="calendar-color-m">||</span><span class="calendar-color-a">_________</span> <span class="calendar-color-t">.</span> <span class="calendar-color-t">.'.</span> <span class="calendar-color-t">'</span> <span class="calendar-color-t">''</span> <span class="calendar-color-t">.</span>
52+
<span class="calendar-color-t">'</span> <span class="calendar-color-a">|</span> <span class="calendar-color-n">_</span><span class="calendar-color-v">@</span><span class="calendar-color-n">__</span> <span class="calendar-color-m">||</span> <span class="calendar-color-n">_</span><span class="calendar-color-u">o</span><span class="calendar-color-n">_</span> <span class="calendar-color-r">'.</span><span class="calendar-color-a">|_</span> <span class="calendar-color-a">_________________________</span> <span class="calendar-day"> 2</span> <span class="calendar-mark-complete">*</span><span class="calendar-mark-verycomplete">*</span></a>
53+
<a aria-label="Day 3, two stars" href="https://github.com/shahata/adventofcode-solver/blob/main/src/2025/day03.js" class="calendar-day3 calendar-verycomplete"> <span class="calendar-color-a">|_</span><span class="calendar-color-r">&amp;</span><span class="calendar-color-a">_</span><span class="calendar-color-y">%</span><span class="calendar-color-a">__</span><span class="calendar-color-m">||</span><span class="calendar-color-a">_</span><span class="calendar-color-u">o</span><span class="calendar-color-o">o</span><span class="calendar-color-a">__</span><span class="calendar-color-m">^</span><span class="calendar-color-n">=</span><span class="calendar-color-a">_</span><span class="calendar-color-n">[</span> <span class="calendar-color-a">\|</span><span class="calendar-color-g">..'</span> <span class="calendar-color-m">_</span> <span class="calendar-color-r">.</span><span class="calendar-color-k">.</span> <span class="calendar-color-r">.</span><span class="calendar-color-k">.</span> <span class="calendar-color-r">.</span><span class="calendar-color-k">.</span> <span class="calendar-color-a">|</span>
5354
<span class="calendar-color-a">\_</span><span class="calendar-color-m">]</span><span class="calendar-color-a">__</span><span class="calendar-color-n">--</span><span class="calendar-color-m">|_|</span><span class="calendar-color-a">___</span><span class="calendar-color-m">[]</span><span class="calendar-color-a">_</span><span class="calendar-color-m">[]</span><span class="calendar-color-a">_</span><span class="calendar-color-m">[]</span><span class="calendar-color-a">__</span><span class="calendar-color-m">//</span><span class="calendar-color-a">_|</span> <span class="calendar-day"> 3</span> <span class="calendar-mark-complete">*</span><span class="calendar-mark-verycomplete">*</span></a>
54-
<span aria-hidden="true" class="calendar-day4"> ____________//___
55-
| \ // @@| <span class="calendar-day"> 4</span><span id="calendar-countdown"></span><script>
55+
<a aria-label="Day 4, two stars" href="https://github.com/shahata/adventofcode-solver/blob/main/src/2025/day04.js" class="calendar-day4 calendar-verycomplete"> <span class="calendar-color-a">____________</span><span class="calendar-color-m">//</span><span class="calendar-color-a">___</span>
56+
__________________________ <span class="calendar-color-d">..</span><span class="calendar-color-a">|</span> <span class="calendar-color-w">\</span> <span class="calendar-color-r">'</span><span class="calendar-color-g">'</span><span class="calendar-color-r">'</span><span class="calendar-color-g">'</span><span class="calendar-color-r">'</span><span class="calendar-color-g">'</span> <span class="calendar-color-m">//</span> <span class="calendar-color-w">@@</span><span class="calendar-color-a">|</span> <span class="calendar-day"> 4</span> <span class="calendar-mark-complete">*</span><span class="calendar-mark-verycomplete">*</span></a>
57+
<span aria-hidden="true" class="calendar-day5">|_ ___ | .--. | <span class="calendar-color-d">..</span><span class="calendar-color-a">__</span><span class="calendar-color-m">[#]</span><span class="calendar-color-a">_</span><span class="calendar-color-w">@@</span><span class="calendar-color-a">__</span><span class="calendar-color-m">//</span><span class="calendar-color-a">_</span><span class="calendar-color-w">@@@</span><span class="calendar-color-a">|</span>
58+
|_\_|^|_]_|==|_T_T_T_T_T_| <span class="calendar-day"> 5</span><span id="calendar-countdown"></span><script>
5659
(function(){
5760
var countdown = document.getElementById("calendar-countdown");
5861
if (!countdown) return;
59-
var server_eta = 84602;
60-
var key = "2025-4-"+server_eta;
62+
var server_eta = 84969;
63+
var key = "2025-5-"+server_eta;
6164
var now = Math.floor(new Date().getTime()/1000);
6265
var target = server_eta + now;
6366
if (sessionStorage) {
@@ -80,8 +83,8 @@ <h1 class="title-event">&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">$year=<
8083
countdown.textContent = "";
8184

8285
var a = document.createElement("a");
83-
a[String.fromCharCode(104,114,101,102)] = "/2025" + String.fromCharCode(47,100,97,121,47) + "4";
84-
a.className = "calendar-day4 calendar-day-new";
86+
a[String.fromCharCode(104,114,101,102)] = "/2025" + String.fromCharCode(47,100,97,121,47) + "5";
87+
a.className = "calendar-day5 calendar-day-new";
8588
var span = countdown.parentNode;
8689
while (span.firstChild) {
8790
a.appendChild(span.firstChild);
@@ -103,8 +106,6 @@ <h1 class="title-event">&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">$year=<
103106
update_countdown();
104107
})();
105108
</script></span>
106-
<span aria-hidden="true" class="calendar-day5"> |_[#]_@@__//_@@@|
107-
<span class="calendar-day"> 5</span></span>
108109
<span aria-hidden="true" class="calendar-day6">
109110
<span class="calendar-day"> 6</span></span>
110111
<span aria-hidden="true" class="calendar-day7">

src/2025/leaderboard.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ <h1 class="title-global"><a href="index.html">Advent of Code</a></h1>
2222
</nav>
2323
<div class="user">Shahar Talmi <a class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a> <a
2424
href="https://www.wix.engineering/" target="_blank" class="sponsor-badge"
25-
title="Member of sponsor: Wix Engineering">(Sponsor)</a> <span class="star-count">6*</span></div>
25+
title="Member of sponsor: Wix Engineering">(Sponsor)</a> <span class="star-count">8*</span></div>
2626
</div>
2727
<div>
2828
<h1 class="title-event">&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">$year=</span><a

0 commit comments

Comments
 (0)