% Picat version % Much faster than the SWI-Prolog version % https://open.kattis.com/problems/pyramids % Time limit: 1s % Diff 1.4-1.5 Easy % Longer but a little faster: 0.003s main :- % File = "pyramids1.inp", File = "pyramids2.inp", N = read_file_lines(File).first.to_int, writeln(n=N), M = ceiling(sqrt(N)), Squares = [I*I : I in 1..2..M, I mod 2 == 1, I*I <= N], Len = Squares.len, member(Num,1..Len), Sum = sum(Squares[1..Num]), (Sum >= N -> Rest is Sum - N, ( Rest == 0 -> NumLayers is Num ; NumLayers is Num - 1 ) ; fail ), writeln(num_layers=NumLayers). main. % Shorter but a little slower: 0.009s main2 :- % File = "pyramids1.inp", File = "pyramids2.inp", N = read_file_lines(File).first.to_int, M = ceiling(sqrt(N)), member(Len,1..M), Squares = [(2*I-1)**2 : I in 1..Len], Sum = sum(Squares), (Sum >= N -> Rest is Sum - N, ( Rest == 0 -> NumLayers is Len ; NumLayers is Len - 1 ) ; fail ), writeln(num_layers=NumLayers). main2.