/* Advent of Code 2024 in Picat. Problem 1 https://adventofcode.com/2024/day/1 This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import util. % import cp. % import aoc_utils. % import utils_me. % import apl_util. % import regex. main => go. /* Hyperfine Benchmark 1: picat -g go 1.pi Time (mean ± σ): 64.1 ms ± 9.1 ms [User: 45.8 ms, System: 18.2 ms] Range (min … max): 45.7 ms … 83.2 ms 41 runs */ go => File = "1.txt", Lines = [Line.map(to_int): Line in read_file_lines(File).map(split)], [A,B]=transpose(Lines), % Part 1 AS = A.sort, BS = B.sort, Part1=[abs(AS[I]-BS[I]) : I in 1..A.len].sum, println(Part1), Part2 = [], foreach(I in A) R=[1 : V in B, V == I].sum, Part2 := Part2 ++ [I*R] end, println(Part2.sum), nl. % Another approaches /* Hyperfine: Benchmark 1: picat -g part1 1.pi Time (mean ± σ): 45.3 ms ± 6.6 ms [User: 30.0 ms, System: 15.3 ms] Range (min … max): 28.8 ms … 58.4 ms 53 runs */ part1 => [A,B] = [Line.map(to_int): Line in read_file_lines("1.txt").map(split)].transpose.map(sort), [abs(A[I]-B[I]) : I in 1..A.len].sum.println. /* Hyperfine Benchmark 1: picat -g part2 1.pi Time (mean ± σ): 56.0 ms ± 6.7 ms [User: 38.8 ms, System: 17.1 ms] Range (min … max): 39.7 ms … 71.0 ms 47 runs */ part2 ?=> [A,B] = [Line.map(to_int): Line in read_file_lines("1.txt").map(split)].transpose, [I*[1 : V in B, V == I].sum : I in A].sum.println. % This Works but with a warning: nonlocal_var_in_iterator_pattern % [I*[1 : I in B].sum : I in A].sum.println.