From 136e49c2a054047a015f86e5d5e0cc443fc63fde Mon Sep 17 00:00:00 2001 From: rhiannon morris Date: Tue, 6 Dec 2022 06:49:48 +0100 Subject: [PATCH] simplify all_diff --- day6.m | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/day6.m b/day6.m index 75b115a..d3d71ae 100644 --- a/day6.m +++ b/day6.m @@ -12,22 +12,16 @@ :- import_module list. :- import_module maybe. - -:- func uniq(list(T)) = list(T). -uniq([]) = []. -uniq([X | Xs]) = Ys :- - Ys0 = uniq(Xs), - (if member(X, Ys0) then Ys = Ys0 else Ys = [X | Ys0]). - -:- pred alldiff(list(T)::in) is semidet. -alldiff(Xs) :- Xs = uniq(Xs). +:- pred all_diff(list(T)::in) is semidet. +all_diff([]). +all_diff([X | Xs]) :- not member(X, Xs), all_diff(Xs). :- pred window(int::in, list(T)::in, int::out, list(T)::out) is nondet. window(Len, In, 0, Out) :- take(Len, In, Out). window(Len, [_|In], I + 1, Out) :- window(Len, In, I, Out). :- pred start_index(int::in, list(T)::in, int::out) is cc_nondet. -start_index(Len, Input, Index) :- window(Len, Input, Index, Out), alldiff(Out). +start_index(Len, Input, Index) :- window(Len, Input, Index, Out), all_diff(Out). :- func length(part) = int. length(one) = 4.