Othello
By Aman Ladia, Max Meyberg, Justin West & Alberto Mancarella
Game Over
role(black) role(white) file(a) file(b) file(c) file(d) file(e) file(f) file(g) file(h) rank(1) rank(2) rank(3) rank(4) rank(5) rank(6) rank(7) rank(8) succ(1,2) succ(2,3) succ(3,4) succ(4,5) succ(5,6) succ(6,7) succ(7,8) succ(a,b) succ(b,c) succ(c,d) succ(d,e) succ(e,f) succ(f,g) succ(g,h) terminal :- ~playable playable :- countofall([X,Y], location(cell(X,Y), G), P) & leq(P, 63) empty(M,N) :- file(M) & rank(N) & ~location(cell(M,N),black) & ~location(cell(M,N),white) adjacent(cell(X1,Y),cell(X2,Y)) :- succ(X1,X2) & rank(Y) adjacent(cell(X1,Y),cell(X2,Y)) :- succ(X2,X1) & rank(Y) adjacent(cell(X,Y1),cell(X,Y2)) :- succ(Y1,Y2) & file(X) adjacent(cell(X,Y1),cell(X,Y2)) :- succ(Y2,Y1) & file(X) adjacent(cell(X1,Y1),cell(X2,Y2)) :- succ(X1,X2) & succ(Y1,Y2) adjacent(cell(X1,Y1),cell(X2,Y2)) :- succ(X2,X1) & succ(Y1,Y2) adjacent(cell(X1,Y1),cell(X2,Y2)) :- succ(X1,X2) & succ(Y2,Y1) adjacent(cell(X1,Y1),cell(X2,Y2)) :- succ(X2,X1) & succ(Y2,Y1) innerhtml(cell(M,N),"<img src='black.png' height='50'/>") :- location(cell(M,N),black) innerhtml(cell(M,N),"<img src='white.png' height='50'/>") :- location(cell(M,N),white) innerhtml(cell(M,N)," ") :- empty(M,N) innerhtml(control,CS) :- ~terminal & control(P) & stringappend("Player: ",P,CS) innerhtml(control,"Game Over - White Wins!") :- terminal & countofall([X,Y], location(cell(X,Y), white), P) & leq(33, P) innerhtml(control,"Game Over - Black Wins!") :- terminal & countofall([X,Y], location(cell(X,Y), black), P) & leq(33, P) innerhtml(control,"Game Over - It's a Tie!") :- terminal & countofall([X,Y], location(cell(X,Y), black), P) & same(32, P) style(cell(M,N),"cursor","pointer") :- ~terminal & legal(M,N) style(cell(M,N),"cursor","text") :- ~terminal & file(M) & rank(N) & ~legal(M,N) style(cell(M,N),"cursor","text") :- terminal & file(M) & rank(N) style(cell(M,N),"boxShadow","inset 0px 0px 2px 2px rgba(54,239,72,0.8)") :- legal(M,N) style(cell(M,N),"boxShadow","none") :- file(M) & rank(N) & ~legal(M,N) attribute(cell(M,N),"onclick","modbutton(this)") :- ~terminal & legal(M,N) attribute(cell(M,N),"onclick","true") :- ~terminal & file(M) & rank(N) & ~legal(M,N) attribute(cell(M,N),"onclick","true") :- terminal & file(M) & rank(N) attribute(forfeit, "disabled", "true") :- countofall([X,Y], legal(X, Y), P) & leq(1, P) attribute(forfeit, "disabled", "false") :- countofall([X,Y], legal(X, Y), 0) & ~terminal legal(X,Y) :- file(X) & rank(Y) & control(P) & oppplayer(P, O) & ~location(cell(X,Y),Player) & adjacent(cell(X,Y), cell(XA, YA)) & location(cell(XA, YA), O) & or(passeshor(X,Y,P), passesver(X,Y,P), passesupright(X, Y, P), passesupleft(X, Y, P), passesdownright(X,Y,P), passesdownleft(X, Y, P) ) passesdownleft(X, Y, P) :- succ(XL, X) & succ(YD, Y) & oppplayer(P, O) & location(cell(XL, YD), O) & checkdownleft(XL, YD, XL, YD, P) checkdownleft(X, Y, Xo, Yo, P) :- succ(XL, X) & succ(YD, Y) & oppplayer(P, O) & location(cell(X,Y),O) & checkdownleft(XL, YD, Xo, Yo, P) checkdownleft(X, Y, Xo, Yo, P) :- distinct(Xo, X) & distinct(Yo, Y) & location(cell(X, Y), P) passesdownright(X, Y, P) :- succ(X, XR) & succ(YD, Y) & oppplayer(P, O) & location(cell(XR, YD), O) & checkdownright(XR, YD, XR, YD, P) checkdownright(X, Y, Xo, Yo, P) :- succ(X, XR) & succ(YD, Y) & oppplayer(P, O) & location(cell(X,Y),O) & checkdownright(XR, YD, Xo, Yo, P) checkdownright(X, Y, Xo, Yo, P) :- distinct(Xo, X) & distinct(Yo, Y) & location(cell(X, Y), P) passesupleft(X, Y, P) :- succ(XL, X) & succ(Y, YU) & oppplayer(P, O) & location(cell(XL, YU), O) & checkupleft(XL, YU, XL, YU, P) checkupleft(X, Y, Xo, Yo, P) :- succ(XL, X) & succ(Y, YU) & oppplayer(P, O) & location(cell(X,Y),O) & checkupleft(XL, YU, Xo, Yo, P) checkupleft(X, Y, Xo, Yo, P) :- distinct(Xo, X) & distinct(Yo, Y) & location(cell(X, Y), P) passesupright(X, Y, P) :- succ(X, XR) & succ(Y, YU) & oppplayer(P, O) & location(cell(XR, YU), O) & checkupright(X, Y, X, Y, P) checkupright(X, Y, Xo, Yo, P) :- succ(X, XR) & succ(Y, YU) & checkupright(XR, YU, Xo, Yo, P) checkupright(X, Y, Xo, Yo, P) :- distinct(Xo, X) & distinct(Yo, Y) & location(cell(X, Y), P) passesver(X, Y, P) :- or(passesupver(X,Y,P), passesdownver(X,Y,P)) passesdownver(X, Y, P) :- succ(YD, Y) & oppplayer(P, O) & location(cell(X, YD), O) & checkverdown(X, YD, YD, P) checkverdown(X, Y, Yo, P) :- succ(YD, Y) & oppplayer(P, O) & location(cell(X,Y),O) & checkverdown(X, YD, Yo, P) checkverdown(X, Y, Yo, P) :- distinct(Yo, Y) & location(cell(X, Y), P) passesupver(X, Y, P) :- succ(Y, YU) & oppplayer(P, O) & location(cell(X, YU), O) & checkverup(X, YU, YU, P) checkverup(X, Y, Yo, P) :- succ(Y, YU) & oppplayer(P, O) & location(cell(X,Y),O) & checkverup(X, YU, Yo, P) checkverup(X, Y, Yo, P) :- distinct(Yo, Y) & location(cell(X, Y), P) passeshor(X, Y, P) :- or(passeslefthor(X,Y,P), passesrighthor(X,Y,P)) passeslefthor(X, Y, P) :- succ(XL, X) & oppplayer(P, O) & location(cell(XL, Y), O) & checkhorleft(XL, Y, XL, P) checkhorleft(X, Y, Xo, P) :- succ(XL, X) & oppplayer(P, O) & location(cell(X,Y),O) & checkhorleft(XL, Y, Xo, P) checkhorleft(X, Y, Xo, P) :- distinct(Xo, X) & location(cell(X, Y), P) passesrighthor(X, Y, P) :- succ(X, XR) & oppplayer(P, O) & location(cell(XR, Y), O) & checkhorright(XR, Y, XR, P) checkhorright(X, Y, Xo, P) :- succ(X, XR) & oppplayer(P, O) & location(cell(X,Y),O) & checkhorright(XR, Y, Xo, P) checkhorright(X, Y, Xo, P) :- distinct(Xo, X) & location(cell(X, Y), P) oppplayer(black, white) oppplayer(white, black) click(cell(M,N)) :: control(P) & passeslefthor(M, N, P) & succ(LM, M) & oppplayer(P, O) ==> ~location(cell(LM, N), O) & location(cell(LM, N), P) & contlefthor(cell(LM, N)) contlefthor(cell(M, N)) :: control(P) & oppplayer(P, O) & ~location(cell(M, N), P) & succ(LM, M) ==> ~location(cell(M, N), O) & location(cell(M, N), P) & contlefthor(cell(LM, N)) click(cell(M,N)) :: control(P) & passesrighthor(M, N, P) & succ(M, RM) & oppplayer(P, O) ==> ~location(cell(RM, N), O) & location(cell(RM, N), P) & contrighthor(cell(RM, N)) contrighthor(cell(M, N)) :: control(P) & oppplayer(P, O) & ~location(cell(M, N), P) & succ(M, RM) ==> ~location(cell(M, N), O) & location(cell(M, N), P) & contrighthor(cell(RM, N)) click(cell(M,N)) :: control(P) & passesupver(M, N, P) & succ(N, UN) & oppplayer(P, O) ==> ~location(cell(M, UN), O) & location(cell(M, UN), P) & contupver(cell(M, UN)) contupver(cell(M, N)) :: control(P) & oppplayer(P, O) & ~location(cell(M, N), P) & succ(N, UN) ==> ~location(cell(M, N), O) & location(cell(M, N), P) & contupver(cell(M, UN)) click(cell(M,N)) :: control(P) & passesdownver(M, N, P) & succ(DN, N) & oppplayer(P, O) ==> ~location(cell(M, DN), O) & location(cell(M, DN), P) & contdownver(cell(M, DN)) contdownver(cell(M, N)) :: control(P) & oppplayer(P, O) & ~location(cell(M, N), P) & succ(DN, N) ==> ~location(cell(M, N), O) & location(cell(M, N), P) & contdownver(cell(M, DN)) click(cell(M,N)) :: control(P) & passesupright(M, N, P) & succ(N, UN) & succ(M, MR) & oppplayer(P, O) ==> ~location(cell(MR, UN), O) & location(cell(MR, UN), P) & contupright(cell(MR, UN)) contupright(cell(M, N)) :: control(P) & oppplayer(P, O) & ~location(cell(M, N), P) & succ(N, UN) & succ(M, MR) ==> ~location(cell(M, N), O) & location(cell(M, N), P) & contupright(cell(MR, UN)) click(cell(M,N)) :: control(P) & passesupleft(M, N, P) & succ(N, UN) & succ(ML, M) & oppplayer(P, O) ==> ~location(cell(ML, UN), O) & location(cell(ML, UN), P) & contupleft(cell(ML, UN)) contupleft(cell(M, N)) :: control(P) & oppplayer(P, O) & ~location(cell(M, N), P) & succ(N, UN) & succ(ML, M) ==> ~location(cell(M, N), O) & location(cell(M, N), P) & contupleft(cell(ML, UN)) click(cell(M,N)) :: control(P) & passesdownright(M, N, P) & succ(DN, N) & succ(M, MR) & oppplayer(P, O) ==> ~location(cell(MR, DN), O) & location(cell(MR, DN), P) & contdownright(cell(MR, DN)) contdownright(cell(M, N)) :: control(P) & oppplayer(P, O) & ~location(cell(M, N), P) & succ(DN, N) & succ(M, MR) ==> ~location(cell(M, N), O) & location(cell(M, N), P) & contdownright(cell(MR, DN)) click(cell(M,N)) :: control(P) & passesdownleft(M, N, P) & succ(DN, N) & succ(ML, M) & oppplayer(P, O) ==> ~location(cell(ML, DN), O) & location(cell(ML, DN), P) & contdownleft(cell(ML, DN)) contdownleft(cell(M, N)) :: control(P) & oppplayer(P, O) & ~location(cell(M, N), P) & succ(DN, N) & succ(ML, M) ==> ~location(cell(M, N), O) & location(cell(M, N), P) & contdownleft(cell(ML, DN)) click(forfeit) :: control(P) & oppplayer(P,O) ==> ~control(P) & control(O) click(cell(M,N)) :: control(P) ==> location(cell(M,N),P) click(cell(M,N)) :: location(cell(M,N),P) ==> ~location(cell(M,N),P) click(cell(M,N)) :: control(black) ==> ~control(black) & control(white) click(cell(M,N)) :: control(white) ==> ~control(white) & control(black)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Lambda %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% location(cell(d,4),black) location(cell(e,5),black) location(cell(d,5),white) location(cell(e,4),white) control(black) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% End of Rules %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
No Pixel SDK or Pixel ID initialized yet
0 Pixel IDs detected
No Pixel events yet
0 Pixel events
Pixel.js SDK is not detected on this page
1P Cookie
LocalStorage
SessionStorage
JS Lifecycle
Click ID
Version
Pixel.js SDK is not detected on this page
HTML Meta Tags
Canonical URL
JSON-LD
OpenGraph
Schema.org
Value
SHA-256 Hash
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
Events
Events
SDK info
Microdata
Hash calculator
Pixel Helper
Pixel Helper
Pixel Helper