aboutsummaryrefslogtreecommitdiff
path: root/day04
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2019-12-04 11:26:26 +0000
committerNat Lasseter <user@4574.co.uk>2019-12-04 11:26:26 +0000
commit5e8b0fe13c85e66fa5a1f90ee13e9ddfadae5c09 (patch)
tree0d2e83f9b3440affe639f78d57a5b595a8282a51 /day04
parent4099b94b8094ca753df43e946b8804b2bf71b080 (diff)
Day 04, in minizinc of course.
Diffstat (limited to 'day04')
-rw-r--r--day04/Dockerfile7
-rw-r--r--day04/Makefile14
-rwxr-xr-xday04/entrypoint13
-rw-r--r--day04/input1
-rw-r--r--day04/input.dzn1
-rwxr-xr-xday04/part13
-rw-r--r--day04/part1.mzn27
-rwxr-xr-xday04/part23
-rw-r--r--day04/part2.mzn29
9 files changed, 98 insertions, 0 deletions
diff --git a/day04/Dockerfile b/day04/Dockerfile
new file mode 100644
index 0000000..363f0e6
--- /dev/null
+++ b/day04/Dockerfile
@@ -0,0 +1,7 @@
+FROM minizinc/minizinc:latest
+
+WORKDIR /opt
+
+COPY . .
+
+ENTRYPOINT ["./entrypoint"]
diff --git a/day04/Makefile b/day04/Makefile
new file mode 100644
index 0000000..991c0f6
--- /dev/null
+++ b/day04/Makefile
@@ -0,0 +1,14 @@
+DAY = 04
+
+.PHONY: run clean
+
+run: build
+ docker run -it --rm aoc2019day$(DAY)
+
+build: part* input.dzn
+ docker build -t aoc2019day$(DAY) .
+ touch build
+
+clean:
+ docker image rm -f aoc2019day$(DAY)
+ rm -f build
diff --git a/day04/entrypoint b/day04/entrypoint
new file mode 100755
index 0000000..3a5d4de
--- /dev/null
+++ b/day04/entrypoint
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+if [ -x part1 ] ; then
+ echo -ne "Part 1:\n\t"
+ time ./part1
+fi
+if [ -x part1 -a -x part2 ] ; then
+ echo
+fi
+if [ -x part2 ] ; then
+ echo -ne "Part 2:\n\t"
+ time ./part2
+fi
diff --git a/day04/input b/day04/input
new file mode 100644
index 0000000..b612032
--- /dev/null
+++ b/day04/input
@@ -0,0 +1 @@
+183564-657474
diff --git a/day04/input.dzn b/day04/input.dzn
new file mode 100644
index 0000000..90fff44
--- /dev/null
+++ b/day04/input.dzn
@@ -0,0 +1 @@
+range = 183564..657474;
diff --git a/day04/part1 b/day04/part1
new file mode 100755
index 0000000..d78634e
--- /dev/null
+++ b/day04/part1
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+minizinc --all-solutions -s part1.mzn input.dzn 3>&1 1>/dev/null 2>&3- | cut -d= -f2
diff --git a/day04/part1.mzn b/day04/part1.mzn
new file mode 100644
index 0000000..eccd08a
--- /dev/null
+++ b/day04/part1.mzn
@@ -0,0 +1,27 @@
+include "globals.mzn";
+
+par set of int: range;
+
+array[0..5] of var 0..9: digits;
+var range: code;
+
+constraint
+ code =
+ digits[0] * 100000 +
+ digits[1] * 10000 +
+ digits[2] * 1000 +
+ digits[3] * 100 +
+ digits[4] * 10 +
+ digits[5];
+
+constraint
+ exists (i in 0..4) (
+ digits[i] == digits[i+1]
+ );
+
+constraint
+ increasing(digits);
+
+output [show(code)];
+
+solve satisfy;
diff --git a/day04/part2 b/day04/part2
new file mode 100755
index 0000000..3376bec
--- /dev/null
+++ b/day04/part2
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+minizinc --all-solutions -s part2.mzn input.dzn 3>&1 1>/dev/null 2>&3- | cut -d= -f2
diff --git a/day04/part2.mzn b/day04/part2.mzn
new file mode 100644
index 0000000..ea5bbb1
--- /dev/null
+++ b/day04/part2.mzn
@@ -0,0 +1,29 @@
+include "globals.mzn";
+
+par set of int: range;
+
+array[0..5] of var 0..9: digits;
+var range: code;
+
+constraint
+ code =
+ digits[0] * 100000 +
+ digits[1] * 10000 +
+ digits[2] * 1000 +
+ digits[3] * 100 +
+ digits[4] * 10 +
+ digits[5];
+
+constraint
+ exists (i in 0..4) (
+ digits[i] == digits[i+1] /\
+ if i > 0 then digits[i-1] != digits[i] else true endif /\
+ if i < 4 then digits[i+2] != digits[i] else true endif
+ );
+
+constraint
+ increasing(digits);
+
+output [show(code)];
+
+solve satisfy;