aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2019-10-22 18:40:19 +0100
committerNat Lasseter <user@4574.co.uk>2019-10-22 18:40:19 +0100
commit487c3425a23ef52c6de3c045f1110d5e7342d042 (patch)
tree157a5c790ee7072a95dabf4a1f66e252dadcece9
parent85757e46552653685abe692d28bde663d6b4d779 (diff)
Day 14, part 2 not working (very slow)
-rw-r--r--day14/Dockerfile7
-rw-r--r--day14/Makefile17
-rwxr-xr-xday14/entrypoint13
-rw-r--r--day14/input1
-rwxr-xr-xday14/part124
-rwxr-xr-xday14/part232
6 files changed, 94 insertions, 0 deletions
diff --git a/day14/Dockerfile b/day14/Dockerfile
new file mode 100644
index 0000000..5e0a8b7
--- /dev/null
+++ b/day14/Dockerfile
@@ -0,0 +1,7 @@
+FROM ruby:2.5-slim
+
+WORKDIR /opt
+
+COPY . .
+
+ENTRYPOINT ["./entrypoint"]
diff --git a/day14/Makefile b/day14/Makefile
new file mode 100644
index 0000000..3ad62be
--- /dev/null
+++ b/day14/Makefile
@@ -0,0 +1,17 @@
+DAY = 14
+
+.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/day14/entrypoint b/day14/entrypoint
new file mode 100755
index 0000000..8982d21
--- /dev/null
+++ b/day14/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/day14/input b/day14/input
new file mode 100644
index 0000000..2f44252
--- /dev/null
+++ b/day14/input
@@ -0,0 +1 @@
+165061
diff --git a/day14/part1 b/day14/part1
new file mode 100755
index 0000000..2f46375
--- /dev/null
+++ b/day14/part1
@@ -0,0 +1,24 @@
+#!/usr/bin/env ruby
+
+input = $stdin.readlines[0].strip.to_i
+
+scores = [3, 7]
+elf1 = 0
+elf2 = 1
+
+loop do
+ se1 = scores[elf1]
+ se2 = scores[elf2]
+
+ sum = se1 + se2
+ scores += sum.to_s.chars.map(&:to_i)
+
+ slen = scores.length
+
+ elf1 = (elf1 + 1 + se1) % slen
+ elf2 = (elf2 + 1 + se2) % slen
+
+ break if slen > (input + 10)
+end
+
+puts scores[input...(input+10)].join
diff --git a/day14/part2 b/day14/part2
new file mode 100755
index 0000000..9a2c9f3
--- /dev/null
+++ b/day14/part2
@@ -0,0 +1,32 @@
+#!/usr/bin/env ruby
+
+input = $stdin.readlines[0].strip.chars.map(&:to_i)
+ilen = input.length
+
+scores = [3, 7]
+elf1 = 0
+elf2 = 1
+
+loop do
+ se1 = scores[elf1]
+ se2 = scores[elf2]
+
+ sum = se1 + se2
+ scores += sum.to_s.chars.map(&:to_i)
+
+ slen = scores.length
+
+ elf1 = (elf1 + 1 + se1) % slen
+ elf2 = (elf2 + 1 + se2) % slen
+
+ m1 = scores[-ilen..-1]
+ m2 = scores[-ilen-1..-2]
+
+ if m1 == input then
+ puts slen - ilen
+ break
+ elsif m2 == input then
+ puts slen - ilen - 1
+ break
+ end
+end