Een goeiemiddag,
Sinds kort heb ik de draad met C++ weer opgepakt en heb besloten om te kijken hoeveel oplossingen er mogelijk zijn voor de Tetris kubus.
Tot mijn grote verbazing is het programma af. Het bestaat uit een paar honderd for(..) lussen en is byzonder complex. Hier een korte uitleg:
De tetris kubus heeft 12 stukken. Eerst heb ik van alle stukken de mogelijkheden nagegaan en die in 2dimensionale arrays gestopt. van a[x][y] tot m[x][y] (die van i overgeslagen). De x betekend dan de hoeveelste manier het is hoe het stuk kan zitten, en de y is een getal tussen de 0 en de 63.
Nouwjah; dat ging allemaal prima alleen was het wel intensief werk. Nu heb ik dus alle verschillende manieren door middel van getalletjes opgeslagen en moet er alleen nog zien uit te vogelen wanneer alle getallen tegelijkertijd 1 zijn. (dan zit niets over elkaar heen of mist er ergens wat)
En hierbij loopt mijn computer om de haverklap vast..
Eerst had ik dit, dit deed het overigens wel, alleen zou mijn computer zou er een paar miljoen jaar over doen, dat was met deze code:
Hier tel ik maar 2 variabelen op, maar ook dit doet het niet.. wat de computer doet:
- Vastlopen
- Vanzelf uitschakelen
Dus ik vraag me af wat er aan de hand is..
Waar ik nu naar op zoek ben..
Hoe groot kunnen arrays worden?
Hoe maak ik dit programma sneller en beter?
En natuurlijk komt hier de complete code nog:
Code
Sinds kort heb ik de draad met C++ weer opgepakt en heb besloten om te kijken hoeveel oplossingen er mogelijk zijn voor de Tetris kubus.
Tot mijn grote verbazing is het programma af. Het bestaat uit een paar honderd for(..) lussen en is byzonder complex. Hier een korte uitleg:
De tetris kubus heeft 12 stukken. Eerst heb ik van alle stukken de mogelijkheden nagegaan en die in 2dimensionale arrays gestopt. van a[x][y] tot m[x][y] (die van i overgeslagen). De x betekend dan de hoeveelste manier het is hoe het stuk kan zitten, en de y is een getal tussen de 0 en de 63.
Nouwjah; dat ging allemaal prima alleen was het wel intensief werk. Nu heb ik dus alle verschillende manieren door middel van getalletjes opgeslagen en moet er alleen nog zien uit te vogelen wanneer alle getallen tegelijkertijd 1 zijn. (dan zit niets over elkaar heen of mist er ergens wat)
En hierbij loopt mijn computer om de haverklap vast..
Eerst had ik dit, dit deed het overigens wel, alleen zou mijn computer zou er een paar miljoen jaar over doen, dat was met deze code:
Code:
int jj, kk, ll, mm;
//OPLOSSING ZOEKEN
for(int aa=0;aa<(xa+1);aa++){
for(int bb=0;bb<(xb+1);bb++){
for(int cc=0;cc<(xc+1);cc++){
for(int dd=0;dd<(xd+1);dd++){
for(int ee=0;ee<(xe+1);ee++){
for(int ff=0;ff<(xf+1);ff++){
for(int gg=0;gg<(xg+1);gg++){
for(int hh=0;hh<(xh+1);hh++){
cout << "xa: " << aa << " xb: " << bb << " xc: " << cc << " xd: " << dd << " xe: " << ee << " xf: " << ff << " xg: " << gg << " xh: " << hh << " xj: " << jj << " xk: " << kk << " xl: " << ll << " xm: " << mm << "\n";
for(jj=0;jj<(xj+1);jj++){
for(kk=0;kk<(xk+1);kk++){
for(ll=0;ll<(xl+1);ll++){
for(mm=0;mm<(xm+1);mm++){
//alles samenvoegen
y=0;
while ((y < 65) && (oke))
{
t[y]= a[aa][y] + b[bb][y] + c[cc][y] + d[dd][y] + e[ee][y] + f[ff][y] + g[gg][y] + h[hh][y] + j[jj][y] + k[kk][y] + l[ll][y] + m[mm][y];
if(t[y] != 1){oke=false;}
y++;
}//einde while lus
if(oke){
system("cls");
cout << "xa = " << aa << "\n\n";
cout << "xb = " << bb << "\n\n";
cout << "xc = " << cc << "\n\n";
cout << "xd = " << dd << "\n\n";
cout << "xe = " << ee << "\n\n";
cout << "xf = " << ff << "\n\n";
cout << "xg = " << gg << "\n\n";
cout << "xh = " << hh << "\n\n";
cout << "xj = " << jj << "\n\n";
cout << "xk = " << kk << "\n\n";
cout << "xl = " << ll << "\n\n";
cout << "xm = " << mm << "\n\n";
cin.get();
}
if(!oke){
oke=true;}
}
}}}}}}}}}}}
Nouwjah.. daar werd ik dus niet blij van dus heb wat anders verzonnen:
Dat was meer iets van elke keer 3 stukken bij elkaar zoeken; de mogelijkheden daarvan in 1 variabele stoppen en later die 4 variabelen (lomp grote arrays) optellen. Dat is dit:
int mog_l[100000]; //
unsigned long bit=0;
for(int kk=0;kk<(xk+1);kk++){
for(int ll=0;ll<(xl+1);ll++){
for(int mm=0;mm<(xm+1);mm++){
oke=true;
for(int q=0;q<65;q++)
{
if((k[kk][q] + m[mm][q] + l[ll][q]) > 1){
oke=false;}
}//einde for voor de 64 lus
if(oke){
mog_l[bit]=kk;
bit++;
mog_l[bit]=ll;
bit++;
mog_l[bit]=mm;
bit++;
}
}// m lus
}//einde l lus
}//end of k
cout << bit << endl;
cin.get();
int mog_h[200000]; //
bit=0;
for(int jj=0;jj<(xj+1);jj++){
for(int hh=0;hh<(xh+1);hh++){
for(int gg=0;gg<(xg+1);gg++){
oke=true;
for(int q=0;q<65;q++)
{
if((j[jj][q] + h[hh][q] + g[gg][q]) > 1){
oke=false;}
}//einde for voor de 64 lus
if(oke){
mog_h[bit]=gg;
bit++;
mog_h[bit]=hh;
bit++;
mog_h[bit]=jj;
bit++;
}
}// m lus
}//einde l lus
}//end of k
cout << bit << endl;
cin.get();
int mog_d[100000]; //
bit=0;
for(int dd=0;dd<(xd+1);dd++){
for(int ee=0;ee<(xe+1);ee++){
for(int ff=0;ff<(xf+1);ff++){
oke=true;
for(int q=0;q<65;q++)
{
if((d[dd][q] + e[ee][q] + f[ff][q]) > 1){
oke=false;}
}//einde for voor de 64 lus
if(oke){
mog_d[bit]=dd;
bit++;
mog_d[bit]=ee;
bit++;
mog_d[bit]=ff;
bit++;
}
}// m lus
}//einde l lus
}//end of k
cout << bit << endl;
cin.get();
cout << xa << " " << xb << " " << xc << endl;
cin.get();
int mog_a[100000]; //
bit=0;
for(int aa=0;aa<(xa+1);aa++){
for(int bb=0;bb<(xb+1);bb++){
for(int cc=0;cc<(xc+1);cc++){
oke=true;
for(int q=0;q<65;q++)
{
if((a[aa][q] + b[bb][q] + c[cc][q]) > 1){
oke=false;}
}//einde for voor de 64 lus
if(oke){
mog_a[bit]=aa;
bit++;
mog_a[bit]=bb;
bit++;
mog_a[bit]=cc;
bit++;
}
}// m lus
}//einde l lus
}//end of k
cout << bit << endl;
cin.get();
//BITS
//31527
//30263 (90075)
//104697 (47122)
//69
//BITS
//79832
//30263 (90075)
//104697 (47122)
//305470
//
cout << "eerste keer:\n";
cin.get();
bit=0;
for(int aa=0;(mog_a[aa])<(xa+1);(aa=aa+3)){
cout << aa;
for(int dd=0;(mog_d[dd])<(xd+1);(dd=dd+3)){
oke=true;
for(int q=0;q<65;q++)
{
if(( a[(mog_a[aa])][q] + b[(mog_a[(aa+1)])][q] + c[(mog_a[(aa+2)])][q] + d[(mog_d[dd])][q] + e[(mog_d[(dd+1)])][q] + f[(mog_d[(dd+2)])][q]) > 1){
oke=false;}
}//einde for voor de 64 lus
bit++;
if(oke){
cout << "WE GOT IT";
cin.get();}
cout << bit;
}}
Hier tel ik maar 2 variabelen op, maar ook dit doet het niet.. wat de computer doet:
- Vastlopen
- Vanzelf uitschakelen
Dus ik vraag me af wat er aan de hand is..
Waar ik nu naar op zoek ben..
Hoe groot kunnen arrays worden?
Hoe maak ik dit programma sneller en beter?
En natuurlijk komt hier de complete code nog:
Code
Laatst bewerkt door een moderator: