diff --git a/d5golf.hs b/d5golf.hs index 69297ae..4418567 100644 --- a/d5golf.hs +++ b/d5golf.hs @@ -1,16 +1,11 @@ -import Data.List -type Board = [[Int]] +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 String -printfield = intercalate "\n".map printrow -printrow :: [Int] -> String -printrow = concatMap show -createField :: [Int] -> Board -createField [x,y] = 0<$[0..x]<$[0..y] -drawPixel :: (Int,Int) -> Board -> Board -drawPixel (x,y) m|(l,h:r)<-splitAt x m,(u,v:d)<-splitAt y h=l++(u++(v+1):d):r -drawLine [x,y] [a,b] m = foldr drawPixel m [(u,v)|u<-[x..a],v<-[y..b]] -minmax x=map(maximum.(x>>=))[head,last] -p::[String] -> [[Int]] -p[s,_,t]=map(map read.(&','))[s,t] -main=interact$printfield.drawLine [1,0][1,2].drawLine [0,0] [4,0].createField.minmax.map(p.words).lines +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 \ No newline at end of file