/* Chicken problem in Picat. From http://www.sci.brooklyn.cuny.edu/~zhou/prolog_contest/pc2011.txt """ Solutions in B-Prolog for the 2011 Prolog Programming Contest http://users.ugent.be/~tschrijv/ppc/ppc2011_probs.pdf Team members: Salvador Abreu, Ulrich Neumerkel, and Neng-Fa Zhou """ This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ % import util. % import cp. main => go. go => chicken(3), chicken(4), chicken(5). %% chicken.pl % sample query ?-chicken(3). chicken(N) => NR = 5+2*(N-1), NC = 7*2*(N-1)+6, A = new_array(NR,NC), place_u(A,2*(N-1)+1,1,N), (N mod 2=:=0->place_c2(A,1,7*(N-1)+1);place_c1(A,1,7*(N-1)+1)), place_d(A,3,7*(N-1)+7,N), foreach(R in 1..NR) foreach(C in 1..NC) E=A[R,C], (var(E)->printf(" ");printf("%w",E)) end, nl end. place_u(_A,_R,_C,I) ?=> I=<1. place_u(A,R,C,I) => place_cb(A,R,C), R1 = R-2, C1 = C+7, I1 = I-1, place_u(A,R1,C1,I1). place_d(_A,_R,_C,I) ?=> I=<1. place_d(A,R,C,I) => place_bc(A,R,C), R1 = R+2, C1 = C+7, I1 = I-1, place_d(A,R1,C1,I1). place_c1(A,R,C) => place_s(A,R,C, " \\\\ "), place_s(A,R+1,C," (o>"), place_s(A,R+2,C,"\\\\_//)"), place_s(A,R+3,C," \\_/_)"), place_s(A,R+4,C,"___|__"). place_c2(A,R,C) => place_s(A,R,C, " // "), place_s(A,R+1,C," place_s(A,R,C, " \\\\ "), place_s(A,R+1,C," (o> "), place_s(A,R+2,C,"\\\\_//) "), place_s(A,R+3,C," \\_/_)|"), place_s(A,R+4,C,"___|__|"). place_bc(A,R,C) => place_s(A,R,C, " // "), place_s(A,R+1,C," true. place_s(A,R,C,[X|Xs]) => A[R,C] = X, C1 = C+1, place_s(A,R,C1,Xs).