Skip to content

Commit fa92262

Browse files
committed
Day 24 Part 2
1 parent fa115f6 commit fa92262

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1256
-535
lines changed

2024/R/day24.qmd

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,130 @@ df |>
8585
8686
```
8787

88+
## Part 2
89+
90+
Thanks to hint from Reddit: this method of binary addition using only AND, OR, XOR gates without negation is a "ripple-carry adder."
91+
92+
The gates follow a consistent algorithm, where "Z" digits are the final output digits, and "C" values are carried over to the next digit:
93+
94+
```
95+
96+
STEP 00:
97+
98+
Z00 = X00 XOR Y00 (Final output: Z00)
99+
100+
C01 = X00 AND Y00 (Carry forward to next step)
101+
102+
STEP 01:
103+
104+
Z01A = X01 XOR Y01 (Intermediate step)
105+
Z01 = Z01A XOR C01 (Final output: Z01)
106+
107+
C02A = X01 AND Y01 (Intermediate step)
108+
C02B = Z01A AND C01 (Intermediate step)
109+
C02 = C02A OR C02B (Carry forward to next step)
110+
111+
(...)
112+
113+
C44 = C44A OR C44B (Carry forward to next step)
114+
115+
STEP 44:
116+
117+
Z44A = X44 XOR Y44 (Intermediate step)
118+
Z44 = Z44A XOR C44 (Final output: Z45)
119+
120+
C45A = X44 AND Y44 (Intermediate step)
121+
C45B = Z44A AND C44 (Intermediate step)
122+
C45 = C45A OR C45B (No further steps to carry over. Set as final output: Z45)
123+
```
124+
125+
We can compare the expected versus actual logic to find steps that don't match this algorithm.
126+
127+
```{r}
128+
129+
# Pull lists of all wires of x, y, z, and other types for quick reference
130+
nlist <- discard(names(wires), ~ str_starts(.x, "x|y|z"))
131+
xlist <- keep(names(wires), ~ str_starts(.x, "x"))
132+
ylist <- keep(names(wires), ~ str_starts(.x, "y"))
133+
zlist <- keep(names(wires), ~ str_starts(.x, "z"))
134+
xylist <- c(xlist, ylist)
135+
zmax <- max(zlist)
136+
137+
# Put source gates in alphabetical order for easier comparison
138+
gates <- gates |>
139+
mutate(src = map2(src1, src2, ~ sort(c(.x, .y)))) |>
140+
select(-c(src1, src2)) |>
141+
unnest_wider(src, names_sep = "")
142+
143+
```
144+
145+
Pull invalid outputs according to their gate type and inputs:
146+
147+
```{r}
148+
149+
invalid_by_gate <- gates |>
150+
pmap_lgl(\(gate, target, src1, src2) {
151+
case_when(
152+
# All z-target cases:
153+
target == "z00" ~ src1 == "x00" & src2 == "y00" & gate == "xor",
154+
target == zmax ~ src1 %in% nlist & src2 %in% nlist & gate == "|",
155+
target %in% zlist ~ src1 %in% nlist & src2 %in% nlist & gate == "xor",
156+
# N-target cases by gate type:
157+
gate == "xor" ~ src1 %in% xylist & src2 %in% xylist,
158+
gate == "|" ~ src1 %in% nlist & src2 %in% nlist
159+
)
160+
}) |>
161+
set_names(gates$target) |>
162+
keep(~ !is.na(.x) & .x == FALSE) |>
163+
names()
164+
165+
```
166+
167+
Identify invalid outputs by following their logic trail forward and checking the gate types of the logic they are used as later input for:
168+
169+
```{r}
170+
171+
invalid_by_path <- gates |>
172+
left_join(select(gates, src1, gate), join_by(x$target == y$src1), suffix = c("", "1")) |>
173+
left_join(select(gates, src2, gate), join_by(x$target == y$src2), suffix = c("", "2")) |>
174+
nest(nxt = c(gate1, gate2), .by = -c(gate1, gate2)) |>
175+
mutate(
176+
nxt = map(nxt, ~ .x |> unlist() |> discard(is.na) |> unname())
177+
) |>
178+
unnest_wider(nxt, names_sep = "_") |>
179+
mutate(
180+
valid = case_when(
181+
target %in% zlist
182+
~ NA,
183+
gate == "xor"
184+
~ nxt_1 %in% c("xor", "&") &
185+
nxt_2 %in% c("xor", "&") &
186+
nxt_1 != nxt_2 &
187+
!is.na(nxt_1) &
188+
!is.na(nxt_2),
189+
gate == "|"
190+
~ nxt_1 %in% c("xor", "&") &
191+
nxt_2 %in% c("xor", "&") &
192+
nxt_1 != nxt_2 &
193+
!is.na(nxt_1) &
194+
!is.na(nxt_2),
195+
gate == "&" & !(src1 %in% c("x00", "y00"))
196+
~ nxt_1 == "|" | nxt_2 == "|"
197+
)
198+
) |>
199+
filter(!valid) |>
200+
pull(target)
201+
202+
203+
```
204+
205+
Concatenate all invalid gates alphabetically:
206+
207+
```{r}
208+
209+
c(invalid_by_gate, invalid_by_path) |>
210+
unique() |>
211+
sort() |>
212+
str_c(collapse = ",")
213+
214+
```

_freeze/2024/R/day24/execute-results/html.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"hash": "ff6b3b2e4bd09923c3cd47bfefe5126a",
2+
"hash": "d39d73305f3974562115d8a17d9e6f3d",
33
"result": {
44
"engine": "knitr",
5-
"markdown": "---\ntitle: \"Day 24\"\ndate: 2024-12-24\nauthor:\n name: https://adventofcode.com/2024/day/24\n url: https://adventofcode.com/2024/day/24\n---\n\n\n\n\n## Setup\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Libraries\nlibrary(tidyverse)\n\n# Read input from file\ninput <- read_lines(\"../input/day24.txt\", skip_empty_rows = TRUE)\n```\n:::\n\n\n\n\n## Part 1\n\nConvert input to lists of gates and wires:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ninit <- input |> \n unglue::unglue_data(\"{wire}: {value}\", convert = TRUE) |> \n filter(!is.na(wire))\n\ngates <- input |> \n unglue::unglue_data(\"{src1} {gate} {src2} -> {target}\") |> \n filter(!is.na(gate)) |> \n mutate(gate = case_match(gate, \"AND\" ~ \"&\", \"OR\" ~ \"|\", \"XOR\" ~ \"xor\"))\n\nwires <- init |> \n complete(wire = unique(c(gates$src1, gates$src2, gates$target))) |> \n deframe()\n```\n:::\n\n\n\n\nLoop through the lists of gates and wires, and whenever a new gate can be activated, get its resulting value. Repeat until all wires have a final output.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndf <- wires |> \n enframe(name = \"wire\") |>\n left_join(gates, join_by(wire == target))\n\nrepeat {\n\n cur_values <- df |> \n select(wire, value) |> \n deframe()\n \n df <- df |> \n mutate(\n val1 = cur_values[src1], \n val2 = cur_values[src2],\n value = coalesce(\n value,\n pmap_int(list(gate, val1, val2), \\(gate, val1, val2) {\n if (!is.na(gate) & !is.na(val1) & !is.na(val2))\n get(gate)(val1, val2)\n else \n NA_integer_\n })\n )\n )\n \n if (all(!is.na(df$value))) break\n}\n```\n:::\n\n\n\n\nConvert the Z-coded wires to a binary number:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndf |> \n filter(str_starts(wire, \"z\")) |> \n arrange(wire) |> \n pull(value) |> \n imap_dbl(\\(x, i) x * 2^(i - 1)) |> \n sum() |> \n format(scientific = FALSE)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"59364044286798\"\n```\n\n\n:::\n:::\n",
5+
"markdown": "---\ntitle: \"Day 24\"\ndate: 2024-12-24\nauthor:\n name: https://adventofcode.com/2024/day/24\n url: https://adventofcode.com/2024/day/24\n---\n\n\n\n\n## Setup\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Libraries\nlibrary(tidyverse)\n\n# Read input from file\ninput <- read_lines(\"../input/day24.txt\", skip_empty_rows = TRUE)\n```\n:::\n\n\n\n\n## Part 1\n\nConvert input to lists of gates and wires:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ninit <- input |> \n unglue::unglue_data(\"{wire}: {value}\", convert = TRUE) |> \n filter(!is.na(wire))\n\ngates <- input |> \n unglue::unglue_data(\"{src1} {gate} {src2} -> {target}\") |> \n filter(!is.na(gate)) |> \n mutate(gate = case_match(gate, \"AND\" ~ \"&\", \"OR\" ~ \"|\", \"XOR\" ~ \"xor\"))\n\nwires <- init |> \n complete(wire = unique(c(gates$src1, gates$src2, gates$target))) |> \n deframe()\n```\n:::\n\n\n\n\nLoop through the lists of gates and wires, and whenever a new gate can be activated, get its resulting value. Repeat until all wires have a final output.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndf <- wires |> \n enframe(name = \"wire\") |>\n left_join(gates, join_by(wire == target))\n\nrepeat {\n\n cur_values <- df |> \n select(wire, value) |> \n deframe()\n \n df <- df |> \n mutate(\n val1 = cur_values[src1], \n val2 = cur_values[src2],\n value = coalesce(\n value,\n pmap_int(list(gate, val1, val2), \\(gate, val1, val2) {\n if (!is.na(gate) & !is.na(val1) & !is.na(val2))\n get(gate)(val1, val2)\n else \n NA_integer_\n })\n )\n )\n \n if (all(!is.na(df$value))) break\n}\n```\n:::\n\n\n\n\nConvert the Z-coded wires to a binary number:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndf |> \n filter(str_starts(wire, \"z\")) |> \n arrange(wire) |> \n pull(value) |> \n imap_dbl(\\(x, i) x * 2^(i - 1)) |> \n sum() |> \n format(scientific = FALSE)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"59364044286798\"\n```\n\n\n:::\n:::\n\n\n\n\n## Part 2\n\nThanks to hint from Reddit: this method of binary addition using only AND, OR, XOR gates without negation is a \"ripple-carry adder.\"\n\nThe gates follow a consistent algorithm, where \"Z\" digits are the final output digits, and \"C\" values are carried over to the next digit:\n\n``` \n\nSTEP 00: \n\nZ00 = X00 XOR Y00 (Final output: Z00)\n\nC01 = X00 AND Y00 (Carry forward to next step)\n\nSTEP 01: \n\nZ01A = X01 XOR Y01 (Intermediate step)\nZ01 = Z01A XOR C01 (Final output: Z01)\n\nC02A = X01 AND Y01 (Intermediate step)\nC02B = Z01A AND C01 (Intermediate step)\nC02 = C02A OR C02B (Carry forward to next step)\n\n(...)\n\nC44 = C44A OR C44B (Carry forward to next step)\n\nSTEP 44:\n\nZ44A = X44 XOR Y44 (Intermediate step)\nZ44 = Z44A XOR C44 (Final output: Z45)\n\nC45A = X44 AND Y44 (Intermediate step)\nC45B = Z44A AND C44 (Intermediate step)\nC45 = C45A OR C45B (No further steps to carry over. Set as final output: Z45)\n```\n\nWe can compare the expected versus actual logic to find steps that don't match this algorithm.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Pull lists of all wires of x, y, z, and other types for quick reference\nnlist <- discard(names(wires), ~ str_starts(.x, \"x|y|z\"))\nxlist <- keep(names(wires), ~ str_starts(.x, \"x\"))\nylist <- keep(names(wires), ~ str_starts(.x, \"y\"))\nzlist <- keep(names(wires), ~ str_starts(.x, \"z\"))\nxylist <- c(xlist, ylist)\nzmax <- max(zlist)\n\n# Put source gates in alphabetical order for easier comparison\ngates <- gates |> \n mutate(src = map2(src1, src2, ~ sort(c(.x, .y)))) |> \n select(-c(src1, src2)) |> \n unnest_wider(src, names_sep = \"\")\n```\n:::\n\n\n\n\nPull invalid outputs according to their gate type and inputs:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ninvalid_by_gate <- gates |> \n pmap_lgl(\\(gate, target, src1, src2) {\n case_when(\n # All z-target cases:\n target == \"z00\" ~ src1 == \"x00\" & src2 == \"y00\" & gate == \"xor\",\n target == zmax ~ src1 %in% nlist & src2 %in% nlist & gate == \"|\",\n target %in% zlist ~ src1 %in% nlist & src2 %in% nlist & gate == \"xor\",\n # N-target cases by gate type:\n gate == \"xor\" ~ src1 %in% xylist & src2 %in% xylist,\n gate == \"|\" ~ src1 %in% nlist & src2 %in% nlist\n )\n }) |> \n set_names(gates$target) |> \n keep(~ !is.na(.x) & .x == FALSE) |> \n names()\n```\n:::\n\n\n\n\nIdentify invalid outputs by following their logic trail forward and checking the gate types of the logic they are used as later input for:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ninvalid_by_path <- gates |> \n left_join(select(gates, src1, gate), join_by(x$target == y$src1), suffix = c(\"\", \"1\")) |> \n left_join(select(gates, src2, gate), join_by(x$target == y$src2), suffix = c(\"\", \"2\")) |> \n nest(nxt = c(gate1, gate2), .by = -c(gate1, gate2)) |> \n mutate(\n nxt = map(nxt, ~ .x |> unlist() |> discard(is.na) |> unname())\n ) |> \n unnest_wider(nxt, names_sep = \"_\") |> \n mutate(\n valid = case_when(\n target %in% zlist \n ~ NA,\n gate == \"xor\" \n ~ nxt_1 %in% c(\"xor\", \"&\") & \n nxt_2 %in% c(\"xor\", \"&\") & \n nxt_1 != nxt_2 & \n !is.na(nxt_1) & \n !is.na(nxt_2),\n gate == \"|\" \n ~ nxt_1 %in% c(\"xor\", \"&\") & \n nxt_2 %in% c(\"xor\", \"&\") & \n nxt_1 != nxt_2 & \n !is.na(nxt_1) & \n !is.na(nxt_2),\n gate == \"&\" & !(src1 %in% c(\"x00\", \"y00\"))\n ~ nxt_1 == \"|\" | nxt_2 == \"|\"\n )\n ) |> \n filter(!valid) |> \n pull(target)\n```\n:::\n\n\n\n\nConcatenate all invalid gates alphabetically:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nc(invalid_by_gate, invalid_by_path) |> \n unique() |> \n sort() |> \n str_c(collapse = \",\")\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"cbj,cfk,dmn,gmt,qjj,z07,z18,z35\"\n```\n\n\n:::\n:::\n",
66
"supporting": [],
77
"filters": [
88
"rmarkdown/pagebreak.lua"

docs/2022/R/day01.html

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
6868
<meta name="quarto:offset" content="../../">
6969
<link href="../../2022/R/day02.html" rel="next">
70-
<link href="../../2024/R/day23.html" rel="prev">
70+
<link href="../../2024/R/day24.html" rel="prev">
7171
<script src="../../site_libs/quarto-html/quarto.js"></script>
7272
<script src="../../site_libs/quarto-html/popper.min.js"></script>
7373
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
@@ -281,6 +281,12 @@ <h1 class="quarto-secondary-nav-title">Day 1</h1>
281281
<a href="../../2024/R/day23.html" class="sidebar-item-text sidebar-link">
282282
<span class="menu-text">Day 23</span></a>
283283
</div>
284+
</li>
285+
<li class="sidebar-item">
286+
<div class="sidebar-item-container">
287+
<a href="../../2024/R/day24.html" class="sidebar-item-text sidebar-link">
288+
<span class="menu-text">Day 24</span></a>
289+
</div>
284290
</li>
285291
</ul>
286292
</li>
@@ -382,6 +388,12 @@ <h1 class="quarto-secondary-nav-title">Day 1</h1>
382388
<a href="../../2022/R/day15.html" class="sidebar-item-text sidebar-link">
383389
<span class="menu-text">Day 15</span></a>
384390
</div>
391+
</li>
392+
<li class="sidebar-item">
393+
<div class="sidebar-item-container">
394+
<a href="../../2022/R/day16.html" class="sidebar-item-text sidebar-link">
395+
<span class="menu-text">Day 16</span></a>
396+
</div>
385397
</li>
386398
</ul>
387399
</li>
@@ -907,8 +919,8 @@ <h2 class="anchored" data-anchor-id="part-2">Part 2</h2>
907919
</script>
908920
<nav class="page-navigation">
909921
<div class="nav-page nav-page-previous">
910-
<a href="../../2024/R/day23.html" class="pagination-link" aria-label="Day 23">
911-
<i class="bi bi-arrow-left-short"></i> <span class="nav-page-text">Day 23</span>
922+
<a href="../../2024/R/day24.html" class="pagination-link" aria-label="Day 24">
923+
<i class="bi bi-arrow-left-short"></i> <span class="nav-page-text">Day 24</span>
912924
</a>
913925
</div>
914926
<div class="nav-page nav-page-next">

docs/2022/R/day02.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ <h1 class="quarto-secondary-nav-title">Day 2</h1>
281281
<a href="../../2024/R/day23.html" class="sidebar-item-text sidebar-link">
282282
<span class="menu-text">Day 23</span></a>
283283
</div>
284+
</li>
285+
<li class="sidebar-item">
286+
<div class="sidebar-item-container">
287+
<a href="../../2024/R/day24.html" class="sidebar-item-text sidebar-link">
288+
<span class="menu-text">Day 24</span></a>
289+
</div>
284290
</li>
285291
</ul>
286292
</li>
@@ -382,6 +388,12 @@ <h1 class="quarto-secondary-nav-title">Day 2</h1>
382388
<a href="../../2022/R/day15.html" class="sidebar-item-text sidebar-link">
383389
<span class="menu-text">Day 15</span></a>
384390
</div>
391+
</li>
392+
<li class="sidebar-item">
393+
<div class="sidebar-item-container">
394+
<a href="../../2022/R/day16.html" class="sidebar-item-text sidebar-link">
395+
<span class="menu-text">Day 16</span></a>
396+
</div>
385397
</li>
386398
</ul>
387399
</li>

docs/2022/R/day03.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ <h1 class="quarto-secondary-nav-title">Day 3</h1>
281281
<a href="../../2024/R/day23.html" class="sidebar-item-text sidebar-link">
282282
<span class="menu-text">Day 23</span></a>
283283
</div>
284+
</li>
285+
<li class="sidebar-item">
286+
<div class="sidebar-item-container">
287+
<a href="../../2024/R/day24.html" class="sidebar-item-text sidebar-link">
288+
<span class="menu-text">Day 24</span></a>
289+
</div>
284290
</li>
285291
</ul>
286292
</li>
@@ -382,6 +388,12 @@ <h1 class="quarto-secondary-nav-title">Day 3</h1>
382388
<a href="../../2022/R/day15.html" class="sidebar-item-text sidebar-link">
383389
<span class="menu-text">Day 15</span></a>
384390
</div>
391+
</li>
392+
<li class="sidebar-item">
393+
<div class="sidebar-item-container">
394+
<a href="../../2022/R/day16.html" class="sidebar-item-text sidebar-link">
395+
<span class="menu-text">Day 16</span></a>
396+
</div>
385397
</li>
386398
</ul>
387399
</li>

docs/2022/R/day04.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ <h1 class="quarto-secondary-nav-title">Day 4</h1>
281281
<a href="../../2024/R/day23.html" class="sidebar-item-text sidebar-link">
282282
<span class="menu-text">Day 23</span></a>
283283
</div>
284+
</li>
285+
<li class="sidebar-item">
286+
<div class="sidebar-item-container">
287+
<a href="../../2024/R/day24.html" class="sidebar-item-text sidebar-link">
288+
<span class="menu-text">Day 24</span></a>
289+
</div>
284290
</li>
285291
</ul>
286292
</li>
@@ -382,6 +388,12 @@ <h1 class="quarto-secondary-nav-title">Day 4</h1>
382388
<a href="../../2022/R/day15.html" class="sidebar-item-text sidebar-link">
383389
<span class="menu-text">Day 15</span></a>
384390
</div>
391+
</li>
392+
<li class="sidebar-item">
393+
<div class="sidebar-item-container">
394+
<a href="../../2022/R/day16.html" class="sidebar-item-text sidebar-link">
395+
<span class="menu-text">Day 16</span></a>
396+
</div>
385397
</li>
386398
</ul>
387399
</li>

docs/2022/R/day05.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ <h1 class="quarto-secondary-nav-title">Day 5</h1>
281281
<a href="../../2024/R/day23.html" class="sidebar-item-text sidebar-link">
282282
<span class="menu-text">Day 23</span></a>
283283
</div>
284+
</li>
285+
<li class="sidebar-item">
286+
<div class="sidebar-item-container">
287+
<a href="../../2024/R/day24.html" class="sidebar-item-text sidebar-link">
288+
<span class="menu-text">Day 24</span></a>
289+
</div>
284290
</li>
285291
</ul>
286292
</li>
@@ -382,6 +388,12 @@ <h1 class="quarto-secondary-nav-title">Day 5</h1>
382388
<a href="../../2022/R/day15.html" class="sidebar-item-text sidebar-link">
383389
<span class="menu-text">Day 15</span></a>
384390
</div>
391+
</li>
392+
<li class="sidebar-item">
393+
<div class="sidebar-item-container">
394+
<a href="../../2022/R/day16.html" class="sidebar-item-text sidebar-link">
395+
<span class="menu-text">Day 16</span></a>
396+
</div>
385397
</li>
386398
</ul>
387399
</li>

docs/2022/R/day06.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ <h1 class="quarto-secondary-nav-title">Day 6</h1>
281281
<a href="../../2024/R/day23.html" class="sidebar-item-text sidebar-link">
282282
<span class="menu-text">Day 23</span></a>
283283
</div>
284+
</li>
285+
<li class="sidebar-item">
286+
<div class="sidebar-item-container">
287+
<a href="../../2024/R/day24.html" class="sidebar-item-text sidebar-link">
288+
<span class="menu-text">Day 24</span></a>
289+
</div>
284290
</li>
285291
</ul>
286292
</li>
@@ -382,6 +388,12 @@ <h1 class="quarto-secondary-nav-title">Day 6</h1>
382388
<a href="../../2022/R/day15.html" class="sidebar-item-text sidebar-link">
383389
<span class="menu-text">Day 15</span></a>
384390
</div>
391+
</li>
392+
<li class="sidebar-item">
393+
<div class="sidebar-item-container">
394+
<a href="../../2022/R/day16.html" class="sidebar-item-text sidebar-link">
395+
<span class="menu-text">Day 16</span></a>
396+
</div>
385397
</li>
386398
</ul>
387399
</li>

docs/2022/R/day07.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ <h1 class="quarto-secondary-nav-title">Day 7</h1>
281281
<a href="../../2024/R/day23.html" class="sidebar-item-text sidebar-link">
282282
<span class="menu-text">Day 23</span></a>
283283
</div>
284+
</li>
285+
<li class="sidebar-item">
286+
<div class="sidebar-item-container">
287+
<a href="../../2024/R/day24.html" class="sidebar-item-text sidebar-link">
288+
<span class="menu-text">Day 24</span></a>
289+
</div>
284290
</li>
285291
</ul>
286292
</li>
@@ -382,6 +388,12 @@ <h1 class="quarto-secondary-nav-title">Day 7</h1>
382388
<a href="../../2022/R/day15.html" class="sidebar-item-text sidebar-link">
383389
<span class="menu-text">Day 15</span></a>
384390
</div>
391+
</li>
392+
<li class="sidebar-item">
393+
<div class="sidebar-item-container">
394+
<a href="../../2022/R/day16.html" class="sidebar-item-text sidebar-link">
395+
<span class="menu-text">Day 16</span></a>
396+
</div>
385397
</li>
386398
</ul>
387399
</li>

docs/2022/R/day08.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ <h1 class="quarto-secondary-nav-title">Day 8</h1>
281281
<a href="../../2024/R/day23.html" class="sidebar-item-text sidebar-link">
282282
<span class="menu-text">Day 23</span></a>
283283
</div>
284+
</li>
285+
<li class="sidebar-item">
286+
<div class="sidebar-item-container">
287+
<a href="../../2024/R/day24.html" class="sidebar-item-text sidebar-link">
288+
<span class="menu-text">Day 24</span></a>
289+
</div>
284290
</li>
285291
</ul>
286292
</li>
@@ -382,6 +388,12 @@ <h1 class="quarto-secondary-nav-title">Day 8</h1>
382388
<a href="../../2022/R/day15.html" class="sidebar-item-text sidebar-link">
383389
<span class="menu-text">Day 15</span></a>
384390
</div>
391+
</li>
392+
<li class="sidebar-item">
393+
<div class="sidebar-item-container">
394+
<a href="../../2022/R/day16.html" class="sidebar-item-text sidebar-link">
395+
<span class="menu-text">Day 16</span></a>
396+
</div>
385397
</li>
386398
</ul>
387399
</li>

0 commit comments

Comments
 (0)