aoc2021/d5golf.hs
2021-12-05 13:57:09 +01:00

11 lines
No EOL
428 B
Haskell

c x=0<$[0..x]<$[0..x]
a=concat;m=map;(!)=splitAt
v[[a,b],[c,d]]=a==c||b==d
p[s,_,t]=m(m read.(&','))[s,t]
x1?x2|x1>x2=x1-1|x1<x2=x1+1|let=x1
l[[x,y],[a,b]]m=foldr d m$n x y a b
a&x|(u,_:v)<-break(==x)a=u:v&x|let=[a]
q x=sum[1|v<-a$foldr l(c$maximum$a$a x)x,v>1]
d(x,y)m|(l,h:r)<-y!m,(u,v:d)<-x!h=l++(u++(v+1):d):r
n x y a b|x/=a||y/=b=(x,y):n(x?a)(y?b)a b|let=[(x,y)]
main=interact$show.m q.(\x->[x,filter v x]).m(p.words).lines