Make d15p2 a little more readable and remove unneeded imports.

This commit is contained in:
Dory 2023-12-15 00:39:55 -08:00
parent 8683c9c8b3
commit e757151638
2 changed files with 8 additions and 10 deletions

View File

@ -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|_]) :-

View File

@ -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,8 +28,8 @@ 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-1)-"rn", 3-remove-"cm", ...]
input(Name, Actions) :- phrase_from_file(insts(Actions), Name). input(Name, Actions) :- phrase_from_file(insts(Actions), Name).