d16p1
This commit is contained in:
parent
227aa6713d
commit
e50db48a2c
110
16/input.txt
Normal file
110
16/input.txt
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
\..../...................-......|..........|...-|.-.............|...................\/......-.................
|
||||||
|
../|....|.......-...............\....\...........-...............|.......|...........-........................
|
||||||
|
............................\........../|........./.......................................\.........|....|./||
|
||||||
|
..................\.//.............-.......\..-.|.......\.......\.............................-..-....|.......
|
||||||
|
../....\......|.|......|.....|./.-...|......-................//......|.../..-........\............\...........
|
||||||
|
...|...-.....\...............-.../.................|...............\-................/|...............\.......
|
||||||
|
|............................./...\.........\.............-....../-..|......|.|.../................\..........
|
||||||
|
.............-.|.../................|....................../................../..............................-
|
||||||
|
.......\.\....../.....|...........................-............/..-........-........................\......-..
|
||||||
|
.....-.\................-.....|\....-....|..../....|.....|.\............./.../.....\...............|....|.....
|
||||||
|
....|............................/............-|..|.........................-....................-....\.......
|
||||||
|
|....../......../../............................../....|......\..\....\\./.|................/......\......-./\
|
||||||
|
........-........./|............................./....\....-................../...|........|........-.........
|
||||||
|
..........\......./..................|..../.........../.........../........../...................|.-.\.......\
|
||||||
|
................-..........\....................................../.........\\........-...--..........|..\....
|
||||||
|
.-./...\......................\...../...\.\../.......|....................-...............\.-....\......./\..\
|
||||||
|
.......................-.......\..............................\............................\.|...-............
|
||||||
|
.......|...-..........-........-.......\.........././.-..|..../.....................\.........................
|
||||||
|
.....................\..|...../........\.....\\\..........\........................-............\..\...\......
|
||||||
|
....|.................|.........|.................................../.............-...........................
|
||||||
|
......................|................../....\..|...................-.\.......-\.........................|...
|
||||||
|
........-.........|.......\.................|................-..|../|\............../......................../
|
||||||
|
............|.\.................\..-...\.../...-....\...\...........|../..\........\.-........................
|
||||||
|
......./..............-..//................-.............../................/...-.......-......-............|.
|
||||||
|
........\|...\......-....|...........\....\./..........-......\......../..-...-...|........|/................\
|
||||||
|
....\....-../......-..................................|..\/../....-.....|...............\.-.....\............|
|
||||||
|
...................|..................|...........\............./.......-.......................\..\-../../...
|
||||||
|
....-..............-..\/.|.......................\.................../......|..-..\......|.........-/.........
|
||||||
|
........................./..\-..-.|..........-.....-............................\...................../.......
|
||||||
|
...../../..../....|...|..|...|.......\..\...\........-..../.../......................-....../..\..............
|
||||||
|
..........\.......\.....|.../.........../....|./.../......-..../.....|-...||......./..........|...\...........
|
||||||
|
...............................................-.........\.....|..................\|......................\...
|
||||||
|
.....................................\..................--......-........................-.//-....../-.-.....|
|
||||||
|
........../..../.....|....\........................|.................................../............./...-/...
|
||||||
|
........................-............./....-....-...-...........-..............|..............................
|
||||||
|
......|.....|........-./...\........|......................|........|.......|...-.....|.......................
|
||||||
|
..-.......-....../.............-..\...................................|.........|..........|............./....
|
||||||
|
.............................|.....\...........................././|......|................-....-.............
|
||||||
|
........../..................-..........\....\..../.....\.................-...........|.......................
|
||||||
|
................../..-......................|...........-|..............-......|......................-.......
|
||||||
|
-...........-..........|........-.......|\.././.|............................-/.|...........-/...............\
|
||||||
|
.../..-..........................--.........|...|.|...................................-|...\........|.........
|
||||||
|
........|.......-............|.........--.........-......./..../........-........\....../..../...........-....
|
||||||
|
..............-.............../...........................-................./......--..\..../.................
|
||||||
|
.......................--...........\..............\.......-.......-..|/.....\....-/......../........-........
|
||||||
|
.............|......|...............-...................\...............\..-.....................|.\.........\
|
||||||
|
.....\.-....\............\........|........|....\..............\............................................./
|
||||||
|
............................../...............././.......\.....\..........\|......-......|....|...........|...
|
||||||
|
................|............/.....|.........|.......\...../...|....-........|................................
|
||||||
|
./...\............\............|..-....\...\........................\..........\......\.-........../.....\....
|
||||||
|
.......-...|../..|..-.......-............................................-.....\.........-........../../......
|
||||||
|
...../.......-......../|..............|...................\......|............/|..........|..|...../..-...|..-
|
||||||
|
....-.........../../....../\.................................\./.....................-...........-............
|
||||||
|
.....|....................|.....|.......-..-.........\........|..............|...............-|.|....-/..-....
|
||||||
|
.\|............-../..\.\.....|....../...|.............\.............................................\.........
|
||||||
|
........|........../...\....-.......\..\.|-...........|./|./..........\|........--...\........\../............
|
||||||
|
\..-..-......./.\....../....\..|.........\-...-||/...-...\....\.......-.\.......-................\...\.....\..
|
||||||
|
................................\............../..-.......................-............./.....................
|
||||||
|
\............................/...........-......\..-.......-.........../............|...............|.........
|
||||||
|
......|..|........\.........................../.......-.............-.................../.....................
|
||||||
|
..........................|......|.../..........................\..................................-......-...
|
||||||
|
../...................-.........|...\...........-.|/..........|........-.-.................|.......|.........\
|
||||||
|
........................../......../..................\...........|......\.......................-............
|
||||||
|
...../..../\.../|....\....................................|....|......................|.........\...........-.
|
||||||
|
.|...../.....-.....................................|........||........|...........................//..........
|
||||||
|
........................\............|.............-..........................-......../..............|.......
|
||||||
|
...................\.........-.........\..........|......................../\...-......................\|.....
|
||||||
|
........././...........|.|..................../.....................-.............................-.|.|...-...
|
||||||
|
.-................................................-................-..\........-................../.\....|...|
|
||||||
|
.................../.|......\..\.\./.\.............|.......................................|..................
|
||||||
|
...............|............\\.....-..-.........\.....\-|..../............|\.......|.....\.\...../......\.....
|
||||||
|
...-.............../..........\.....-..|....../......................-.....\.................../.\...........\
|
||||||
|
...................-.....................................\....\....../....|..\...-................\......-....
|
||||||
|
.|..-............\........|.....|.\....\......-............\.|....|.\..............\|.|/...\.........|....../.
|
||||||
|
........../...........|.-/...\......./../.............../.\/......-/........................./......\..|......
|
||||||
|
........|......................................\..................|............................/........-.-...
|
||||||
|
...\....../................/...................\../...\\...................\.......|.................-........
|
||||||
|
.....................................|.........../.\..--.........|\..........|.....-..................|...\...
|
||||||
|
.../...........\-..-....................\.-..-..........................-........|..../.......................
|
||||||
|
.........../-.../.............../.\................-.-..\.......\/............\......../...\\\......../.......
|
||||||
|
.......-..\...\.....\..\...........................|..\.......//..................../../.........|.........-..
|
||||||
|
......./............../...../.............../............/...../.............\......-...........\...-|.......-
|
||||||
|
..|......\....................../..................\..................|.....................-....\............
|
||||||
|
../........................\............/.../...............|............-......................./............
|
||||||
|
.-...../......\............\............|..........................\../.....\.....................-|.../......
|
||||||
|
...........|.......\....\.............................\.....................--.....|......................../.
|
||||||
|
...|......./-.........................../.\......................|................|......|....|../...../......
|
||||||
|
...-............./..../................-......-....\\..|\...........|...................../....\|.\.-.....-...
|
||||||
|
............./..//...........|...\|........-/..../.............|......................../.../.................
|
||||||
|
......\........|........\...\.\........../..../..-.....-......./..|............-......................-.......
|
||||||
|
....-./............|......|........................./.........\......................................\........
|
||||||
|
...................................-.........-..../....|../...........\..-....-.|..................../...././.
|
||||||
|
-...........|.-.......|.../.................|......./.....\..\......|.................................\....\..
|
||||||
|
......\.....................-....................-......................................|.....................
|
||||||
|
................................\.......-...........|\......................./..........\-..-................|
|
||||||
|
....../......|..................\.....|....\...........\...........................................\.......|..
|
||||||
|
..............-..\..|\.../............\..\.....-.....|.|\......\...................|.........\...........-....
|
||||||
|
.-.-..\....././.........\.|...-....\....|....|............|..................../.............\................
|
||||||
|
...|..................................................-.............\../......................................
|
||||||
|
\................-....................-./.........../.......\./..\|..|....../..-\.-...\..../.....-....|.......
|
||||||
|
................|.................\|./................-..././\......../...................|....|....|.........
|
||||||
|
........-...............................................\........................\.........................../
|
||||||
|
....../..............................\....\...|........\.-........\...............|..../.........../...|......
|
||||||
|
../....................................|...|...............................\.\..|.............................
|
||||||
|
...|/|............|............/..........................\.......\.......-.../..--../...........\|...........
|
||||||
|
.......-..........\...........\/.....-./../................|.|........\\.................................-....
|
||||||
|
..|..\............\...|........../................................../...................|.\.............-.....
|
||||||
|
....-.......\/................../....|................-.././..|.........-..........\.|.........../...../..|...
|
||||||
|
/../.|..............||...\..........\....-.../.....\-..........-.......-........................-.../...\.....
|
||||||
|
../.|....|......../........-...........................\\......................\...................-..........
|
70
16/part1.pl
Normal file
70
16/part1.pl
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
:- use_module(library(pio)).
|
||||||
|
:- initialization(main, main).
|
||||||
|
|
||||||
|
main([FileName|_]) :-
|
||||||
|
input(FileName, Map),
|
||||||
|
propagate(Map, [0-0-3], FinalMap),
|
||||||
|
count(FinalMap, Answer),
|
||||||
|
write(Answer), nl.
|
||||||
|
|
||||||
|
count(Map, X) :-
|
||||||
|
findall(1, (nth0(_, Map, Row), nth0(_, Row, _-D), \+ D = [0,0,0,0]), Ls),
|
||||||
|
length(Ls, X).
|
||||||
|
|
||||||
|
% propagate(Map, Queue, NewMap). 'Dir' is 0/1/2/3 == light coming from N/E/S/W.
|
||||||
|
propagate(Map, [], Map).
|
||||||
|
propagate(Map, [X-Y-Dir|Queue], FinalMap) :-
|
||||||
|
( (nth0(X, Map, Row), nth0(Y, Row, Cell-Done), nth0(Dir, Done, 0))
|
||||||
|
-> replace(Dir, Done, 1, NewDone),
|
||||||
|
replace(Y, Row, Cell-NewDone, NewRow),
|
||||||
|
replace(X, Map, NewRow, NewMap),
|
||||||
|
call(Cell, X, Y, Dir, NewCells),
|
||||||
|
append(Queue, NewCells, NewQueue)
|
||||||
|
; NewQueue = Queue,
|
||||||
|
NewMap = Map
|
||||||
|
),
|
||||||
|
propagate(NewMap, NewQueue, FinalMap).
|
||||||
|
|
||||||
|
'.'(X, Y, 0, [NewX-Y-0]) :- NewX is X + 1.
|
||||||
|
'.'(X, Y, 1, [X-NewY-1]) :- NewY is Y - 1.
|
||||||
|
'.'(X, Y, 2, [NewX-Y-2]) :- NewX is X - 1.
|
||||||
|
'.'(X, Y, 3, [X-NewY-3]) :- NewY is Y + 1.
|
||||||
|
|
||||||
|
'/'(X, Y, 0, [X-NewY-1]) :- NewY is Y - 1.
|
||||||
|
'/'(X, Y, 1, [NewX-Y-0]) :- NewX is X + 1.
|
||||||
|
'/'(X, Y, 2, [X-NewY-3]) :- NewY is Y + 1.
|
||||||
|
'/'(X, Y, 3, [NewX-Y-2]) :- NewX is X - 1.
|
||||||
|
|
||||||
|
'\\'(X, Y, 0, [X-NewY-3]) :- NewY is Y + 1.
|
||||||
|
'\\'(X, Y, 1, [NewX-Y-2]) :- NewX is X - 1.
|
||||||
|
'\\'(X, Y, 2, [X-NewY-1]) :- NewY is Y - 1.
|
||||||
|
'\\'(X, Y, 3, [NewX-Y-0]) :- NewX is X + 1.
|
||||||
|
|
||||||
|
'|'(X, Y, 0, NewCells) :- '.'(X, Y, 0, NewCells).
|
||||||
|
'|'(X, Y, 2, NewCells) :- '.'(X, Y, 2, NewCells).
|
||||||
|
'|'(X, Y, 3, NewCells) :- '|'(X, Y, 1, NewCells).
|
||||||
|
'|'(X, Y, 1, [X1-Y-0, X2-Y-2]) :- X1 is X + 1, X2 is X - 1.
|
||||||
|
|
||||||
|
'-'(X, Y, 1, NewCells) :- '.'(X, Y, 1, NewCells).
|
||||||
|
'-'(X, Y, 3, NewCells) :- '.'(X, Y, 3, NewCells).
|
||||||
|
'-'(X, Y, 2, NewCells) :- '-'(X, Y, 0, NewCells).
|
||||||
|
'-'(X, Y, 0, [X-Y1-1, X-Y2-3]) :- Y1 is Y - 1, Y2 is Y + 1.
|
||||||
|
|
||||||
|
replace(I, List, Elem, NewList) :-
|
||||||
|
nth0(I, List, _, Rest),
|
||||||
|
nth0(I, NewList, Elem, Rest).
|
||||||
|
|
||||||
|
% Input stuff. Cell-(N,E,S,W) indicating which direction was already handled
|
||||||
|
input(Name, Map) :- phrase_from_file(lines(Map), Name).
|
||||||
|
|
||||||
|
lines([]) --> eos, !.
|
||||||
|
lines([Line|Lines]) --> line(Line), lines(Lines).
|
||||||
|
|
||||||
|
line([]) --> ("\n"; eos), !.
|
||||||
|
line([Char-[0,0,0,0]|Chars]) --> [C], line(Chars), {char_code(Char, C)}.
|
||||||
|
|
||||||
|
eos([], []).
|
||||||
|
|
||||||
|
% Debug stuff
|
||||||
|
print(Map) :- maplist([X]>>(write(X), nl), Map), nl.
|
||||||
|
|
10
16/test.txt
Normal file
10
16/test.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.|...\....
|
||||||
|
|.-.\.....
|
||||||
|
.....|-...
|
||||||
|
........|.
|
||||||
|
..........
|
||||||
|
.........\
|
||||||
|
..../.\\..
|
||||||
|
.-.-/..|..
|
||||||
|
.|....-|.\
|
||||||
|
..//.|....
|
Loading…
Reference in New Issue
Block a user