diff --git a/20/part1.pl b/20/part1.pl index 7c3fee8..6669678 100644 --- a/20/part1.pl +++ b/20/part1.pl @@ -2,51 +2,10 @@ :- use_module(library(dcg/basics)). :- initialization(main, main). -% ================================ begin stupid =============================== main([FileName|_]) :- input(FileName, Circuit), - cycle(Circuit, 0, [], [], First-Cycle-_, Counts), - NCycles is 1000 div Cycle, Leftovers is 1000 mod Cycle, - CycleEnd1 is First + Cycle, - - slice(Counts, 0, First, FirstCounts), - sumpairs(FirstCounts, FirstL-FirstH), - slice(Counts, First, CycleEnd1, CycleCounts), - sumpairs(CycleCounts, CycleL-CycleH), - slice(Counts, First, Leftovers, LeftoverCounts), - sumpairs(LeftoverCounts, LeftoverL-LeftoverH), - - Answer is (FirstL + NCycles*CycleL + LeftoverL)* - (FirstH + NCycles*CycleH + LeftoverH), - write("answer="), write(Answer), nl. - -sumpairs([], 0-0). -sumpairs([A-B|List], SumA-SumB) :- - sumpairs(List, A1-B1), SumA is A + A1, SumB is B + B1. - -cycle(Circuit, N, Hist, Counts, First-Cycle-Hist, Counts) :- - match(Circuit, Hist, Cycle), - write("match. N="), write(N), write(", cycle="), write(Cycle), nl, - First is N - Cycle, - !. -cycle(Circuit, N, Hist, Counts, X, Y) :- - % \+ match(Circuit, Hist, _), % remove this for performance. - run([button-l-broadcaster], Circuit, NewCircuit, Ls-Hs), - NewN is N + 1, - NewHist = [Circuit|Hist], - % write(NewN), write(": "), write(Ls-Hs), write(" - "), write(NewCircuit), nl, - cycle(NewCircuit, NewN, NewHist, [Ls-Hs|Counts], X, Y). - -match(Map, [Map|_], 1) :- !. -match(Map, [_|Entries], N) :- - match(Map, Entries, NextN), - N is NextN + 1. - -slice(L, From, To, R):- - ToX is To + 1, - length(LFrom, From), length([_|LTo], ToX), - append(LTo, _, L), append(LFrom, R, LTo). -% ================================ end stupid =============================== + run1000(Circuit, Answer), + write(Answer), nl. % part1 run1000(Circuit, Answer) :-