Skip to content

Instantly share code, notes, and snippets.

@pommicket
Last active August 27, 2019 18:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pommicket/efc55e3b863ba2263162348375edaacc to your computer and use it in GitHub Desktop.
Save pommicket/efc55e3b863ba2263162348375edaacc to your computer and use it in GitHub Desktop.
n=Nothing
x?y=Just(x,y)
o(x,y)=x<0||y<0||x>7||y>7
m#k@(x,y)|o k=n|1>0=m!!x!!y
z(x,y)m p(a,b)|o(x+a,y+b)=1<0|Just g<-m#(x+a,y+b)=elem g[(p,0),(5,0)]|1>0=z(x+a,y+b)m p(a,b)
t(x,y)p(a,b)m|o(x+a,y+b)=[]|g<-(x+a,y+b)=(g%p)m++do[0|m#g==n];t g p(a,b)m
c m|(x,y):_<-[(a,b)|a<-u,b<-u,m#(a,b)==6?1],k<-z(x,y)m=or$[m#(x+a,y+b)==6?0|a<-[-1..1],b<-[-1..1]]++do a<-[1,-1];[k 3(a,b)|b<-[1,-1]]++(k 2<$>[(a,0),(0,a)])++[m#l==4?0|b<-[2,-2],l<-[(x+a,y+b),(x+b,y+a)]]++[m#(x-1,y+a)==p?0|p<-[0,1]]
c m=1>0
(k%p)m=[[[([p|a==k]++[m#a])!!0|a<-(,)b<$>u]|b<-u]|not$o k]
w(Just(_,m))n=n==m
w x _=1<0
m!u@(x,y)|g<-m#u,Just(q,1)<-g,v<-((u%n)m>>=),r<-v.t u g,k<-(do[0|n==m#(x+1,y)];(u%n)m>>=(x+1,y)%g)++(do a<-[1,-1];[0|w(m#(x+1,y+a))0];(u%n)m>>=(x+1,y+a)%g)++(do[0|(x,n,n)==(1,m#(x+1,y),m#(x+2,y))];v$(x+2,y)%g)++(do a<-[1,-1];[0|1?0==m#(x,y+a)];v((x,y+a)%n)>>=(x+1,y+a)%g)=[k,k,do a<-[1,-1];b<-[(a,0),(0,a)];r b,do a<-[1,-1];b<-[1,-1];r(a,b),do a<-[1,-1];b<-[2,-2];l<-[(x+a,y+b),(x+b,y+a)];v$l%g,do a<-[1,-1];c<-[(a,0),(0,a),(a,1),(a,-1)];r c,do a<-[x-1..x+1];b<-[y-1..y+1];[0|not$w(m#(a,b))1];v$(a,b)%g]!!q
m!u=[]
u=[0..7]
q m=all c$m:do a<-u;b<-u;m!(a,b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment