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);
}
Ne vedd komolyan az itteni kommenteket. :) Aki tud programozni, annak rettentően megdöbbentő ilyet látni, de mindenki elkezdte valahol.
Ajánlom figyelmedbe a loopokat.
Ha jól értelmezem megpróbáltad while ciklussal (loopal), de lefagyott. Valószínűleg azért, mert egy olyan loopot hoztál létre, aminek a feltétele soha sem válik hamissí, így a végtelenségig megy ... Kicsit jobban nézz utána a dolgoknak.
Ha esetleg fel rakod a loopodnak a kódját, akkor abban tudunk segíteni :D
Végre valaki aki nem rogton lemond hanem próbál segíteni valakinek aki még csak kezdi...
idáig nem fagy le, itt legenerál nekem kódokat úgy hogy midnen sorban vizszintes es fuggolegesen is csak 1x leeht a szám, ha hozzá adom azt hogy 3x3 kockában is 1 legyen lefagy, hogyan csinálnád te meg ? valami tanácsot ? :)
"idáig nem fagy le"
Petőfi Sándor nevű felhasználó válasza:
Ne bolondozz, Jancsi, a tréfát nem értem...
Sok mindent láttam már. De ez azért kemény :D
Mégis mit segítsünk. Kezd az alapoknál.
Egy képet bedobtál, hogy "idáig nem fagy le". Ezen nem tudok elindulni, legalább is én.
Ha belinkeled a ciklusos próbálkozásodnak a kódját akkor az szívesen megnézem.
Persze hogy kifagy, annyi ciklust indít, hogy nem bírja el a kliens. És nem felejtjük el, a javascript async nyelv, nem fog várni egyik ciklus a másikra.
Én teljesen másképp oldanám meg, ilyen gány megoldás pedig eszembe se jutna ( és kezdőként sem jutott ). Ha hiszitek ha nem, nokedlik :P .
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!