From 85757e46552653685abe692d28bde663d6b4d779 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Tue, 22 Oct 2019 17:59:19 +0100 Subject: Day 13 --- day13/Dockerfile | 7 ++ day13/Makefile | 17 ++++ day13/entrypoint | 13 ++++ day13/input | 150 +++++++++++++++++++++++++++++++++++ day13/part1 | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++ day13/part2 | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 638 insertions(+) create mode 100644 day13/Dockerfile create mode 100644 day13/Makefile create mode 100755 day13/entrypoint create mode 100644 day13/input create mode 100755 day13/part1 create mode 100755 day13/part2 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 -- cgit v1.2.1