/* halfimg.c * * CX 336 HW 1 problem 2 * * this program reads a GrayImage (pgm) from stdin, scales it down by * a factor of 2 (i.e., to a quarter of its original area) by * averaging 4 pixels into one, and writes the result as a GrayImage * to stdout. For images with odd width (or height), the last column * (row) of the image is simply ignored. * * usage: * halfimg < in.pgm > out.pgm */ #include #include #define IMAGE_CHECKALL #include "mcimg.h" void printPuzzle(int t[]); void move(int t[], int l[], int m); void drawArrow(int tile); static RGBImage out = NULL; int main(int argc, char *argv[]) { GrayImage im1; int i,j,width,height; int t[17]; // holds # of tile in this spot int l[17]; // holds location of this tile int numMoves = 0; if(argc == 17){ for(i = 1; i<17; i++){ t[i] = atoi(argv[i]); l[atoi(argv[i])] = i; } printPuzzle(t); } else{ fprintf(stderr,"usage: nextMove tile1 tile2 tile3...tile16\n"); exit(0); } im1 = loadGrayImage("puzzle.pgm"); width = imGetWidth(im1); height = imGetHeight(im1); /* create output image if it's not already there */ { int x, y; out = newRGBImage(width, height); /* Copy img into out */ for(y=0; y < height; y++) { for(x=0; x < width; x++) { /* scale-down values for contrast*/ char v = imRef(im1, x, y)*2/3; RGB rgb1 = {v, v, v}; imRef(out, x, y) = rgb1; } } } /* while( (l[1]!=1 || l[2]!=2 || l[3]!=3 || l[4]!=4 || l[5]!=5 || l[6]!=6 || l[7]!=7 || l[8]!=8 || l[9]!=9 || l[13]!=13 || l[10]!=10 || l[14]!=14 || l[12]!=12 || l[15]!=15 || l[16]!= 16) && numMoves++ < 150) { */ if(l[1] != 1){ if(l[1] == 2){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 1); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 5); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 3){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 3); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 2); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 4){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 4); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 3); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 5){ if (l[16] == 1) move(t, l, 5); else if(l[16] == 2) move(t, l, 1); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 6) move(t, l, 2); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 6){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 6); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 7) move(t, l, 3); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 5); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 7){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 8) move(t, l, 4); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 8){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 4); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 9){ if (l[16] == 1) move(t, l, 5); else if(l[16] == 2) move(t, l, 1); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 9); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 10){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 6); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 11){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 12) move(t, l, 8); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 12); } else if(l[1] == 12){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 4); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 13){ if (l[16] == 1) move(t, l, 5); else if(l[16] == 2) move(t, l, 1); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 9); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 14){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 6); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[1] == 15){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 16) move(t, l, 12); } else if(l[1] == 16){ if (l[16] == 1) move(t, l, 2); else if(l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 4); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); } } else if(l[2] != 2){ if(l[2] == 3){ if (l[16] == 2) move(t, l, 3); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 2); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 4){ if (l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 4); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 3); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 5){ if (l[16] == 2) move(t, l, 6); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 6){ if (l[16] == 2) move(t, l, 6); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 9); else if(l[16] == 7) move(t, l, 3); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 7){ if (l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 8) move(t, l, 4); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 8){ if (l[16] == 2) move(t, l, 2); else if(l[16] == 3) move(t, l, 3); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 9){ if (l[16] == 2) move(t, l, 6); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 10){ if (l[16] == 2) move(t, l, 6); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 5); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 11){ if (l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 12) move(t, l, 8); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 12); } else if(l[2] == 12){ if (l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 4); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 13){ if (l[16] == 2) move(t, l, 6); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 14){ if (l[16] == 2) move(t, l, 6); else if(l[16] == 3) move(t, l, 2); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[2] == 15){ if (l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 16) move(t, l, 12); } else if(l[2] == 16){ if (l[16] == 2) move(t, l, 3); else if(l[16] == 3) move(t, l, 4); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); } } // else solve the 3 piece else if(l[3] != 4 && !(l[3]==3 && l[4]==4)){ if(l[3] == 3){ if (l[16] == 4 && l[4]!= 8 && l[4] != 7) move(t, l, 3); else if(l[16] == 4 && l[4]==8) move(t, l, 8); // Special cases else if(l[4] == 7 && l[16] == 4) move(t, l, 8); else if(l[4] == 7 && l[16] == 8) move(t, l, 12); else if(l[4] == 7 && l[16] == 12) move(t, l, 11); else if(l[4] == 7 && l[16] == 11) move(t, l, 7); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 4); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 8); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 5){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 6){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 9); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 7){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 8); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[3] == 8){ if (l[16] == 3) move(t, l, 4); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 3); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 9){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 9); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 10){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 5); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 11){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[3] == 12){ if (l[16] == 3) move(t, l, 4); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 13){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 9); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 14){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 15){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 4) move(t, l, 3); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 16) move(t, l, 15); } else if(l[3] == 16){ if (l[16] == 3) move(t, l, 4); else if(l[16] == 4) move(t, l, 8); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); } } // else solve the 4 piece else if(l[4] != 4){ if(l[4] == 3) { if (l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 3); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 5){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 6){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 5) move(t, l, 9); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 7){ if (l[16] == 3) move(t, l, 4); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 8); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[4] == 8){ if (l[16] == 3) move(t, l, 4); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 3); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 9){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 5) move(t, l, 9); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 10){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 5); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 11){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[4] == 12){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 13){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 5) move(t, l, 9); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 14){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 15){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 16) move(t, l, 15); } else if(l[4] == 16){ if (l[16] == 3) move(t, l, 7); else if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); } } // else solve the 5 piece else if(l[5] != 5){ if(l[5] == 6){ if (l[16] == 5) move(t, l, 6); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 5); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[5] == 7){ if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[5] == 8){ if(l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[5] == 9){ if(l[16] == 5) move(t, l, 9); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[5] == 10){ if (l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[5] == 11){ if (l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 12) move(t, l, 8); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[5] == 12){ if (l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[5] == 13){ if (l[16] == 5) move(t, l, 9); else if(l[16] == 6) move(t, l, 5); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[5] == 14){ if (l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[5] == 15){ if (l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 16) move(t, l, 12); } else if(l[5] == 16){ if (l[16] == 5) move(t, l, 6); else if(l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); } } // else solve the 6 piece else if(l[6] != 6){ if(l[6] == 7){ if (l[16] == 6) move(t, l, 7); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 6); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[6] == 8){ if (l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[6] == 9){ if (l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[6] == 10){ if (l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[6] == 11){ if (l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 12) move(t, l, 8); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 12); } else if(l[6] == 12){ if (l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[6] == 13){ if (l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[6] == 14){ if (l[16] == 6) move(t, l, 10); else if(l[16] == 7) move(t, l, 6); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[6] == 15){ if (l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 16) move(t, l, 12); } else if(l[6] == 16){ if (l[16] == 6) move(t, l, 7); else if(l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); } } //else solve the 7 piece else if(l[7] != 8 && !(l[7]==7 && l[8]==8)){ if(l[7] == 7){ if(l[16] == 8 && l[8]!=12 && l[8] != 11) move(t, l, 7); else if(l[16] == 8 && l[8]==12) move(t, l, 12); // Special cases else if(l[8] == 11 && l[16] == 8) move(t, l, 12); else if(l[8] == 11 && l[16] == 12) move(t, l, 16); else if(l[8] == 11 && l[16] == 16) move(t, l, 15); else if(l[8] == 11 && l[16] == 15) move(t, l, 11); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 8); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[7] == 9){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[7] == 10){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[7] == 11){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[7] == 12){ if (l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[7] == 13){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[7] == 14){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[7] == 15){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 8) move(t, l, 7); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 16) move(t, l, 15); } else if(l[7] == 16){ if (l[16] == 7) move(t, l, 8); else if(l[16] == 8) move(t, l, 12); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); } } // else solve the 8 piece else if(l[8] != 8){ if(l[8] == 7){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[8] == 9){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[8] == 10){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[8] == 11){ if (l[16] == 7) move(t, l, 8); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[8] == 12){ if (l[16] == 7) move(t, l, 8); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 7); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[8] == 13){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[8] == 14){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[8] == 15){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 16) move(t, l, 15); } else if(l[8] == 16){ if (l[16] == 7) move(t, l, 11); else if(l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); } } // else solve the 9 piece else if(l[9] != 13 && !(l[9]==9 && l[13]==13)){ if(l[9] == 9){ if(l[16] == 13 && l[13]!=14 && l[13] != 10) move(t, l, 9); else if(l[16] == 13 && l[13]==14) move(t, l, 14); // Special cases else if(l[13] == 10 && l[16] == 13) move(t, l, 14); else if(l[13] == 10 && l[16] == 14) move(t, l, 15); else if(l[13] == 10 && l[16] == 15) move(t, l, 11); else if(l[13] == 10 && l[16] == 11) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 9); else if(l[16] == 14) move(t, l, 13); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[9] == 10){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[9] == 11){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[9] == 12){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[9] == 14){ if (l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[9] == 15){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 16) move(t, l, 12); } else if(l[9] == 16){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 13) move(t, l, 14); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); } } // else solve the 13 piece else if(l[13] != 13){ if(l[13] == 9){ if (l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[13] == 10){ if (l[16] == 9) move(t, l, 13); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[13] == 11){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[13] == 12){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[13] == 14){ if (l[16] == 9) move(t, l, 13); else if(l[16] == 10) move(t, l, 9); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[13] == 15){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 16) move(t, l, 12); } else if(l[13] == 16){ if (l[16] == 9) move(t, l, 10); else if(l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); } } // else solve the 10 piece else if(l[10] != 14 && !(l[10]==10 && l[14]==14)){ if(l[10] == 10){ if (l[16] == 14 && l[14]!=15 && l[14] != 11) move(t, l, 10); else if(l[16] == 14 && l[14]==15) move(t, l, 15); // Special cases else if(l[14] == 11 && l[16] == 14) move(t, l, 15); else if(l[14] == 11 && l[16] == 15) move(t, l, 16); else if(l[14] == 11 && l[16] == 16) move(t, l, 12); else if(l[14] == 11 && l[16] == 12) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 10); else if(l[16] == 15) move(t, l, 14); else if(l[16] == 16) move(t, l, 15); } else if(l[10] == 11){ if (l[16] == 10) move(t, l, 11); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[10] == 12){ if (l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[10] == 15){ if (l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 16) move(t, l, 12); } else if(l[10] == 16){ if (l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 14) move(t, l, 15); else if(l[16] == 15) move(t, l, 16); } } else if(l[14] != 14){ if(l[14] == 10){ if (l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[14] == 11){ if (l[16] == 10) move(t, l, 14); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[14] == 12){ if (l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 12); else if(l[16] == 15) move(t, l, 16); else if(l[16] == 16) move(t, l, 12); } else if(l[14] == 15){ if (l[16] == 10) move(t, l, 14); else if(l[16] == 11) move(t, l, 10); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 16) move(t, l, 12); } else if(l[14] == 16){ if (l[16] == 10) move(t, l, 11); else if(l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 15) move(t, l, 16); } } else if(l[11] != 11){ if(l[11] == 12){ if (l[16] == 11) move(t, l, 12); else if(l[16] == 15) move(t, l, 11); else if(l[16] == 16) move(t, l, 15); } else if(l[11] == 15){ if (l[16] == 11) move(t, l, 15); else if(l[16] == 12) move(t, l, 11); else if(l[16] == 16) move(t, l, 12); } else if(l[11] == 16){ if (l[16] == 11) move(t, l, 12); else if(l[16] == 12) move(t, l, 16); else if(l[16] == 15) move(t, l, 16); } } else if(l[12] != 12){ move(t, l, 16); } else if(l[15] != 15){ move(t, l, 16); } // } printPuzzle(t); saveRGBImage(out, "nextMove.ppm"); /* imFree(im1); imFree(im2); */ return 0; } void printPuzzle(int t[]) { int i; for(i = 1; i <= 16; i++){ printf("%2d ", t[i]); if(i % 4 == 0) printf("\n"); } return; } void move(int t[], int l[], int m){ int empty = l[16]; int movingTile = t[m]; if(!(l[16]==m+1 || l[16]==m-1 || l[16]==m+4 || l[16]==m-4)) fprintf(stderr,"Invalid move attempted: %d\n", m); printf("Move %d\n", m); l[16] = m; t[m] = 16; l[movingTile] = empty; t[empty] = movingTile; drawArrow(m); //printPuzzle(t); } void drawArrow(int tile) { double width = imGetWidth(out); double height = imGetHeight(out); int i, row, col; int x0,y0; int dx,dy; x0 = 0.121*width; y0 = x0; dx = 0.773*width/4.0; dy = dx; row = (tile-1) % 4; col = (tile-1) / 4; for(i=-10; i<10; i++){ RGB rgb1 = {255, 25, 185}; int x = (int) (x0 + dx*(double)row + dx/2.0); int y = (int) (y0 + dy*(double)col + dy/2.0); imRef(out, x, y+i) = rgb1; imRef(out, x+1, y+i) = rgb1; imRef(out, x+i, y) = rgb1; imRef(out, x+i, y+1) = rgb1; } }