From 26ce1477bdda913a8e58496644777d3d676bee95 Mon Sep 17 00:00:00 2001 From: d-kaselautzke <33751201+d-kaselautzke@users.noreply.github.com> Date: Wed, 6 Dec 2017 21:56:26 +0100 Subject: [PATCH] Merge Branch TeamCMU the last --- .DS_Store | Bin 10244 -> 0 bytes Legacy/.DS_Store | Bin 6148 -> 0 bytes Legacy/Basic_Structure.txt | 34 -- Legacy/Revision_01/Puzzle.h | 375 ---------------- Legacy/Revision_01/main.cpp | 160 ------- Legacy/Revision_02/a.out | Bin 75216 -> 0 bytes Legacy/Revision_02/main.cpp | 305 -------------- Legacy/Revision_02/puzzle.h | 469 --------------------- Legacy/Revision_02/test_puzzle.h | 406 ------------------ Legacy/Revision_03/a.out | Bin 65008 -> 0 bytes Legacy/Revision_03/main.cpp | 115 ----- Legacy/Revision_03/puzzle.h | 467 -------------------- Legacy/Revision_03/test_puzzle.h | 406 ------------------ Legacy/Revision_03/test_puzzle_long40x40.h | 400 ------------------ Source/.DS_Store | Bin 8196 -> 0 bytes Source/cmake-build-debug/Source | Bin 131392 -> 0 bytes Source/functions/.DS_Store | Bin 6148 -> 0 bytes ToDo.txt | 31 -- 18 files changed, 3168 deletions(-) delete mode 100644 .DS_Store delete mode 100644 Legacy/.DS_Store delete mode 100644 Legacy/Basic_Structure.txt delete mode 100644 Legacy/Revision_01/Puzzle.h delete mode 100644 Legacy/Revision_01/main.cpp delete mode 100644 Legacy/Revision_02/a.out delete mode 100644 Legacy/Revision_02/main.cpp delete mode 100644 Legacy/Revision_02/puzzle.h delete mode 100644 Legacy/Revision_02/test_puzzle.h delete mode 100644 Legacy/Revision_03/a.out delete mode 100644 Legacy/Revision_03/main.cpp delete mode 100644 Legacy/Revision_03/puzzle.h delete mode 100644 Legacy/Revision_03/test_puzzle.h delete mode 100644 Legacy/Revision_03/test_puzzle_long40x40.h delete mode 100644 Source/.DS_Store delete mode 100755 Source/cmake-build-debug/Source delete mode 100644 Source/functions/.DS_Store delete mode 100644 ToDo.txt diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 3b4323ac8cb5c4a5d9c37c1fe17117bd2cc733a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMPiz!b82`Sdl$oK>X(_NEg$<>#=+bse(}GakZmU8l(6}vaDNts2MmjP(Q+H;& zv`bCn!5AfaLL;aL4-$hHK@T1@8ZXL06D1M77!O{IdhmkLi{G0!+ibV3iAf`bytkS6 zz4!fjZ@%CD=FPkr0Kh~}j{!sgK%#?5wTh}m3bV6gK?wyK7KaoMsk}RpvYZt4Z!Yi_ z3W0z?Kp-Fx5C{ka?ga$sp3RE1noCg&1Ox&CfjI=&`VgUm$#@`Vx%8I~s{Abg$qG{Y zh1x1>kc`fP$wCErC`lfQ!4?B~IO!vSUp$brT=HgkNEC@ zaV|wI5D*9~M1bwxE1((9f(c&f{yjBenXcE``W=Q=RIIFACCT(#Bb`c)JNcxic{w+s zWk*@BU-QOOL3_Y)thu(9I&K>IF}1G8u|3VSjjSJR>IS)-95QX)$tRqgt-Jm>Np4{C z$YbiJLZPjrGa8BQX`P8i3b9yhZ#2@`+A%XDOB)+wU5CzOrlt!QW}dywlfqzOfayhkb^7%V3YuG^KNrsS+9XgD9O@tCwustx=^;5PXQEMKcyzj<3j z)2_D8{oS|LtgTj+TBUAi(sa#~Weny`-5Vd#+_YiqrhWDVEgiOJK4ltNxhC|UJYZ`X zQLy(zUplK5C#!dqqaL+PYWXL7{RS)}e;!dt@IC25rDd$I=A zT&*;QACy&18gMBuKEy*xR90Pi;2f=EJhVlLNvbXnT3X7mxT;<0kkrHS&?HZfEB7k< zq#BIM!)Ygzq4RdR`an1?sb5H^+1!1a>m8dgY?_{Bk=POrk1&0=t{b`}Ne%I)04J3_ zIcf5G1< zVGY*eI^2d$xDy}7D8}#++=pFw0DG_xkKi%v$KyDLXE23nJcl0U@H|f8bNCWo#Fz0E zd<(DQ`*JR9uk{@qV$!PpMVT#^AkiXlOAu))O0d+*LMyU&Sa`Q@gHi z{nm!2XslyjeD2>X`@`mOs+34RcQ`qG(iBO-$x1}swD|$0evs&7oG&MMk@)H=MjYuD z^WGMzuU8pkcy~u*y`mzKTK26w8_609Y`dDtwu1P}ZEd@idUYjHl}C2&Q53a;xXi8l zyU1EetmW431X+PyRdNaKmL%P~a2-A)!u)yz^xd;2Hb&-*o>{% zhP$zyX!a;}W5TD}QJ-ofIEtt6G!bqbpGFHaXk(t}R=^85gU{m&_@Ym|OZXaI#w+*+ zzKQQ}a?MfhV3BNG;?;7>O?aukoa<#tAB911=?<8sx`l25;3B^bP0fE3hhX7XeCVLZfTEz`p`5Cfz?GZZ8(7_7x zo8{6Ep=#cT0P3*U@%|Q-Y{8b^kBgI@#m{o-hg07VC;2~p3{b@WU+n+?%iE~?Z~y-f D3A;>0 diff --git a/Legacy/.DS_Store b/Legacy/.DS_Store deleted file mode 100644 index 1fc12ec0e571efe0236d1f6115de385dd8b7dcbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!Ab)$5S`SjTSV+Zu*Y1y_0Y9o^&l*@9=wSwdQhpmwAh8ZDcx<0*2?~d{*hnc z?>LjBVyQg|B4wsb-efY9ke8C#0D!0uS}s5l031}pTmhROgvLqdBxgN@LeG&v1PWqk zLS-(R9siL5I=c-xhc*oH?7p90H5?_qu&Y9hcn^EsC`l`o50P8Rudb~-1^jI~w|+;B z{4_`hNj>OaQ|~NDJE65Nl$-4aWlij#{=X zPT>uW1=}6^{kW^*dyJT7PqP@A0cL<1STY9eHRo(B*}ix?%m6d+dj{x!kf?;7#mu0- zIg#| diff --git a/Legacy/Basic_Structure.txt b/Legacy/Basic_Structure.txt deleted file mode 100644 index fe185fc..0000000 --- a/Legacy/Basic_Structure.txt +++ /dev/null @@ -1,34 +0,0 @@ -Übergangstruktur - -next() -{ - calculate best next move out of information in log - solve(with m and n or a puzzlepiece from box) -} - -solve() -{ - solve algorithm - - if(no solution) backtrack! - if(multiple solutions) set multiple solutions into log...setsolution(); - if(one solution) set solution into log...setsolution(); - - return{no solution, multiple solutions, one solution} - -} - -setsolution() -{ - set pointer(s) in log - set pointer to log into matrix -} - -backtrack() -{ - go into log, remove last piece - - goes back to next() -} - - diff --git a/Legacy/Revision_01/Puzzle.h b/Legacy/Revision_01/Puzzle.h deleted file mode 100644 index 854a95d..0000000 --- a/Legacy/Revision_01/Puzzle.h +++ /dev/null @@ -1,375 +0,0 @@ -//Raphael Maenle - 11.11.2017 - -#include -#include -#include -#include -#include -#include - -using namespace std; - -class PuzzlePiece -{ -public: - - unsigned char Ringbuffer; - - PuzzlePiece(unsigned int flag = 0) - { - shifts=0; - boxidentifier=-1; - switch(flag) - { - case 0: - Ringbuffer=0b00000000; - break; - case 1: - Ringbuffer=0b11111111; - break; - case 3: - randomCenterPiece(); - break; - } - - } - - void Shift(unsigned int moves) - { - //Shift ringbuffer to the right n number of times - shifts = (shifts+moves)%4; - Ringbuffer = ((Ringbuffer >> (moves*2)) | (Ringbuffer << sizeof(unsigned char)*8 - (moves*2))); - } - - void printPiece() - { - cout << bitset (Ringbuffer); - } - //makes piece to random center piece - void randomCenterPiece() - { - this->Ringbuffer= 0b00000000; - - if(rand()%2) - this->Ringbuffer |= 0b01000000; - else - this->Ringbuffer |= 0b10000000; - - if(rand()%2) - this->Ringbuffer |= 0b00010000; - else - this->Ringbuffer |= 0b00100000; - - if(rand()%2) - this->Ringbuffer |= 0b00000100; - else - this->Ringbuffer |= 0b00001000; - - if(rand()%2) - this->Ringbuffer |= 0b00000001; - else - this->Ringbuffer |= 0b00000010; - } - - void assignIdentifier() - { - identifier = idcount; - idcount++; - } - - unsigned int getIdentifier() - { - return identifier; - } - void setBoxIdentifier(int new_boxid) - { - boxidentifier = new_boxid; - } - int getBoxIdentifier() - { - return boxidentifier; - } -private: - unsigned int shifts; - unsigned int identifier; - int boxidentifier; - static unsigned int idcount; - - -}; - -unsigned int PuzzlePiece::idcount(0); - -//saves a matrix cluster of puzzlepieces -class Puzzle -{ -public: - Puzzle(uint m = 7, uint n = 4): col(m), row(n) - { - Matrix = new PuzzlePiece* [n+2]; - //Box = new PuzzlePiece[n*m]; - for(int i = 0;iPlaceOfPartGood(m,n,newPiece)) - { - Matrix[n+1][m+1] = newPiece; - return 1; - } - return 0; - } - bool removePiece(uint m,uint n) - { - - Matrix[n+1][m+1] = 0b11111111; - return 1; - - } - - PuzzlePiece getPiece(uint m,uint n) - { - return Matrix[n+1][m+1]; - } - PuzzlePiece sudogetPiece(uint m,uint n) - { - return Matrix[n][m]; - } - - //check if place of the part in the matrix is correct - bool PlaceOfPartGood(unsigned int m, unsigned int n, PuzzlePiece& myPart); - bool testRotationPiece(unsigned int m, unsigned int n, PuzzlePiece& myPart); - unsigned int tryAllPieces(unsigned int m, unsigned int n, vector& myBox, unsigned int separator); - unsigned int putBackIntoBox(unsigned int m, unsigned int n, vector& myBox); - - void printPuzzle(); - - uint getCols() - { - return col; - } - - uint getRows() - { - return row; - } - //creates a random puzzle of size m columns, n rows - void createRandomPuzzle(); - //shuffles Box; - vector Shuffle(); - //prints box - void printBox(); - -private: - uint row; - uint col; - - PuzzlePiece** Matrix; - vector Box; - - void sudosetPiece(uint m,uint n,PuzzlePiece newPiece) - { - if(this->PlaceOfPartGood(m,n,newPiece)) - Matrix[n][m] = newPiece; - } - void sudoprintPuzzle() - { - for(int i=0;i (topPart) << endl; - - unsigned char rightPart = ((negativePart.Ringbuffer & 0b00110000) ^ (tmpPuzzlePiece.Ringbuffer & 0b00110000)); - cout << "rightPart: " << bitset (rightPart) << endl; - - unsigned char lowPart = ((negativePart.Ringbuffer & 0b00001100) ^ (tmpPuzzlePiece.Ringbuffer & 0b00001100)); - cout << "lowPart: " << bitset (lowPart) << endl; - - unsigned char leftPart = ((negativePart.Ringbuffer & 0b00000011) ^ (tmpPuzzlePiece.Ringbuffer & 0b00000011)); - cout << "leftPart: " << bitset (leftPart) << endl; -*/ - - if ( //simplify - ( ((((negativePart.Ringbuffer & 0b11000000) ^ (tmpPuzzlePiece.Ringbuffer & 0b11000000)) != 0b00000000) && (tmpPuzzlePiece.Ringbuffer & 0b11000000) != 0b00000000) - || ((((negativePart.Ringbuffer & 0b11000000) == 0b11000000) || ((tmpPuzzlePiece.Ringbuffer & 0b11000000) == 0b11000000)) && (tmpPuzzlePiece.Ringbuffer & 0b11000000) != 0b00000000) - || (((negativePart.Ringbuffer & 0b11000000) == 0b00000000) && ((tmpPuzzlePiece.Ringbuffer & 0b11000000) == 0b00000000)) ) - && - ( ((((negativePart.Ringbuffer & 0b00110000) ^ (tmpPuzzlePiece.Ringbuffer & 0b00110000)) != 0b00000000) && (tmpPuzzlePiece.Ringbuffer & 0b001100) != 0b00000000) - || ((((negativePart.Ringbuffer & 0b00110000) == 0b00110000) || ((tmpPuzzlePiece.Ringbuffer & 0b00110000) == 0b00110000)) && (tmpPuzzlePiece.Ringbuffer & 0b00110000) != 0b00000000) - || (((negativePart.Ringbuffer & 0b00110000) == 0b00000000) && ((tmpPuzzlePiece.Ringbuffer & 0b00110000) == 0b00000000)) ) - && - ( ((((negativePart.Ringbuffer & 0b00001100) ^ (tmpPuzzlePiece.Ringbuffer & 0b00001100)) != 0b00000000) && (tmpPuzzlePiece.Ringbuffer & 0b00001100) != 0b00000000) - || ((((negativePart.Ringbuffer & 0b00001100) == 0b00001100) || ((tmpPuzzlePiece.Ringbuffer & 0b00001100) == 0b00001100)) && (tmpPuzzlePiece.Ringbuffer & 0b00001100) != 0b00000000) - || (((negativePart.Ringbuffer & 0b00001100) == 0b00000000) && ((tmpPuzzlePiece.Ringbuffer & 0b00001100) == 0b00000000)) ) - && - ( ((((negativePart.Ringbuffer & 0b00000011) ^ (tmpPuzzlePiece.Ringbuffer & 0b00000011)) != 0b00000000) && (tmpPuzzlePiece.Ringbuffer & 0b00000011) != 0b00000000) - || ((((negativePart.Ringbuffer & 0b00000011) == 0b00000011) || ((tmpPuzzlePiece.Ringbuffer & 0b00000011) == 0b00000011)) && (tmpPuzzlePiece.Ringbuffer & 0b00000011) != 0b00000000) - || (((negativePart.Ringbuffer & 0b00000011) == 0b00000000) && ((tmpPuzzlePiece.Ringbuffer & 0b00000011) == 0b00000000)) ) - ) - - return 1; - - - return 0; -} - -void Puzzle::printPuzzle() -{ - for(int i=1;i::iterator i = Box.begin(); i != Box.end(); i++) - { - (*i).printPiece(); - cout << ' '; - } - cout << endl; -} - -vector Puzzle::Shuffle() -{ - random_shuffle(Box.begin(),Box.end()); - return Box; -} - -bool Puzzle::testRotationPiece(unsigned int m, unsigned int n, PuzzlePiece& myPart) -{ - for(int rotation=0; rotation < 4; rotation++) - { - myPart.Shift(1); - myPart.printPiece(); - cout << endl; - if(PlaceOfPartGood(m,n, myPart)) - { - - return 1; - } - } - return 0; -} - -//tries all pieces in box from separator to end and places fitting into matrix. removes fitting piece -//use separator if you have to retract to a position -unsigned int Puzzle::tryAllPieces(unsigned int m, unsigned int n, vector& myBox, unsigned int separator) -{ - - for(int i=separator; i& myBox) -{ - for(int i = 0; i < myBox.size();i++) - { - if(myBox[i].getBoxIdentifier()>getPiece(m,n).getBoxIdentifier()) - { - myBox.insert(myBox.begin()+i,getPiece(m,n)); - removePiece(m,n); - return i; - } - } -} - -vector createBox(uint m, uint n) -{ - Puzzle myFirstPuzzle(m,n); - myFirstPuzzle.createRandomPuzzle(); - return myFirstPuzzle.Shuffle(); -} diff --git a/Legacy/Revision_01/main.cpp b/Legacy/Revision_01/main.cpp deleted file mode 100644 index 9269d3a..0000000 --- a/Legacy/Revision_01/main.cpp +++ /dev/null @@ -1,160 +0,0 @@ -//Raphael Maenle - 11.11.2017 -#include -#include -#include -#include -#include -#include - -#include "puzzle.h" -//#include "Solver.h" - -using namespace std; - -void numerateBox(vector& myBox); -Puzzle solveOuterFirst( unsigned int rows, unsigned int cols, vector& myFirstBox); -void retractOuterFirst(int& i, int& j, int cols, int rows, int perimiter); - -int main() -{ - srand(time(0)); - - //Puzzle myFirstPuzzle(3,4); - - int rows = 2, cols = 3; - - vector myFirstBox = createBox(cols, rows); - numerateBox(myFirstBox); - cout << "now in solve: " << endl << endl; - solveOuterFirst(rows,cols,myFirstBox); -} - -//set box identifiers -void numerateBox(vector& myBox) -{ - for(int i = 0; i< myBox.size();i++) - myBox[i].setBoxIdentifier(i); - - return; -} - -//goes round and round puzzle and tries all pieces -Puzzle solveOuterFirst( unsigned int rows, unsigned int cols, vector& myFirstBox) -{ - int i = 0, j= 0, Boxsize = rows*cols, separator=0; - Puzzle myFirstPuzzle(cols, rows); - //first Piece - cout << "#0 i: " << i << ", j: " << j << endl; - - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - cout << "error at first piece" << endl; - } - myFirstPuzzle.printPuzzle(); -/* - Boxsize--; - - //rotate through puzzle - for(int perimiter = 0; perimiter <= (cols>rows?rows:cols)/2;) - { - cout << "perimiter: " << perimiter << endl; - while(( i == 0+perimiter && j < cols-perimiter-1) && Boxsize) - { - j++; - Boxsize--; - cout << "#1 i: " << i << ", j: " << j << endl; - - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - Boxsize++; - break; - } - else - { - Boxsize--; - } - } - - while(( i < rows-perimiter-1 && j == cols-perimiter-1) && Boxsize) - { - i++; - Boxsize--; - cout << "#2 i: " << i << ", j: " << j << endl; - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - Boxsize++; - break; - } - else - { - Boxsize--; - } - } - - while(( i == rows-perimiter-1 && j > 0+perimiter) && Boxsize) - { - j--; - Boxsize--; - cout << "#3 i: " << i << ", j: " << j << endl; - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - Boxsize++; - break; - } - else - { - Boxsize--; - } - } - - while(( i > 0+perimiter+1 && j == 0+perimiter) && Boxsize) - { - i--; - cout << "#4 i: " << i << ", j: " << j << endl; - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - Boxsize++; - break; - } - else - { - Boxsize--; - perimiter++; - } - } - } - myFirstPuzzle.printPuzzle(); -*/ - return myFirstPuzzle; -} - -//move i and j to position before -void retractOuterFirst(int& i, int& j, int cols, int rows, int perimiter) -{ - - if(( i == 0+perimiter && j <= cols-perimiter-1)) - { - j--; - } - - else if(( i <= rows-perimiter-1 && j == cols-perimiter-1)) - { - i--; - } - - else if(( i == rows-perimiter-1 && j >= 0+perimiter)) - { - j++; - } - - else if(( i >= 0+perimiter+1 && j == 0+perimiter)) - { - i++; - } - -} - diff --git a/Legacy/Revision_02/a.out b/Legacy/Revision_02/a.out deleted file mode 100644 index a6efa5efd4ddf2521752e72536d52339a9267b68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75216 zcmc${3tW`d_Q(BjQ#2JcHBu`yH8nL*G&HO6GBzk037DBWBA}oM27{VqnW#A-Wu<1F zE>>1nR-W>7tc>tdSXt4{IOQqwRA)#l>U80h$@^P-ul3BHamM=p-~ao0r%$fg>$~^b zd#}Cr<#}f2;YMfr_{fL|OJ0%IB^ITUIy#g}|7%%wXZiCutW>Lw<**X1v#eIg6@&jJ zpM&3tZ02GjW099$QTRU^|EES$ill>tEqkbxWr>v9Nm70OmxJGGS@5z>inP#5dQmxQ ztB<+w<=IG4T1y8t2(P8oDD_HI|5Ed)Tx_*ULe5riL^g55L`wh24E>+Q{mY7UAVp~h z32U7C*Ds~oj4wTT^xm;qXK-wGs5c_FQ)BQFDdny}IYv6eAN(87dw==fIm1&fD9RgDR9IZTbkNe&;e&>!3@$4fJVf=I>{H&$CTFXf#E*$cQJXvCe{wnT zm;d=v>fdf%eVb?6w;$ZJVeh9GoZFa7tQY>5akH#=t7k;Ks-E=c;{Tq%|JbIV^TYJc zo7;`OHf_Q4P=$Tnjgp;0&~j81N>A-i43YnwF#5lTvA-gW-W^8YCro>0!hxaM*#^!G zr9U3VPI(wRZ=qkI>^Fqb|2Is3+k~+{ zE{y)>F#Y{JOudC+>OCh+{@O75FT=El*4a?w_*ED?FLVAC@eZ`i|N0zn$xcn2!>`1< z1+df6>TWsq%vO3mBQ0wJ+u0Fh$HF>M=E=)F|9n~-hFfm;yoDvj?lMnKsmJZM+!GeN zr{vEoEc4`-jxEY5E6Xpl+-X^p+tj?M=wy2~yKPzWWQNCuO$@EN5QCV7UrYAW$ zw;-p~?J3PE^g!Xv%)vj-DF8#~M|# zt$T42)iN>DGc4D0?V^12GI^+bl6y&EUVgE=5Dihy$ScY~YtXkG_Z+yi*qxi>$t^(1 zOwW)cx7$-tTC&7llwUm0Q{c`oEiEa{n25@z7w0Tgc~bI=^NK>b^%Nc*&Te5>X@95| zz?f10i1M<0_uQP^d{3Iu3HUV&Lt=YcH6t0G(@mX|ljqJU!XRiL2l*buLV6VoCx=3) zHs@v`28Ow*&*7sW>;Tzg9WH*tmMmQABo7xa!N1BkrTMCZ|Et#PG0XI%hYn7%E=x}vGuAz1aEkqI$lzi6{j_Pw zkurElvNd+vw9#YI+{uH729V@rGl>-`693VQWE4&skvJ{Js1)g1sk2-wylbtr#G~7#3k_~%jo|$6KeGVG+i1(h=^VwQtV~XO`rm;gW~4QT?KQtLTiKzr zADUsmWPPTya&KE}SqU|>RjM`q#gc8m5)Hlfpho=+y?O3VGW6!TGu6;j9rAJ*dO0H# za~XO#%6?@S`nI;#vZfh&421ofZRp$CTFWXh^yeD-MTQ;&X1|si`Z!x_St|^^j2+>% zhQ6bbf4!kU-Oz6~^mGQ6*A_$HMU;@+41HHazr)anQ>8IOr5~a+O_4^2O5a0ini`EsDt!l~X-YIEs`M?CrjT!p zSLv0M?m%fvrI%5fLcg);1QdNrDNP~Y*r3w$DczCMbt*lF(sWd8tWoLdl%|kx+@aD_ zC{3Z>xJ9KWP?|!#alJ~9p)`ed;|i4?Nofk{#ziVUgwhnsjk8sH0HrB}8#7e87o{mg z8yza$jnWjFjY%rqiP98$jfpDVmeLe*jqxfSNofkTMoXoCeFkX?vBsv~ssHaiooLNn zkFQ@4pk?FZ8wmhVCs`f+aDIpZvA*98c~ zY}cTE5Uz^m4leJPi@Wb4Qxtw3XTCz9r2&~&Df=_`QPj;HEa__E*{++uRR;E)h=Ku^ zx5>4~cd0AlHP^c*JY8&Sr-`+=bF7*Bbp0zXE=2#V@{ZXk=qpBtX1*3P6{?8;sG44} zs;Oa@TIDfE??gG<*!NVRrEX^9GL)hBnV32WF7I-mxBLrNrPEiL5nbv0BBHLMAMihI6}c#U_@`@eeYy!(Vb#B9SAB5EpXVv*~Jx2{b+N-0~1 z$cz_R*JE-fTs?E&dTIlj5RWD_BTKWoAw#)xk<0f1#;T$rVs%a2#+p?%o?euLU{VumKzB4za&%HTRs`gTCzCgYG5PsaG8rFG;4|p_CSOrG5(9F)44rRq7?ZcE z0?`2l)&-a>QaNG+a?B@_pBxX}@rzV}h=2kk0!*H%azqB?I0L%%ukVxbo(5;{@|N%P zX76x$Cv6+&b#BdbRYv#eNAc@*`jTrZom;)mgO$#MuH1TfbekIe8K5Kf#od9Ch+FkC z@+wXP3$BJ>4`uQ0sm$I{S-uncT~w|PIjO|TP$h1o5|tSJY}j$cqV{@M)ug&W3k}nd zsmfVL);6Ilf$b_%m4d1qpHij=m5RbwTJ}9OD0Z|%h4WxU;^cpzSemheY7f;ACI~* z)m1sEzB0R^Qco+ga$h7l!qa*eZ8Jy5qjmMw^p@B)G~UkR5l8n{XJO@eg${bYu2ds( zQHHOxEUTI>=QUaYq$ZkwR146UZQk;&-s~-C%;umGt#;dHU-@rKi!w!ad%;k3k75dXNQ2ejxPC|T>=O%AAZ?$&X$nQB;reEztp7fx{lu2%%g zf~+^9lX?IuCvB#{ky)9>>I$YOh8fMBxMWIIV(W)hC{7DMMhfQWOhpi$hi9 ztU=xymsiC~xl-+MRZ#>|i{4f>8l65D6;x(#shouNIJaqDtHN-1MNP!fSryLR5sk4F zO((UWiDJmMtoo`VoQ%#$rIq#~*zwZ4g0(R(vQvyV*k6FK4zoT4MH2bWUZp>}0`(|o*7_d6d+)wV=Z-2@gmOhT)`0R| z-WsL`7Ois}&XXhSN;vs3&=C$Q0-RZF#hv1Y-j_g(L=WcW72@HxtG zQjp>9hT*FW!{2Avt!2Y@YeyPJ-$1sChITiGbqRL?6Kl2EJNnoin+)^?M!$0w^^D{b8BTa7*+u}MX9lIIL*$eX6R ze4waz+G^C-&>CYizaQu&bts5=30<+H;0a{I>RvgC&M57I z&M4TwYJF>wgO~Y681bc0CB_+LbQYcOGXl?hr&`ZjqdU^!cP7#Rg-j{(u-7o$lMQ3{30}|V8%BSf5NbXD8Ct0} z#V~phdU8RS^}M5D_(5ejcs;+*F#L&bxqm&so<@tKYYsBfdb|ST@1GUvT3gZJ=vj}8 zpw;V*=t#1eKYtIy3Y93IBlaUfeyOYRwf1NJE{#<^=`5w<=`d7i1?pQ}Gdga=ehJw9 zhCXgX&A6ToJ?rUAf3>kLZ;?ES{wmgqE?&2Pv(f%VHuLA7A-Y7>`XXu9I9m@dY@mxy zwfGMTP}lhT(OE!zU_Xw#xPQ=_{kYRud+Q}ntiN6RMHhW?KepM-pMQhsVgvhey{!-E zM}C0X=tsJM=)iuY7<#iGZyNrMmpqaFb{)Tr`yZkEvBAjSU^9RIgQAO6{V0&}*lFtn z`f*=?+UUnB0l1Vm95C(igw<*W7jB9%I1ipHyO%ID1)x_x1DOeKLZujI@Nw9ljGYxhMrg(2`LI}((W2|!fO zrSN!NxX*v!Q?s}O`ikYdt#UhO56(%~;bzXRMnyZYHmHiI?SU2j6Swwg5q>AA_(#xJ zX78#j->q6(HAyX&Z(;c+_xNyMP@4LVt_U1kU#0T^-OvaqsfIU>f{!=HSE&=Yg4C8X z;tW{eT%P&B--rO#|)+pdaeubsI%BsSu+s44CR-MNK@Vzo4{q zn{{WS2hcU(8W{i6X+W9Dgc<`pT&rq*pQ~)Oz8LtqIuUi~n;c*Hlw<4ctIaEs@8|J|Yt z*F?V}g1D!4b~=%U=xHI;=;>HrTQthM*IT!z`J6qzvm^Fa9Es|Wq#7U<6aPd`eMcgn zh6c{EyFDA|=pAMY?x)E{jjck!s4!E0O_m`EI5Nig<%v>`yhW@m>BiVUS% zw+=&=gvQmI%|awr-)Ap}C%!V){v0aJH_39;qD~R3Z<;+oCoZqE3C+d-6t=3#A3)9F z2UV?a4xRWQ*NhGbzj>&JO4;L3k8(#JHp1^qy-)6odCpg?PB&aNvYarj!^ga8F_?(PRXC4D9DRZAo%i!Q3zIMC*7-;jtu91` zR84mWB;8m?$S6e*qIYxR_e+_|J%$q)oa(tuKNCtHe37vRqGEZE&}gQ6i9W)KhlR$l zVk^-*II&u2D^{#AEzc9$nrQ*i0h~w^8q10aMDf3B;`u_`uwo!l+~iZVz0kI-=wQA~cTaQld|A;wqu> zte8%8J|`{`+L0BbOnR2kPE5}x+J_S@7ju74XN5&HpA(-8?aYcJv^?L=iG4!5uwp+^ z@zoPi16BS>@ z3GL1_o~X3>`%&zT9!!523wjSH-WPfnD?T79^XP9v&u02OQK|PXq31B&Of-iR*9uK! z#WJ(()k1qRok3K_=whM0m|j9uV)7iJ=Q2$sDt?X-+M8)4QEBtPE@E#;uzWGbDEq3= zzFhV-qH{U%n9%cBv5lzAL9ft$Om877Jz5~NKhq+jg`AiqbO0+R6O|raAoP5uNklQj zRiJbfI*=8eh+f5s|BU4R4r0ZRSa9unKNLEc=^>)4Iq`R)7qDU%(R(;?x6mY3+(UE| zC$1Bk%!=!YPUpl-p+i_Pi>O51r9y`?br4PCL{Fh9tmsAbQBFh&9ma}iq7yjrRm1rp{VE$M5VuOp_rJ8&L(;fCq@g!BBtmVqA~~173yT#+q4`bR3=9& zqWE}18TvQIRe1wP1*P!8Ep|-4F4V>J4Wd%-lS0#&ZYP@0i7KHIEVmMs9+e2iK}*%U zh^Va3R|rjKI>jtIR45M1s%(l`Zx^9B$}8H{Ec*+hT=f_C^Av4Hkl3rrKZIs5{g~){ zPP`-(pVp|dyNSvQe4o%MOz$Tu-ndaHK9f^rR}g)K6FEXI#)PshzbW)8rU!{m=fqP&Me#IIX~b?SaF!B1oz8A=P<1%D)l}fG?(cXqK|UoCZTz(SZUH+q2iuAqEd}hsB~gHQ5pU7 zgwA8j{fOSpi8eyz(A1V_Hq)cnOO!Wcc{?@|R3hgsp;Fb`L?7p}&j?+>iXB9yiMIQ>0$=|TEs{UTX^f)#Od(HW$ z&{C$K5|z+@MQ9n*8lvKw2Zef=K15VTzd~p^(^W(zp7Vt+W;&PX6P&nA=n_`Ah)(B3 zf1yiRF@Wf1PMjw6T2{0px{(v#;1r^~v5XbpVxzEI^^VZ%nAQBNy`B}%5|!}1 zQ|NN08;FWG%7xy*bTLus@0CJtWIBzg1n3B%E0~TXD)HQ1=uJ#}5S3Q_jx(9+?@Fd8 zuu)WdIq{j$3RW}_mGRvpbQRORCVg1wYNlI>%KTj|RGhbl=v>Y^Pw368C?NVEC(?wj zWyJ)dcXQ%=q0)(gM5WE`h2Fy1I}p8!6W`(ds=QIjil*V9V(49=>zKYrRQ&v$&?=@o ziAp?g6nZPuO+;lBmI%F#=~A=oRYKP@olf)~PFy7Pc2G_QEBtvgx=5e zd7`o+-6iw^rkjaMJYOqx3)5vpvpI3KP{}@nsC4gQp$~EPONc(siF1TL%!)*!Q#lbK zbSo<&iRN(PUjx}2GH7358?k4~t3t&AuMsWevX2RUj1}96%7A%=%AnmsbR%b7AXGY0 zL{!#|NkX6C?30N~k1i1UB-13KT{zKE=yq0gA}Zbc&-vWnr75Wy_6rwUiy9j-oX;-2$3csAk{e6dNGd2p_SN{-N$Mj>O z63;IQeV6HOqGI_zq3F-M8)!hLVslX5YhRZs1W)SD^{5_U+B+F=Mvq@iOYok!U`8r z{I71J^%vUAiUC9=u1*vBU#9Jd7I5O5UhIuuS@CUu&_YhUBlI^`)DeB06Mq$YoE6U! zmDTJ{p}#ZTKvY(wa-k=fE+(4Ki7SP+uwoj~t2i-2DE;)8J`o#9RQlUpC_N5{Xb+;8 z0xI!)PwsCd(-YVz?EZcxG>T~hQEBrYq0vnD5|wCwSZEB>ttMS9v=!4eX1()-wq{yD zbPBgQO=v9B2}GY@dcM#$Ob42l+Y6;9nvgd-nDo0u_Qq*Uo3K&X-gsANJErdu6>mHz zv^~?EM8z8$g?3=NiRgSwH)4stWP0m&1U+D(5_4$B`R&cS?C!|*P3Mu zg(fhaPjot4o+$K8rs+gwts5k?8`Hr=#T)n~q~7VeGmR%IBl!K0kg#3L*EyA z7Sj)iN{{{~^lYZj6D{O6-zD@MrkhR6*9uK!y38zlwa}hSXAqURx>#s0rk4g1??~=tQQAh)R#H5Sq?(3Q_UoP@$8UrkJ#g(8)}@5}ju0M*Nb%{k@!NGd2p_&;Jmb z!SrLI*f~@OUJ`l*)7?a+&G!kN!t{QV-Y7Ja=?bDUMma*Wn9d<8ejY0{o9Q^Bvexwx zI+bZ(qMNzRt%Y96G}g4-cm{hzeWe>?^ffjLdxpL#^eQfUkf_YTr-V*t`ZQ5lV{a3B zHPiJ(rAOBYox!w}=-u4rOrbNGW|{R46FQ6OaH29(&Jaq^=cA}gAi9Pv|F zm+5$-S1~KnRzLLNmGS+n z(Ce8#OSCW7d#BLlOg9jfb)#J94NMmkmC?Ua=#5OL5tR`fA#?@Pk*4MDLT_T)gQ&#D z@13~6E18}+)3E%R&&V`yWZHy{!j6r1g|1`z9#I*= z=Y&=<-APo&Xrs_unQkH~k+VeTZA_OEl^$IMYX7F`rei)h$^2~qe#-F*RF?0IUHFMb zt65>M|Z)#1kgJ6u((=`l*xO;ON+J!IrNsPgGwt`-~m z$=EYowaz-K3wB@wPmHKqO^<7;jwT)K%%MD7-$>(qr_f~=QQ4(jwy%-@gi-GydVf;A z&h^zEZu~b!X1Xq`U7Y~CF)&-Zx(C0bMpbSkePtEt^iMm!dy8B}?y!HF^DS+a{L`f3 zxBZ@+j!nb(<-^gx>5`RI%BHHv`!+nF_oLPHP%4*qV?T(O&=A`xr^5`)uP0|cpxV8f zoIuI-I!XSd4om-)kdbJq!_LhDx7E+l3!J+%ElQA)u%V9i2mJ`-7&g46rJ?$ zVM8ZfyxHH{9%!v^-cB_6ru`J}{A&;I^5fp}W;`sXX}x}0hyH!{Z13`Wz2%#sUmr9v zYMonA8b99KMgmV2iF?L*uh+Sw*11zDvNu;wx)rc3Z$XX9-u2P%SGMA3cB|LHNTu^$t=TqW zZ}|;KUF6(cz8JqXqNfej;wQcMp-W}4~3D_f(}&Rt&TcKVGYVgOIn z@jAD0d{!*PSR&xQuq{TRkal;PX=?^m#O-yUy^SrcXh^s6kp7j1)VZBneQ*Cd_2W;( zVBDI!q1T~J8;=b7_jYa6ULN$1pFz)L(3eB6Td|MSGU$h({=-3Ef?4ek=O0cr=&BRp zLpciJg8`?2HwOK4v?yrMyV0i41AWf{z37*J(ASYsW6%#i zZFKuH@_~QQXG>ll^etxI=KzoP2{q1A^G&F^aWsBZ$OE>S2aIOwnlJ;oI`lv`+XG4M z<$>%-&5?oJiG&`=U!O91)E=$;!-0GnbL3ABH5f>GW@3neT>Ti$H(7FT4Ly7<_VBewWjuUSs1Y)JKOv!q?;^8plac)ohwnQ? z`=1=XB{*oEV)(A3E#RbicokX{G<Gksy z((|U-YO@>F2vmYljHV^TK2;p1@_S@e$u!- zh!zEn+s7Cm8Mo>C)ZnNw9DiECxP3$=dE8!l8U6B4yL3XvxUGBK==KBT1OK=sN?snf z*=F7{Kt1hf+(J#e(Wtr6g=yD#+0XcO^3e!&prVcZJP_R3sX^}!1UywPZWSHR8du^U zgx#J$OWLhUiir1;5Ifux(CTpCC$Kj{PFTZI1N7tXWQlQ`&+bo!8+ zh@Uz8@H74fZ}wq4YcX9vX`rDp0bTNqt4yqJZ-?Ed+w8DA7jLV3fRF=TLqdmLJ5o#7 zokJDU6Flgr^mUaMPN#$Mu0hh3lMeUa<2_K}ix{!@#?Fe+10?8;H@@*%@|sZ^kA3v# zK0lnD@{Xzu+wpnhk1h;nq`aqTWW?UDxue|dzaMWx-X!npQ9(*gN0x3$Lq@!JO(qO{Jfi%H@CFl zNwsIcGHov&Y56adelc;+Y}_S7@)i0!6u$4EYI^h9c)kEKng6*h@uu2UwVtlosTd!EpGJk0)W6cF7E^w2(^}_`q>g*uk&4Fy zbdG!8`6HeNg6Y!i+8p=%xX2Ml`)ez;zTY0vCh+hUJVPQ0BCdK8N@q9ImGwt0b!?k{ zny;JQ4A|uI1~eR%RWw}6y)+(zOTqdP`u`$%!n?=y{t=fqq(wXsSU*9R9|2%E47Ojx zeG|V1Zv*niJ#UsadY}EH-@W3Sa^)Fn*I(#@9L8%Mbkjq*wbl^}CHDCrE1Dxb=ir~x z*7WqXen*E=&T5qpMb{&few=PKhFML?<)msaUj2^3385fQ1y*z3yriWkk|2Jm9myz3 z54o+v;~n^^B506KzNVia;(=m4**2dJ(h(ykHPEP+|5%x=I_J%ZHM~W|@T4BYXO&%k zotmin>&<9a8S@PiboPn)0&i^J1`Xm0ti#fu(b;+-b0OIHIjv^b>Q&da;X$KncH+%e zJbJm(xuv2e(p%$tk(_8*4RNj!bxT^g_B2EtZSAVX5euUMZ%llcBtP*sBbFcOgVI$Q zk@}H3Yv_KjI+OEiGx@{b}AFz0<13^^SE_ zWulh%)4Z>`Dt>G6oS{ZG-TR%d?ssIYcs1TtaWvxSzu>!V`Y}hl{Es|@?r!Z~`TL|Mf#ig=1i+~UDQeDScTNj@wamHz2B4O=7@ zCwi0=Rup=aR8z&?2yei{q<$0)9w$X10Wg;8e39|?4In4_w#K53c#;HzVz;kKevZC&12SLGBmIRnz!EZ*TYuF?@5 ztieKNK1ZDWM>80{oAjf;*|}7YS+hLzhdzapxhZ>q>N!6Xh&~-Vi3hCZ>W)em{g7sL z|7j@hKcR^E9NleL{o4ZjwEt_%tP{-ZVWWFzSX#| zN81EtP)BrCtOSFG{Y0#^Lo(gl2n*@@&g#SVh{H%mtcmY_nJYQW$@f@mF)#kvaq@Lx4O3-sW zfEbzZICEXC3i(_+Gs@t3YIameXKJ`J4sw;c&@*Rlr=zE>`eZ$Iq559T%r^K3GgF@X zZLfg#3a1xe=|A-VGeu29NZOuMqqgWlhsy3jv+6-FRRFbhQ>zeSMS@S2+k|p5^HFzV z$k~JmUxjA)XVhHWNQ2#zX4EL0O8x6@0vSUTHy|ryt*;Ol>N*S?C^=mv)x)TcIB|0RVWr+9yD}4x!yeQ+;g`IH+smMobKb%Z^R8NOOez%yO8p#6$+DtC!?{zqcOS?|9%v7#c+qwS9?yfk5(G&&-!7pYS&4AxBycipo!ZlpKjs?mzwmg@EH)A286FbVPpnVf9!Q>c3TeRgmpJI?Y z)WCTAT~s?A!Vq8T@q1<8ky94pajQ?DIib!nzrv)^(trrwVz9utqU}XhjQ}=|A+|17 zH(CYnPI4c|*fLDA0N)lu!2|dyxxoDUIy}z;&MxS2c@s8DnmA3cinQ{~D&5qeQxI~* z>r8Y5L(O37M=FNn01SnAwkFiIzO(6Yte*dAtXEOESIp~`xx8G0ycm*Us794Nf>W!$ zwdh~!4&auiK6liRhv<&fJHBSUFCO46h&lrUYWsqYrS9CB+JiM%6=-#`Ph`h8z^?xR znX)j+S{2~GlV=_ciP{yE0}tz!hgTh?Ivv#p4AySCCe^bod84XYW*eMJF^+4+pp&IO z4W7K~bkto!b%BS>{^*iijh)ISw(XOR?$$0n$>;}n%07#BCZe5)AZ)V~MczqR%PE@F zdJDY@+4V4VijBFBzQTgI#~leZ`EWL2P5*u59~{Vy{n@|6-bcsH*k6UiI@#R zdpot)jCyJ-N4{!n7qpe4JDi&mvYAupM=6J6!kx9DO7=*819`u)e~8*fsX|fuxC$+`S~n7p*X8lvW%@?ls6jI_ z;v4THXQ;0#so~msl*Rxfi032UPH$^{PvK6gi#~WOKNqzH_*m?yb!PzTKiW$-2s@)% zP|-hpcTJ6uYGWg5RmU)nm6Om;rKZ1B>g#hG)wj>rp6b(0SV?cO;F)K;YRV>`*aX~T zHm;^=hk?WNMNYH!25#-}PMT=1C3Iy&Cw#qN&%$-2?6;V`viHzTw%-SxpkDmRf6w)g z*6K@O9)m+Q`nbk&r~=k%98{$9t93_Zt@f`+Y6pA_J1Z2eBZ9cb<4P*}R zy+n3<}L6e>BSONP(@V(cUj9hV4yu z9VL6#<8M{s?ys+$r4fjP{di#nc)nSsvY#+6sy(uAz_rBUnsy&kEOG*N2& zhsR4vX`KAR*SKBRD7}fd=VIXb`4KXx{6wBPmCOFf((knM$@Hbo1D?`CpBH$#^PNcv zv3P`ve+|}mbDHde5-fbo6qnV%=4^?;IMibYs6$QAtFbtN4aC0MNwj-R=RLJXzxE1^ zzpwNN;t792sgoW`^9DW#Zm5MAm6&6s7DWFT)t@v*H0@Q-$e0U_Ie-DL!GP~F56k*q zA5g7twi4PDA zefCG1nloKcisnocH=>qI$)`EScG_%j6ka-#)BiMV*czxj`n$^>Tp1mV2xbu9%Sp#E zkzBxk?%`sURNwX8fr23)LVxl!jru>E4WFUXKbQ?PIhyoGUg%(ke&2;`OUD+fM^ zJ9*{!)Bai*(6PjT1tPS+3Q@v#a5ztt2bk5lIB4ftwacF3AE{9xjOyjF z8FRBq{f$F4FX-EvG(V^SE-sqmkAC8h32F?@peD*O3^{aX^aW!EU=5;d2NtE1KJ=?} zZlN-9D5I}XkgL{bsmf@LLP4C-aqRYA(EUz#lu!QiDYL)D%%mHzK}*N*Rch%7{2NB` z_MmX1vp(~mk53V^&!KK(@lJ)AI&=-Kq;HSWx`rcc;4S6bPy}~yM#u_sST&#e=A*uS zN|)yPO7(pryv}T*_Z3cG{Lvkh6W*oh#L%;l)V$2W1&S`N~t^ zOynvLsHGA=VL?ugbvd_F4z-CRhVTKz-m+F`LX+AF{0DMl$n*^g_2m!Vk}vZc4UYNH zGj5t$APK!kkHdW0h>Gbfj@t}0xazYzx~XpN=g>k!2g`UhKKj0b^4f2Q^?iT(tdsvJ zQH<}Qn~Xa~M#lmUbN@zU1WqwbL~K+c_q*4T`PBQ}$#cIZpaOD&9RkM52VJK~RqOg+ zQ6khjh4BkmEDj?dh0GC>SS%uf7Yp5!!2RIefadtU60*O~A@l#VzfS~I@Mrq_7nBH$ z)iBq3iEy6olYI)T^&P%Jtts|RV}yCo@r9?xM<1IRF$tVa0U4Es{F&-+kG^|p4j8t{ zlRnYttqR!t0>w|*3nSRiKz8FJ!OrLBmYTI;?p^TJG^TSvM|jxjq{WBiNgrXI z;zKgJX-+DMeYO>3h+PNI@n@V^wS$K=lt-?^Exw=-W>YUIB5POhh@#20zRh%h5RtCW z$T7Zd7-1SMeb1`aHy>%+cyMdvQo@{2R~vP51o`)F{}kX`vgV4n#3&iO>&a_*`#ogb6WTM%U58q z_>;GqtsBl$?orFB8Ln!##y|D=z8`%e_8w&m`B{m%(4M-YiiNO7gMksi8`_2ft28RI zmziCd67-6*MPpB!^4 zg5IDAGG<8gGM*urJ?R*=fN?+xx$t^Tf4}*X_mLgTK^t@yUu*7!@7&rYf`(Z~Y*A2s zYo$JX7nEjfJ<_MPaEXd}+yGJMswUO*cYI@@<#IGH^><3m(G)MAV|!UoSDr~}W_f#+ zR=&p(N4viPlDBjE)7m&&;5*egK~yYkqUq*~J$i)HT!Fm|&W$@~6|7s<=qpE09qnzQ zuPLQh^=WlpqLuBc8q@(YGtK*Rn)k!>{$FCU#k%(V9_9OP33>J#Ph#>XQa;`Lb-MTG zaj?+R`LL^EUxaJK(ekfxii^E^CVc^O^sLeDee35Ami+(OM{5D>AqU=C5mux%Cnqm) zQBJ96WTLgG+~X-Mo|iZ$CwGB$c~M^Cn3APX&nqd(OU%$&ic2VE<(8M0<`;VsGs>4O zE6PWn#6(-C3oXhoEnHaW$u9*wHz~0YVqoHY{5v^+3EM@+vchFlx-1_p$nlg==EMxM zWU?xG?hq}8YLTKuX}+g4Czl#LG7*1UD{=nCmZwC$U7Vjwwnn-qxeJTS@=HDLoO1d( zx)sqq>LR+|MZc}CTinvpjQ34TTUri4esyh23;i}^KH_aX6U6A)e){xBFGlV^^i&5!{3loA?qNw zKsG`C3K@^5j$H5q%0teE%z#`2xd`$h$n}s@O&f$2K@1`$5iybV1$?SpZoJxfZe+avNl9Gs;7DhV(&R2pNlqS~wx; zc}%k*U693)1(0hY*FwGsxefAl$ODkA{)_UEeIaAdh8@U$kfo3=$Q6(UkoQ2Yg?tlo z8{}7z2O#_Xit>=tA?Z0^g^>LqH$b`|{|;FI*%oJ_wU7yr+aOaQ4?vEE^g$Lw#wJ?U z?U4N-t07&GpFkEs4nL0akmDe?LEaB}0Pacyi0x~W@XP={+2#YmSAd7> zXF7N(IJR(qJ145*Y917U&jBA{a@{;N-`0UI#(b+Vxw9fF@>*?!)HGf@k?%d^qu=e= z{)n0vLAi+2D`Htjx>^BRN9~ArSW$W%(DRyndSVg29)$AI?Ot-&Hc(g8rOJ%5(<551 z7wgEN%|hN)Shva?~N9EhO|H5bY(`3>jsp+qoSqd ze&Fb3f$fRhp!1QPb+8k=s-@)((@x~8c6+viKMS5~a*B_uv<*^|oez-j8|3?LFcLCu zQC|GO&Vbu3DIE_d2nB5LLk1-~y z|6~W_5pF%98>E}T^I(!h9KGWv+f{zF9WAfR${(;aPLqF2N_uzeWvC$7+8zZ07d8s)0kLL5I z$nPNktuXSF|AzbLeP?XkKVzK=w_l`yPkF1QC7ldQd_`Vnw>t~`2JlfPM;)ceLH+iC z-vgdw@<{)FvjO}tc&K%j`mq!IE%0WuJk5h|{r#nS4kO?FxF!x22gHw4JHl|PCmr)> z6Zm|*kG><&Uy(cxl+S~F^~k5<>7k%}Mm!X?v8=A|gm2F}@J?Yk)pHp2bO2ZFc{ZpX zqdn1x{|w|)?b#cY&uGta)ORcLoeSIcIL^{OB>(ilyuJhcR+C41?QtFjZq6F{mfp`D#CS68HeKo%#OqUx1GU$EAb6pVKs_ zc0}Xgl?wie$tj-R)pvFhEqK>pAUe~!u#k?gZi80Z|?@!Ie~oP z&LKO&hrHX;k_9{VxJ6#B3{X2i0G|ttW~c2jR!{Uhp@-6U};z_}$Gs z-1>YNybk5jU4J``bMf3;P;ry{1d^b3Re|(MWuEPLNfQR$P zaqyks6!Z4j8P}~na1U<>c({2o3j71`OU&|oRwtV?z<&S_{#sDQnnk5fj7_XeK@epLY1 z14?`x_-61>>nrg*@QvW%)}vM6kAh!n+Fz#oK>geb{wnyX`bqidd9`07-!an;`Qu2S zKYm2Mr$1_G8EWP$)_JJCojY3A9`I1-P~s`z?}G=l7xk3G1o15JAHc);(*xe4zNIDG ztUprUP@wV~z^8zRi;JD$^T3nM^2Yl90r*nzaO>ia;5UGWYhP#FsMrP`ZoE^#kAR13 zUl#Z;;NjZm0gwGh`1Wl8?*JZd-s}W#3m$GA`vCkW)IZqt5ARRp-ygxFP(IbfX9n`ELcVj%e0*I<{Cei0#!1C9=It#g{}l2@ zrw6T*5BuA@A9mtC4&UA{z}tXNGuxrt%Xh)_I?)a{14klXFEgLM9MR_=@KNCBn|!Xn z9qHhgfrndfi@>h{4;L5fz~_M9VA|)KALOs?;5Fc({6+jA_-o)p&GN>)J_h~|@NjX_ zu8U>;8$4Y527)((hl`tZ@c2){x337iD|oo}tpo259?`E^vg6e;wDi zx77F@15X7HH*ebEGm+ll;jRY;f}aPDZPRbx*l*LpyMTwAw?*LOpK#^ZfuDeXL(Mxi z{@~>Qu>A*b3;SXF5B^`2A7!>5>$aS0+u<`E8lOay8|Te|%sZOgxR0C;-WugEGP%CZ zs{CIB-s@ET2Pgl8?LRp6FKqw8yPu-`F>vbN7_)uL{qwh7f{u@H_6LGbK>2X~O$Q$V z9(MkNj{^@EU+cgx1J5+u7dcrqP>nzMGVpNma}c}$JY4)81J45w*Zy{AT2>}_xc1ZE z510iWuKnrYIpBlL_80j5TLfMV9`2m94txRlbhCV<{vbp3AN*19u>A+$aEkKBz~2VP zGU%Vb`m#~QXFCMmUht_VkG#V6|3L6&@Nnndbnvc+!=Iaq!25xRi@$Z?6Tnl=`i*^g zJNO*%aP#jVcoulL{v88%fkXKFZ+uQffB$0)_+=*N!!-GSAb25oIRB@Ew|Y9fe~Q3+ zgJT)?*Uz6Lje}|(cp~i6eH&{`hxpqf$8<=zHOko`u_}5@hkol~Tpg0uv~qPwt!O=| zgQK)V>gWzhqdW8)(;*T0kbg{vSoQhe2e3o^j3hh8tED9(j($+^_lTH>Bdrf33h0x= zh_jPY5Oy*60}xB#xF;hA-x6&-9Tl@R+FBhwLghH^aNESkPP2BOhO#Jd+CSTLy0fjd zt*uU;@kM0J&C%BVQ87P9S+7RX`+K7`>X;09al%q-CS+BFR$g&+%)Qap!x1riqpi;( zVh%-Hnp) zydPuz9_6I318bwxr_eX2YocR5>}(y3rmrCXEjH%6&eopT=kfl;X))d|)-CO}Lh9_Zf z_=8szW>spWl@Ld9PcW~Ib! zVE#6i#DAc^ttIm$P=A^w>qVfxofXe<5U6i&C59M}D64~&6jC2&$@&v$C*I27btzEa z(Q<5dm@4%?%Iah_-5*MSxY`pXDJDKYJ$^KjhJ=wQ9Iq=T^T7$O{A;#qq z=tK4EX_ddbMGqUNm+W^h<2~75%=@M~+e7ya>t#Qc{Uw~==rj2U#8qri{Pb4(ll=+v zA=^oR8Q8K;j$8V>uMr{Q;VPBC^GR_?f0dEG4Hq1@^f&h+Ld0P%I+z$DuIR7Q^@4v^ zt#rU1uK(1(_#Ou9HpbypGWX`|&TAlwI&hKWu zYpK@fv;IcbA1l;)%mnp%g!S*?E&VL-TBj$V7-q}in=BZbHD{cQ) zwm*#ZTUkGDzC&rQWBm)P-@C5Xz1?w+`p8POona;27 zMSxYY{@I0Ee=X<#E8AJgagxjW&pH1^*XjH+F6YN;`?J~pC!Bu;>lbr7CI36De}>2R zJkI|M^oji56s>UZ45jY|eW-XF1U>cl36DdWk#U^Ldd~u_mwCD%jGY@ff6eVWznt%1 zXMJX6pgygwt~YhP*2h`;wVd?>OSOIv>$kCf#%irkW4#ahQ2jddG;ROaAp4V8|LGEK zXFl6$QS;*D^TQI(znblcA2vfDs@`Wgf66LtU-pY{!{k4`oo?rN_FE#iXBO)}uhMp8 zK5k|GDvp!soWE;(ZRZ5fcZu5@pbyo~`#ArzT(2E(tiOM;u2=fopzI({c)qCbR-*1! zC`j>B%Ker6=dgbEwSji7X8omJt(Sh?&-xvUv_2oU>Gdk>Zzyr7wEC_g-kpwsp?Y7t zMeC*BfzXHQ?|9CC+x0sCSY^$!o@4!&1zImZRBcbfv2qm@iQTBuM>-I4DKj-}S+@bAbnAEHN>Dtb~Vy(ZN_5Gj^Rc|Th-y2l# zDwQ8W+FRS9@6^(38|%CEbEx$F>R;SjWIHeL{)m$5bp-m3mj60M_QCHtf2Ug=D&Gw{ zyVbF?ZvQGCFIjIdVEwNfb^cV&pUwIN-ggGDeiiFS@;n;G`rWMm_;zh4nf1q6-;U$< zG}gE2LVoLD9qXd=(|4Zfbs6-D>RsSJInc+4I8PQsPvcv0r$ZHxc0Q);2il<2_nd$J zT8Dx%zxsF8c6PBJ#wd!_NCg^q^2=c>x)<4a9vHvyegX1msOl@ZxkC(K+C+q8O((RZ2Udj41xIN$b4|^#W~2u2lE2{xGj^5{E}w|NM12eOp zde%>4JF{5-4C@=bI{#Iy|2OM{&r8Qye?7NT=KBOVisEW`g0@57{ioLw=&79J102*i)mUdH`K)=%br%Y0hp)AO}>x6>@`KNA^*2_NL3wrWHcW%#gu6H%(k3LW5 zm-EkktbhM%t?$VB53-%!yl%+4)X4g}p!w1s`E_r0VR}xo8-* z-^KMxoMf_oNl<&PWBpFvN3z+@v#bwZ=MS*{y`>J7^H$D3905$@`}$n1SHI~1%YvTT z6MPO?!TR8H?_;cgp7(uOm+Dy`ykF3V?qt6$uS>(EJ-xL)_#8N&^+#6fc3#8zZ)g3Q zjaom1^?zgi2Nhb6>8xI#vVP7@TECF>(S5WZqR-ZP`ppu(hCom448C5N$ok-O#WdD` zTk25d9T7@cJ6Iol{(qhI!RO&atnbU~%ouIPipK<@_N-?=%Y5m>`r!LEsnEw`Jq%uN z$8rAP^LZ}ogV#L|>j!&uzpmr)&U68{WT0v3@Xa2vGYE73%yr4yo6b ztPfr%SFrxQ>vevy^D*?DxU4CD=KNi+(fQE~_3GJA*X!aqxrFtZtbdy41;SFjma@JT zk0XXdz20E`-+4V5!1}iR**@FJXZ--yKT_^cnr7BlvVJSKa}MhdvA)*=oj-x~zp=i1 zrPj;3F&qsbe?Gx+F727c`rzxnV%FcXLfc7X`@2{l&Fe6hU-kN)^)>SyDxIU%R{Z(8 z-jZ9iUiOhJ*0)`z^|F3$gg(@GZR7mEaGYnd{a;w$$ZHHEWkFdTY=by&;zheCm-Unqp?>b1gXBNk&_+bOis6fo^B;Id(AX$FYCpeBx$(@b&W3tPj4gRnPk1`(_DAq5GQx zJ^3wTr9<`TH15~TF!?JufAISMIO`XAwH=9vS6Tlw$Ca!P$60^=TAlw=uD1jMK<$}( zyVgsbyaYXs*NS+p=j>M05S_p8O0CCqQ?CKgQ~uzWi}T-G;ZUdpXIRPl;QK!tSRZ_@ z*w6al`vZqq@8SN&vHhr_x}CwFYYb)m<9F!xNc%ToqIKf3rdYuF>xy-L@y`m@r}Mgp zWn8@;fu63rgZHoPoPWYPZRaV@pOT{6S+G*;<=kEfJ++5^JZ-*iVZEuN_b1rS&%EEs zzB3I66&l~`x&4`3u!Qx)Ry&kN;^(id55AxFHT0qU^LrS5m*KkJ)7a15xZZ5&L)m$N z^9SE|`YY>$KQCxu{Se-#a@c;_g`w@wgP!~le7$)O>)Y~rn8kMXvp)EG@DtW2taPZH z63?Bn!IAyo&y~ioKKMTE4Xi)HcCJy@@QftZkGe+NPh|Z;)=%4{_2SRC5uy9rQ|WQt zH%;f4FXQ#VM%f8hy}{oT=!^W+{@{6($@;1_+Dx>dC#T4rhX-JlsmEUB zmMmOUl<&#U8+_rg)M24Bx#t!Z7rJvwOLMMu~B@E%#;Vmya2pjw0oA+-Yw2^vTJ|`uSoRh55Pp7Z&E_mf#C5PPAwI zl+lx%Zs+82aE11ZyuWO6w%h6A46bogY^#@#AD`*Wa%YVmlkTKK0o}+8RG`hJX#cpY zCXb$!HWnS3oasp(;-0D=E9Rb)QjfMPaNTP z&nqr>=Pq5Ee4*Q2TvECa1455NqbHoDWd!sp(=%K@t&9wbIcHwJbMc?3*59T=jPbZ3 zs!*n9NRr#_DJU&j;x5WBp64lW=a-h2lx9rKbvQ0dPa89K+BEmj!6{_lXz9@6{3Y(3 zqN0*q)yjZII>#mJ_KYaSz?Ce-gWFOUl@=Cz@J54)=*OHwPg%YvEq!6C)0sTXon4$; zke|CCKhN#KKsy(z{^XWryq*%`e9Z-v>Aeb@`5>qB-X=}FU5o`13 zD`%Dzl{pJf8qizn+96fP+#&67ACGQ{mJ zFQ!SQW;sTEZedZ8yBID;euM*4QD^At7G@5G1GC(j!^nB)Y%+T5E-IXp>&`7JSIZK* ziY}!F8mCbVo=KR9umM{`-FhZwdPdN!bC)g2S(NsFHOz~#hNyVW^rWa({9hT?ZI|#t zmobaA58XLww!6?tvqCJe`NcVNit^osbJM1km7*9_g=Oxt+?=AE(lq$fiJ)GbQ&gT0 zH#>)8Ww>@xz7sL3{GB;mMc1E;ndG4u_Pl&vB=VgZn2%~&2Sgafry8?V_c&VNOE6G+ zu$}N721muNTBJgZDa}YHDw1#sHP9+#)JP9=XQn870WBC-R!}(CqgrA5>VGo1jkOs4 zv6uGYdOu3VI;Zv|%*242(Y55{;_`*G)aU=XRmp7OAFmVGP%_{-88UOymbuCFXja+0P|Xx zSCp|h*rJ*kZmeopM)bZPP|`{3W3qd)pJR?C50$;1=b8$6ZAm>5Ra-I#KGYxtROBC8 z3=9pZ-gmhENvE!Vgny3njHH91UYW5=sdJbyOVuX_yX9G1b!$yC7DUr%{<(Us_By-Hs*@Ex zKX?hwW$JuID>~{Kt`9KooZQ^}vNHQP?Dpi$Q|rA^I=Jo>IwGj`emETz*vCokG<#N> z!4S$Nfqn6>QRZAy2Nhag)nbJcog75;GDKH7ygImt3?4EVS5j)I&1MApOl@U;gF4LN zHFf1cmkjENAJDYq3$>TV;vy`+RBti*LLm6W7;ru_FH8dL$8E)tLxQdG)2oZwBotxWCPv(`~+?mvsA>3r>8N`K9>2&v` zJL$(bU6V{)i{M7?LNFUea3#2LtzL7NZp6JiH@Xo91j*9xf1OuVb@k+?VWzsO&wuKi z|NQU&uT!KC*kHht^U6d12m+Q02ADNMHmBF@>1=@BoQ_m*t6)P8_SViW$j0A9*y$tqCNhhhQkmtDA$w238K zyz)SlNw^31d4)ThPlm<8d^Uqc0Y`ihXz50(G7|Pu)j7rFsM)0XBBosJ(MBNgXsv@( zD3b4zD(V_X1OM`~FR&n_j|SY7x5iS~D+C0a!1ADhcOR0p@%CJ%Zt6inyI zFb_}2fVR-h$;Ss2xH%#FotViJX%*!its>XuwrX%(m$<4T1dt$Vy!+LLgr(R{Sd7=zf-M!(g3{5f@=vF8J|snBHn>Ql>kf-16s?aA z$WPe_&@*ypS0WExj)RCdz=VBQuEXY6=bZdEub|WeN>l^OL6rNw#3RRK$Q1)|tKS`ZjO=!q_~usLx`}lb348L=Hblzf%-u2+ z2Z@X+`Gp$6^^{>@*X!s;W{f5)kQLJ?H59|TLqh*X`)K`|oemi*+* zWaRu@bbzg7hhvBV6Fu;(CtNQ!leXVMZ{7I|r=m=ZC&Wl@F7tp7MyYWxq-uA#J4==KQ@CTphB6th-?HcEUDGT=DEw6pXSlSqt{=x(;U z9@Q$@x%+yl9(9sM(tr{Ns+EkOBHkcl0X7u{+|d%#G5LAucGgjZXH9ZCvy=ad|r&&-Z1F9VRHJR*WQlu60D zNV^(5SU0w6^=Q@QH4?0E7~|h3a1a*fI1CB$)++^_XR!e|O9BVGUf{P;s&`v8{}##M}g zn4m2iMy%zML!{qTg{P38LWC8F9XJC5P7;ZHs1R{LBhN}IJ$F(7#aS{A)?&H_;fr}!#%t}9QC8|IdskVI3MG0IdLefaaBT^GKi3ASTH?N z;({1gm64)lwqC$5vF#A|Tk^a$Bik?>*Cp4DsA?_2#HO2Csc02io-&-W#fe~O5Aqo* zObbF_1yFg?La%0BHBb@-7ERBPYevI%V7YD7nr>K{XsKNF3ioZsb_26-3!`73$xC;) zmE^mt5D&#(BJAU#mwa||k+~=0W+z#^e!^7>K;@5-W6?6ES{KRC>$+SKH+Ro279*rd z`p^6b8i)tO@&!^}Ud>QQRclU!(fG&R`%44znS|aoI8kyUL9!f-;EEL{JU@m`vH)fP zs(tSp4u6zd3SJ*wZ>;-d8e(<&&+`808Fcx0qUsu{B`(Zr(!rbFIP?QdXCib`K|(I4 zBDGqZKu*Y-=GQEfPg~coBnSrDZ2tLClkJx{Gl^hwF`G@zF{+LBPHKKw&q_sCXue;^ zSP6*ZY?4h#14Ufk*+z6IHU&@(sea>9Qy}Ul^CkiOgL>{XY zi#%exex&WSob6ngj(0Xn}RP&u+F zl1QW;8V8hw?VQFZiN(cjoD<~|op(^v3tt2>p5iEuU z!6-Cfs#R}i?n}_VUUya)m?|GB&v-zBlqF9zqmJfw;-Jlta>&9cR0mg9OB|BqDmVF! z1CMX7sY3ESVloyzbx#YB$^tkRMqcoE_dkDfd6}OL&lmFMr+|kEtz}ZXX+!%nmtAGzFZ<=7mID_ zheT3U&`vafEOWN2#ixY`JbtS(V6k=JBTXn9i!ji_6ErWz5b@pN0u|->?ce~~@>}+XQdjk+G%`*yD8clq zIl9Q$YVy&2wK=94hCZp6N=k|J>Jo`ulI1Z{)qgQ@xLRvZv@8@{cGF+4AZ8QiejO`E zLd1g!^FYE11A8un1Xg1eJ!0L(nE8O7VbdC1s>)3mqSoRuBMmpZ!_I=aDXCx~*D-pK zs4*o1Bq0_~kGs($cNywy`mI)b@p4-99^+V?%W-7i@aWv|{H)cU&5L0hrQ;u<3R=(b zp#dtFKU_5BG>1@*O&wxrF_WfxefVgpQ zI_?8*UeFD3h4f<^A<0%7Poqwe@UZ7wKj)F2@1`vd*0i79wLSi}s~2wRbvx*G2zJ_{ z=lQ>aKZ8G6+rt_5ztIb~`ON?OqW{X@@K}EYU##u%^+MsX-AwdJ;qT$s|6wnEyZ@`T zJ#PO>FKqIef1kkndTxgY_(FRg82sPY_Hc&xWa@=a-s4m3pe}ea_?vRM^?e+viNQbm z@*e;4hyd`h_Y=sO^kLuWNc&XKy8#T|_GAB>?rUMsH-AZiteqX7;X1u*z|L*o_S-Zm ze160Kv2Q1iG)^18UT*yuUkIlLZ~MEyR(NdFz#qH6!Q1?Qf?o-KUz)XSANVVUw-+xE z{I~Fz!v7rCh^7=>?m6%)eUROrD@POl(7nRX&u|jL+rIKQbmN5^HZcXdksN=Kz}x=w zw{>F$8?S=7@!R>Y5_sG1cwOPY@l$IlN4vjW{cQqo``O?7rL_2}HPmA||KBORP1E+h zKT`PrG{FBMfw%qf_g)Dgy^}cnr1$>|ehlS@?W2G7Yk|6z2#^$?e@)HT}wmf8alnin6KO-~8WymR2dg)BFDm&4^SC-ri60M&Z-;>G^*FOY=8)x6l8l zxQI{MK0SYfHpZLW{?kWvzKaSsDIo3B0|B;O1unVdG5U?VR=(q_G(OY~R7}D*SEy9)50zC;0wN z{7y~Qlj{a=^51^8?(9fxYWKD_bo~7-Y4L4qs6QsBeD8!rx#gqJ1mKhJ$PwFIw6Nuh ZTMv_;#NSo-zxt=Z{R#V8grD^O{|6a -#include -#include -#include -#include -#include - -#define debug - -#include "puzzle.h" - -#include "test_puzzle.h" - -using namespace std; - -Puzzle solveOuterFirst( unsigned int rows, unsigned int cols, vector& myFirstBox); -void retractOuterFirst(int& i, int& j, int cols, int rows, int& perimiter); - -int main() -{ - srand(time(0)); - - vector part_array(NR_PARTS); - vector corners_array(NR_CORNERS); - vector edges_array(NR_EDGES); - vector inners_array(NR_INNERS); - - //randomBox myPuzzle(cols,rows); - //myPuzzle.createRandomPuzzle(); - - - unsigned int rows=5, cols=5; - - //vector myFirstBox = createBox(cols, rows); - - //create4040hardBox(myFirstBox); - /*myFirstBox[0].setConnections(0b01100010); - myFirstBox[1].setConnections(0b00010100); - myFirstBox[2].setConnections(0b00011010); - myFirstBox[3].setConnections(0b10000001); - myFirstBox[4].setConnections(0b00011000); - myFirstBox[5].setConnections(0b01100000);*/ - - Puzzle myFirstPuzzle(3,4); - PuzzlePiece myFirstPiece(1); - myFirstPiece.setConnections(0b00010100); - - if(myFirstPuzzle.PlaceOfPartGood(myFirstPiece)); - cout << "good" << endl; - - //printBox(myFirstBox); - cout << endl; - - //Puzzle newPuzzle = solveOuterFirst(cols, rows, myFirstBox); - return 0; -} - - -//rotates in snail form clockwise around board and tries placing puzzle pieces. -//if no piece fits in position it tries next piece of the piece before -Puzzle solveOuterFirst( unsigned int cols, unsigned int rows, vector& myFirstBox) -{ - int i = 0, j= 0, Boxsize = rows*cols, separator=0; - Puzzle myFirstPuzzle(cols, rows); - //first Piece - - - //rotate through puzzle - int perimiter; - int numberofsolutions=0; - int newPerimiter = 1; - for(perimiter = 0; /*perimiter <= (cols>rows?rows:cols)/2;*/;) - { - if(Boxsize) - { -#ifdef debug -cout << "perimiter: " << perimiter << endl; -#endif - } - else - { - break; - retractOuterFirst(i,j,cols,rows,perimiter); - Boxsize++; - separator = myFirstPuzzle.putBackIntoBox(j, i, myFirstBox); - numberofsolutions++; - } - - if((i==rows/2 && j==cols/2 )&& cols==rows) - { - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - Boxsize++; - separator = myFirstPuzzle.putBackIntoBox(j, i, myFirstBox); - } - else - { - break; - separator=0; - Boxsize--; - } - } - - - if((i==perimiter+1 && j==perimiter)) - { -#ifdef debug -cout << "#0 i: " << i << ", j: " << j << endl; -#endif - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - Boxsize++; - separator = myFirstPuzzle.putBackIntoBox(j, i, myFirstBox); -#ifdef debug -cout << "New Box: "; -printBox(myFirstBox); -cout << endl; -myFirstPuzzle.printPuzzle(); -cout << "Boxsize: " << Boxsize << endl; -cout << "separator: " << separator << endl; -#endif - } - else - { - perimiter=newPerimiter; - newPerimiter++; - j++; - separator=0; - Boxsize--; -#ifdef debug -cout << " Perimiter: " << perimiter << endl; -myFirstPuzzle.printPuzzle(); -#endif - } - - } - else - { - - - //cout << "general information i: " << i << ", j: " << j << endl; - while(( i == 0+perimiter && j < cols-perimiter-1) && Boxsize) - { -#ifdef debug -cout << "#1 i: " << i << ", j: " << j << endl; -#endif - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - separator = myFirstPuzzle.putBackIntoBox(j, i, myFirstBox); - Boxsize++; -#ifdef debug -cout << "New Box: "; -printBox(myFirstBox); -cout << endl; -myFirstPuzzle.printPuzzle(); -cout << "Boxsize: " << Boxsize << endl; -cout << "separator: " << separator << endl; -#endif - break; - } - else - { - j++; - separator=0; - Boxsize--; -#ifdef debug -myFirstPuzzle.printPuzzle(); -#endif - } - } - while(( i < rows-perimiter-1 && j == cols-perimiter-1) && Boxsize) - { -#ifdef debug -cout << "#2 i: " << i << ", j: " << j << endl; -#endif - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - - separator = myFirstPuzzle.putBackIntoBox(j, i, myFirstBox); - Boxsize++; -#ifdef debug -cout << "New Box: "; -printBox(myFirstBox); -cout << endl; -myFirstPuzzle.printPuzzle(); - -cout << "Boxsize: " << Boxsize << endl; -cout << "separator: " << separator << endl; -#endif - break; - } - else - { - i++; - separator=0; - Boxsize--; -#ifdef debug -myFirstPuzzle.printPuzzle(); -#endif - } - } - - while(( i == rows-perimiter-1 && j > 0+perimiter) && Boxsize) - { - -#ifdef debug -cout << "#3 i: " << i << ", j: " << j << endl; -#endif - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - separator = myFirstPuzzle.putBackIntoBox(j, i, myFirstBox); - Boxsize++; -#ifdef debug -cout << "New Box: "; -printBox(myFirstBox); -cout << endl; -myFirstPuzzle.printPuzzle(); -cout << "Boxsize: " << Boxsize << endl; -cout << "separator: " << separator << endl; -#endif - break; - } - else - { - j--; - separator=0; - Boxsize--; -#ifdef debug -myFirstPuzzle.printPuzzle(); -#endif - } - } - - while(( i > 0+perimiter+1 && j == 0+perimiter) && Boxsize) - { -#ifdef debug -cout << "#4 i: " << i << ", j: " << j << endl; -#endif - if(myFirstPuzzle.tryAllPieces(j, i, myFirstBox,separator) == -1) - { - retractOuterFirst(i,j,cols,rows,perimiter); - separator = myFirstPuzzle.putBackIntoBox(j, i, myFirstBox); - Boxsize++; -#ifdef debug -cout << "New Box: "; -printBox(myFirstBox); -cout << endl; -myFirstPuzzle.printPuzzle(); - -cout << "Boxsize: " << Boxsize << endl; -cout << "separator: " << separator << endl; -#endif - break; - } - else - { - i--; - separator=0; - Boxsize--; -#ifdef debug -myFirstPuzzle.printPuzzle(); -#endif - } - } - } - } - myFirstPuzzle.printPuzzle(); - - return myFirstPuzzle; -} - -//move i and j to position before -void retractOuterFirst(int& i, int& j, int cols, int rows, int& perimiter) -{ -#ifdef debug - cout << "retracting: i=" << i << " j=" << j << endl; -#endif - if(( i == 0+perimiter && j <= cols-perimiter-1)) - { - j--; - } - else if(( i <= rows-perimiter-1 && j == cols-perimiter-1)) - { - i--; - } - - else if(( i == rows-perimiter-1 && j >= 0+perimiter)) - { - j++; - } - - else if(( i >= 0+perimiter+1 && j == 0+perimiter)) - { - i++; - } -#ifdef debug - cout << "to: i=" << i << " j=" << j << endl; -#endif -} \ No newline at end of file diff --git a/Legacy/Revision_02/puzzle.h b/Legacy/Revision_02/puzzle.h deleted file mode 100644 index 2b69445..0000000 --- a/Legacy/Revision_02/puzzle.h +++ /dev/null @@ -1,469 +0,0 @@ -#include - -#define NR_PARTS 1008 -#define NR_CORNERS 4 -#define NR_EDGES 120 -#define NR_INNERS 884 - -using namespace std; - -//part from group header file -class Part -{ -public: - Part(): connections(0){} - ~Part() {} - uint8_t getConnections() const - { - return connections; - } - void setConnections(uint8_t newconnections) - { - connections = newconnections; - } - -private: - uint8_t connections; -}; - -//puzzlepiece extens part with essential identifiers and functions -class PuzzlePiece: public Part -{ -public: - - PuzzlePiece(unsigned int flag = 0) - { - shifts=0; - boxidentifier=-1; - switch(flag) - { - case 0: - setConnections(0b00000000); - break; - case 1: - setConnections(0b11111111); - break; - case 3: - randomCenterPiece(); - break; - } - } - - void shift(unsigned int moves); - void randomCenterPiece(); - void printPiece() { cout << bitset (getConnections()); } - - void setBoxIdentifier(int new_boxid) { boxidentifier = new_boxid; } - int getBoxIdentifier() { return boxidentifier; } - void assignIdentifier() { identifier = idcount;idcount++; } - unsigned int getIdentifier() { return identifier;} - -private: - unsigned int shifts; - unsigned int boxidentifier; - unsigned int identifier; - static unsigned int idcount; -}; - -unsigned int PuzzlePiece::idcount(0); - -class Puzzle -{ - friend class randomBox; -public: - //constructor creates matrix with 00 outside and 11 inside - Puzzle(uint m = 7, uint n = 4): col(m), row(n) - { - Matrix = new PuzzlePiece* [n+2]; - for(int i = 0;i& myBox, unsigned int separator); - unsigned int putBackIntoBox(unsigned int m, unsigned int n, vector& myBox); - - -private: - uint row; - uint col; - - PuzzlePiece** Matrix; - -}; - -//use this for random puzzle creation -class randomBox: public Puzzle -{ -public: - - randomBox(unsigned int m, unsigned int n) : Puzzle(m,n) {} //passed m n to puzzle constructor - - void createRandomPuzzle(); - vector shuffle(); - void printBox(); - -private: - vector Box; - -}; - -//functiondefinitions -void printBox(vector myBox); -vector createBox(uint m, uint n); -void numerateBox(vector& myBox); - -//functions - -//shifts puzzle piece one to the right -void PuzzlePiece::shift(unsigned int moves) -{ - shifts = (shifts+moves)%4; - setConnections(((getConnections() >> (moves*2)) | (getConnections() << sizeof(unsigned char)*8 - (moves*2)))); -} - -//creates random centerpiece -void PuzzlePiece::randomCenterPiece() -{ - setConnections(0b00000000); - - if(rand()%2) - setConnections(getConnections() | 0b01000000); - else - setConnections(getConnections() | 0b10000000); - - if(rand()%2) - setConnections(getConnections() | 0b00010000); - else - setConnections(getConnections() | 0b00100000); - - if(rand()%2) - setConnections(getConnections() | 0b00000100); - else - setConnections(getConnections() | 0b00001000); - - if(rand()%2) - setConnections(getConnections() | 0b00000001); - else - setConnections(getConnections() | 0b00000010); -} - -//tries all pieces in box from separator to end and places fitting into matrix. removes fitting piece -//use separator if you have to retract to a position -//seperator may be bigger than box size, if all puzzle pieces have already been looked at. -// it immediately retracts again then (returns -1) -unsigned int Puzzle::tryAllPieces(unsigned int m, unsigned int n, vector& myBox, unsigned int separator) -{ - for(int i=separator; i& myBox) -{ -#ifdef debug -cout << "putting back" << endl; -cout << "Old Box: "; -printBox(myBox); -cout << endl; -#endif - for(int i = 0; i < myBox.size();i++) - { - if(myBox[i].getBoxIdentifier()>getPiece(m,n).getBoxIdentifier()) - { - myBox.insert(myBox.begin()+i,getPiece(m,n)); - removePiece(m,n); - return i+1; - } - } - //using push back, if the element was the last element in the vector chain - myBox.push_back(getPiece(m,n)); - removePiece(m,n); - return myBox.size(); -} - -//checks if the myPart in its current orientation is legal in position m, n -bool Puzzle::PlaceOfPartGood(unsigned int m,unsigned int n, PuzzlePiece& myPart) -{ - - PuzzlePiece negativePart(0); - - negativePart.setConnections(negativePart.getConnections() | (getPiece(m,n+1).getConnections() & 0b11000000)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m-1,n).getConnections() & 0b00110000)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m,n-1).getConnections() & 0b00001100)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m+1,n).getConnections() & 0b00000011)); - negativePart.shift(2); - - - - if ( - ( ((((negativePart.getConnections() & 0b11000000) ^ (myPart.getConnections() & 0b11000000)) != 0b00000000) && (((myPart.getConnections() & 0b11000000) != 0b00000000) && (negativePart.getConnections() & 0b11000000) != 0b00000000)) - || ((((negativePart.getConnections() & 0b11000000) == 0b11000000) || ((myPart.getConnections() & 0b11000000) == 0b11000000)) && (( myPart.getConnections() & 0b11000000) != 0b00000000) && (negativePart.getConnections() & 0b11000000) != 0b00000000) - || (((negativePart.getConnections() & 0b11000000) == 0b00000000) && ((myPart.getConnections() & 0b11000000) == 0b00000000)) ) - && - ( ((((negativePart.getConnections() & 0b00110000) ^ (myPart.getConnections() & 0b00110000)) != 0b00000000) && (((myPart.getConnections() & 0b00110000) != 0b00000000) && (negativePart.getConnections() & 0b00110000) != 0b00000000)) - || ((((negativePart.getConnections() & 0b00110000) == 0b00110000) || ((myPart.getConnections() & 0b00110000) == 0b00110000)) && (((myPart.getConnections() & 0b00110000) != 0b00000000) && (negativePart.getConnections() & 0b00110000) != 0b00000000)) - || (((negativePart.getConnections() & 0b00110000) == 0b00000000) && ((myPart.getConnections() & 0b00110000) == 0b00000000)) ) - && - ( ((((negativePart.getConnections() & 0b00001100) ^ (myPart.getConnections() & 0b00001100)) != 0b00000000) && (((myPart.getConnections() & 0b00001100) != 0b00000000) && (negativePart.getConnections() & 0b00001100) != 0b00000000)) - || ((((negativePart.getConnections() & 0b00001100) == 0b00001100) || ((myPart.getConnections() & 0b00001100) == 0b00001100)) && (((myPart.getConnections() & 0b00001100) != 0b00000000) && (negativePart.getConnections() & 0b00001100) != 0b00000000)) - || (((negativePart.getConnections() & 0b00001100) == 0b00000000) && ((myPart.getConnections() & 0b00001100) == 0b00000000)) ) - && - ( ((((negativePart.getConnections() & 0b00000011) ^ (myPart.getConnections() & 0b00000011)) != 0b00000000) && (((myPart.getConnections() & 0b00000011) != 0b00000000) && (negativePart.getConnections() & 0b00000011) != 0b00000000)) - || ((((negativePart.getConnections() & 0b00000011) == 0b00000011) || ((myPart.getConnections() & 0b00000011) == 0b00000011)) && (((myPart.getConnections() & 0b00000011) != 0b00000000) && (negativePart.getConnections() & 0b00000011) != 0b00000000)) - || (((negativePart.getConnections() & 0b00000011) == 0b00000000) && ((myPart.getConnections() & 0b00000011) == 0b00000000)) ) - ) - { -#ifdef debug -cout << "good Part: "; -myPart.printPiece(); -cout << endl; -#endif - return 1; - } - - - - return 0; -} - - -//TODO!! -//simpler algorithm to the first placeofpartgood -//not yet functional!!! -bool Puzzle::PlaceOfPart2Good(unsigned int m,unsigned int n, PuzzlePiece& myPart) -{ - /* - - PuzzlePiece negativePart(0); - - negativePart.setConnections(negativePart.getConnections() | (getPiece(m,n+1).getConnections() & 0b11000000)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m-1,n).getConnections() & 0b00110000)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m,n-1).getConnections() & 0b00001100)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m+1,n).getConnections() & 0b00000011)); - negativePart.shift(2); - - //A and D or B and C or not A and not B and not C and not D - - if ( - ( ( (negativePart.getConnections() & 0b10000000) & (myPart.getConnections() & 0b01000000)) - || ( (negativePart.getConnections() & 0b01000000) & (myPart.getConnections() & 0b10000000)) - || ((!(negativePart.getConnections() & 0b10000000) & !(myPart.getConnections() & 0b10000000)) & (!(negativePart.getConnections() & 0b01000000) & !(myPart.getConnections() & 0b01000000))) - ) - && - ( ( (negativePart.getConnections() & 0b00100000) & (myPart.getConnections() & 0b00010000)) - || ( (negativePart.getConnections() & 0b00010000) & (myPart.getConnections() & 0b00100000)) - || ((!(negativePart.getConnections() & 0b00100000) & !(myPart.getConnections() & 0b00100000)) & (!(negativePart.getConnections() & 0b00010000) & !(myPart.getConnections() & 0b00010000))) - ) - && - ( ( (negativePart.getConnections() & 0b00001000) & (myPart.getConnections() & 0b00000100)) - || ( (negativePart.getConnections() & 0b00000100) & (myPart.getConnections() & 0b00001000)) - || ((!(negativePart.getConnections() & 0b00001000) & !(myPart.getConnections() & 0b00001000)) & (!(negativePart.getConnections() & 0b00000100) & !(myPart.getConnections() & 0b00000100))) - ) - && - ( ( (negativePart.getConnections() & 0b00000010) & (myPart.getConnections() & 0b00000001)) - || ( (negativePart.getConnections() & 0b00000001) & (myPart.getConnections() & 0b00000010)) - || ((!(negativePart.getConnections() & 0b00000010) & !(myPart.getConnections() & 0b00000010)) & (!(negativePart.getConnections() & 0b00000001) & !(myPart.getConnections() & 0b00000001))) - ) - ) - - return 1; - - cout << "nogood" << endl; - return 0; - */ - - PuzzlePiece tmpPuzzlePiece = myPart; - - //make tmp a negativ part - if((tmpPuzzlePiece.Ringbuffer & 0b11000000) != 192 || 0) - tmpPuzzlePiece.Ringbuffer = (tmpPuzzlePiece.Ringbuffer ^ 0b11000000); - if((tmpPuzzlePiece.Ringbuffer & 0b00110000) != 48 || 0) - tmpPuzzlePiece.Ringbuffer = (tmpPuzzlePiece.Ringbuffer ^ 0b00110000); - if((tmpPuzzlePiece.Ringbuffer & 0b00001100) != 12 || 0) - tmpPuzzlePiece.Ringbuffer = (tmpPuzzlePiece.Ringbuffer ^ 0b00001100); - if((tmpPuzzlePiece.Ringbuffer & 0b00000011) != 3 || 0) - tmpPuzzlePiece.Ringbuffer = (tmpPuzzlePiece.Ringbuffer ^ 0b00000011); - - PuzzlePiece negativePart(0); - - negativePart.Ringbuffer = negativePart.Ringbuffer | (this->sudogetPiece(m,n+1).Ringbuffer & 0b11000000); - negativePart.Ringbuffer = negativePart.Ringbuffer | (this->sudogetPiece(m-1,n).Ringbuffer & 0b00110000); - negativePart.Ringbuffer = negativePart.Ringbuffer | (this->sudogetPiece(m,n-1).Ringbuffer & 0b00001100); - negativePart.Ringbuffer = negativePart.Ringbuffer | (this->sudogetPiece(m+1,n).Ringbuffer & 0b00000011); - - negativePart.Shift(2); - - //check tmp part with environment - if(((negativePart.Ringbuffer & 0b11000000) == (tmpPuzzlePiece & 0b11000000)) && ((negativePart.Ringbuffer & 0b00110000) == (tmpPuzzlePiece & 0b00110000)) - && ((negativePart.Ringbuffer & 0b00001100) == (tmpPuzzlePiece & 0b00001100)) && ((negativePart.Ringbuffer & 0b00000011) == (tmpPuzzlePiece & 0b00000011))) - return 1; - - return 0; -} - -//prints the true puzzle (without 0 edges) -void Puzzle::printPuzzle() -{ - cout << "current Puzzle: " << endl; - for(int i=1;i::iterator i = Box.begin(); i != Box.end(); i++) - { - (*i).printPiece(); - cout << ' '; - } - cout << endl; -} - -//shuffles around a box, randomizing pieces and orientation -vector randomBox::shuffle() -{ - random_shuffle(Box.begin(),Box.end()); - for (vector::iterator i = Box.begin(); i != Box.end(); i++) - (*i).shift(rand()%4); - numerateBox(Box); - return Box; -} - -//creates a random box size m, n, shuffles it, and then retuns it -vector createBox(uint m, uint n) -{ - randomBox myFirstPuzzleBox(m,n); - myFirstPuzzleBox.createRandomPuzzle(); - return myFirstPuzzleBox.shuffle(); -} - -//prints contents of box -void printBox(vector myBox) -{ - cout << "current Box: " << endl; - for (vector::iterator i = myBox.begin(); i != myBox.end(); i++) - { - (*i).printPiece(); - cout << ' '; - } - cout << endl; - return; -} - -//gives every element in box a box identifier. -void numerateBox(vector& myBox) -{ - for(int i = 0; i< myBox.size();i++) - myBox[i].setBoxIdentifier(i); - - return; -} \ No newline at end of file diff --git a/Legacy/Revision_02/test_puzzle.h b/Legacy/Revision_02/test_puzzle.h deleted file mode 100644 index f893bf0..0000000 --- a/Legacy/Revision_02/test_puzzle.h +++ /dev/null @@ -1,406 +0,0 @@ - - void create4040hardBox(vector& myFirstBox) -{ -myFirstBox[0].setConnections(0b01101001); -myFirstBox[1].setConnections(0b10011001); -myFirstBox[2].setConnections(0b01100110); -myFirstBox[3].setConnections(0b01101001); -myFirstBox[4].setConnections(0b10100101); -myFirstBox[5].setConnections(0b10010010); -myFirstBox[6].setConnections(0b01101001); -myFirstBox[7].setConnections(0b00101010); -myFirstBox[8].setConnections(0b01000110); -myFirstBox[9].setConnections(0b01011010); -myFirstBox[10].setConnections(0b01011010); -myFirstBox[11].setConnections(0b10010101); -myFirstBox[12].setConnections(0b01010101); -myFirstBox[13].setConnections(0b10101001); -myFirstBox[14].setConnections(0b10010101); -myFirstBox[15].setConnections(0b10101010); -myFirstBox[16].setConnections(0b01101010); -myFirstBox[17].setConnections(0b01101010); -myFirstBox[18].setConnections(0b00100101); -myFirstBox[19].setConnections(0b01100101); -myFirstBox[20].setConnections(0b10010001); -myFirstBox[21].setConnections(0b10010101); -myFirstBox[22].setConnections(0b10101001); -myFirstBox[23].setConnections(0b01010110); -myFirstBox[24].setConnections(0b10101010); -myFirstBox[25].setConnections(0b01101000); -myFirstBox[26].setConnections(0b01101010); -myFirstBox[27].setConnections(0b10010101); -myFirstBox[28].setConnections(0b10011010); -myFirstBox[29].setConnections(0b10011001); -myFirstBox[30].setConnections(0b01101010); -myFirstBox[31].setConnections(0b01100001); -myFirstBox[32].setConnections(0b01101010); -myFirstBox[33].setConnections(0b01100101); -myFirstBox[34].setConnections(0b01010101); -myFirstBox[35].setConnections(0b01010110); -myFirstBox[36].setConnections(0b01101010); -myFirstBox[37].setConnections(0b01010110); -myFirstBox[38].setConnections(0b01100110); -myFirstBox[39].setConnections(0b01011010); -myFirstBox[40].setConnections(0b01100101); -myFirstBox[41].setConnections(0b01101001); -myFirstBox[42].setConnections(0b01010110); -myFirstBox[43].setConnections(0b01000110); -myFirstBox[44].setConnections(0b01011001); -myFirstBox[45].setConnections(0b01101001); -myFirstBox[46].setConnections(0b10000101); -myFirstBox[47].setConnections(0b10011010); -myFirstBox[48].setConnections(0b10010110); -myFirstBox[49].setConnections(0b01011010); -myFirstBox[50].setConnections(0b10011001); -myFirstBox[51].setConnections(0b01001001); -myFirstBox[52].setConnections(0b10100110); -myFirstBox[53].setConnections(0b01001010); -myFirstBox[54].setConnections(0b10010010); -myFirstBox[55].setConnections(0b01001010); -myFirstBox[56].setConnections(0b01101001); -myFirstBox[57].setConnections(0b10100110); -myFirstBox[58].setConnections(0b10010110); -myFirstBox[59].setConnections(0b10010110); -myFirstBox[60].setConnections(0b10101001); -myFirstBox[61].setConnections(0b00100101); -myFirstBox[62].setConnections(0b00101001); -myFirstBox[63].setConnections(0b01101001); -myFirstBox[64].setConnections(0b01101001); -myFirstBox[65].setConnections(0b00100101); -myFirstBox[66].setConnections(0b10010110); -myFirstBox[67].setConnections(0b10011010); -myFirstBox[68].setConnections(0b01100110); -myFirstBox[69].setConnections(0b10010110); -myFirstBox[70].setConnections(0b01010100); -myFirstBox[71].setConnections(0b01011010); -myFirstBox[72].setConnections(0b01100110); -myFirstBox[73].setConnections(0b01100101); -myFirstBox[74].setConnections(0b10011010); -myFirstBox[75].setConnections(0b10010101); -myFirstBox[76].setConnections(0b10011010); -myFirstBox[77].setConnections(0b01100101); -myFirstBox[78].setConnections(0b10011010); -myFirstBox[79].setConnections(0b01010110); -myFirstBox[80].setConnections(0b01101010); -myFirstBox[81].setConnections(0b01010101); -myFirstBox[82].setConnections(0b01100101); -myFirstBox[83].setConnections(0b10100101); -myFirstBox[84].setConnections(0b01010110); -myFirstBox[85].setConnections(0b01101010); -myFirstBox[86].setConnections(0b10011010); -myFirstBox[87].setConnections(0b10010110); -myFirstBox[88].setConnections(0b01101010); -myFirstBox[89].setConnections(0b01011010); -myFirstBox[90].setConnections(0b01010110); -myFirstBox[91].setConnections(0b01100101); -myFirstBox[92].setConnections(0b00100101); -myFirstBox[93].setConnections(0b10100101); -myFirstBox[94].setConnections(0b10010110); -myFirstBox[95].setConnections(0b01100110); -myFirstBox[96].setConnections(0b10000110); -myFirstBox[97].setConnections(0b01001001); -myFirstBox[98].setConnections(0b10010110); -myFirstBox[99].setConnections(0b10100110); -myFirstBox[100].setConnections(0b10100110); -myFirstBox[101].setConnections(0b01100010); -myFirstBox[102].setConnections(0b01101010); -myFirstBox[103].setConnections(0b10011001); -myFirstBox[104].setConnections(0b01010101); -myFirstBox[105].setConnections(0b10011010); -myFirstBox[106].setConnections(0b10101001); -myFirstBox[107].setConnections(0b01100110); -myFirstBox[108].setConnections(0b10101001); -myFirstBox[109].setConnections(0b10101001); -myFirstBox[110].setConnections(0b10010100); -myFirstBox[111].setConnections(0b01100110); -myFirstBox[112].setConnections(0b01010110); -myFirstBox[113].setConnections(0b10010101); -myFirstBox[114].setConnections(0b01011001); -myFirstBox[115].setConnections(0b01101010); -myFirstBox[116].setConnections(0b10100110); -myFirstBox[117].setConnections(0b10100101); -myFirstBox[118].setConnections(0b10101010); -myFirstBox[119].setConnections(0b01011010); -myFirstBox[120].setConnections(0b10011000); -myFirstBox[121].setConnections(0b10010101); -myFirstBox[122].setConnections(0b10100101); -myFirstBox[123].setConnections(0b10000110); -myFirstBox[124].setConnections(0b01100101); -myFirstBox[125].setConnections(0b10100110); -myFirstBox[126].setConnections(0b10101010); -myFirstBox[127].setConnections(0b01101001); -myFirstBox[128].setConnections(0b01010101); -myFirstBox[129].setConnections(0b01100101); -myFirstBox[130].setConnections(0b10001001); -myFirstBox[131].setConnections(0b01101010); -myFirstBox[132].setConnections(0b01101010); -myFirstBox[133].setConnections(0b01100010); -myFirstBox[134].setConnections(0b01100110); -myFirstBox[135].setConnections(0b10100001); -myFirstBox[136].setConnections(0b10011001); -myFirstBox[137].setConnections(0b01101010); -myFirstBox[138].setConnections(0b01011001); -myFirstBox[139].setConnections(0b10001001); -myFirstBox[140].setConnections(0b01010101); -myFirstBox[141].setConnections(0b10100101); -myFirstBox[142].setConnections(0b01100101); -myFirstBox[143].setConnections(0b10100101); -myFirstBox[144].setConnections(0b10011010); -myFirstBox[145].setConnections(0b10010001); -myFirstBox[146].setConnections(0b10100110); -myFirstBox[147].setConnections(0b01101010); -myFirstBox[148].setConnections(0b10010101); -myFirstBox[149].setConnections(0b01100101); -myFirstBox[150].setConnections(0b10100101); -myFirstBox[151].setConnections(0b10100110); -myFirstBox[152].setConnections(0b10010001); -myFirstBox[153].setConnections(0b10101000); -myFirstBox[154].setConnections(0b10011010); -myFirstBox[155].setConnections(0b10100110); -myFirstBox[156].setConnections(0b01100110); -myFirstBox[157].setConnections(0b10100110); -myFirstBox[158].setConnections(0b01011010); -myFirstBox[159].setConnections(0b10100001); -myFirstBox[160].setConnections(0b01010101); -myFirstBox[161].setConnections(0b10011010); -myFirstBox[162].setConnections(0b10101001); -myFirstBox[163].setConnections(0b01010110); -myFirstBox[164].setConnections(0b01100001); -myFirstBox[165].setConnections(0b01011001); -myFirstBox[166].setConnections(0b01101001); -myFirstBox[167].setConnections(0b10011001); -myFirstBox[168].setConnections(0b10010101); -myFirstBox[169].setConnections(0b01100010); -myFirstBox[170].setConnections(0b01010110); -myFirstBox[171].setConnections(0b00010101); -myFirstBox[172].setConnections(0b10100101); -myFirstBox[173].setConnections(0b10101010); -myFirstBox[174].setConnections(0b10011010); -myFirstBox[175].setConnections(0b01100101); -myFirstBox[176].setConnections(0b10100110); -myFirstBox[177].setConnections(0b10101001); -myFirstBox[178].setConnections(0b01011010); -myFirstBox[179].setConnections(0b01101001); -myFirstBox[180].setConnections(0b10010101); -myFirstBox[181].setConnections(0b01101010); -myFirstBox[182].setConnections(0b10010110); -myFirstBox[183].setConnections(0b10010110); -myFirstBox[184].setConnections(0b10011001); -myFirstBox[185].setConnections(0b10100101); -myFirstBox[186].setConnections(0b10010110); -myFirstBox[187].setConnections(0b10010110); -myFirstBox[188].setConnections(0b10011010); -myFirstBox[189].setConnections(0b10010101); -myFirstBox[190].setConnections(0b01010001); -myFirstBox[191].setConnections(0b01010100); -myFirstBox[192].setConnections(0b10101000); -myFirstBox[193].setConnections(0b10100110); -myFirstBox[194].setConnections(0b01010001); -myFirstBox[195].setConnections(0b01010101); -myFirstBox[196].setConnections(0b01100110); -myFirstBox[197].setConnections(0b10100101); -myFirstBox[198].setConnections(0b00100101); -myFirstBox[199].setConnections(0b00100101); -myFirstBox[200].setConnections(0b10101001); -myFirstBox[201].setConnections(0b10101001); -myFirstBox[202].setConnections(0b01011001); -myFirstBox[203].setConnections(0b00001010); -myFirstBox[204].setConnections(0b01010101); -myFirstBox[205].setConnections(0b10011010); -myFirstBox[206].setConnections(0b10100110); -myFirstBox[207].setConnections(0b10100101); -myFirstBox[208].setConnections(0b10011001); -myFirstBox[209].setConnections(0b10100110); -myFirstBox[210].setConnections(0b10101010); -myFirstBox[211].setConnections(0b01010110); -myFirstBox[212].setConnections(0b01010101); -myFirstBox[213].setConnections(0b01100010); -myFirstBox[214].setConnections(0b10010110); -myFirstBox[215].setConnections(0b10011010); -myFirstBox[216].setConnections(0b01100100); -myFirstBox[217].setConnections(0b01010101); -myFirstBox[218].setConnections(0b10011010); -myFirstBox[219].setConnections(0b01100101); -myFirstBox[220].setConnections(0b10101001); -myFirstBox[221].setConnections(0b10010101); -myFirstBox[222].setConnections(0b10100101); -myFirstBox[223].setConnections(0b10101001); -myFirstBox[224].setConnections(0b10100110); -myFirstBox[225].setConnections(0b10011001); -myFirstBox[226].setConnections(0b01011010); -myFirstBox[227].setConnections(0b01000101); -myFirstBox[228].setConnections(0b01100110); -myFirstBox[229].setConnections(0b10101010); -myFirstBox[230].setConnections(0b01010100); -myFirstBox[231].setConnections(0b10101010); -myFirstBox[232].setConnections(0b10011010); -myFirstBox[233].setConnections(0b10100110); -myFirstBox[234].setConnections(0b10011000); -myFirstBox[235].setConnections(0b10011001); -myFirstBox[236].setConnections(0b01010101); -myFirstBox[237].setConnections(0b01001010); -myFirstBox[238].setConnections(0b01100001); -myFirstBox[239].setConnections(0b10011010); -myFirstBox[240].setConnections(0b10010101); -myFirstBox[241].setConnections(0b10100110); -myFirstBox[242].setConnections(0b01010101); -myFirstBox[243].setConnections(0b10010101); -myFirstBox[244].setConnections(0b01101010); -myFirstBox[245].setConnections(0b01101010); -myFirstBox[246].setConnections(0b10100100); -myFirstBox[247].setConnections(0b00101010); -myFirstBox[248].setConnections(0b01100110); -myFirstBox[249].setConnections(0b01101000); -myFirstBox[250].setConnections(0b01101001); -myFirstBox[251].setConnections(0b10101001); -myFirstBox[252].setConnections(0b01010110); -myFirstBox[253].setConnections(0b10010110); -myFirstBox[254].setConnections(0b01100101); -myFirstBox[255].setConnections(0b01011001); -myFirstBox[256].setConnections(0b01100110); -myFirstBox[257].setConnections(0b00100101); -myFirstBox[258].setConnections(0b01101001); -myFirstBox[259].setConnections(0b10010110); -myFirstBox[260].setConnections(0b10011001); -myFirstBox[261].setConnections(0b10011001); -myFirstBox[262].setConnections(0b01101001); -myFirstBox[263].setConnections(0b01010010); -myFirstBox[264].setConnections(0b10101010); -myFirstBox[265].setConnections(0b01101001); -myFirstBox[266].setConnections(0b01101001); -myFirstBox[267].setConnections(0b01101001); -myFirstBox[268].setConnections(0b10010110); -myFirstBox[269].setConnections(0b10011001); -myFirstBox[270].setConnections(0b01101010); -myFirstBox[271].setConnections(0b10000110); -myFirstBox[272].setConnections(0b10010101); -myFirstBox[273].setConnections(0b00010101); -myFirstBox[274].setConnections(0b10101010); -myFirstBox[275].setConnections(0b01010110); -myFirstBox[276].setConnections(0b01100100); -myFirstBox[277].setConnections(0b01010101); -myFirstBox[278].setConnections(0b10010101); -myFirstBox[279].setConnections(0b01010101); -myFirstBox[280].setConnections(0b01011010); -myFirstBox[281].setConnections(0b10011010); -myFirstBox[282].setConnections(0b00010101); -myFirstBox[283].setConnections(0b10010110); -myFirstBox[284].setConnections(0b10100101); -myFirstBox[285].setConnections(0b10010101); -myFirstBox[286].setConnections(0b01101001); -myFirstBox[287].setConnections(0b10100101); -myFirstBox[288].setConnections(0b01101001); -myFirstBox[289].setConnections(0b10011001); -myFirstBox[290].setConnections(0b01011001); -myFirstBox[291].setConnections(0b10010110); -myFirstBox[292].setConnections(0b01010101); -myFirstBox[293].setConnections(0b10100110); -myFirstBox[294].setConnections(0b10101001); -myFirstBox[295].setConnections(0b10101001); -myFirstBox[296].setConnections(0b01011010); -myFirstBox[297].setConnections(0b10100101); -myFirstBox[298].setConnections(0b01011010); -myFirstBox[299].setConnections(0b01100110); -myFirstBox[300].setConnections(0b10010101); -myFirstBox[301].setConnections(0b10101001); -myFirstBox[302].setConnections(0b10011001); -myFirstBox[303].setConnections(0b01010101); -myFirstBox[304].setConnections(0b01010101); -myFirstBox[305].setConnections(0b10101001); -myFirstBox[306].setConnections(0b01100101); -myFirstBox[307].setConnections(0b01101000); -myFirstBox[308].setConnections(0b01010101); -myFirstBox[309].setConnections(0b10010110); -myFirstBox[310].setConnections(0b10010110); -myFirstBox[311].setConnections(0b01011010); -myFirstBox[312].setConnections(0b10010110); -myFirstBox[313].setConnections(0b01011001); -myFirstBox[314].setConnections(0b01010110); -myFirstBox[315].setConnections(0b01101001); -myFirstBox[316].setConnections(0b10100101); -myFirstBox[317].setConnections(0b10101010); -myFirstBox[318].setConnections(0b10011001); -myFirstBox[319].setConnections(0b01010110); -myFirstBox[320].setConnections(0b10100000); -myFirstBox[321].setConnections(0b10100101); -myFirstBox[322].setConnections(0b00010101); -myFirstBox[323].setConnections(0b01010110); -myFirstBox[324].setConnections(0b01101010); -myFirstBox[325].setConnections(0b10010110); -myFirstBox[326].setConnections(0b00001001); -myFirstBox[327].setConnections(0b10011010); -myFirstBox[328].setConnections(0b10101010); -myFirstBox[329].setConnections(0b01100101); -myFirstBox[330].setConnections(0b01011010); -myFirstBox[331].setConnections(0b01101010); -myFirstBox[332].setConnections(0b10100101); -myFirstBox[333].setConnections(0b10100101); -myFirstBox[334].setConnections(0b01011000); -myFirstBox[335].setConnections(0b01010110); -myFirstBox[336].setConnections(0b00100110); -myFirstBox[337].setConnections(0b01101010); -myFirstBox[338].setConnections(0b01101010); -myFirstBox[339].setConnections(0b10010110); -myFirstBox[340].setConnections(0b10101010); -myFirstBox[341].setConnections(0b01100110); -myFirstBox[342].setConnections(0b10011000); -myFirstBox[343].setConnections(0b10101010); -myFirstBox[344].setConnections(0b01011001); -myFirstBox[345].setConnections(0b01101001); -myFirstBox[346].setConnections(0b10010101); -myFirstBox[347].setConnections(0b10101010); -myFirstBox[348].setConnections(0b10011001); -myFirstBox[349].setConnections(0b01101001); -myFirstBox[350].setConnections(0b01010110); -myFirstBox[351].setConnections(0b10000110); -myFirstBox[352].setConnections(0b10010110); -myFirstBox[353].setConnections(0b10011010); -myFirstBox[354].setConnections(0b01010110); -myFirstBox[355].setConnections(0b10010010); -myFirstBox[356].setConnections(0b10100110); -myFirstBox[357].setConnections(0b10101001); -myFirstBox[358].setConnections(0b01011001); -myFirstBox[359].setConnections(0b01010000); -myFirstBox[360].setConnections(0b10011001); -myFirstBox[361].setConnections(0b01101001); -myFirstBox[362].setConnections(0b01100001); -myFirstBox[363].setConnections(0b10100110); -myFirstBox[364].setConnections(0b10100101); -myFirstBox[365].setConnections(0b01100101); -myFirstBox[366].setConnections(0b01001010); -myFirstBox[367].setConnections(0b10010110); -myFirstBox[368].setConnections(0b10010101); -myFirstBox[369].setConnections(0b10010100); -myFirstBox[370].setConnections(0b01010101); -myFirstBox[371].setConnections(0b01011000); -myFirstBox[372].setConnections(0b01100010); -myFirstBox[373].setConnections(0b10011001); -myFirstBox[374].setConnections(0b01100110); -myFirstBox[375].setConnections(0b10100101); -myFirstBox[376].setConnections(0b01000110); -myFirstBox[377].setConnections(0b01010101); -myFirstBox[378].setConnections(0b01100110); -myFirstBox[379].setConnections(0b10100110); -myFirstBox[380].setConnections(0b00100110); -myFirstBox[381].setConnections(0b01101001); -myFirstBox[382].setConnections(0b01100101); -myFirstBox[383].setConnections(0b10010101); -myFirstBox[384].setConnections(0b01101001); -myFirstBox[385].setConnections(0b10010110); -myFirstBox[386].setConnections(0b10010101); -myFirstBox[387].setConnections(0b10101001); -myFirstBox[388].setConnections(0b10011001); -myFirstBox[389].setConnections(0b01010110); -myFirstBox[390].setConnections(0b10100010); -myFirstBox[391].setConnections(0b10101001); -myFirstBox[392].setConnections(0b01101010); -myFirstBox[393].setConnections(0b10101010); -myFirstBox[394].setConnections(0b01100110); -myFirstBox[395].setConnections(0b01010101); -myFirstBox[396].setConnections(0b01101001); -myFirstBox[397].setConnections(0b10010101); -myFirstBox[398].setConnections(0b10100110); -myFirstBox[399].setConnections(0b01101010); -return; - -} \ No newline at end of file diff --git a/Legacy/Revision_03/a.out b/Legacy/Revision_03/a.out deleted file mode 100644 index cd327e8315ed25037d37c3b3d93cc7b904b7ec14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65008 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 Q-vEHC2;be9S9tmV4=L~mRR910 diff --git a/Legacy/Revision_03/main.cpp b/Legacy/Revision_03/main.cpp deleted file mode 100644 index 3701526..0000000 --- a/Legacy/Revision_03/main.cpp +++ /dev/null @@ -1,115 +0,0 @@ -//Raphael Maenle - 11.11.2017 -#include -#include -#include -#include -#include -#include - -#define debug - -#include "puzzle.h" -#include "test_puzzle.h" - -using namespace std; - -vector log; - -int main() -{ - srand(time(0)); - - vector part_array(NR_PARTS); - vector corners_array(NR_CORNERS); - vector edges_array(NR_EDGES); - vector inners_array(NR_INNERS); - - //randomBox myPuzzle(cols,rows); - //myPuzzle.createRandomPuzzle(); - - unsigned int rows=20, cols=20; - vector myFirstBox = createBox(cols, rows); - create4040hardBox(myFirstBox); - - printBox(myFirstBox); - cout << endl; - - - - - - - - - - - while(next()); - - - - - return 0; -} - -next() -{ - - //calculates next move according to log - - //case puzzle solved - //return 0; - - //case last log empty - //backtrack - - //case last log exactly one solution - //put all remaining puzzle pieces into new log entry - //try next piece/place with solve abstraction level 0 - - //case last log multiple entries - //advance abstraction layer of last log by one and solve() - //or pick first if highest level reached - - //return 1; -} - -solve() -{ - //case - //abstraction layer = 0 - //go to abstraction layer 0 solver - - //case - //abstraction layer = 1 - //go to abstraction layer 1 solver - //default - //random one of the parts -} - -abstractionlayer0solver() -{ - //throw all remaining puzzle pieces into log - //remove all impossible -} - -abstractionlayer1solver() -{ - //remove all impossible according to abstraction layer one -} - -setsolution() -{ - //put - //set pointer to log into matrix -} - -backtrack() -{ - //following possibilities: - //last log entry empty - //delete last log + backtrack - //last log entry only one solution - //delete last log + backtrack - //last log entry multiple solutions (and current one was randomed) - //delete randomed piece from puzzleCollector and go to next (which might random again depending on function) -} \ No newline at end of file diff --git a/Legacy/Revision_03/puzzle.h b/Legacy/Revision_03/puzzle.h deleted file mode 100644 index 2d61058..0000000 --- a/Legacy/Revision_03/puzzle.h +++ /dev/null @@ -1,467 +0,0 @@ -#include - -#define NR_PARTS 1008 -#define NR_CORNERS 4 -#define NR_EDGES 120 -#define NR_INNERS 884 - -using namespace std; - -//part from group header file -class Part -{ -public: - Part(): connections(0){} - ~Part() {} - uint8_t getConnections() const - { - return connections; - } - void setConnections(uint8_t newconnections) - { - connections = newconnections; - } - -private: - uint8_t connections; -}; - -//puzzlepiece extens part with essential identifiers and functions -class PuzzlePiece: public Part -{ -public: - - PuzzlePiece(unsigned int flag = 0) - { - shifts=0; - boxidentifier=-1; - switch(flag) - { - case 0: - setConnections(0b00000000); - break; - case 1: - setConnections(0b11111111); - break; - case 3: - randomCenterPiece(); - break; - } - } - - void shift(unsigned int moves); - void randomCenterPiece(); - void printPiece() { cout << bitset (getConnections()); } - - void setBoxIdentifier(int new_boxid) { boxidentifier = new_boxid; } - int getBoxIdentifier() { return boxidentifier; } - void assignIdentifier() { identifier = idcount;idcount++; } - unsigned int getIdentifier() { return identifier;} - -private: - unsigned int shifts; - unsigned int boxidentifier; - unsigned int identifier; - static unsigned int idcount; -}; - -unsigned int PuzzlePiece::idcount(0); - -class Puzzle -{ - friend class randomBox; -public: - //constructor creates matrix with 00 outside and 11 inside - Puzzle(uint m = 7, uint n = 4): col(m), row(n) - { - Matrix = new PuzzlePiece* [n+2]; - for(int i = 0;i& myBox, unsigned int separator); - unsigned int putBackIntoBox(unsigned int m, unsigned int n, vector& myBox); - - -private: - uint row; - uint col; - - PuzzlePiece** Matrix; - -}; - -//use this for random puzzle creation -class randomBox: public Puzzle -{ -public: - - randomBox(unsigned int m, unsigned int n) : Puzzle(m,n) {} //passed m n to puzzle constructor - - void createRandomPuzzle(); - vector shuffle(); - void printBox(); - -private: - vector Box; - -}; - -class coor -{ - int m, n; - coor(int newm,int newn): m(newm), n(newn) - {} -} - -class LogEntry -{ -public: - vector PieceCollector; - vector CoorCollector; - int abstractionLevel; - - uint myCoor; - PuzzlePiece* myPuzzlePiece; - - PuzzleCollector() - { - - myCoor.m=-1; - myCoor.n=-1; - abstractionLevel=0; - } -private: -} - - -//functiondefinitions -void printBox(vector myBox); -vector createBox(uint m, uint n); -void numerateBox(vector& myBox); - -//functions - -//shifts puzzle piece one to the right -void PuzzlePiece::shift(unsigned int moves) -{ - shifts = (shifts+moves)%4; - setConnections(((getConnections() >> (moves*2)) | (getConnections() << sizeof(unsigned char)*8 - (moves*2)))); -} - -//creates random centerpiece -void PuzzlePiece::randomCenterPiece() -{ - setConnections(0b00000000); - - if(rand()%2) - setConnections(getConnections() | 0b01000000); - else - setConnections(getConnections() | 0b10000000); - - if(rand()%2) - setConnections(getConnections() | 0b00010000); - else - setConnections(getConnections() | 0b00100000); - - if(rand()%2) - setConnections(getConnections() | 0b00000100); - else - setConnections(getConnections() | 0b00001000); - - if(rand()%2) - setConnections(getConnections() | 0b00000001); - else - setConnections(getConnections() | 0b00000010); -} - -//tries all pieces in box from separator to end and places fitting into matrix. removes fitting piece -//use separator if you have to retract to a position -//seperator may be bigger than box size, if all puzzle pieces have already been looked at. -// it immediately retracts again then (returns -1) -unsigned int Puzzle::tryAllPieces(unsigned int m, unsigned int n, vector& myBox, unsigned int separator) -{ - for(int i=separator; i& myBox) -{ -#ifdef debug -cout << "putting back" << endl; -cout << "Old Box: "; -printBox(myBox); -cout << endl; -#endif - for(int i = 0; i < myBox.size();i++) - { - if(myBox[i].getBoxIdentifier()>getPiece(m,n).getBoxIdentifier()) - { - myBox.insert(myBox.begin()+i,getPiece(m,n)); - removePiece(m,n); - return i+1; - } - } - //using push back, if the element was the last element in the vector chain - myBox.push_back(getPiece(m,n)); - removePiece(m,n); - return myBox.size(); -} - -//checks if the myPart in its current orientation is legal in position m, n -bool Puzzle::PlaceOfPartGood(unsigned int m,unsigned int n, PuzzlePiece& myPart) -{ - - PuzzlePiece negativePart(0); - - negativePart.setConnections(negativePart.getConnections() | (getPiece(m,n+1).getConnections() & 0b11000000)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m-1,n).getConnections() & 0b00110000)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m,n-1).getConnections() & 0b00001100)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m+1,n).getConnections() & 0b00000011)); - negativePart.shift(2); - - - - if ( - ( ((((negativePart.getConnections() & 0b11000000) ^ (myPart.getConnections() & 0b11000000)) != 0b00000000) && (((myPart.getConnections() & 0b11000000) != 0b00000000) && (negativePart.getConnections() & 0b11000000) != 0b00000000)) - || ((((negativePart.getConnections() & 0b11000000) == 0b11000000) || ((myPart.getConnections() & 0b11000000) == 0b11000000)) && (( myPart.getConnections() & 0b11000000) != 0b00000000) && (negativePart.getConnections() & 0b11000000) != 0b00000000) - || (((negativePart.getConnections() & 0b11000000) == 0b00000000) && ((myPart.getConnections() & 0b11000000) == 0b00000000)) ) - && - ( ((((negativePart.getConnections() & 0b00110000) ^ (myPart.getConnections() & 0b00110000)) != 0b00000000) && (((myPart.getConnections() & 0b00110000) != 0b00000000) && (negativePart.getConnections() & 0b00110000) != 0b00000000)) - || ((((negativePart.getConnections() & 0b00110000) == 0b00110000) || ((myPart.getConnections() & 0b00110000) == 0b00110000)) && (((myPart.getConnections() & 0b00110000) != 0b00000000) && (negativePart.getConnections() & 0b00110000) != 0b00000000)) - || (((negativePart.getConnections() & 0b00110000) == 0b00000000) && ((myPart.getConnections() & 0b00110000) == 0b00000000)) ) - && - ( ((((negativePart.getConnections() & 0b00001100) ^ (myPart.getConnections() & 0b00001100)) != 0b00000000) && (((myPart.getConnections() & 0b00001100) != 0b00000000) && (negativePart.getConnections() & 0b00001100) != 0b00000000)) - || ((((negativePart.getConnections() & 0b00001100) == 0b00001100) || ((myPart.getConnections() & 0b00001100) == 0b00001100)) && (((myPart.getConnections() & 0b00001100) != 0b00000000) && (negativePart.getConnections() & 0b00001100) != 0b00000000)) - || (((negativePart.getConnections() & 0b00001100) == 0b00000000) && ((myPart.getConnections() & 0b00001100) == 0b00000000)) ) - && - ( ((((negativePart.getConnections() & 0b00000011) ^ (myPart.getConnections() & 0b00000011)) != 0b00000000) && (((myPart.getConnections() & 0b00000011) != 0b00000000) && (negativePart.getConnections() & 0b00000011) != 0b00000000)) - || ((((negativePart.getConnections() & 0b00000011) == 0b00000011) || ((myPart.getConnections() & 0b00000011) == 0b00000011)) && (((myPart.getConnections() & 0b00000011) != 0b00000000) && (negativePart.getConnections() & 0b00000011) != 0b00000000)) - || (((negativePart.getConnections() & 0b00000011) == 0b00000000) && ((myPart.getConnections() & 0b00000011) == 0b00000000)) ) - ) - { -#ifdef debug -cout << "good Part: "; -myPart.printPiece(); -cout << endl; -#endif - return 1; - } - - - - return 0; -} - - -//TODO!! -//simpler algorithm to the first placeofpartgood -//not yet functional!!! -bool Puzzle::PlaceOfPart2Good(unsigned int m,unsigned int n, PuzzlePiece& myPart) -{ - - PuzzlePiece negativePart(0); - - negativePart.setConnections(negativePart.getConnections() | (getPiece(m,n+1).getConnections() & 0b11000000)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m-1,n).getConnections() & 0b00110000)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m,n-1).getConnections() & 0b00001100)); - negativePart.setConnections(negativePart.getConnections() | (getPiece(m+1,n).getConnections() & 0b00000011)); - negativePart.shift(2); - - //A and D or B and C or not A and not B and not C and not D - - if ( - ( ( (negativePart.getConnections() & 0b10000000) & (myPart.getConnections() & 0b01000000)) - || ( (negativePart.getConnections() & 0b01000000) & (myPart.getConnections() & 0b10000000)) - || ((!(negativePart.getConnections() & 0b10000000) & !(myPart.getConnections() & 0b10000000)) & (!(negativePart.getConnections() & 0b01000000) & !(myPart.getConnections() & 0b01000000))) - ) - && - ( ( (negativePart.getConnections() & 0b00100000) & (myPart.getConnections() & 0b00010000)) - || ( (negativePart.getConnections() & 0b00010000) & (myPart.getConnections() & 0b00100000)) - || ((!(negativePart.getConnections() & 0b00100000) & !(myPart.getConnections() & 0b00100000)) & (!(negativePart.getConnections() & 0b00010000) & !(myPart.getConnections() & 0b00010000))) - ) - && - ( ( (negativePart.getConnections() & 0b00001000) & (myPart.getConnections() & 0b00000100)) - || ( (negativePart.getConnections() & 0b00000100) & (myPart.getConnections() & 0b00001000)) - || ((!(negativePart.getConnections() & 0b00001000) & !(myPart.getConnections() & 0b00001000)) & (!(negativePart.getConnections() & 0b00000100) & !(myPart.getConnections() & 0b00000100))) - ) - && - ( ( (negativePart.getConnections() & 0b00000010) & (myPart.getConnections() & 0b00000001)) - || ( (negativePart.getConnections() & 0b00000001) & (myPart.getConnections() & 0b00000010)) - || ((!(negativePart.getConnections() & 0b00000010) & !(myPart.getConnections() & 0b00000010)) & (!(negativePart.getConnections() & 0b00000001) & !(myPart.getConnections() & 0b00000001))) - ) - ) - - return 1; - - cout << "nogood" << endl; - return 0; -} - -//prints the true puzzle (without 0 edges) -void Puzzle::printPuzzle() -{ - cout << "current Puzzle: " << endl; - for(int i=1;i::iterator i = Box.begin(); i != Box.end(); i++) - { - (*i).printPiece(); - cout << ' '; - } - cout << endl; -} - -//shuffles around a box, randomizing pieces and orientation -vector randomBox::shuffle() -{ - random_shuffle(Box.begin(),Box.end()); - for (vector::iterator i = Box.begin(); i != Box.end(); i++) - (*i).shift(rand()%4); - numerateBox(Box); - return Box; -} - -//creates a random box size m, n, shuffles it, and then retuns it -vector createBox(uint m, uint n) -{ - randomBox myFirstPuzzleBox(m,n); - myFirstPuzzleBox.createRandomPuzzle(); - return myFirstPuzzleBox.shuffle(); -} - -//prints contents of box -void printBox(vector myBox) -{ - cout << "current Box: " << endl; - for (vector::iterator i = myBox.begin(); i != myBox.end(); i++) - { - (*i).printPiece(); - cout << ' '; - } - cout << endl; - return; -} - -//gives every element in box a box identifier. -void numerateBox(vector& myBox) -{ - for(int i = 0; i< myBox.size();i++) - myBox[i].setBoxIdentifier(i); - - return; -} \ No newline at end of file diff --git a/Legacy/Revision_03/test_puzzle.h b/Legacy/Revision_03/test_puzzle.h deleted file mode 100644 index f893bf0..0000000 --- a/Legacy/Revision_03/test_puzzle.h +++ /dev/null @@ -1,406 +0,0 @@ - - void create4040hardBox(vector& myFirstBox) -{ -myFirstBox[0].setConnections(0b01101001); -myFirstBox[1].setConnections(0b10011001); -myFirstBox[2].setConnections(0b01100110); -myFirstBox[3].setConnections(0b01101001); -myFirstBox[4].setConnections(0b10100101); -myFirstBox[5].setConnections(0b10010010); -myFirstBox[6].setConnections(0b01101001); -myFirstBox[7].setConnections(0b00101010); -myFirstBox[8].setConnections(0b01000110); -myFirstBox[9].setConnections(0b01011010); -myFirstBox[10].setConnections(0b01011010); -myFirstBox[11].setConnections(0b10010101); -myFirstBox[12].setConnections(0b01010101); -myFirstBox[13].setConnections(0b10101001); -myFirstBox[14].setConnections(0b10010101); -myFirstBox[15].setConnections(0b10101010); -myFirstBox[16].setConnections(0b01101010); -myFirstBox[17].setConnections(0b01101010); -myFirstBox[18].setConnections(0b00100101); -myFirstBox[19].setConnections(0b01100101); -myFirstBox[20].setConnections(0b10010001); -myFirstBox[21].setConnections(0b10010101); -myFirstBox[22].setConnections(0b10101001); -myFirstBox[23].setConnections(0b01010110); -myFirstBox[24].setConnections(0b10101010); -myFirstBox[25].setConnections(0b01101000); -myFirstBox[26].setConnections(0b01101010); -myFirstBox[27].setConnections(0b10010101); -myFirstBox[28].setConnections(0b10011010); -myFirstBox[29].setConnections(0b10011001); -myFirstBox[30].setConnections(0b01101010); -myFirstBox[31].setConnections(0b01100001); -myFirstBox[32].setConnections(0b01101010); -myFirstBox[33].setConnections(0b01100101); -myFirstBox[34].setConnections(0b01010101); -myFirstBox[35].setConnections(0b01010110); -myFirstBox[36].setConnections(0b01101010); -myFirstBox[37].setConnections(0b01010110); -myFirstBox[38].setConnections(0b01100110); -myFirstBox[39].setConnections(0b01011010); -myFirstBox[40].setConnections(0b01100101); -myFirstBox[41].setConnections(0b01101001); -myFirstBox[42].setConnections(0b01010110); -myFirstBox[43].setConnections(0b01000110); -myFirstBox[44].setConnections(0b01011001); -myFirstBox[45].setConnections(0b01101001); -myFirstBox[46].setConnections(0b10000101); -myFirstBox[47].setConnections(0b10011010); -myFirstBox[48].setConnections(0b10010110); -myFirstBox[49].setConnections(0b01011010); -myFirstBox[50].setConnections(0b10011001); -myFirstBox[51].setConnections(0b01001001); -myFirstBox[52].setConnections(0b10100110); -myFirstBox[53].setConnections(0b01001010); -myFirstBox[54].setConnections(0b10010010); -myFirstBox[55].setConnections(0b01001010); -myFirstBox[56].setConnections(0b01101001); -myFirstBox[57].setConnections(0b10100110); -myFirstBox[58].setConnections(0b10010110); -myFirstBox[59].setConnections(0b10010110); -myFirstBox[60].setConnections(0b10101001); -myFirstBox[61].setConnections(0b00100101); -myFirstBox[62].setConnections(0b00101001); -myFirstBox[63].setConnections(0b01101001); -myFirstBox[64].setConnections(0b01101001); -myFirstBox[65].setConnections(0b00100101); -myFirstBox[66].setConnections(0b10010110); -myFirstBox[67].setConnections(0b10011010); -myFirstBox[68].setConnections(0b01100110); -myFirstBox[69].setConnections(0b10010110); -myFirstBox[70].setConnections(0b01010100); -myFirstBox[71].setConnections(0b01011010); -myFirstBox[72].setConnections(0b01100110); -myFirstBox[73].setConnections(0b01100101); -myFirstBox[74].setConnections(0b10011010); -myFirstBox[75].setConnections(0b10010101); -myFirstBox[76].setConnections(0b10011010); -myFirstBox[77].setConnections(0b01100101); -myFirstBox[78].setConnections(0b10011010); -myFirstBox[79].setConnections(0b01010110); -myFirstBox[80].setConnections(0b01101010); -myFirstBox[81].setConnections(0b01010101); -myFirstBox[82].setConnections(0b01100101); -myFirstBox[83].setConnections(0b10100101); -myFirstBox[84].setConnections(0b01010110); -myFirstBox[85].setConnections(0b01101010); -myFirstBox[86].setConnections(0b10011010); -myFirstBox[87].setConnections(0b10010110); -myFirstBox[88].setConnections(0b01101010); -myFirstBox[89].setConnections(0b01011010); -myFirstBox[90].setConnections(0b01010110); -myFirstBox[91].setConnections(0b01100101); -myFirstBox[92].setConnections(0b00100101); -myFirstBox[93].setConnections(0b10100101); -myFirstBox[94].setConnections(0b10010110); -myFirstBox[95].setConnections(0b01100110); -myFirstBox[96].setConnections(0b10000110); -myFirstBox[97].setConnections(0b01001001); -myFirstBox[98].setConnections(0b10010110); -myFirstBox[99].setConnections(0b10100110); -myFirstBox[100].setConnections(0b10100110); -myFirstBox[101].setConnections(0b01100010); -myFirstBox[102].setConnections(0b01101010); -myFirstBox[103].setConnections(0b10011001); -myFirstBox[104].setConnections(0b01010101); -myFirstBox[105].setConnections(0b10011010); -myFirstBox[106].setConnections(0b10101001); -myFirstBox[107].setConnections(0b01100110); -myFirstBox[108].setConnections(0b10101001); -myFirstBox[109].setConnections(0b10101001); -myFirstBox[110].setConnections(0b10010100); -myFirstBox[111].setConnections(0b01100110); -myFirstBox[112].setConnections(0b01010110); -myFirstBox[113].setConnections(0b10010101); -myFirstBox[114].setConnections(0b01011001); -myFirstBox[115].setConnections(0b01101010); -myFirstBox[116].setConnections(0b10100110); -myFirstBox[117].setConnections(0b10100101); -myFirstBox[118].setConnections(0b10101010); -myFirstBox[119].setConnections(0b01011010); -myFirstBox[120].setConnections(0b10011000); -myFirstBox[121].setConnections(0b10010101); -myFirstBox[122].setConnections(0b10100101); -myFirstBox[123].setConnections(0b10000110); -myFirstBox[124].setConnections(0b01100101); -myFirstBox[125].setConnections(0b10100110); -myFirstBox[126].setConnections(0b10101010); -myFirstBox[127].setConnections(0b01101001); -myFirstBox[128].setConnections(0b01010101); -myFirstBox[129].setConnections(0b01100101); -myFirstBox[130].setConnections(0b10001001); -myFirstBox[131].setConnections(0b01101010); -myFirstBox[132].setConnections(0b01101010); -myFirstBox[133].setConnections(0b01100010); -myFirstBox[134].setConnections(0b01100110); -myFirstBox[135].setConnections(0b10100001); -myFirstBox[136].setConnections(0b10011001); -myFirstBox[137].setConnections(0b01101010); -myFirstBox[138].setConnections(0b01011001); -myFirstBox[139].setConnections(0b10001001); -myFirstBox[140].setConnections(0b01010101); -myFirstBox[141].setConnections(0b10100101); -myFirstBox[142].setConnections(0b01100101); -myFirstBox[143].setConnections(0b10100101); -myFirstBox[144].setConnections(0b10011010); -myFirstBox[145].setConnections(0b10010001); -myFirstBox[146].setConnections(0b10100110); -myFirstBox[147].setConnections(0b01101010); -myFirstBox[148].setConnections(0b10010101); -myFirstBox[149].setConnections(0b01100101); -myFirstBox[150].setConnections(0b10100101); -myFirstBox[151].setConnections(0b10100110); -myFirstBox[152].setConnections(0b10010001); -myFirstBox[153].setConnections(0b10101000); -myFirstBox[154].setConnections(0b10011010); -myFirstBox[155].setConnections(0b10100110); -myFirstBox[156].setConnections(0b01100110); -myFirstBox[157].setConnections(0b10100110); -myFirstBox[158].setConnections(0b01011010); -myFirstBox[159].setConnections(0b10100001); -myFirstBox[160].setConnections(0b01010101); -myFirstBox[161].setConnections(0b10011010); -myFirstBox[162].setConnections(0b10101001); -myFirstBox[163].setConnections(0b01010110); -myFirstBox[164].setConnections(0b01100001); -myFirstBox[165].setConnections(0b01011001); -myFirstBox[166].setConnections(0b01101001); -myFirstBox[167].setConnections(0b10011001); -myFirstBox[168].setConnections(0b10010101); -myFirstBox[169].setConnections(0b01100010); -myFirstBox[170].setConnections(0b01010110); -myFirstBox[171].setConnections(0b00010101); -myFirstBox[172].setConnections(0b10100101); -myFirstBox[173].setConnections(0b10101010); -myFirstBox[174].setConnections(0b10011010); -myFirstBox[175].setConnections(0b01100101); -myFirstBox[176].setConnections(0b10100110); -myFirstBox[177].setConnections(0b10101001); -myFirstBox[178].setConnections(0b01011010); -myFirstBox[179].setConnections(0b01101001); -myFirstBox[180].setConnections(0b10010101); -myFirstBox[181].setConnections(0b01101010); -myFirstBox[182].setConnections(0b10010110); -myFirstBox[183].setConnections(0b10010110); -myFirstBox[184].setConnections(0b10011001); -myFirstBox[185].setConnections(0b10100101); -myFirstBox[186].setConnections(0b10010110); -myFirstBox[187].setConnections(0b10010110); -myFirstBox[188].setConnections(0b10011010); -myFirstBox[189].setConnections(0b10010101); -myFirstBox[190].setConnections(0b01010001); -myFirstBox[191].setConnections(0b01010100); -myFirstBox[192].setConnections(0b10101000); -myFirstBox[193].setConnections(0b10100110); -myFirstBox[194].setConnections(0b01010001); -myFirstBox[195].setConnections(0b01010101); -myFirstBox[196].setConnections(0b01100110); -myFirstBox[197].setConnections(0b10100101); -myFirstBox[198].setConnections(0b00100101); -myFirstBox[199].setConnections(0b00100101); -myFirstBox[200].setConnections(0b10101001); -myFirstBox[201].setConnections(0b10101001); -myFirstBox[202].setConnections(0b01011001); -myFirstBox[203].setConnections(0b00001010); -myFirstBox[204].setConnections(0b01010101); -myFirstBox[205].setConnections(0b10011010); -myFirstBox[206].setConnections(0b10100110); -myFirstBox[207].setConnections(0b10100101); -myFirstBox[208].setConnections(0b10011001); -myFirstBox[209].setConnections(0b10100110); -myFirstBox[210].setConnections(0b10101010); -myFirstBox[211].setConnections(0b01010110); -myFirstBox[212].setConnections(0b01010101); -myFirstBox[213].setConnections(0b01100010); -myFirstBox[214].setConnections(0b10010110); -myFirstBox[215].setConnections(0b10011010); -myFirstBox[216].setConnections(0b01100100); -myFirstBox[217].setConnections(0b01010101); -myFirstBox[218].setConnections(0b10011010); -myFirstBox[219].setConnections(0b01100101); -myFirstBox[220].setConnections(0b10101001); -myFirstBox[221].setConnections(0b10010101); -myFirstBox[222].setConnections(0b10100101); -myFirstBox[223].setConnections(0b10101001); -myFirstBox[224].setConnections(0b10100110); -myFirstBox[225].setConnections(0b10011001); -myFirstBox[226].setConnections(0b01011010); -myFirstBox[227].setConnections(0b01000101); -myFirstBox[228].setConnections(0b01100110); -myFirstBox[229].setConnections(0b10101010); -myFirstBox[230].setConnections(0b01010100); -myFirstBox[231].setConnections(0b10101010); -myFirstBox[232].setConnections(0b10011010); -myFirstBox[233].setConnections(0b10100110); -myFirstBox[234].setConnections(0b10011000); -myFirstBox[235].setConnections(0b10011001); -myFirstBox[236].setConnections(0b01010101); -myFirstBox[237].setConnections(0b01001010); -myFirstBox[238].setConnections(0b01100001); -myFirstBox[239].setConnections(0b10011010); -myFirstBox[240].setConnections(0b10010101); -myFirstBox[241].setConnections(0b10100110); -myFirstBox[242].setConnections(0b01010101); -myFirstBox[243].setConnections(0b10010101); -myFirstBox[244].setConnections(0b01101010); -myFirstBox[245].setConnections(0b01101010); -myFirstBox[246].setConnections(0b10100100); -myFirstBox[247].setConnections(0b00101010); -myFirstBox[248].setConnections(0b01100110); -myFirstBox[249].setConnections(0b01101000); -myFirstBox[250].setConnections(0b01101001); -myFirstBox[251].setConnections(0b10101001); -myFirstBox[252].setConnections(0b01010110); -myFirstBox[253].setConnections(0b10010110); -myFirstBox[254].setConnections(0b01100101); -myFirstBox[255].setConnections(0b01011001); -myFirstBox[256].setConnections(0b01100110); -myFirstBox[257].setConnections(0b00100101); -myFirstBox[258].setConnections(0b01101001); -myFirstBox[259].setConnections(0b10010110); -myFirstBox[260].setConnections(0b10011001); -myFirstBox[261].setConnections(0b10011001); -myFirstBox[262].setConnections(0b01101001); -myFirstBox[263].setConnections(0b01010010); -myFirstBox[264].setConnections(0b10101010); -myFirstBox[265].setConnections(0b01101001); -myFirstBox[266].setConnections(0b01101001); -myFirstBox[267].setConnections(0b01101001); -myFirstBox[268].setConnections(0b10010110); -myFirstBox[269].setConnections(0b10011001); -myFirstBox[270].setConnections(0b01101010); -myFirstBox[271].setConnections(0b10000110); -myFirstBox[272].setConnections(0b10010101); -myFirstBox[273].setConnections(0b00010101); -myFirstBox[274].setConnections(0b10101010); -myFirstBox[275].setConnections(0b01010110); -myFirstBox[276].setConnections(0b01100100); -myFirstBox[277].setConnections(0b01010101); -myFirstBox[278].setConnections(0b10010101); -myFirstBox[279].setConnections(0b01010101); -myFirstBox[280].setConnections(0b01011010); -myFirstBox[281].setConnections(0b10011010); -myFirstBox[282].setConnections(0b00010101); -myFirstBox[283].setConnections(0b10010110); -myFirstBox[284].setConnections(0b10100101); -myFirstBox[285].setConnections(0b10010101); -myFirstBox[286].setConnections(0b01101001); -myFirstBox[287].setConnections(0b10100101); -myFirstBox[288].setConnections(0b01101001); -myFirstBox[289].setConnections(0b10011001); -myFirstBox[290].setConnections(0b01011001); -myFirstBox[291].setConnections(0b10010110); -myFirstBox[292].setConnections(0b01010101); -myFirstBox[293].setConnections(0b10100110); -myFirstBox[294].setConnections(0b10101001); -myFirstBox[295].setConnections(0b10101001); -myFirstBox[296].setConnections(0b01011010); -myFirstBox[297].setConnections(0b10100101); -myFirstBox[298].setConnections(0b01011010); -myFirstBox[299].setConnections(0b01100110); -myFirstBox[300].setConnections(0b10010101); -myFirstBox[301].setConnections(0b10101001); -myFirstBox[302].setConnections(0b10011001); -myFirstBox[303].setConnections(0b01010101); -myFirstBox[304].setConnections(0b01010101); -myFirstBox[305].setConnections(0b10101001); -myFirstBox[306].setConnections(0b01100101); -myFirstBox[307].setConnections(0b01101000); -myFirstBox[308].setConnections(0b01010101); -myFirstBox[309].setConnections(0b10010110); -myFirstBox[310].setConnections(0b10010110); -myFirstBox[311].setConnections(0b01011010); -myFirstBox[312].setConnections(0b10010110); -myFirstBox[313].setConnections(0b01011001); -myFirstBox[314].setConnections(0b01010110); -myFirstBox[315].setConnections(0b01101001); -myFirstBox[316].setConnections(0b10100101); -myFirstBox[317].setConnections(0b10101010); -myFirstBox[318].setConnections(0b10011001); -myFirstBox[319].setConnections(0b01010110); -myFirstBox[320].setConnections(0b10100000); -myFirstBox[321].setConnections(0b10100101); -myFirstBox[322].setConnections(0b00010101); -myFirstBox[323].setConnections(0b01010110); -myFirstBox[324].setConnections(0b01101010); -myFirstBox[325].setConnections(0b10010110); -myFirstBox[326].setConnections(0b00001001); -myFirstBox[327].setConnections(0b10011010); -myFirstBox[328].setConnections(0b10101010); -myFirstBox[329].setConnections(0b01100101); -myFirstBox[330].setConnections(0b01011010); -myFirstBox[331].setConnections(0b01101010); -myFirstBox[332].setConnections(0b10100101); -myFirstBox[333].setConnections(0b10100101); -myFirstBox[334].setConnections(0b01011000); -myFirstBox[335].setConnections(0b01010110); -myFirstBox[336].setConnections(0b00100110); -myFirstBox[337].setConnections(0b01101010); -myFirstBox[338].setConnections(0b01101010); -myFirstBox[339].setConnections(0b10010110); -myFirstBox[340].setConnections(0b10101010); -myFirstBox[341].setConnections(0b01100110); -myFirstBox[342].setConnections(0b10011000); -myFirstBox[343].setConnections(0b10101010); -myFirstBox[344].setConnections(0b01011001); -myFirstBox[345].setConnections(0b01101001); -myFirstBox[346].setConnections(0b10010101); -myFirstBox[347].setConnections(0b10101010); -myFirstBox[348].setConnections(0b10011001); -myFirstBox[349].setConnections(0b01101001); -myFirstBox[350].setConnections(0b01010110); -myFirstBox[351].setConnections(0b10000110); -myFirstBox[352].setConnections(0b10010110); -myFirstBox[353].setConnections(0b10011010); -myFirstBox[354].setConnections(0b01010110); -myFirstBox[355].setConnections(0b10010010); -myFirstBox[356].setConnections(0b10100110); -myFirstBox[357].setConnections(0b10101001); -myFirstBox[358].setConnections(0b01011001); -myFirstBox[359].setConnections(0b01010000); -myFirstBox[360].setConnections(0b10011001); -myFirstBox[361].setConnections(0b01101001); -myFirstBox[362].setConnections(0b01100001); -myFirstBox[363].setConnections(0b10100110); -myFirstBox[364].setConnections(0b10100101); -myFirstBox[365].setConnections(0b01100101); -myFirstBox[366].setConnections(0b01001010); -myFirstBox[367].setConnections(0b10010110); -myFirstBox[368].setConnections(0b10010101); -myFirstBox[369].setConnections(0b10010100); -myFirstBox[370].setConnections(0b01010101); -myFirstBox[371].setConnections(0b01011000); -myFirstBox[372].setConnections(0b01100010); -myFirstBox[373].setConnections(0b10011001); -myFirstBox[374].setConnections(0b01100110); -myFirstBox[375].setConnections(0b10100101); -myFirstBox[376].setConnections(0b01000110); -myFirstBox[377].setConnections(0b01010101); -myFirstBox[378].setConnections(0b01100110); -myFirstBox[379].setConnections(0b10100110); -myFirstBox[380].setConnections(0b00100110); -myFirstBox[381].setConnections(0b01101001); -myFirstBox[382].setConnections(0b01100101); -myFirstBox[383].setConnections(0b10010101); -myFirstBox[384].setConnections(0b01101001); -myFirstBox[385].setConnections(0b10010110); -myFirstBox[386].setConnections(0b10010101); -myFirstBox[387].setConnections(0b10101001); -myFirstBox[388].setConnections(0b10011001); -myFirstBox[389].setConnections(0b01010110); -myFirstBox[390].setConnections(0b10100010); -myFirstBox[391].setConnections(0b10101001); -myFirstBox[392].setConnections(0b01101010); -myFirstBox[393].setConnections(0b10101010); -myFirstBox[394].setConnections(0b01100110); -myFirstBox[395].setConnections(0b01010101); -myFirstBox[396].setConnections(0b01101001); -myFirstBox[397].setConnections(0b10010101); -myFirstBox[398].setConnections(0b10100110); -myFirstBox[399].setConnections(0b01101010); -return; - -} \ No newline at end of file diff --git a/Legacy/Revision_03/test_puzzle_long40x40.h b/Legacy/Revision_03/test_puzzle_long40x40.h deleted file mode 100644 index 5c24f00..0000000 --- a/Legacy/Revision_03/test_puzzle_long40x40.h +++ /dev/null @@ -1,400 +0,0 @@ -myFirstBox[0].setConections(01101001); -myFirstBox[1].setConections(10011001); -myFirstBox[2].setConections(01100110); -myFirstBox[3].setConections(01101001); -myFirstBox[4].setConections(10100101); -myFirstBox[5].setConections(10010010); -myFirstBox[6].setConections(01101001); -myFirstBox[7].setConections(00101010); -myFirstBox[8].setConections(01000110); -myFirstBox[9].setConections(01011010); -myFirstBox[10].setConections(01011010); -myFirstBox[11].setConections(10010101); -myFirstBox[12].setConections(01010101); -myFirstBox[13].setConections(10101001); -myFirstBox[14].setConections(10010101); -myFirstBox[15].setConections(10101010); -myFirstBox[16].setConections(01101010); -myFirstBox[17].setConections(01101010); -myFirstBox[18].setConections(00100101); -myFirstBox[19].setConections(01100101); -myFirstBox[20].setConections(10010001); -myFirstBox[21].setConections(10010101); -myFirstBox[22].setConections(10101001); -myFirstBox[23].setConections(01010110); -myFirstBox[24].setConections(10101010); -myFirstBox[25].setConections(01101000); -myFirstBox[26].setConections(01101010); -myFirstBox[27].setConections(10010101); -myFirstBox[28].setConections(10011010); -myFirstBox[29].setConections(10011001); -myFirstBox[30].setConections(01101010); -myFirstBox[31].setConections(01100001); -myFirstBox[32].setConections(01101010); -myFirstBox[33].setConections(01100101); -myFirstBox[34].setConections(01010101); -myFirstBox[35].setConections(01010110); -myFirstBox[36].setConections(01101010); -myFirstBox[37].setConections(01010110); -myFirstBox[38].setConections(01100110); -myFirstBox[39].setConections(01011010); -myFirstBox[40].setConections(01100101); -myFirstBox[41].setConections(01101001); -myFirstBox[42].setConections(01010110); -myFirstBox[43].setConections(01000110); -myFirstBox[44].setConections(01011001); -myFirstBox[45].setConections(01101001); -myFirstBox[46].setConections(10000101); -myFirstBox[47].setConections(10011010); -myFirstBox[48].setConections(10010110); -myFirstBox[49].setConections(01011010); -myFirstBox[50].setConections(10011001); -myFirstBox[51].setConections(01001001); -myFirstBox[52].setConections(10100110); -myFirstBox[53].setConections(01001010); -myFirstBox[54].setConections(10010010); -myFirstBox[55].setConections(01001010); -myFirstBox[56].setConections(01101001); -myFirstBox[57].setConections(10100110); -myFirstBox[58].setConections(10010110); -myFirstBox[59].setConections(10010110); -myFirstBox[60].setConections(10101001); -myFirstBox[61].setConections(00100101); -myFirstBox[62].setConections(00101001); -myFirstBox[63].setConections(01101001); -myFirstBox[64].setConections(01101001); -myFirstBox[65].setConections(00100101); -myFirstBox[66].setConections(10010110); -myFirstBox[67].setConections(10011010); -myFirstBox[68].setConections(01100110); -myFirstBox[69].setConections(10010110); -myFirstBox[70].setConections(01010100); -myFirstBox[71].setConections(01011010); -myFirstBox[72].setConections(01100110); -myFirstBox[73].setConections(01100101); -myFirstBox[74].setConections(10011010); -myFirstBox[75].setConections(10010101); -myFirstBox[76].setConections(10011010); -myFirstBox[77].setConections(01100101); -myFirstBox[78].setConections(10011010); -myFirstBox[79].setConections(01010110); -myFirstBox[80].setConections(01101010); -myFirstBox[81].setConections(01010101); -myFirstBox[82].setConections(01100101); -myFirstBox[83].setConections(10100101); -myFirstBox[84].setConections(01010110); -myFirstBox[85].setConections(01101010); -myFirstBox[86].setConections(10011010); -myFirstBox[87].setConections(10010110); -myFirstBox[88].setConections(01101010); -myFirstBox[89].setConections(01011010); -myFirstBox[90].setConections(01010110); -myFirstBox[91].setConections(01100101); -myFirstBox[92].setConections(00100101); -myFirstBox[93].setConections(10100101); -myFirstBox[94].setConections(10010110); -myFirstBox[95].setConections(01100110); -myFirstBox[96].setConections(10000110); -myFirstBox[97].setConections(01001001); -myFirstBox[98].setConections(10010110); -myFirstBox[99].setConections(10100110); -myFirstBox[100].setConections(10100110); -myFirstBox[101].setConections(01100010); -myFirstBox[102].setConections(01101010); -myFirstBox[103].setConections(10011001); -myFirstBox[104].setConections(01010101); -myFirstBox[105].setConections(10011010); -myFirstBox[106].setConections(10101001); -myFirstBox[107].setConections(01100110); -myFirstBox[108].setConections(10101001); -myFirstBox[109].setConections(10101001); -myFirstBox[110].setConections(10010100); -myFirstBox[111].setConections(01100110); -myFirstBox[112].setConections(01010110); -myFirstBox[113].setConections(10010101); -myFirstBox[114].setConections(01011001); -myFirstBox[115].setConections(01101010); -myFirstBox[116].setConections(10100110); -myFirstBox[117].setConections(10100101); -myFirstBox[118].setConections(10101010); -myFirstBox[119].setConections(01011010); -myFirstBox[120].setConections(10011000); -myFirstBox[121].setConections(10010101); -myFirstBox[122].setConections(10100101); -myFirstBox[123].setConections(10000110); -myFirstBox[124].setConections(01100101); -myFirstBox[125].setConections(10100110); -myFirstBox[126].setConections(10101010); -myFirstBox[127].setConections(01101001); -myFirstBox[128].setConections(01010101); -myFirstBox[129].setConections(01100101); -myFirstBox[130].setConections(10001001); -myFirstBox[131].setConections(01101010); -myFirstBox[132].setConections(01101010); -myFirstBox[133].setConections(01100010); -myFirstBox[134].setConections(01100110); -myFirstBox[135].setConections(10100001); -myFirstBox[136].setConections(10011001); -myFirstBox[137].setConections(01101010); -myFirstBox[138].setConections(01011001); -myFirstBox[139].setConections(10001001); -myFirstBox[140].setConections(01010101); -myFirstBox[141].setConections(10100101); -myFirstBox[142].setConections(01100101); -myFirstBox[143].setConections(10100101); -myFirstBox[144].setConections(10011010); -myFirstBox[145].setConections(10010001); -myFirstBox[146].setConections(10100110); -myFirstBox[147].setConections(01101010); -myFirstBox[148].setConections(10010101); -myFirstBox[149].setConections(01100101); -myFirstBox[150].setConections(10100101); -myFirstBox[151].setConections(10100110); -myFirstBox[152].setConections(10010001); -myFirstBox[153].setConections(10101000); -myFirstBox[154].setConections(10011010); -myFirstBox[155].setConections(10100110); -myFirstBox[156].setConections(01100110); -myFirstBox[157].setConections(10100110); -myFirstBox[158].setConections(01011010); -myFirstBox[159].setConections(10100001); -myFirstBox[160].setConections(01010101); -myFirstBox[161].setConections(10011010); -myFirstBox[162].setConections(10101001); -myFirstBox[163].setConections(01010110); -myFirstBox[164].setConections(01100001); -myFirstBox[165].setConections(01011001); -myFirstBox[166].setConections(01101001); -myFirstBox[167].setConections(10011001); -myFirstBox[168].setConections(10010101); -myFirstBox[169].setConections(01100010); -myFirstBox[170].setConections(01010110); -myFirstBox[171].setConections(00010101); -myFirstBox[172].setConections(10100101); -myFirstBox[173].setConections(10101010); -myFirstBox[174].setConections(10011010); -myFirstBox[175].setConections(01100101); -myFirstBox[176].setConections(10100110); -myFirstBox[177].setConections(10101001); -myFirstBox[178].setConections(01011010); -myFirstBox[179].setConections(01101001); -myFirstBox[180].setConections(10010101); -myFirstBox[181].setConections(01101010); -myFirstBox[182].setConections(10010110); -myFirstBox[183].setConections(10010110); -myFirstBox[184].setConections(10011001); -myFirstBox[185].setConections(10100101); -myFirstBox[186].setConections(10010110); -myFirstBox[187].setConections(10010110); -myFirstBox[188].setConections(10011010); -myFirstBox[189].setConections(10010101); -myFirstBox[190].setConections(01010001); -myFirstBox[191].setConections(01010100); -myFirstBox[192].setConections(10101000); -myFirstBox[193].setConections(10100110); -myFirstBox[194].setConections(01010001); -myFirstBox[195].setConections(01010101); -myFirstBox[196].setConections(01100110); -myFirstBox[197].setConections(10100101); -myFirstBox[198].setConections(00100101); -myFirstBox[199].setConections(00100101); -myFirstBox[200].setConections(10101001); -myFirstBox[201].setConections(10101001); -myFirstBox[202].setConections(01011001); -myFirstBox[203].setConections(00001010); -myFirstBox[204].setConections(01010101); -myFirstBox[205].setConections(10011010); -myFirstBox[206].setConections(10100110); -myFirstBox[207].setConections(10100101); -myFirstBox[208].setConections(10011001); -myFirstBox[209].setConections(10100110); -myFirstBox[210].setConections(10101010); -myFirstBox[211].setConections(01010110); -myFirstBox[212].setConections(01010101); -myFirstBox[213].setConections(01100010); -myFirstBox[214].setConections(10010110); -myFirstBox[215].setConections(10011010); -myFirstBox[216].setConections(01100100); -myFirstBox[217].setConections(01010101); -myFirstBox[218].setConections(10011010); -myFirstBox[219].setConections(01100101); -myFirstBox[220].setConections(10101001); -myFirstBox[221].setConections(10010101); -myFirstBox[222].setConections(10100101); -myFirstBox[223].setConections(10101001); -myFirstBox[224].setConections(10100110); -myFirstBox[225].setConections(10011001); -myFirstBox[226].setConections(01011010); -myFirstBox[227].setConections(01000101); -myFirstBox[228].setConections(01100110); -myFirstBox[229].setConections(10101010); -myFirstBox[230].setConections(01010100); -myFirstBox[231].setConections(10101010); -myFirstBox[232].setConections(10011010); -myFirstBox[233].setConections(10100110); -myFirstBox[234].setConections(10011000); -myFirstBox[235].setConections(10011001); -myFirstBox[236].setConections(01010101); -myFirstBox[237].setConections(01001010); -myFirstBox[238].setConections(01100001); -myFirstBox[239].setConections(10011010); -myFirstBox[240].setConections(10010101); -myFirstBox[241].setConections(10100110); -myFirstBox[242].setConections(01010101); -myFirstBox[243].setConections(10010101); -myFirstBox[244].setConections(01101010); -myFirstBox[245].setConections(01101010); -myFirstBox[246].setConections(10100100); -myFirstBox[247].setConections(00101010); -myFirstBox[248].setConections(01100110); -myFirstBox[249].setConections(01101000); -myFirstBox[250].setConections(01101001); -myFirstBox[251].setConections(10101001); -myFirstBox[252].setConections(01010110); -myFirstBox[253].setConections(10010110); -myFirstBox[254].setConections(01100101); -myFirstBox[255].setConections(01011001); -myFirstBox[256].setConections(01100110); -myFirstBox[257].setConections(00100101); -myFirstBox[258].setConections(01101001); -myFirstBox[259].setConections(10010110); -myFirstBox[260].setConections(10011001); -myFirstBox[261].setConections(10011001); -myFirstBox[262].setConections(01101001); -myFirstBox[263].setConections(01010010); -myFirstBox[264].setConections(10101010); -myFirstBox[265].setConections(01101001); -myFirstBox[266].setConections(01101001); -myFirstBox[267].setConections(01101001); -myFirstBox[268].setConections(10010110); -myFirstBox[269].setConections(10011001); -myFirstBox[270].setConections(01101010); -myFirstBox[271].setConections(10000110); -myFirstBox[272].setConections(10010101); -myFirstBox[273].setConections(00010101); -myFirstBox[274].setConections(10101010); -myFirstBox[275].setConections(01010110); -myFirstBox[276].setConections(01100100); -myFirstBox[277].setConections(01010101); -myFirstBox[278].setConections(10010101); -myFirstBox[279].setConections(01010101); -myFirstBox[280].setConections(01011010); -myFirstBox[281].setConections(10011010); -myFirstBox[282].setConections(00010101); -myFirstBox[283].setConections(10010110); -myFirstBox[284].setConections(10100101); -myFirstBox[285].setConections(10010101); -myFirstBox[286].setConections(01101001); -myFirstBox[287].setConections(10100101); -myFirstBox[288].setConections(01101001); -myFirstBox[289].setConections(10011001); -myFirstBox[290].setConections(01011001); -myFirstBox[291].setConections(10010110); -myFirstBox[292].setConections(01010101); -myFirstBox[293].setConections(10100110); -myFirstBox[294].setConections(10101001); -myFirstBox[295].setConections(10101001); -myFirstBox[296].setConections(01011010); -myFirstBox[297].setConections(10100101); -myFirstBox[298].setConections(01011010); -myFirstBox[299].setConections(01100110); -myFirstBox[300].setConections(10010101); -myFirstBox[301].setConections(10101001); -myFirstBox[302].setConections(10011001); -myFirstBox[303].setConections(01010101); -myFirstBox[304].setConections(01010101); -myFirstBox[305].setConections(10101001); -myFirstBox[306].setConections(01100101); -myFirstBox[307].setConections(01101000); -myFirstBox[308].setConections(01010101); -myFirstBox[309].setConections(10010110); -myFirstBox[310].setConections(10010110); -myFirstBox[311].setConections(01011010); -myFirstBox[312].setConections(10010110); -myFirstBox[313].setConections(01011001); -myFirstBox[314].setConections(01010110); -myFirstBox[315].setConections(01101001); -myFirstBox[316].setConections(10100101); -myFirstBox[317].setConections(10101010); -myFirstBox[318].setConections(10011001); -myFirstBox[319].setConections(01010110); -myFirstBox[320].setConections(10100000); -myFirstBox[321].setConections(10100101); -myFirstBox[322].setConections(00010101); -myFirstBox[323].setConections(01010110); -myFirstBox[324].setConections(01101010); -myFirstBox[325].setConections(10010110); -myFirstBox[326].setConections(00001001); -myFirstBox[327].setConections(10011010); -myFirstBox[328].setConections(10101010); -myFirstBox[329].setConections(01100101); -myFirstBox[330].setConections(01011010); -myFirstBox[331].setConections(01101010); -myFirstBox[332].setConections(10100101); -myFirstBox[333].setConections(10100101); -myFirstBox[334].setConections(01011000); -myFirstBox[335].setConections(01010110); -myFirstBox[336].setConections(00100110); -myFirstBox[337].setConections(01101010); -myFirstBox[338].setConections(01101010); -myFirstBox[339].setConections(10010110); -myFirstBox[340].setConections(10101010); -myFirstBox[341].setConections(01100110); -myFirstBox[342].setConections(10011000); -myFirstBox[343].setConections(10101010); -myFirstBox[344].setConections(01011001); -myFirstBox[345].setConections(01101001); -myFirstBox[346].setConections(10010101); -myFirstBox[347].setConections(10101010); -myFirstBox[348].setConections(10011001); -myFirstBox[349].setConections(01101001); -myFirstBox[350].setConections(01010110); -myFirstBox[351].setConections(10000110); -myFirstBox[352].setConections(10010110); -myFirstBox[353].setConections(10011010); -myFirstBox[354].setConections(01010110); -myFirstBox[355].setConections(10010010); -myFirstBox[356].setConections(10100110); -myFirstBox[357].setConections(10101001); -myFirstBox[358].setConections(01011001); -myFirstBox[359].setConections(01010000); -myFirstBox[360].setConections(10011001); -myFirstBox[361].setConections(01101001); -myFirstBox[362].setConections(01100001); -myFirstBox[363].setConections(10100110); -myFirstBox[364].setConections(10100101); -myFirstBox[365].setConections(01100101); -myFirstBox[366].setConections(01001010); -myFirstBox[367].setConections(10010110); -myFirstBox[368].setConections(10010101); -myFirstBox[369].setConections(10010100); -myFirstBox[370].setConections(01010101); -myFirstBox[371].setConections(01011000); -myFirstBox[372].setConections(01100010); -myFirstBox[373].setConections(10011001); -myFirstBox[374].setConections(01100110); -myFirstBox[375].setConections(10100101); -myFirstBox[376].setConections(01000110); -myFirstBox[377].setConections(01010101); -myFirstBox[378].setConections(01100110); -myFirstBox[379].setConections(10100110); -myFirstBox[380].setConections(00100110); -myFirstBox[381].setConections(01101001); -myFirstBox[382].setConections(01100101); -myFirstBox[383].setConections(10010101); -myFirstBox[384].setConections(01101001); -myFirstBox[385].setConections(10010110); -myFirstBox[386].setConections(10010101); -myFirstBox[387].setConections(10101001); -myFirstBox[388].setConections(10011001); -myFirstBox[389].setConections(01010110); -myFirstBox[390].setConections(10100010); -myFirstBox[391].setConections(10101001); -myFirstBox[392].setConections(01101010); -myFirstBox[393].setConections(10101010); -myFirstBox[394].setConections(01100110); -myFirstBox[395].setConections(01010101); -myFirstBox[396].setConections(01101001); -myFirstBox[397].setConections(10010101); -myFirstBox[398].setConections(10100110); -myFirstBox[399].setConections(01101010); diff --git a/Source/.DS_Store b/Source/.DS_Store deleted file mode 100644 index 607502ebdbc8ee897fbc7bf754bbf62cbb1599ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeI1L2uJA6vv;pZlpqpA|X+3xp3=HGo*DKkfJgU+>nCc0BB1{StGJ!YEmi)Mfn=Q zCxS1)*Wv$cGcE0kb^&vBd*ks3~8kElyT4l--!DvC1__j6uKYqo_u z73_(^XjU9YX&x<&l?EXo1cZPP5CTHr-yncBo0GF*-8a2b3IQSTUlQQwgNw}STdj@i zM+XYM1%S5DtP|?k2WT7Ds&BP6s!efDvwKk1RM{MQ!du3&J zC`w-)cCH>y$~P*d5D)^(1bEtP&|OL>rcq=6{yjQQlcMbRf2g(f*2d-)r;Xn==T$Jy zXF(a3(_$D-UhvVAupCFW{xr|ilX@6EOGdN(&drB;R)$G7nrP!B9%0DK=Sddlvtd5X z;zFM%FdclI_I~GfRc-GKdak$IpZDC#^St{#chKLN&)d$eJKlrG2S@KeR3GP`z8JTZ zeKgSZ1vkGoeS8;8vNX>Q(aIJ#=rtWtNN?f)7DY4#ixf1rG!Z^NJoQ!Ma#1;l?+dir z^aeySFe||+N3A$T=iA?onQm3x8z5$Ow|^fppG}CY3>gloGhAJOu}Nc|G&)cwmlZ?9 z$p!$-9$EiQAW10%E*yb%bH`oY|36y&{r|%GB{wVtguwX;sMcPvH^lf~FVKsoyvn=C r2gsawTy0dFplG}Z;P~VZL)2XiWgFjWZ4@m?@*zNDkU|LjQ35{!+UY5` diff --git a/Source/cmake-build-debug/Source b/Source/cmake-build-debug/Source deleted file mode 100755 index 67f12a68e6830151773896b572feddd0e8504bae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131392 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

6wgUDZ1Bj;z8T#NOWvQSdQLRnFb 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 diff --git a/Source/functions/.DS_Store b/Source/functions/.DS_Store deleted file mode 100644 index 5b9b83e3705662aba9f2c61023b7b0e468d25a88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-ve05I*;h6oklt1fv(W4h={Y2Bav!z=jkA10YD$3L=HLYLZq^it-xpMmzzp z!=3G-mI5O}#aErb^Vw(XzSedR0GOAz9RM2uEL6hEA~s(Ljg!tuNqcIDOs256u9 zmAyV3ZnatszOy-M@S)>4yA9rIZjVNFYi+~XJG#ERe;7WFo}Lw}46h(5D;me}g2qIO zeZQB)BDp~?Mbto0;`5#URFa