Platform
Resources
Pricing
Sign in
Get started
Visnu Pitiyanuvath
Workspace
Fork
Public
Advent of Code 2022
By
Visnu Pitiyanuvath
Edited
Mar 3, 2023
2 forks
1 star
Advent of Code 2022
Day 25: Full of Hot Air
Day 24: Blizzard Basin
Day 23: Unstable Diffusion
Day 22: Monkey Map
Day 21: Monkey Math
Day 20: Grove Positioning System
Day 19: Not Enough Minerals
Day 18: Boiling Boulders
Day 17: Pyroclastic Flow
Day 16: Proboscidea Volcanium
Day 15: Beacon Exclusion Zone
Day 14: Regolith Reservoir
Day 13: Distress Signal
Day 12: Hill Climbing Algorithm
Day 11: Monkey in the Middle
Day 10: Cathode-Ray Tube
Day 9: Rope Bridge
Day 8: Treetop Tree House
Day 7: No Space Left On Device
Day 6: Tuning Trouble
Day 5: Supply Stacks
Day 4: Camp Cleanup
Day 3: Rucksack Reorganization
Day 2: Rock Paper Scissors
Day 1: Calorie Counting
Advent of Code Leaderboard
Insert cell
Insert cell
Insert cell
map
=
{
const
lines
=
data
.
split
(
"\n\n"
)
[
0
]
.
split
(
"\n"
)
.
filter
(
(
d
)
=>
d
)
;
return
new
d3
.
InternMap
(
lines
.
flatMap
(
(
l
,
y
)
=>
[
...
l
]
.
map
(
(
c
,
x
)
=>
[
[
x
,
y
]
,
c
]
)
.
filter
(
(
d
)
=>
d
[
1
]
!==
" "
)
)
,
String
)
;
}
Insert cell
extent
=
[
d3
.
rollup
(
map
.
keys
(
)
,
(
r
)
=>
d3
.
extent
(
r
,
(
d
)
=>
d
[
1
]
)
,
(
d
)
=>
d
[
0
]
)
,
d3
.
rollup
(
map
.
keys
(
)
,
(
r
)
=>
d3
.
extent
(
r
,
(
d
)
=>
d
[
0
]
)
,
(
d
)
=>
d
[
1
]
)
]
Insert cell
function
*
directions
(
)
{
const
string
=
data
.
split
(
"\n\n"
)
[
1
]
.
trim
(
)
;
for
(
const
[
m
]
of
string
.
matchAll
(
/\d+|[LR]/g
)
)
yield
m
===
"L"
||
m
===
"R"
?
m
:
+
m
;
}
Insert cell
next
=
(
[
[
x
,
y
]
,
[
dx
,
dy
]
]
,
instruction
)
=>
{
switch
(
instruction
)
{
case
"R"
:
return
[
[
x
,
y
]
,
[
-
dy
,
dx
]
]
;
case
"L"
:
return
[
[
x
,
y
]
,
[
dy
,
-
dx
]
]
;
default
:
// move
for
(
let
i
=
0
;
i
<
instruction
;
i
++
)
{
let
n
=
[
x
+
dx
,
y
+
dy
]
;
if
(
!
map
.
has
(
n
)
)
{
// wrap
if
(
dx
)
n
[
0
]
=
extent
[
1
]
.
get
(
n
[
1
]
)
[
dx
>
0
?
0
:
1
]
;
else
n
[
1
]
=
extent
[
0
]
.
get
(
n
[
0
]
)
[
dy
>
0
?
0
:
1
]
;
}
if
(
map
.
get
(
n
)
===
"#"
)
break
;
[
x
,
y
]
=
n
;
}
return
[
[
x
,
y
]
,
[
dx
,
dy
]
]
;
}
}
Insert cell
function
*
path
(
)
{
let
state
=
[
[
extent
[
1
]
.
get
(
0
)
[
0
]
,
0
]
,
[
1
,
0
]
]
;
for
(
const
i
of
directions
(
)
)
{
yield
state
;
state
=
next
(
state
,
i
)
;
}
}
Insert cell
Insert cell
part1
=
{
const
[
[
x
,
y
]
,
d
]
=
d3
.
reduce
(
path
(
)
,
(
s
,
d
)
=>
d
)
;
const
c
=
x
+
1
,
r
=
y
+
1
,
f
=
{
"1,0"
:
0
,
"0,1"
:
1
,
"-1,0"
:
2
,
"0,-1"
:
3
}
[
String
(
d
)
]
;
return
1000
*
r
+
4
*
c
+
f
;
}
Insert cell
Insert cell
Insert cell
Insert cell
d3
.
zip
(
boundary
,
edge
)
Insert cell
seams
=
new
d3
.
InternMap
(
[
...
seam
(
[
4
,
3
]
,
[
7
,
3
]
,
[
8
,
0
]
,
[
8
,
3
]
)
,
...
seam
(
[
7
,
3
]
,
[
7
,
0
]
,
[
7
,
4
]
,
[
4
,
4
]
)
]
,
String
)
Insert cell
seam
=
(
n1
,
n2
,
m1
,
m2
)
=>
d3
.
zip
(
[
...
range
(
n1
,
n2
)
]
,
[
...
range
(
m1
,
m2
)
]
)
Insert cell
seam
(
[
4
,
3
]
,
[
7
,
3
]
,
[
8
,
0
]
,
[
8
,
3
]
)
Insert cell
Insert cell
function
*
range
(
[
x1
,
y1
]
,
[
x2
,
y2
]
)
{
const
dx
=
Math
.
sign
(
x2
-
x1
)
,
dy
=
Math
.
sign
(
y2
-
y1
)
;
const
dir
=
[
dy
,
-
dx
]
;
yield
[
[
x1
,
y1
]
,
dir
]
;
while
(
x1
!==
x2
||
y1
!==
y2
)
{
x1
+=
dx
;
y1
+=
dy
;
yield
[
[
x1
,
y1
]
,
dir
]
;
}
}
Insert cell
next2
=
(
[
[
x
,
y
]
,
[
dx
,
dy
]
]
,
instruction
)
=>
{
switch
(
instruction
)
{
case
"R"
:
return
[
[
x
,
y
]
,
[
-
dy
,
dx
]
]
;
case
"L"
:
return
[
[
x
,
y
]
,
[
dy
,
-
dx
]
]
;
default
:
// move
for
(
let
i
=
0
;
i
<
instruction
;
i
++
)
{
let
n
=
[
x
+
dx
,
y
+
dy
]
;
if
(
!
map
.
has
(
n
)
)
{
// wrap
if
(
dx
)
n
[
0
]
=
extent
[
1
]
.
get
(
n
[
1
]
)
[
dx
>
0
?
0
:
1
]
;
else
n
[
1
]
=
extent
[
0
]
.
get
(
n
[
0
]
)
[
dy
>
0
?
0
:
1
]
;
}
if
(
map
.
get
(
n
)
===
"#"
)
break
;
[
x
,
y
]
=
n
;
}
return
[
[
x
,
y
]
,
[
dx
,
dy
]
]
;
}
}
Insert cell
data
=
which
===
"sample"
?
sample
:
input
Insert cell
Insert cell
Insert cell
Purpose-built for displays of data
Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Try it for free
Learn more
Fork
View
Export
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
which
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
map
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
extent
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
directions
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
next
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
path
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
part1
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
boundary
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
edge
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
seams
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
seam
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
range
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
next2
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
data
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
sample
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
input
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML