Make d15p2 a little more readable and remove unneeded imports.
This commit is contained in:
parent
8683c9c8b3
commit
227aa6713d
@ -1,5 +1,4 @@
|
|||||||
:- use_module(library(pio)).
|
:- use_module(library(pio)).
|
||||||
:- use_module(library(clpfd)).
|
|
||||||
:- initialization(main, main).
|
:- initialization(main, main).
|
||||||
|
|
||||||
main([FileName|_]) :-
|
main([FileName|_]) :-
|
||||||
|
19
15/part2.pl
19
15/part2.pl
@ -1,20 +1,19 @@
|
|||||||
:- use_module(library(pio)).
|
:- use_module(library(pio)).
|
||||||
:- use_module(library(dcg/basics)).
|
:- use_module(library(dcg/basics)).
|
||||||
:- use_module(library(clpfd)).
|
|
||||||
:- initialization(main, main).
|
:- initialization(main, main).
|
||||||
|
|
||||||
main([FileName|_]) :-
|
main([FileName|_]) :-
|
||||||
input(FileName, Actions),
|
input(FileName, Actions),
|
||||||
perform_all(Actions, Boxes),
|
perform_all(Actions, Boxes),
|
||||||
findall(
|
findall(Power, power_of_some_lens(Boxes, Power), Powers),
|
||||||
Power,
|
|
||||||
( nth1(BoxI, Boxes, _-Box),
|
|
||||||
nth1(LensI, Box, _-Focal),
|
|
||||||
Power is BoxI * LensI * Focal),
|
|
||||||
Powers),
|
|
||||||
sum_list(Powers, Answer),
|
sum_list(Powers, Answer),
|
||||||
writef('Answer=%t\n', [Answer]).
|
writef('Answer=%t\n', [Answer]).
|
||||||
|
|
||||||
|
power_of_some_lens(Boxes, Power) :-
|
||||||
|
nth1(BoxI, Boxes, _-Box),
|
||||||
|
nth1(LensI, Box, _-Focal),
|
||||||
|
Power is BoxI * LensI * Focal.
|
||||||
|
|
||||||
perform_all(Actions, FinalBoxes) :-
|
perform_all(Actions, FinalBoxes) :-
|
||||||
length(EmptyBoxes, 256),
|
length(EmptyBoxes, 256),
|
||||||
foldl([N-[], N, NextN]>>(NextN is N + 1), EmptyBoxes, 0, _),
|
foldl([N-[], N, NextN]>>(NextN is N + 1), EmptyBoxes, 0, _),
|
||||||
@ -29,10 +28,10 @@ remove(_, [], []).
|
|||||||
remove(Label, [Label-_|Box], Box) :- !.
|
remove(Label, [Label-_|Box], Box) :- !.
|
||||||
remove(Label, [Lens|Box], [Lens|NewBox]) :- remove(Label, Box, NewBox).
|
remove(Label, [Lens|Box], [Lens|NewBox]) :- remove(Label, Box, NewBox).
|
||||||
|
|
||||||
add(F, Label, OldBox, NewBox) :- select(Label-_, OldBox, Label-F, NewBox), !.
|
add(Focal, Label, Box, NewBox) :- select(Label-_, Box, Label-Focal, NewBox), !.
|
||||||
add(F, Label, OldBox, NewBox) :- append(OldBox, [Label-F], NewBox).
|
add(Focal, Label, Box, NewBox) :- append(Box, [Label-Focal], NewBox).
|
||||||
|
|
||||||
% Input stuff. [0-(add-1)-"rn", 3-remove-"cm", ...]
|
% Input stuff. [0-add(5)-"rn", 3-remove-"cm", ...]
|
||||||
input(Name, Actions) :- phrase_from_file(insts(Actions), Name).
|
input(Name, Actions) :- phrase_from_file(insts(Actions), Name).
|
||||||
|
|
||||||
insts([]) --> (eos; "\n"), !.
|
insts([]) --> (eos; "\n"), !.
|
||||||
|
Loading…
Reference in New Issue
Block a user