/* Advent of Code 2024 in Picat. Problem 25 https://adventofcode.com/2024/day/25 There is only one part today. This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import util. import aoc_utils. main => go. /* Part 1 Hyperfine Benchmark 1: picat -g go 25.pi Time (mean ± σ): 67.1 ms ± 6.9 ms [User: 50.0 ms, System: 17.0 ms] Range (min … max): 45.6 ms … 85.8 ms 34 runs */ go => Splits = split2(read_file_chars("25.txt")), Locks = [], Keys = [], foreach(Split in Splits) L = Split.split("\n"), C = check(L), if L[1,1] == '#' then Locks := Locks ++ [C] else Keys := Keys ++ [C] end end, [1 : Lock in Locks, Key in Keys, [1 : K in 1..5, Lock[K] + Key[K] <= 5].len == 5].sum.println. check(This) = [ [ 1 : T in L, T == '#'].len-1 : L in This.transpose].