Ezt a kódot hogyan kéne optimalizálni? Javascript
CSak úgy akartam készíteni egy szudoku játékot mindenki ismeri ugye sem vizszintesen sem függőlegesen nem lehet ugyan az a szám + nem lehet a 3x3 tablaban sem (gye 9x9 es a szudoku első 3x3 masodik es az utolsoban sem)...
Saját fejjel keztem gondolkodni hogyan kéne megvalósítani.
HTML ben csináltam egy 9x9 es mezőt input gombokkal.
r1c1 től r9c9 ig neveztem el ahol az r1 a sor a c1 a oszlop.
Javascript kódomat így képzeltem el:
random szám 1-9 ig ugyebár.
r1c1 be generál egy random számot 1-9ig, r1c2 be is de azzal a feltétellel hogy nem lehet ugyan az mint az elsőben. úgy csináltam az egészet meg while ciklussal. De 3 sor után mart túl sok és csak lefagy. hogy kéne optimalizálni ? idáig jutottam el:
function sudoku_start()
{
//Premenné
// R1
var r1c1 = 0;
var r1c2 = 0;
var r1c3 = 0;
var r1c4 = 0;
var r1c5 = 0;
var r1c6 = 0;
var r1c7 = 0;
var r1c8 = 0;
var r1c9 = 0;
// R2
var r2c1 = 0;
var r2c2 = 0;
var r2c3 = 0;
var r2c4 = 0;
var r2c5 = 0;
var r2c6 = 0;
var r2c7 = 0;
var r2c8 = 0;
var r2c9 = 0;
// R3
var r3c1 = 0;
var r3c2 = 0;
var r3c3 = 0;
var r3c4 = 0;
var r3c5 = 0;
var r3c6 = 0;
var r3c7 = 0;
var r3c8 = 0;
var r3c9 = 0;
// R4
var r4c1 = 0;
var r4c2 = 0;
var r4c3 = 0;
var r4c4 = 0;
var r4c5 = 0;
var r4c6 = 0;
var r4c7 = 0;
var r4c8 = 0;
var r4c9 = 0;
// R5
var r5c1 = 0;
var r5c2 = 0;
var r5c3 = 0;
var r5c4 = 0;
var r5c5 = 0;
var r5c6 = 0;
var r5c7 = 0;
var r5c8 = 0;
var r5c9 = 0;
// R6
var r6c1 = 0;
var r6c2 = 0;
var r6c3 = 0;
var r6c4 = 0;
var r6c5 = 0;
var r6c6 = 0;
var r6c7 = 0;
var r6c8 = 0;
var r6c9 = 0;
// R7
var r7c1 = 0;
var r7c2 = 0;
var r7c3 = 0;
var r7c4 = 0;
var r7c5 = 0;
var r7c6 = 0;
var r7c7 = 0;
var r7c8 = 0;
var r7c9 = 0;
// R8
var r8c1 = 0;
var r8c2 = 0;
var r8c3 = 0;
var r8c4 = 0;
var r8c5 = 0;
var r8c6 = 0;
var r8c7 = 0;
var r8c8 = 0;
var r8c9 = 0;
// R9
var r9c1 = 0;
var r9c2 = 0;
var r9c3 = 0;
var r9c4 = 0;
var r9c5 = 0;
var r9c6 = 0;
var r9c7 = 0;
var r9c8 = 0;
var r9c9 = 0;
// Generácia R1
// C1
r1c1 = Math.floor((Math.random() * 9) + 1);
// C2
r1c2 = Math.floor((Math.random() * 9) + 1);
while(r1c2 == r1c1)
{
r1c2 = Math.floor((Math.random() * 9) + 1);
}
// C3
r1c3 = Math.floor((Math.random() * 9) + 1);
while(r1c3 == r1c1 || r1c3 == r1c2)
{
r1c3 = Math.floor((Math.random() * 9) + 1);
}
// C4
r1c4 = Math.floor((Math.random() * 9) + 1);
while(r1c4 == r1c1 || r1c4 == r1c2 || r1c4 == r1c3)
{
r1c4 = Math.floor((Math.random() * 9) + 1);
}
// C5
r1c5 = Math.floor((Math.random() * 9) + 1);
while(r1c5 == r1c1 || r1c5 == r1c2 || r1c5 == r1c3 || r1c5 == r1c4)
{
r1c5 = Math.floor((Math.random() * 9) + 1);
}
// C6
r1c6 = Math.floor((Math.random() * 9) + 1);
while(r1c6 == r1c1 || r1c6 == r1c2 || r1c6 == r1c3 ||r1c6 == r1c4 || r1c6 == r1c5)
{
r1c6 = Math.floor((Math.random() * 9) + 1);
}
// C7
r1c7 = Math.floor((Math.random() * 9) + 1);
while(r1c7 == r1c1 || r1c7 == r1c2 || r1c7 == r1c3 || r1c7 == r1c4 || r1c7 == r1c5 || r1c7 == r1c6)
{
r1c7 = Math.floor((Math.random() * 9) + 1);
}
// C8
r1c8 = Math.floor((Math.random() * 9) + 1);
while(r1c8 == r1c1 || r1c8 == r1c2 || r1c8 == r1c3 || r1c8 == r1c4 || r1c8 == r1c5 || r1c8 == r1c6 || r1c8 == r1c7)
{
r1c8 = Math.floor((Math.random() * 9) + 1);
}
// C9
r1c9 = Math.floor((Math.random() * 9) + 1);
while(r1c9 == r1c1 || r1c9 == r1c2 || r1c9 == r1c3 || r1c9 == r1c4 || r1c9 == r1c5 || r1c9 == r1c6 || r1c9 == r1c7 || r1c9 == r1c8)
{
r1c9 = Math.floor((Math.random() * 9) + 1);
}
// Generácia R2
// C1
r2c1 = Math.floor((Math.random() * 9) + 1);
while(r2c1 == r1c1 || r2c1 == r1c2 || r2c1 == r1c3)
{
r2c1 = Math.floor((Math.random() * 9) + 1);
}
// C2
r2c2 = Math.floor((Math.random() * 9) + 1);
while(r2c2 == r1c2 || r2c2 == r2c1 || r2c2 == r1c1 || r2c2 == r1c3)
{
r2c2 = Math.floor((Math.random() * 9) + 1);
}
// C3
r2c3 = Math.floor((Math.random() * 9) + 1);
while(r2c3 == r1c3 || r2c3 == r2c1 || r2c3 == r2c2 || r2c3 == r1c2 || r2c3 == r2c3)
{
r2c3 = Math.floor((Math.random() * 9) + 1);
}
// C4
r2c4 = Math.floor((Math.random() * 9) + 1);
while(r2c4 == r1c4 || r2c4 == r2c1 || r2c4 == r2c2 || r2c4 == r2c3)
{
r2c4 = Math.floor((Math.random() * 9) + 1);
}
// C5
r2c5 = Math.floor((Math.random() * 9) + 1);
while(r2c5 == r1c5 || r2c5 == r2c1 || r2c5 == r2c2 || r2c5 == r2c3 || r2c5 == r2c4)
{
r2c5 = Math.floor((Math.random() * 9) + 1);
}
// C6
r2c6 = Math.floor((Math.random() * 9) + 1);
while(r2c6 == r1c6 || r2c6 == r2c1 || r2c6 == r2c2 || r2c6 == r2c3 || r2c6 == r2c4 || r2c6 == r2c5)
{
r2c6 = Math.floor((Math.random() * 9) + 1);
}
// C7
r2c7 = Math.floor((Math.random() * 9) + 1);
while(r2c7 == r1c7 || r2c7 == r2c1 || r2c7 == r2c2 || r2c7 == r2c3 || r2c7 == r2c4 || r2c7 == r2c5 || r2c7 == r2c6)
{
r2c7 = Math.floor((Math.random() * 9) + 1);
}
// C8
r2c8 = Math.floor((Math.random() * 9) + 1);
while(r2c8 == r1c8 || r2c8 == r2c1 || r2c8 == r2c2 || r2c8 == r2c3 || r2c8 == r2c4 || r2c8 == r2c5 || r2c8 == r2c6 || r2c8 == r2c7)
{
r2c8 = Math.floor((Math.random() * 9) + 1);
}
// C9
r2c9 = Math.floor((Math.random() * 9) + 1);
while(r2c9 == r1c9 || r2c9 == r2c1 || r2c9 == r2c2 || r2c9 == r2c3 || r2c9 == r2c4 || r2c9 == r2c5 || r2c9 == r2c6 || r2c9 == r2c7 || r2c9 == r2c8)
{
r2c9 = Math.floor((Math.random() * 9) + 1);
}
// Generácia R3
//c1
r3c1 = Math.floor((Math.random() * 9) + 1);
while(r3c1 == r1c1 || r3c1 == r2c1 || r3c1 == r1c2 || r3c1 == r1c3)
{
r3c1 = Math.floor((Math.random() * 9) + 1);
}
//c2
r3c2 = Math.floor((Math.random() * 9) + 1);
while(r3c2 == r1c2 || r3c2 == r2c2 || r3c2 == r3c1 || r3c2 == r1c1 || r3c2 == r1c3)
{
r3c2 = Math.floor((Math.random() * 9) + 1);
}
//c3
r3c3 = Math.floor((Math.random() * 9) + 1);
while(r3c3 == r1c3 || r3c3 == r2c3 || r3c3 == r3c1 || r3c3 == r3c2 || r3c3 == r1c2 || r3c3 == r1c1)
{
r3c3 = Math.floor((Math.random() * 9) + 1);
}
//c4
r3c4 = Math.floor((Math.random() * 9) + 1);
while(r3c4 == r1c4 || r3c4 == r2c4 || r3c4 == r3c1 || r3c4 == r3c2 || r3c4 == r3c3)
{
r3c4 = Math.floor((Math.random() * 9) + 1);
}
//c5
r3c5 = Math.floor((Math.random() * 9) + 1);
while(r3c5 == r1c5 || r3c5 == r2c5 || r3c5 == r3c1 || r3c5 == r3c2 || r3c5 == r3c3 || r3c5 == r3c4)
{
r3c5 = Math.floor((Math.random() * 9) + 1);
}
//c6
r3c6 = Math.floor((Math.random() * 9) + 1);
while(r3c6 == r1c6 || r3c6 == r2c6 || r3c6 == r3c1 || r3c6 == r3c2 || r3c6 == r3c3 || r3c6 == r3c4 || r3c6 == r3c5)
{
r3c6 = Math.floor((Math.random() * 9) + 1);
}
//c7
r3c7 = Math.floor((Math.random() * 9) + 1);
while(r3c7 == r1c7 || r3c7 == r2c7 || r3c7 == r3c1 || r3c7 == r3c2 || r3c7 == r3c3 || r3c7 == r3c4 || r3c7 == r3c5 || r3c7 == r3c6)
{
r3c7 = Math.floor((Math.random() * 9) + 1);
}
//c8
r3c8 = Math.floor((Math.random() * 9) + 1);
while(r3c8 == r1c8 || r3c8 == r2c8 || r3c8 == r3c1 || r3c8 == r3c2 || r3c8 == r3c3 || r3c8 == r3c4 || r3c8 == r3c5 || r3c8 == r3c6 || r3c8 == r3c7)
{
r3c8 = Math.floor((Math.random() * 9) + 1);
}
//c9
r3c9 = Math.floor((Math.random() * 9) + 1);
while(r3c9 == r1c9 || r3c9 == r2c9 || r3c9 == r3c1 || r3c9 == r3c2 || r3c9 == r3c3 || r3c9 == r3c4 || r3c9 == r3c5 || r3c9 == r3c6 || r3c9 == r3c7 || r3c9 == r3c8)
{
r3c9 = Math.floor((Math.random() * 9) + 1);
}
//Výpis do tabulky
// R1
$("#r1c1").html(r1c1);
$("#r1c2").html(r1c2);
$("#r1c3").html(r1c3);
$("#r1c4").html(r1c4);
$("#r1c5").html(r1c5);
$("#r1c6").html(r1c6);
$("#r1c7").html(r1c7);
$("#r1c8").html(r1c8);
$("#r1c9").html(r1c9);
// R2
$("#r2c1").html(r2c1);
$("#r2c2").html(r2c2);
$("#r2c3").html(r2c3);
$("#r2c4").html(r2c4);
$("#r2c5").html(r2c5);
$("#r2c6").html(r2c6);
$("#r2c7").html(r2c7);
$("#r2c8").html(r2c8);
$("#r2c9").html(r2c9);
// R3
$("#r3c1").html(r3c1);
$("#r3c2").html(r3c2);
$("#r3c3").html(r3c3);
$("#r3c4").html(r3c4);
$("#r3c5").html(r3c5);
$("#r3c6").html(r3c6);
$("#r3c7").html(r3c7);
$("#r3c8").html(r3c8);
$("#r3c9").html(r3c9);
// R4
$("#r4c1").html(r4c1);
$("#r4c2").html(r4c2);
$("#r4c3").html(r4c3);
$("#r4c4").html(r4c4);
$("#r4c5").html(r4c5);
$("#r4c6").html(r4c6);
$("#r4c7").html(r4c7);
$("#r4c8").html(r4c8);
$("#r4c9").html(r4c9);
// R5
$("#r5c1").html(r5c1);
$("#r5c2").html(r5c2);
$("#r5c3").html(r5c3);
$("#r5c4").html(r5c4);
$("#r5c5").html(r5c5);
$("#r5c6").html(r5c6);
$("#r5c7").html(r5c7);
$("#r5c8").html(r5c8);
$("#r5c9").html(r5c9);
// R6
$("#r6c1").html(r6c1);
$("#r6c2").html(r6c2);
$("#r6c3").html(r6c3);
$("#r6c4").html(r6c4);
$("#r6c5").html(r6c5);
$("#r6c6").html(r6c6);
$("#r6c7").html(r6c7);
$("#r6c8").html(r6c8);
$("#r6c9").html(r6c9);
// R7
$("#r7c1").html(r7c1);
$("#r7c2").html(r7c2);
$("#r7c3").html(r7c3);
$("#r7c4").html(r7c4);
$("#r7c5").html(r7c5);
$("#r7c6").html(r7c6);
$("#r7c7").html(r7c7);
$("#r7c8").html(r7c8);
$("#r7c9").html(r7c9);
// R8
$("#r8c1").html(r8c1);
$("#r8c2").html(r8c2);
$("#r8c3").html(r8c3);
$("#r8c4").html(r8c4);
$("#r8c5").html(r8c5);
$("#r8c6").html(r8c6);
$("#r8c7").html(r8c7);
$("#r8c8").html(r8c8);
$("#r8c9").html(r8c9);
// R9
$("#r9c1").html(r9c1);
$("#r9c2").html(r9c2);
$("#r9c3").html(r9c3);
$("#r9c4").html(r9c4);
$("#r9c5").html(r9c5);
$("#r9c6").html(r9c6);
$("#r9c7").html(r9c7);
$("#r9c8").html(r9c8);
$("#r9c9").html(r9c9);
}
Ha nagyon szeretnéd még optimalozálni, írj, és megoldhatjuk.
18f
"Ha kezdő vagy és saját fejjel akarsz valamit megcsinálni akkor nem lessz tokeletes elsore"
Nem akarok gonosz lenni, de ha kezdő vagy, először nézz utána, hogy csinálják azok, akik nem kezdők. Szerencsére nem kell feltalálni a meleg vizet. Esetleg az alapoknál kezdd, sokkal egyszerűbb feladatokkal.
Nem feltetlenul kepes minenki elsajatitani a programozas tudomanyat, ez egy szakma, nem egy keszseg.
Ahogy látom, a millió változó és a görcsbe ránduló ciklustömeg általános abszurditását félretéve is van egy alapvető hibája az leképzelésnek: Így nem lehet végigrakni a táblát. Néhány cella sikeres kitöltése után (nagyon) nagy valószínűséggel kialakul egy olyan helyzet, amelyből már nem építhető fel a rendszer. Amikor ez bekövetkezik, a boldogtalan while-ciklusok hiába keresnek akármeddig, mert a feltétel sohasem következik be (lefagyás). Ezt az állapotot a programnak észlelnie kéne, és visszalépve új próbálkozást kellene indítania, de ennek nyomát sem észlelem -- mellesleg, amennyire meg tudom ítélni, a mostani teljesen rendszertelen véletlenszerűség ennek a módszernek sem igen kedvez.
Kérdező, szerintem a probléma sokszorta bonyolultabb, mint ahogyan azt első látásra feltételezted. A kódod alapján még nagyon messze vagy a megoldás esélyétől. Egyelőre próbálkozz inkább kisebb feladatokkal (tic-tac-toe, tizenötös játék, mancala), azok is éppen eléggé meg fognak izzasztani.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!