From 5e8b0fe13c85e66fa5a1f90ee13e9ddfadae5c09 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Wed, 4 Dec 2019 11:26:26 +0000 Subject: Day 04, in minizinc of course. --- day04/Dockerfile | 7 +++++++ day04/Makefile | 14 ++++++++++++++ day04/entrypoint | 13 +++++++++++++ day04/input | 1 + day04/input.dzn | 1 + day04/part1 | 3 +++ day04/part1.mzn | 27 +++++++++++++++++++++++++++ day04/part2 | 3 +++ day04/part2.mzn | 29 +++++++++++++++++++++++++++++ 9 files changed, 98 insertions(+) create mode 100644 day04/Dockerfile create mode 100644 day04/Makefile create mode 100755 day04/entrypoint create mode 100644 day04/input create mode 100644 day04/input.dzn create mode 100755 day04/part1 create mode 100644 day04/part1.mzn create mode 100755 day04/part2 create mode 100644 day04/part2.mzn 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; -- cgit v1.2.1