aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2019-10-22 17:59:19 +0100
committerNat Lasseter <user@4574.co.uk>2019-10-22 17:59:19 +0100
commit85757e46552653685abe692d28bde663d6b4d779 (patch)
treef135615ad94d1cf166a7ee605ab006ea3852e818
parent3575bedba1aaaa057e7472caeba15d9556f8a798 (diff)
Day 13
-rw-r--r--day13/Dockerfile7
-rw-r--r--day13/Makefile17
-rwxr-xr-xday13/entrypoint13
-rw-r--r--day13/input150
-rwxr-xr-xday13/part1219
-rwxr-xr-xday13/part2232
6 files changed, 638 insertions, 0 deletions
diff --git a/day13/Dockerfile b/day13/Dockerfile
new file mode 100644
index 0000000..5e0a8b7
--- /dev/null
+++ b/day13/Dockerfile
@@ -0,0 +1,7 @@
+FROM ruby:2.5-slim
+
+WORKDIR /opt
+
+COPY . .
+
+ENTRYPOINT ["./entrypoint"]
diff --git a/day13/Makefile b/day13/Makefile
new file mode 100644
index 0000000..8fd5ebb
--- /dev/null
+++ b/day13/Makefile
@@ -0,0 +1,17 @@
+DAY = 13
+
+.PHONY: run clean push
+
+run: build
+ docker run -it --rm aoc2018day$(DAY)
+
+build: part* input
+ docker build -t aoc2018day$(DAY) .
+ touch build
+
+clean:
+ rm -f build
+
+push: build
+ docker tag aoc2018day$(DAY) advent.4574.co.uk/aoc2018day$(DAY)
+ docker push advent.4574.co.uk/aoc2018day$(DAY)
diff --git a/day13/entrypoint b/day13/entrypoint
new file mode 100755
index 0000000..8982d21
--- /dev/null
+++ b/day13/entrypoint
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+if [ -x part1 ] ; then
+ echo -ne "Part 1:\n\t"
+ time ./part1 < input
+fi
+if [ -x part1 -a -x part2 ] ; then
+ echo
+fi
+if [ -x part2 ] ; then
+ echo -ne "Part 2:\n\t"
+ time ./part2 < input
+fi
diff --git a/day13/input b/day13/input
new file mode 100644
index 0000000..69d53b2
--- /dev/null
+++ b/day13/input
@@ -0,0 +1,150 @@
+ /-----------------------------------------------------------------\
+ /----------------------\/----------------+-------------------------------------------------------\ /----+----\
+ | || | /----------------------------\ | | /--+----+---------------------------------\
+ /+----------\ /------++----------------+---+-----------\ | /------------------+----+-+--+----+---------------------------\ |
+ || | |/-----++----------------+---+-----------+--------\ | | | | | | | | |
+ || | || || | | /------+-------\| | | /-----+----+\| | | /--------+----\|
+ || | || || /------+---+----+------+-------++-------+---+------------+-----+----+++--+----+\ | | ||
+ || /----+----++--\ || | | | | | || /-+---+------------+-----+----+++--+----++------\ | | ||
+ || | | || | || | | | | | || | | | | | ||| | || | | | ||
+ || | | || | || /---+------+---+----+------+-------++-----+-+---+------------+-----+----+++--+----++------+-----\ | | ||
+ || | | || | /++-----+---+--\ | | | | || | | | | | ||| | || | | | | ||
+ || | | || | ||| | | | \---+----+------+-------++-----+-+---+------------+-----+----+++--/ || | | | | ||
+ || /--+----+----++--+-+++-----+---+--+-------+----+------+------\|| | | | /--+-----+----+++-------++------+-----+----+--------+--\ ||
+ || | | | || | ||| | | v | | | ||| | | | | | | ||| || | | | | | ||
+ || | |/---+----++--+-+++-----+---+--+-------+----+------+------+++----\| | | | | | ||| || | | \--------+--+-/|
+ \+--+--++---/ |\--+-+++-----+---+--+-------+----+------+------++/ /--++-+---+---------+--+---\ | ||| || | | | | |
+ | | || | | ||| | | | | | /--+------++--+--++-+---+------\ | | | | ||| || | | | | |
+ | | || |/--+-+++-----+---+--+-------+----+---+--+---\ || | || | | | | | | | ||| || | /-+-------------+\ | |
+ |/-+--++--------++--+-+++-----+---+--+-------+----+---+--+--\| || | || | | | | | | | ||| || | | | || | |
+ || | || || | ||| | | | | \---+--+--++--+/ | || | \------+--+--+---+-+----+++-------++------+---+-+-------------/| | |
+ || | || || | |||/----+---+--+-------+--------+--+--++--+---+--++-+--->------+--+--+---+-+----+++-------++------+---+-+--\ | | |
+ || | || || | |||| \---+--+-------+--------+--+--++--+---+--++-+----------+--+--+---+-+----+++-------++------+---+-/ | | | |
+ || | || || | |||| | | /--<+----\ | | || | | |\-+----------+--+--+---+-+----+++-------++------/ | | | | |
+ || | \+--------++--/ |||| | | | /+----+---+--+--++--+---+\ | | | | | | | ||| || | | | | |
+ || | |/-------++----++++--------+--+---+--++---\| |/-+--++--+---++-+--+--------\ | /+--+---+-+----+++-------++----------+----+-----\ | | |
+ || | || || |||| | | | || ||/--++-+--++--+---++-+--+--------+-+-++--+---+-+----+++-------++----------+----+-----+-----+-+--+\
+ || | || || |||| | | | || ||| || | ^| | || | | | | || | | | ||| || | | | | | ||
+ || | || || |||| /+--+---+--++---+++--++-+--++--+---++-+--+--------+-+-++--+---+-+----+++-------++----------+----+-----+---\ | | ||
+ || | || || |||| /---++--+---+--++---+++--++-+--++--+---++-+--+--------+-+-++--+---+-+----+++------\|| \----+-----+---+-/ | ||
+ || | || || |||| |/--++--+---+--++---+++--++-+--++--+---++-+--+--------+-+-++--+---+-+----+++------+++---------------+---\ | | | ||
+ || | || || |||| || || /+---+--++---+++--++-+--++--+---++-+--+--------+-+-++--+---+-+----+++------+++---------------+---+-+---+-\ | ||
+ \+-+---++-------++----+/|| || || || | || ||| || | || | || | | | | || | /-+-+----+++------+++---------\ | | | | | | ||
+ | | || /-++----+-++---++--++-++---+--++---+++--++-+--++--+---++-+--+--------+-+-++--+-+-+-+\ ||| ||| | | | | | | | ||
+ | | ||/----+-++----+-++---++--++-++---+--++---+++--++-+--++--+---++-+--+--------+-+-++--+-+-+-++---+++----\ ||| | | | | | | | ||
+ | | ||| | || | || || || || | || ||| || | || | || | | /----+-+-++--+-+-+-++---+++----+-+++--\ | | | | | | | ||
+ | | ||| | || | || || || || | |\---+++--++-+--++--+---++-+--/ | /--+-+-++-\| | | || ||| | ||| | | | | | | | | ||
+ | | ||| | || | || || || || | | ||| || |/-++--+---++-+------+-+--+-+-++-++-+-+-++---+++----+-+++--+------+-----+---+-+\ | | | ||
+ | | ||| | || /+-++---++--++-++---+--+----+++--++-++-++--+---++-+------+-+--+-+-++-++-+-+-++---+++-\ | ||| | | | | || | | | ||
+ /+-+---+++----+-++---++-++---++--++-++---+--+-\ ||| || || || | || | | | | | || || | | || ||| | | ||| | | | | || | | | ||
+ || | ||| | || || || || || || | | | ||| || || || ^ /++-+------+-+--+-+-++-++-+-+-++--\||| | | ||| | | | | || | | | ||
+ || | ||| | || || || || || ||/--+--+-+--+++--++-++-++--+--+++-+------+-+--+-+-++-++-+-+-++--++++-+-\| ||| | | | | || | | | ||
+ || | ||| | || || || || || ||| |/-+-+--+++--++-++-++--+--+++-+------+-+--+-+-++-++-+-+-++--++++-+-++-+++--+------+-----+---+-++-\| | | ||
+ || | ||| | || || || || || ||| || | | ||| |\-++-++--+--+++-+------+-+--/ | || || | | || |||| | || ||| | | | | || || | | ||
+ || | ||| | || || ||/--++--++-+++--++-+-+--+++--+--++-++--+--+++-+------+-+---\| || || | |/++--++++-+-++-+++--+------+---\ | /-+-++-++-+-+-\||
+ || | |\+----+-++---++-+++--++--++-+++--++-+-+--/|| /+--++-++--+--+++-+------+-+--\|| || || | |||| |||| | || ||| | | | | | | || || | | |||
+/-++-+---+-+----+-++---++-+++--++--++-+++--++-+-+---++-++--++-++--+--+++-+------+-+--+++-++-++-+-++++-\|||| | || ||| | | | | | | || || | | |||
+| || | | | | \+---++-+++--++--++-+++--++-+-+---++-++--/| || | ||| | | | ||| || || | |||| ||||| | || ||| | | | | | | || || | | |||
+| || | | | | \---++-+++--++--++-+++--++-+-+---++-++---+-+/ | ||| | | | ||| || || | |||| ||||| | || ||| | | | | | | || || | | |||
+| || | | | /+------++-+++--++--++-+++--++-+-+---++-++---+-+--\| |\+-+------+-+--+++-++-++-+-/||| ||||| | || ||| | | | | | | || || | | |||
+| || | | | || || ||| || || ||| || | | || || | | || | | | | | ||| || |\-+--+++-+++/| | || ||| | | | | | | || || | | |||
+| || | | | || || ||| || || ||| || | | || || | | || | | | | | ||| || | | ||| ||| | | || ||| | /--+---+-+-+-+-++\|| | | |||
+| || | | | || /---++-+++--++--++-+++--++-+-+---++-++---+-+--++\ | | | /+-+--+++\|| | | ||| ||| | | || ||| |/--+--+---+\| | | ||||| | | |||
+| || | | | || | || ||| || || ||| /++-+-+---++-++---+-+--+++-+-+-+-----++-+--++++++-+--+--+++-+++-+-+-++-+++--++--+--+\ ||| | | ||||| | | |||
+| || | | | || | || ||| ||/-++-+++-+++-+-+---++-++---+-+--+++-+-+-+-----++-+\ |||||| | | ||| ||| \-+-++-+++--++--+--++--+++-+-+-+++++-+-+-+/|
+| || |/--+-+---++--+---++-+++--+++-++-+++-+++-+-+---++-++---+-+--+++-+-+-+-----++-++-++++++-+-\| ||| ||| | || ||| || | || ||| | | ||||| | | | |
+| || || | | || /+---++-+++--+++-++-+++-+++-+-+---++-++---+-+--+++-+-+-+-----++-++-++++++-+-++--+++-+++-\ | || ||| || | || ||| | | ||||| | | | |
+| || || | | || || ||/+++--+++-++-+++-+++-+-+---++-++---+-+>-+++-+-+-+-----++-++-++++++-+-++--+++-+++-+-+-++-+++--++--+--++\ ||| | | ||||| | | | |
+| || || | | || || |||||| ||| || ||| |\+-+-+---/| || | | ||| | | | || || |||||| | || ||| ||| | | || ||| || | ||| ||| | | ||||| | | | |
+| || || | | || || |||||| |\+-++-+++-+-+-+-+----+-++---+-+--+++-+-+-+-----++-++-++++++-+-++--+++-+++-+-+-++-+++--++--+--+++-+++-+-/ ||||| | | | |
+| || || | | || || |||||| | | || ||| | | | | | || | | ||| | | | || || ||||||/+-++--+++-+++-+-+-++-+++--++\ | ||| ||| | ||||| | | | |
+| || || | | || || ||||\+--+-+-++-+++-+-+-+-+----+-++---+-+--+++-+-+-+---->++-++-++++++++-++--+++-+++-+-+-++-+++--+++-+--+++-++/ | ||||| | | | |
+| || || | \---++-++---++++-+--+-+-++-+++-+-+-+-+----+-++---+-+--+++-+-+-+-----++-++-++++++++-++--+++-+++-+-+-+/ ||| ||| | ||| || | ||||| | | | |
+| || || | /---++-++\ |||| | | | || ||| | | | | |/++---+-+--+++-+-+-+-----++-++-++++++++-++--+++-+++-+-+-+--+++--+++-+--+++-++--+---+++++\| | | |
+| || || | | || |\+--++++-+--+-+-++-+++-+-+-+-+----++++---+-+--++/ | | | || || |||||||| || ||| ||| | | | ||| ||| | ||| || | ||||||| | | |
+| || || | | || | | |||| | | | || ||| \-+-+-+----++++---+-+--++--+-+-+-----++-++-++++++++-++--+++-+++-+-+-+--+++--+++-+--+/| || | ||||||| | | |
+| || || | | || | | |||\-+--+-+-++-+++---+-+-+----++++---+-+--++--+-+-+-----++-++-++++++++-++--+/| ||| | v | ||| ||| | | | || | ||||||| | | |
+| || || | | || | | ||| |/-+-+-++-+++---+-+-+----++++---+-+--++--+\| | || || |||||||| || | | ||| | | | ||| ||| | | | || | ||||||| | | |
+| || || | | || | | ||| /++-+-+-++-+++---+-+-+----++++---+-+\ || ||| | /---++-++-++++++++-++--+-+-+++-+-+\| ||| ||| | | | || | ||||||| | | |
+| ||/++--+-+---++-+-+--+++-+++-+-+-++-+++---+-+-+----++++--\| || || ||| | | || || |||||||| || | | ||| | ||| ||| ||| | | | || | ||||||| | | |
+| ||||| | | |\-+-+--+++-+++-+-+-++-+++---+-+-+----++++--++-++-++--+++-+-+---++-++-++++++++-++--+-/ ||| | ||| ||| ||| | | | || | ||||||| | | |
+| ||||| | | | | | ||| ||| | | || ||| | | | |||| || || || ||| | | || || ||||\+++-++--+---+++-+-+++--+++--+++-+--+-+-++--+---/|||||| | | |
+| ||||| | | | | | ||| ||| | | || ||| | | | ||\+--++-++-++--+++-+-+---++-++-/||| ||| |\--+---+++-+-+++--+++--+++-+--/ | || | |||||| | | |
+| ||||| | | | /+-+--+++-+++-+-+-++-+++---+-+-+----++-+-\|| || || ||| | | || || ||| ||| | | ||| | ||| ||| ||| | | || | |||||| | | |
+| ||||| | | | || | ||| ||| | | || ||| | | | || | ||| || || ||| | | || || ||| ||| | /-+---+++-+-+++--+++--+++-+----+-++\ \----++++++-+-/ |
+| ||||| | | | || | ||| ||| | | || ||| | | | || | ||| || || ||| | | || || ||| \++-+-+-+---+++-+-+++--+++--+++-+----+-+++------++++++-/ |
+| ||||| | | | || | ||| ||| | | || ||| | \-+----++-+-+++-++-++--++/ | | || || ||| || | | | ||| | ||| ||| ||| | | ||| |||||| |
+| ||||| | | | || | ||| ||| | | || ||| | | || | ||| || || || | | || || ||| || | | | ||| | ||| ||| ||| | | ||| |||||| |
+| ||||| | | | || | ||| |v| | | || ||| /+---+----++-+-+++-++-++--++--+-+---++-++--+++--++-+-+-+---+++-+-+++--+++--+++-+\ | ||| |||||| |
+| ||||| \-+---+-++-+--+++-+++-+-+-++-+++--++---+----++-+-+++-++-++--++--/ | || || ||| || | | | ||| | ||| ||| ||| || | ||| |||||| |
+| ||||| | | || | ||| ||| | | || ||| |\---+----++-+-+++-++-++--++----+---++-++--+++--++-+-+-+---+++-+-+++--+++--+++-++---+-+++------++/||| |
+| ||||| | | || | ||| ||| | | || ||| | | || | ||| || || ||/---+---++-++--+++--++\| | | ||| | ||| ||| ||| || | ||| || ||| |
+\-+++++----+---+-++-+--+++-+++-+-+-++-+++--+----+----++-+-+++-++-++--+++---+---++-++--+++--++++-+-+---/|| | |||/-+++--+++-++---+-+++------++-+++\ |
+ ||||| | | || | ||| |||/+-+-++-+++--+----+--\ || | ||| || || ||| | |\-++--+++--++++-+-+----++-+-++++-+++--/|| || | ||| || |||| |
+ |||\+----+---+-++-+--+++-+++++-+-++-+++--+----+--+-++-+-+++-++-+/ ||| | | || ||| |||| | | || | |||| ||| || || | ||| || |||| |
+ ||| | | | || | /+++-+++++-+-++-+++--+----+--+-++-+-+++-++-+---+++---+---+-\|| ||| |||| | | || | |||| ||| || || | ||| || |||| |
+ ||| | | | || | |||| ||||| | || ||| | |/-+-++-+-+++-++-+---+++---+---+-+++--+++--++++-+-+----++-+-++++-+++---++-++--\| ||| || |||| |
+ ||| | \---+-++-/ ||\+-+++++-+-++-+/| | || | |\-+-+++-++-+---+++---+---+-+++--+++--++++-+-+----++-+-++++-+++---++-++--++-+++------++-+/|| |
+/-+++-+--------+-++-\ || | ||||| | || | | | || |/+--+-+++-++-+---+++---+<--+\|||/-+++--++++-+-+----++-+-++++-+++---++-++--++-+++\ || | || |
+| ||| | | || | || | ||||| | |\-+-+--+----++-+++--+-+++-++-+---+++---+---++++++-+++--++++-+-+----++-+-++++-++/ || || || |||| || | || |
+| ||| | | || | || | ||\++-+-+--+-+--+----++-+++--+-+++-++-+---+/| | |||||| ||| |||| | | || | |||| || || || || |||| || | || |
+| ||| | | || | || | || |\-+-+--+-+--+----++-+++--+-+++-++-+---+-+---+---++++++-+++--++++-+-+----++-+-++++-/| || || || |||| || | || |
+| ||| | | || | || | || | | | | | | || ||| /+-+++-++-+---+-+---+---++++++-+++--++++-+-+--\ || | |||| | || || || |||| || | || |
+| ||| | | || | || \-++-+--+-+--+-+--+----++-+++-++-+++-++-+---+-+---+---++++++-+++--++++-+-+--+-++-+-++++--+----++-++--+/ |||| || | || |
+| ||| | | || | || || | | | | | | || ||\-++-+++-++-+---+-+---+---++++++-+++--++++-+-+--+-++-+-++++--+----++-++--+--++++-->--++-+-++----/
+|/+++-+-------\| || | || || | | \--+-+--+----++-++--++-+++-++-+---+-+---+---++++++-+++--++++-+-+--+-++-+-++++--+----++-++--+--++++-----++-/ ||
+||||| | || |\-+-++---++-+--+----+-+--+----++-++--++-+++-++-+---+-+---+---++++++-+++--++++-+-+--+-++-/ |||| | || || | |||| || ||
+||||| | || | | || || | | | | | || || || ||| || | | | | |||||| ||| |||| | | | || |||| | || || | |||| || ||
+||||| | || | | || || | | | | | || || || ||| || | | \---+---++++++-+++--++/| | | | || |||| | || || | |||| || ||
+||||| | || | | || || | | /--+-+>-+----++-++--++-+++-++-+---+-----+---++++++-+++--++-+-+-+--+-++---++++--+----++-++--+--++++---\ || ||
+||||| | || | | || || | | |/-+-+--+----++\|| || ||| || | | | |||||| ||| || | | | | ||/--++++<-+----++-++--+--++++---+-++---++---\
+||||| | || | | || || | /+-++-+-+--+----+++++--++-+++-++-+---+-----+---++++++\||| || | | | | ||| |||| | || || | |||| | || || |
+||||| | || | /+-++---++-+-++-++-+-+--+-\ ||||| || ||| || | | | |||||||||| || | | | | ||| |||| | ||/++--+--++++---+-++--\|| |
+||||| | || | || ||/--++-+-++\|| |/+--+-+--+++++--++-+++-++-+---+-\ | |||||||||| || | | | | ||| |||| | ||||| | |||| | || ||| |
+||||| | || | || |\+--++-+-+++++-+++--+-+--+++++--++-+++-++-+---+-+---+---++++++++++--++-+-+-+--+-+++--/||| | ||||| | |||| | |^ ||| |
+|||\+-+-------++-+-++-+-+--++-+-+++++-+++--+-+--+++++--++-+++-/| | | | |/--++++++++++--++-+-+-+--+-+++---+++--+----+++++--+--++++---+-++-\||| |
+||| | | || | || | | ||/+-+++++-+++--+-+--+++++--++-+++--+-+---+-+---++--++++++++++\ || | | | | ||| ||\--+----+++++--+--++++---+-++-+++/ |
+||| | | || | || | | |||| ||||| \++--+-+--+++++--++-+++--+-+---+-+---++--+++++++++++-++-+-+-+--+-+++---++---+----+++++--+--++++---+-++-++/ |
+||| | | || | || | | |||| ||||| || | | ||||| |\-+++--+-+---+-+---++--++++++++/|| || | |/+--+-+++---++---+----+++++--+--++++-\ | || || |
+||| | | || | || | | |||| ||||| || | | ||||| | ||| | | | | || |||||||| || || | ||| | |\+---++---/ ||||| | |||| | | || || |
+||| | | || | || | | |||| ||||| || | | ||||| | ||| | | | | || |||||||| || || | ||| | | | || \++++--+--+/|| | | || || |
+||| | | || | || | | |||| ||||| |\--+-+--+++++--+--+++--+-+---+-+---++--++++++++-++-++-+-+++--+-+-+---+/ |||| | | || | | || || |
+||| | | || | || | | |||| ||||| | v | ||||\--+--+++--+-+---+-+---++--+/|||||| || || | ||\--+-+-+---+----------++++--+--/ || | | || || |
+||| | | || | || | | |||| ||||| | | | |||| | ||| | | | | || | |||||| || || | || | | |/--+-----\ ||\+--+----++-+-+-+/ || |
+||| | | || | || | | |||\-+++++--+---+-+--+++/ | ||| | | | | || | |||||| || || | || | | || | | || | | || | | | || |
+||| | | || | || | | ||| ||||| | | | ||| | ||| | | | | || | |||\++-++-++-+-++---+-+-++--+-----+----++-+--+----+/ | | | || |
+||| | | || | || | | ||| ||||| /+---+-+--+++----+--+++--+-+---+-+---++-\| ||| || || || | || | | || | | || | | | | | | || |
+||| | | || | || | | ||\--+++++-++---+-+--+++----+--+++--+-+---+-+---++-++-+++-++-+/ || | |\---+-+-++--+-----+----++-+--+----+--/ | | || |
+||| | | || | || | | || |\+++-++---+-+--+++----+--+++--+-+---+-+---++-++-++/ || | || | | | | || | | || | | | | | || |
+||| | \-------++-+-++-+-+--++---+-+++-++---+-+--+++----+--+++--+-+---+-+---++-++-++--++-+--++-/ | | | || | | |\-+--+----+----+-+--+/ |
+||| | |\-+-++-+-+--++---+-+++-++---+-+--+++----+--+++--+-/ | | || || |\--++-+--+/ | | | || | | | | | | | | | |
+||| | | | || | | || | ||| || | | ||| | ||| | | | || || | || | \----+----+-+-++--+-----+----/ | | | | | | |
+||| | | | || | | || | ||| || | | ||| | ||| | | | || || | || | /+----+-+-++--+-----+-------+--+----+--\ | | | |
+||| | /------+--+-++-+-+--++---+-+++-++---+-+--+++----+--+++--+-----+-+---++-++-+---++-+------++----+-+-++--+-\ | | | | | | | | |
+||| | | | | || | | |\---+-+++-++---+-+--+++----+--+++--+-----+-+---++-++-+---+/ | || | | || | | | | | | | | | | |
+||| | | | | || | | | | ||| || | | ||| | ||| | | | || || | | | || | | \+--+-+---+-------+--+----+--+-+-+--+------/
+||| | | | | || | | | | ||| || | | ||| | ||| | | | || || | | | || | | | | | | | | | | | | |
+||| | | | | || | | | | ||| || | | ||| | ||| | \-+---++-++-+---+--+------++----+-/ | | | | | | | | | | |
+||| | | | | || | | | | ||| || | | ||| | ||| | | || || | | | |\----+<---+--+-+---+-------+--+----/ | | | |
+|\+-+--+------/ | || | | | | ||| || | | ||| | ||| | | || || | /-+--+------+-----+----+\ | | | | | | | | |
+| | | | | || | | | | ||| || | | ||| | ||| | | || || | | | | | | || | | | | | | | | |
+| | | | | || | | | | ||| || | | ||| | ||| | | |\-++-+-+-+--+------+-----+----++-+-+---+-------+--+-------+-+-+--/
+| | | | | || | | | | ||| || | | ||| \--+++--+-------+---+--++-+-+-+--+------+-----/ || | | | | | | | |
+| | | | | || | | \----+-+++-++---+-+--+++-------+++--/ | \--++-+-+-+--+------+----------++-/ | | | | | | |
+\-+-+--+---------+-+/ | | | |\+-++---+-+--+++-------+++----------+------++-+-+-+--+------+----------++---+---+-------+--+-------+-/ |
+ | | | | | | \-------+-/ | |\---+-+--+++-------+++----------/ || | | | | \----------++---+---+-------+--+-------/ |
+ | | | | | | | | \----+-+--+++-------+++-----------------/| | | | | || | | /+--+---------\ |
+ | | | | \--+---------+---+------+-//-+++-------+++------------------+-+-+-+--+-----------------++---+---+------++--+---------+\|
+ | | | | | | | | | ||| ||| | | | | | || | | || | |||
+ | \--+---------+----+---------+---+------+--+-+++-------+/| | | | | | \+---+---/ || | |||
+ | | | | | | | | |v| | | | | | | | | | || | |||
+ | | \----+---------+---+------+--+-+++-------/ | | | | | | | | || | |||
+ | | | | | \--+-+++---------+------------------+-+-+-+--+------------------+---+----------+/ | |||
+ | | | | | | |\+---------+------------------+-+-+-+--+------------------+---+----------+---/ |||
+ | | | | \---------+-+-/ \------------------+-+-+-+--+------------------+---+----------+-------------++/
+ | | | \-------------+-+------------------------------+-+-+-/ | | | | ||
+ \----+--------------+-----------------------+-/ | | \----+------------------/ | | ||
+ \--------------+-----------------------+--------------------------------+-+------+----------------------/ | ||
+ \-----------------------+--------------------------------+-/ | | ||
+ \--------------------------------+--------+---------------------------------+-------------+/
+ \--------/ \-------------/
diff --git a/day13/part1 b/day13/part1
new file mode 100755
index 0000000..a858ffe
--- /dev/null
+++ b/day13/part1
@@ -0,0 +1,219 @@
+#!/usr/bin/env ruby
+
+class Cart
+ def initialize(dir = nil)
+ @dir = dir
+ @next = :l
+ @moved = false
+ end
+
+ def moved?
+ @moved
+ end
+
+ def moved
+ @moved = true
+ end
+
+ def reset
+ @moved = false
+ end
+
+ attr_reader :dir
+
+ def turn(dir = nil)
+ case dir
+ when :l
+ case @dir
+ when :u
+ @dir = :l
+ when :d
+ @dir = :r
+ when :l
+ @dir = :d
+ when :r
+ @dir = :u
+ end
+ when :r
+ case @dir
+ when :u
+ @dir = :r
+ when :d
+ @dir = :l
+ when :l
+ @dir = :u
+ when :r
+ @dir = :d
+ end
+ else
+ case @next
+ when :l
+ @next = :s
+ self.turn(:l)
+ when :s
+ @next = :r
+ when :r
+ @next = :l
+ self.turn(:r)
+ end
+ end
+ end
+end
+
+class Cell
+ def initialize(track = nil, cart = nil)
+ @track = track
+ @cart = cart
+ end
+
+ attr_accessor :cart
+ attr_reader :track
+
+ def maybe_turn_cart
+ case @track
+ when :b
+ case @cart.dir
+ when :u
+ @cart.turn(:l)
+ when :d
+ @cart.turn(:l)
+ when :l
+ @cart.turn(:r)
+ when :r
+ @cart.turn(:r)
+ end
+ when :f
+ case @cart.dir
+ when :u
+ @cart.turn(:r)
+ when :d
+ @cart.turn(:r)
+ when :l
+ @cart.turn(:l)
+ when :r
+ @cart.turn(:l)
+ end
+ when :i
+ @cart.turn
+ end
+ end
+
+ def show
+ case @cart&.dir
+ when :u
+ "^"
+ when :d
+ "v"
+ when :l
+ "<"
+ when :r
+ ">"
+ else
+ case @track
+ when :v
+ "|"
+ when :h
+ "-"
+ when :f
+ "/"
+ when :b
+ "\\"
+ when :i
+ "+"
+ else
+ " "
+ end
+ end
+ end
+end
+
+input = $stdin.readlines
+
+grid = []
+
+input.each do |irow|
+ grow = []
+ irow.chars.each do |cell|
+ case cell
+ when " "
+ grow << Cell.new
+ when "-"
+ grow << Cell.new(:h)
+ when "|"
+ grow << Cell.new(:v)
+ when "/"
+ grow << Cell.new(:f)
+ when "\\"
+ grow << Cell.new(:b)
+ when "+"
+ grow << Cell.new(:i)
+ when "^"
+ grow << Cell.new(:v, Cart.new(:u))
+ when "v"
+ grow << Cell.new(:v, Cart.new(:d))
+ when "<"
+ grow << Cell.new(:h, Cart.new(:l))
+ when ">"
+ grow << Cell.new(:h, Cart.new(:r))
+ end
+ end
+ grid << grow
+end
+
+loop do
+ grid.each do |row|
+ row.each do |cell|
+ cell.cart&.reset
+ end
+ end
+
+ grid.length.times do |row|
+ grid[row].length.times do |col|
+ cart = grid[row][col].cart
+ unless cart&.moved? then
+ case cart&.dir
+ when :u
+ newcell = grid[row-1][col]
+ if newcell.cart then
+ puts "#{col},#{row-1}"
+ exit 0
+ end
+ cart.moved
+ grid[row][col].cart = nil
+ newcell.cart = cart
+ newcell.maybe_turn_cart
+ when :d
+ newcell = grid[row+1][col]
+ if newcell.cart then
+ puts "#{col},#{row+1}"
+ exit 0
+ end
+ cart.moved
+ grid[row][col].cart = nil
+ newcell.cart = cart
+ newcell.maybe_turn_cart
+ when :l
+ newcell = grid[row][col-1]
+ if newcell.cart then
+ puts "#{col-1},#{row}"
+ exit 0
+ end
+ cart.moved
+ grid[row][col].cart = nil
+ newcell.cart = cart
+ newcell.maybe_turn_cart
+ when :r
+ newcell = grid[row][col+1]
+ if newcell.cart then
+ puts "#{col+1},#{row}"
+ exit 0
+ end
+ cart.moved
+ grid[row][col].cart = nil
+ newcell.cart = cart
+ newcell.maybe_turn_cart
+ end
+ end
+ end
+ end
+end
diff --git a/day13/part2 b/day13/part2
new file mode 100755
index 0000000..248f1c3
--- /dev/null
+++ b/day13/part2
@@ -0,0 +1,232 @@
+#!/usr/bin/env ruby
+
+class Cart
+ def initialize(dir = nil)
+ @dir = dir
+ @next = :l
+ @moved = false
+ end
+
+ def moved?
+ @moved
+ end
+
+ def moved
+ @moved = true
+ end
+
+ def reset
+ @moved = false
+ end
+
+ attr_reader :dir
+
+ def turn(dir = nil)
+ case dir
+ when :l
+ case @dir
+ when :u
+ @dir = :l
+ when :d
+ @dir = :r
+ when :l
+ @dir = :d
+ when :r
+ @dir = :u
+ end
+ when :r
+ case @dir
+ when :u
+ @dir = :r
+ when :d
+ @dir = :l
+ when :l
+ @dir = :u
+ when :r
+ @dir = :d
+ end
+ else
+ case @next
+ when :l
+ @next = :s
+ self.turn(:l)
+ when :s
+ @next = :r
+ when :r
+ @next = :l
+ self.turn(:r)
+ end
+ end
+ end
+end
+
+class Cell
+ def initialize(track = nil, cart = nil)
+ @track = track
+ @cart = cart
+ end
+
+ attr_accessor :cart
+ attr_reader :track
+
+ def maybe_turn_cart
+ case @track
+ when :b
+ case @cart.dir
+ when :u
+ @cart.turn(:l)
+ when :d
+ @cart.turn(:l)
+ when :l
+ @cart.turn(:r)
+ when :r
+ @cart.turn(:r)
+ end
+ when :f
+ case @cart.dir
+ when :u
+ @cart.turn(:r)
+ when :d
+ @cart.turn(:r)
+ when :l
+ @cart.turn(:l)
+ when :r
+ @cart.turn(:l)
+ end
+ when :i
+ @cart.turn
+ end
+ end
+
+ def show
+ case @cart&.dir
+ when :u
+ "^"
+ when :d
+ "v"
+ when :l
+ "<"
+ when :r
+ ">"
+ else
+ case @track
+ when :v
+ "|"
+ when :h
+ "-"
+ when :f
+ "/"
+ when :b
+ "\\"
+ when :i
+ "+"
+ else
+ " "
+ end
+ end
+ end
+end
+
+input = $stdin.readlines
+
+grid = []
+
+input.each do |irow|
+ grow = []
+ irow.chars.each do |cell|
+ case cell
+ when " "
+ grow << Cell.new
+ when "-"
+ grow << Cell.new(:h)
+ when "|"
+ grow << Cell.new(:v)
+ when "/"
+ grow << Cell.new(:f)
+ when "\\"
+ grow << Cell.new(:b)
+ when "+"
+ grow << Cell.new(:i)
+ when "^"
+ grow << Cell.new(:v, Cart.new(:u))
+ when "v"
+ grow << Cell.new(:v, Cart.new(:d))
+ when "<"
+ grow << Cell.new(:h, Cart.new(:l))
+ when ">"
+ grow << Cell.new(:h, Cart.new(:r))
+ end
+ end
+ grid << grow
+end
+
+loop do
+ carts = 0
+ lastcart = {x: 0, y: 0}
+
+ grid.length.times do |row|
+ grid[row].length.times do |col|
+ if grid[row][col].cart then
+ grid[row][col].cart.reset
+ lastcart[:x] = col
+ lastcart[:y] = row
+ carts += 1
+ end
+ end
+ end
+
+ if carts == 1 then
+ puts "#{lastcart[:x]},#{lastcart[:y]}"
+ exit 0
+ end
+
+ grid.length.times do |row|
+ grid[row].length.times do |col|
+ cart = grid[row][col].cart
+ unless cart&.moved? then
+ case cart&.dir
+ when :u
+ cart.moved
+ grid[row][col].cart = nil
+ newcell = grid[row-1][col]
+ if newcell.cart then
+ newcell.cart = nil
+ else
+ newcell.cart = cart
+ newcell.maybe_turn_cart
+ end
+ when :d
+ cart.moved
+ grid[row][col].cart = nil
+ newcell = grid[row+1][col]
+ if newcell.cart then
+ newcell.cart = nil
+ else
+ newcell.cart = cart
+ newcell.maybe_turn_cart
+ end
+ when :l
+ cart.moved
+ grid[row][col].cart = nil
+ newcell = grid[row][col-1]
+ if newcell.cart then
+ newcell.cart = nil
+ else
+ newcell.cart = cart
+ newcell.maybe_turn_cart
+ end
+ when :r
+ cart.moved
+ grid[row][col].cart = nil
+ newcell = grid[row][col+1]
+ if newcell.cart then
+ newcell.cart = nil
+ else
+ newcell.cart = cart
+ newcell.maybe_turn_cart
+ end
+ end
+ end
+ end
+ end
+end