d5p1 and d5p2

This commit is contained in:
2023-12-05 18:42:28 -08:00
parent 0378b27aed
commit a191975108
7 changed files with 656 additions and 0 deletions

34
05/part1.pl Normal file
View File

@@ -0,0 +1,34 @@
answer(Answer) :-
seeds(Seeds),
locations_of_seeds(Seeds, Locations),
min(Locations, Answer).
% locations_of_seeds(Seeds, Locations)
locations_of_seeds([], []).
locations_of_seeds([Seed | RestOfSeeds], [Location | RestOfLocations]) :-
lookup_in(seed_to_soil, Seed, Soil),
lookup_in(soil_to_fertilizer, Soil, Fertilizer),
lookup_in(fertilizer_to_water, Fertilizer, Water),
lookup_in(water_to_light, Water, Light),
lookup_in(light_to_temperature, Light, Temperature),
lookup_in(temperature_to_humidity, Temperature, Humidity),
lookup_in(humidity_to_location, Humidity, Location),
locations_of_seeds(RestOfSeeds, RestOfLocations).
% lookup_in(NamedMap, In, Out)
lookup_in(NamedMap, In, Out) :-
G =.. [NamedMap, Map], G,
lookup(Map, In, Out).
% lookup(Map, In, Out)
lookup([], In, In).
lookup([[OutStart, InStart, Range] | RestOfMap], In, Out) :-
((In >= InStart, In < InStart + Range) ->
Out is OutStart + (In - InStart);
lookup(RestOfMap, In, Out)).
% min(List, Min) finds min value of a list
min([X], X).
min([Item | Rest], Min) :-
min(Rest, MinRest),
(Item < MinRest -> Min is Item; Min is MinRest).