day 20 sol1

This commit is contained in:
Yann Esposito (Yogsototh) 2017-12-23 10:14:29 +01:00
parent e4e6730348
commit e11b690d75
Signed by untrusted user who does not match committer: yogsototh
GPG key ID: 7B19A4C650D59646
11 changed files with 1729 additions and 3 deletions

View file

@ -2,7 +2,7 @@
--
-- see: https://github.com/sol/hpack
--
-- hash: 877996d6cd90e6a9a1d5d7f01e79fd91225f46e4cf930943da73fad95dda8ea0
-- hash: dd5686d02b76a5cdfd0af22f3af753c80816616396b5f3c7ad773a552f9d0647
name: adventofcode
version: 0.1.0.0
@ -48,7 +48,10 @@ library
Day16
Day17
Day18
Day19
other-modules:
Day20
DayXX
Permutations
Paths_adventofcode
build-depends:
@ -56,6 +59,8 @@ library
, base >=4.7 && <5
, containers
, foldl
, generic-lens
, lens
, parsec
, protolude
, text

View file

@ -26,6 +26,12 @@ import qualified Day15
import qualified Day16
import qualified Day17
import qualified Day18
import qualified Day19
-- import qualified Day20
-- import qualified Day21
-- import qualified Day22
-- import qualified Day23
-- import qualified Day24
showSol :: [Char] -> Doc -> IO ()
showSol txt d = putText . toS . render $
@ -57,6 +63,12 @@ solutions = Map.fromList [(["01"], day01)
,(["16"], day16)
,(["17"], day17)
,(["18"], day18)
,(["19"], day19)
,(["20"], dayXX)
,(["21"], dayXX)
,(["22"], dayXX)
,(["23"], dayXX)
,(["24"], dayXX)
]
@ -218,3 +230,15 @@ day18 = do
showSol "Solution 1" (int (fromMaybe 0 sol1))
let sol2 = Day18.solution2 input
showSol "Solution 2" (int sol2)
day19 :: IO ()
day19 = do
putText "Day 19:"
input <- Day19.parseInput
let sol1 = Day19.solution1 input
showSol "Solution 1" (text sol1)
let sol2 = Day19.solution2 input
showSol "Solution 2" (int sol2)
dayXX :: IO ()
dayXX = putText "Not done yet"

201
inputs/day19.txt Normal file
View file

@ -0,0 +1,201 @@
|
+-----------------------------------+ +-+ +-------------------------------------------------------------------------------------------+ +-+
| | | | | | | | |
+-----------------+ | +-----+ | +-----+ | | +---------------------------------------------|---+ |
| | | | | | | | | | |
+-------------+ +-+ | | | +---------------+ | | |
| | | | | | | | | | |
+---------------------------------------------------------------------|---------|-----------+ | | +---------------------|-----+
| | | | | | | | | | | | |
| | +-----+ +-------------------+ +-+ +-------------------------------------------------------------------------------------------+
| | | | | | | | | | | | |
| +-------|-------+ | +-|-+ +---|-------------------------------------------------------|---------------------------------------------|---+ |
| | | | | | | | | | | | | | |
| | | | | +-|-----|---------+ +-----------------------------------------------------------------|-------------------------|---+ |
| | | | | | | | | | | | | | | | |
| +-----------------------------|---|---|-----|---|-------------------------------------------+ | +-------------------|-------------------------+ +-+ |
| | | | | | | | | | | | | | | | | | |
| +---------------|-------------|-------|-------------|-----------|-----|-------------------------------------|-----------------------------------|---------------------------+ +-+ |
| | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | +---|---+ +-----------+ +-+
| | | | | | | | | | | | | | | | | | | | |
| | +-------------|---------------------|-------|-----|-----------|-----|---------------------|---------------|---------------|-------+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | |
| +---|-|---------------------------|---------------|---+ | | +---|-----|-----------------+ | | +---|-------------+ | | | | | +-+
| | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +-------------------+ +-+ | +-----------------------------------+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | +---------------|-------------|---------------|-------|---------|-----|-+ | | | | | | | | | +-----------|-------------+ | | |
| | | | | | | | | | | | | | | | P | | | | | | | | | | | |
| | | | | | | | | +-|-------------------------|-|---------------|-|---------|-----------|-------|-------|-----------+ | +-------+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+-------------+ | | | +---------|---------------|-------|-|-----|-----------------|-|-|---+ | | | | | | | | | | +-----+ | +-+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+-----+ | | | | | | | | +---------------|-----------------|-|-|-------------------------------------------|---|---|---------------------|-------+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +---------------|-------------|---------|-|-----|-------+ | | | | | | +---|-------------+ | | | | | | +-+ | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | +-------|---------------------|---|-+ +---+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|---|-+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+---------------------|-------------|-----|-----|-|-------|-------|---------------|-|-----|-|-----|---------|---|---|-------------|-+ | | | | +---|---|-------------|-----+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +---------+ | | | | | +---|-+ | | | | | | | | | | | | | | | | | +---------|---+ | +---|-+ | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-----------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | +-----------|-----|-----|-----|---|-|-----|---------------|-------|-|-----------------------|---------------------+ | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-|-----------|-----+ | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +---+ | | | | | | | +-----+ | | +-|-+ +-------------|-|---|-----------|-------|---|---+ | | | | | +-+ | | | +---------+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | +-|-|---|---|-|---------------------|-----|-|---------------------|-----------------|-----|---------+ | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | +---+ | | | | | | | | | | | | | | | | | | +-|-------------------|-----------|-+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----------------|-------|-----------+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | +-----------|-----------------|---|-|-------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | +-------|-|-|---|-----------------|---------|---------------|-+ | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | +---|-------------|---|-|---|---------------|---|-|-----+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +---------------|-----------|-----|-+ | | | | | | | | | | | | +-|-----------|-------|---|-|-+ | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | +---|-------------------------+ | +-----|-----------|-------|-----------|-|-|-------|---------------|-+ | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | +-------------|---|-------------|-|---|-|---------+ | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +---------------|-------------|---|-----+ +-------|-------|-----|---------|-----------|---|-|-------------|-|-|-|-----|-------------|-|-|-|-----------|-----|-------+ | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +---|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | +---|-----|-----|-----------------+ | | | +---------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +-+ | | | | | +-----+ | | | | | | | | | | | | | +-|-+ | +-+ | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | +-------|-------------------|-----------|---|------------Y--|-------------|---------------|-----|---|-----|---------|---|-----------+ | | | | | | |
| | | | X | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | +---------|---------------------------------------|-----|-----------|---|---------|-|-----------+ | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +-|-------------------------|-----|-----------|-|-----------|---|-------------|---------|-|---|-|-----------|---------|-|---------------------|-|---------|-------|-----------|-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +-|---------|-------------|-|-|-------------|---------|-|-----------------|-------+ | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-----------|-----------------------|-|---+ | +---------------|-------------|---|-|-+ | | | | | | | +-------|---|-----|-|-+ | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | O | | |
| | | | | | | | | | | | | | | | | | | +-|-----|-----------------|-|---|-+ | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | +---------|-------|-|---|-----------------------|-|-|-|---+ | | | | | | | | | | | | |
| | | | | | | | | | | | R | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | +-|---------|-|---------------|-------------|-+ | | | | | | | +-----|-|-|-|-|-------|-|-|-----------|-|-----|-|---+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | +---|-|---+ | +---------|-----------|-----------------|---------|-----------------------|-----|-+ | | | | +---------|---|---+ | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | +-----|---------|-|---------------|-------------|-----------|---|-----|-----------|---------|-|---+ +-+ +-----|-|---------------+ | | | | | |
| | | | | | | | | | | | | | | | | | W | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | +---|-----|-------|---|---+ | +-|-|---|-------|-|-------|-----|-+ | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | +-------+ | | | | | | | +-|---------------------|---|-|-|---|-+ | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------|-|---|---|-|-------+ | | +-----+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | +-|-------|---------|-+ | +---+ | | | +-|-----|---------+ +-|-------------+ | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +-|-|-------|---------------|-------|-|-----------------|-------------|---|-----|-----------------|-|-|-|-----|-----------|-----|---|---|---|-|-----------|-----|-|-------------------------+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +-------+ | | | | +-+ +-------|---------|-------------|---|-----------------------|-----|-----|-------|---|-----|-----|---+ | | +---|-+ | | | | | | | | +-------+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | +-----|-------|---+ | | | | | +---+ | | | | | | +---|-|---|-------|---|-----|-|---|---------|-----------+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | +-|-------------|-----------|---------------+ +-|-----|-+ +---|-----|---|-|-------------|---|-+ | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +---------|-------------|-----------------------------------------------|-----|-------|---|-----|-----------|---|-------|-----|-|---|---+ | | | +-|-|---|---|---------------|-+ | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | +-----------------------|-|-|-----------------------|---|-|-----|-----------|-|-----------------------|-|-------+ | | | +-----|---|-|---|---+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | +---+ | | +-|-------------+ | | | | | | | +-----+ | | | | | | | | | | | | | | | | | | | |
| | E | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +-----------+ | +-+ | | | | | | | | | | | | +-+ | | | | | | | | | | | +---|---|-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | +-----------------------|---|-------|-----|-----------------------------------|-|---------------|-------|-----|---|---------|-|-----------+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-|---------|---|---------------------|---|-------|-----------------------+ | | +-------------|---------+ | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +-----------+ | +-----|-----|---+ | +-|-------|-|-----------------|-|---------|-------|-|-------------------|---|-------+ | +-+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------|---|---------|-|-|---------|-|-|-----|-----|-|-+ | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | +-----|-------------|-------------|-----------|-|-|---|---|---------|---|---------|---|-|-----+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | +-----------|-----|-----|---------+ | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +-----------------------------------------------|-------|---|-----|-----------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +-------------------------------------------------------|-|-------|---+ | | | +-|-----|-------------|-|---|-|---|---------------|-|---|---|-------------|-+ | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +-|-----------|-----------|-----|---+ | | | | | | | +-----|-|-----------+ | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +---|---------------------------------|---|-+ +---|---|-|-------|-|-----------|-|-|--H--------|---|-------------------|---|-|-----------------------+ | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | +-----|-|-|-------|-|---------|-|---------|---|---|-------|---|-------------|-----|-------------------|-----|---------|-|-------|-----|-----+ | | | +-|---+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------+ | | | | +-+ | | | | +-|---|-|-------|---|-------|-|-+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +---------------------|---|-|-----|-------------|-------------------------------|-|-------------|---------|---------------------------|---+ | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | +-----|-----|-------|---|-----------------|-|---|---|-|-----------------------------------|---------|---|-------|---+ | | | | | +-----+ | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +-|---------------|-+ | | | +-------|---|-----------|-----------+ | | | +---------|-----|---|-------|-|-+ | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +-------------|---|-------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | +---------|-|-|-------------------------|-----------------|---|-------|-|-------------|-|-----|---------|-----|---------|---|-------|-+ | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-|-|-------|-------|-------------|-------|---+ | | | | +-----------+ | | | | | | | | | | | | | | | | | | | | | +-----+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +-|-----------+ | | | | | | | | | | +-+ | | | | | | | +-|-------+ | | | +-------|---------------|---------|---+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +-----------+ | | | | | | | | | +---|-------------|-----------|-------------|-----------|-|---|---------+ | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +-|-----+ | | | | | | | | +---------------------|---|-|---|-|---|-------------|-----|---|-----|-------|-|-|---------------|---------------|-----------------|---+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +-|-------|---|-----------|---------------+ | +---|-|-+ +-+ | | | +-------+ +-+ | | | | | | | +-------+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +-|-|-----------------+ +---+ | | | | | +---|-|---|---------------------|-------|-------------------------------|---|-|-----|---|-------|-+ | | | +---|-----|-+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | +-|-----|---------|-------------|-|-------------------------|-|-------------|-------------|---------|-----|-|---|---|-----+ | +-|-+ | | | +---+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-|-|---|-|---------|-------------|---|-----------|---|-----------|-----------------+ | | | +-|---------+ | | | +-----|-----|-|---|-----------|---|-------|---|-|-----+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-|-|-+ | | | | +-----|-|-------|---------------------------------|-------|-------+ +---------+ +---|-----|---|-|-|---+ | +---------+ | | | | | +-|---+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-|-+ +-----|-------------------------|---|-------+ | | | | +---------|-----+ | | +---------------|---|-------|-------|---|-----------|-------------|-----|---+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +---+ | +---------|---------------------|-----------------------|---|---------------|-----|-----------------+ | | +---------+ | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-|-|-------|-------+ | | +-----------|---------|-|---|-----------------------|-----|-----------|---------|---|---------|---|-------------------|-------------|-----------+ | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+---+ | | | +-------------+ +-----------------------|-+ | | +---|---+ +-----------|-------|-----|-----------|-|-------+ +---|-------+ | +-----------+ | |
| | | | | | | | | | | | | | | | | | | | | | |
+---+ +-----------+ | | +---------------+ +-+ +-----------------+ | | +-----------|-------------------+ | | | | |
| | | | | | | | | | | | |
+-----------|-----------------------------------------------------------------|-|-------------|---|-----------------+ +---+ | | | |
| | | | | | | | | | | | |
+-----------+ +-------------------------------------------------------+ +---N +-+ +-----------------------+ +-------------+ +---+

1000
inputs/day20.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -31,6 +31,12 @@ library:
- Day16
- Day17
- Day18
- Day19
# - Day20
# - Day21
# - Day22
# - Day23
# - Day24
dependencies:
- base >=4.7 && <5
- protolude
@ -40,6 +46,8 @@ library:
- array
- parsec
- vector
- lens
- generic-lens
executables:
adventofcode-exe:
main: Main.hs

194
src/Day19.hs Normal file
View file

@ -0,0 +1,194 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
{-|
Somehow, a network packet got lost and ended up here. It's trying to follow a
routing diagram (your puzzle input), but it's confused about where to go.
Its starting point is just off the top of the diagram. Lines (drawn with |, -,
and +) show the path it needs to take, starting by going down onto the only line
connected to the top of the diagram. It needs to follow this path until it
reaches the end (located somewhere within the diagram) and stop there.
Sometimes, the lines cross over each other; in these cases, it needs to continue
going the same direction, and only turn left or right when there's no other
option. In addition, someone has left letters on the line; these also don't
change its direction, but it can use them to keep track of where it's been. For
example:
|
| +--+
A | C
F---|----E|--+
| | | D
+B-+ +--+
Given this diagram, the packet needs to take the following path:
- Starting at the only line touching the top of the diagram, it must go down,
pass through A, and continue onward to the first +.
- Travel right, up, and right, passing through B in the process.
- Continue down (collecting C), right, and up (collecting D).
- Finally, go all the way left through E and stopping at F.
Following the path to the end, the letters it sees on its path are ABCDEF.
The little packet looks up at you, hoping you can help it find the way. What
letters will it see (in the order it would see them) if it follows the path?
(The routing diagram is very wide; make sure you view it without line wrapping.)
--- Part Two ---
The packet is curious how many steps it needs to go.
For example, using the same routing diagram from the example above...
|
| +--+
A | C
F---|--|-E---+
| | | D
+B-+ +--+
...the packet would go:
- 6 steps down (including the first line at the top of the diagram).
- 3 steps right.
- 4 steps up.
- 3 steps right.
- 4 steps down.
- 3 steps right.
- 2 steps up.
- 13 steps left (including the F it stops on).
This would result in a total of 38 steps.
How many steps does the packet need to go?
|-}
module Day19 where
import Protolude
import Control.Lens hiding ((&))
import Data.Array
import Data.Generics.Product hiding (position)
import qualified Data.Text as T
import GHC.Generics
type Grid = Array (Int,Int) Char
parseInput :: IO Grid
parseInput = parseTxt <$> readFile "inputs/day19.txt"
testInput :: Text
testInput = " | \n\
\ | +--+ \n\
\ A | C \n\
\ F---|----E|--+ \n\
\ | | | D \n\
\ +B-+ +--+ \n"
parseTxt :: Text -> Grid
parseTxt txt =
let
sentences :: [[Char]]
sentences = txt & T.lines & map T.unpack
bounds = ((1,1),(length sentences, maybe 0 length (head sentences)))
in listArray bounds (concat sentences)
data AppState =
AppState { letters :: [Char]
, position :: (Int,Int)
, direction :: (Int,Int)
, nbSteps :: Int
, grid :: Grid
} deriving (Eq, Show, Generic)
solution1 :: Grid -> [Char]
solution1 grid =
let finalState = execState runPath (AppState [] (1,1) (1,0) 0 grid)
in letters finalState & reverse
runPath :: State AppState ()
runPath = do
searchTop
followPath
searchTop :: State AppState ()
searchTop = do
grid <- use (field @"grid")
pos <- use (field @"position")
-- debugtr "searchTop"
when (grid ! pos /= '|') $ do
field @"position" . _2 += 1
searchTop
debugtr :: Text -> State AppState ()
debugtr str = do
grid <- use (field @"grid")
pos <- use (field @"position")
dir <- use (field @"direction")
ls <- use (field @"letters")
let res = (str,pos,grid ! pos,dir,reverse ls)
traceShow (deepseq res res) return ()
followPath :: State AppState ()
followPath = do
grid <- use (field @"grid")
pos <- use (field @"position")
-- debugtr "followPath"
case grid ! pos of
'+' -> searchNewDirection
' ' -> continue
'|' -> continue
'-' -> continue
c -> do
field @"letters" %= (c:)
searchNewDirection
addDir :: (Int,Int) -> (Int,Int) -> (Int,Int)
addDir (x1,y1) (x2,y2) = (x1+x2,y1+y2)
continue :: State AppState ()
continue = do
dir <- use (field @"direction")
field @"position" %= addDir dir
field @"nbSteps" += 1
-- debugtr "continue"
followPath
inBound :: ((Int,Int),(Int,Int)) -> (Int,Int) -> Bool
inBound ((minx,miny),(maxx,maxy)) (x,y) =
minx <= x && x <= maxx && miny <= y && y <= maxy
backdir :: (Int,Int) -> (Int,Int)
backdir (x,y) = (-x,-y)
searchNewDirection :: State AppState ()
searchNewDirection = do
grid <- use (field @"grid")
(posx,posy) <- use (field @"position")
dir <- use (field @"direction")
let
bnds = bounds grid
possibleDirs = [(1,0), (0,-1), (-1,0), (0,1)]
& filter (/= backdir dir)
& map (\(dx,dy)->((dx,dy),(posx+dx,posy+dy)))
& filter (\(_,p)-> inBound bnds p && grid ! p /= ' ')
-- traceShow possibleDirs $ return ()
case possibleDirs of
[(newdir,_)] -> do
field @"direction" .= newdir
continue
_ -> return ()
solution2 :: Grid -> Int
solution2 grid =
let finalState = execState runPath (AppState [] (1,1) (1,0) 0 grid)
in 1 + nbSteps finalState

152
src/Day20.hs Normal file
View file

@ -0,0 +1,152 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
{-|
--- Day 20: Particle Swarm ---
Suddenly, the GPU contacts you, asking for help. Someone has asked it to
simulate too many particles, and it won't be able to finish them all in time to
render the next frame at this rate.
It transmits to you a buffer (your puzzle input) listing each particle in order
(starting with particle 0, then particle 1, particle 2, and so on). For each
particle, it provides the X, Y, and Z coordinates for the particle's position
(p), velocity (v), and acceleration (a), each in the format <X,Y,Z>.
Each tick, all particles are updated simultaneously. A particle's properties are
updated in the following order:
Increase the X velocity by the X acceleration.
Increase the Y velocity by the Y acceleration.
Increase the Z velocity by the Z acceleration.
Increase the X position by the X velocity.
Increase the Y position by the Y velocity.
Increase the Z position by the Z velocity.
Because of seemingly tenuous rationale involving z-buffering, the GPU would like
to know which particle will stay closest to position <0,0,0> in the long term.
Measure this using the Manhattan distance, which in this situation is simply the
sum of the absolute values of a particle's X, Y, and Z position.
For example, suppose you are only given two particles, both of which stay
entirely on the X-axis (for simplicity). Drawing the current states of particles
0 and 1 (in that order) with an adjacent a number line and diagram of current X
positions (marked in parenthesis), the following would take place:
p=< 3,0,0>, v=< 2,0,0>, a=<-1,0,0> -4 -3 -2 -1 0 1 2 3 4
p=< 4,0,0>, v=< 0,0,0>, a=<-2,0,0> (0)(1)
p=< 4,0,0>, v=< 1,0,0>, a=<-1,0,0> -4 -3 -2 -1 0 1 2 3 4
p=< 2,0,0>, v=<-2,0,0>, a=<-2,0,0> (1) (0)
p=< 4,0,0>, v=< 0,0,0>, a=<-1,0,0> -4 -3 -2 -1 0 1 2 3 4
p=<-2,0,0>, v=<-4,0,0>, a=<-2,0,0> (1) (0)
p=< 3,0,0>, v=<-1,0,0>, a=<-1,0,0> -4 -3 -2 -1 0 1 2 3 4
p=<-8,0,0>, v=<-6,0,0>, a=<-2,0,0> (0)
At this point, particle 1 will never be closer to <0,0,0> than particle 0, and
so, in the long run, particle 0 will stay closest.
|-}
module Day20 where
import Protolude
import Control.Lens hiding ((&))
-- import Data.Array
import Data.Generics.Product
-- import qualified Data.Text as T
import GHC.Generics
import Text.Parsec hiding (State)
type Input = [Particle]
data Particle = Particle { pos :: Coord
, vit :: Coord
, acc :: Coord
} deriving (Show,Eq,Generic)
data Coord = Coord { x,y,z :: Int } deriving (Show,Eq,Generic)
instance Num Coord where
negate (Coord x y z) = Coord (negate x) (negate y) (negate z)
(Coord x1 y1 z1) + (Coord x2 y2 z2) = Coord (x1 + x2) (y1 + y2) (z1 + z2)
(Coord x1 y1 z1) * (Coord x2 y2 z2) = Coord (x1 * x2) (y1 * y2) (z1 * z2)
fromInteger x = Coord (fromInteger x) 0 0
abs (Coord x y z) = Coord (abs x) (abs y) (abs z)
signum (Coord x y z) = Coord (signum x) (signum y) (signum z)
instance Monoid Coord where
mempty = Coord 0 0 0
dist :: Coord -> Coord -> Int
dist c1 c2 = let dv = abs (c1 - c2) in (x dv) + (y dv) + (z dv)
parseInput :: IO Input
parseInput = parseText <$> readFile "inputs/day20.txt"
testInput :: Text
testInput = "p=<3,0,0>, v=<2,0,0>, a=<-1,0,0>\n\
\p=<4,0,0>, v=<0,0,0>, a=<-2,0,0>\n"
parseText :: Text -> Input
parseText txt = either (const []) identity (runParser mainParse () "Input" txt)
mainParse :: Parsec Text () Input
mainParse = many1 parseParticle
parseParticle :: Parsec Text () Particle
parseParticle = Particle <$> (string "p=" *> parseCoord)
<*> (string ", v=" *> parseCoord)
<*> (string ", a=" *> parseCoord <* newline)
parseCoord :: Parsec Text () Coord
parseCoord = Coord <$> (char '<' *> parseInt)
<*> (char ',' *> parseInt)
<*> (char ',' *> parseInt <* char '>')
parseInt :: Parsec Text () Int
parseInt = do
sgn <- optionMaybe (char '-')
str <- many1 digit
let strint = case sgn of
Nothing -> str
Just _ -> "-" <> str
return $ fromMaybe 0 (reads strint & head & fmap fst)
-- Solution 1
type Solution1 = Int
data AppState = AppState { particles :: [Particle] } deriving (Show,Eq,Generic)
solution1 :: Input -> Solution1
solution1 input =
input
& zip ([0..] :: [Int])
& map (\(i,p) -> (i,d (pos p), d (vit p), d (acc p)))
& sortOn (\(_,x,_,_)->x)
& sortOn (\(_,_,x,_)->x)
& sortOn (\(_,_,_,x)->x)
& head
& fmap (^._1)
& fromMaybe 0
where
d = dist mempty
-- Solution 2
type Solution2 = Int
solution2 :: Input -> Solution2
solution2 grid =
let initState = undefined
in extractSol $ execState solve2 initState
where
extractSol :: AppState -> Solution2
extractSol = undefined
solve2 :: State AppState ()
solve2 = undefined

58
src/DayXX.hs Normal file
View file

@ -0,0 +1,58 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
{-|
|-}
module DayXX where
import Protolude
-- import Control.Lens hiding ((&))
-- import Data.Array
-- import Data.Generics.Product
-- import qualified Data.Text as T
import GHC.Generics
type Input = [Text]
parseInput :: IO Input
parseInput = parseText <$> readFile "inputs/day19.txt"
testInput :: Text
testInput = ""
parseText :: Text -> Input
parseText = undefined
-- Solution 1
type Solution1 = Int
data AppState = AppState () deriving (Show,Eq,Generic)
solution1 :: Input -> Solution1
solution1 grid =
let initState = AppState ()
in extractSol $ execState solve1 initState
where
extractSol :: AppState -> Solution1
extractSol = undefined
solve1 :: State AppState ()
solve1 = undefined
-- Solution 2
type Solution2 = Int
solution2 :: Input -> Solution2
solution2 grid =
let initState = AppState ()
in extractSol $ execState solve2 initState
where
extractSol :: AppState -> Solution2
extractSol = undefined
solve2 :: State AppState ()
solve2 = undefined

View file

@ -49,3 +49,23 @@ rotate n (Permutation p) =
instance (Ix i,Enum i) => Semigroup (Permutation i) where
Permutation a1 <> Permutation a2 = Permutation $
array (bounds a2) [ (i, a2 ! j) | (i,j) <- assocs a1]
{-
0 1 2 === 0
1 0 2 => p1
0 2 1 => p2
2 1 0 => p3
1 2 0 => p4
p1 <> p2 ===> 2 0 1
p2 <> p1 ===> 1 2 0
-}
testPermutation =
let p0 = nullPerm (0,2)
p1 = swap 0 1 p0
p2 = swap 1 2 p0
p3 = p1 <> p2
in p2 <> p1

View file

@ -39,7 +39,8 @@ packages:
- .
# Dependency packages to be pulled from upstream that are not in the resolver
# (e.g., acme-missiles-0.3)
extra-deps: []
extra-deps:
- generic-lens-0.5.0.0
# Override default flag values for local packages and extra-deps
flags: {}

View file

@ -20,6 +20,15 @@ import qualified Day12
import qualified Day13
import qualified Day14
import qualified Day15
import qualified Day16
import qualified Day17
import qualified Day18
import qualified Day19
-- import qualified Day20
-- import qualified Day21
-- import qualified Day22
-- import qualified Day23
-- import qualified Day24
main :: IO ()
main = defaultMain $
@ -273,3 +282,57 @@ testDay15 =
Day15.solution2 Day15.testInput @?= 309
]
]
testDay16 =
testGroup "Day 16"
[ testGroup "Solution 1" []
, testGroup "Solution 2" []
]
testDay17 =
testGroup "Day 17"
[ testGroup "Solution 1" []
, testGroup "Solution 2" []
]
testDay18 =
testGroup "Day 18"
[ testGroup "Solution 1" []
, testGroup "Solution 2" []
]
testDay19 =
testGroup "Day 19"
[ testGroup "Solution 1" []
, testGroup "Solution 2" []
]
testDay20 =
testGroup "Day 20"
[ testGroup "Solution 1" []
, testGroup "Solution 2" []
]
testDay21 =
testGroup "Day 21"
[ testGroup "Solution 1" []
, testGroup "Solution 2" []
]
testDay22 =
testGroup "Day 22"
[ testGroup "Solution 1" []
, testGroup "Solution 2" []
]
testDay23 =
testGroup "Day 23"
[ testGroup "Solution 1" []
, testGroup "Solution 2" []
]
testDay24 =
testGroup "Day 24"
[ testGroup "Solution 1" []
, testGroup "Solution 2" []
]