Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Creazione array da 81 elementi per creazione schema sudoku

    Salve a tutti,
    avevo intenzione di creare uno script per la creazione automatica di vari schemi del sudoku rispettando chiaramente la disposizione dei numeri rispetto alle righe,colonne e regioni (le 9 tabelle 3x3). Il problema è che il mio algoritmo riempe gli 81 elementi dell'array di 0 e non so dove ho sbagliato.

    Vi allego il codice dello script :
    codice:
    window.onload = function (){
    
    
    
    
        sudoku = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
        contatore = 0;
        arrayControllo = [];
        possibiliNumeri = [1,2,3,4,5,6,7,8,9];
    
    
        creaSudoku();
        visuaSudoku();
    } 
    
    
    
    
    function creaSudoku() {
       
        var errore;
        var num;
        var possibiliNumeri2;
        var i;
        if (sudoku.length < 81){
            if (possibiliNumeri.length == 0){
                sudoku[contatore] = 0;
                contatore--;
                creaSudoku();
            }
            else{
                    do {
                         errore = false;
                         num = Math.floor((Math.random() * 9) + 1);
    
    
                        for (i = 0; i<arrayControllo.length-1; i++){
                            if (arrayControllo[i] == num) errore = true
                        }  
                    } while (errore == false)
    
    
                    switch(true){                 //controllo righe
                        case (contatore < 9):
                            for (i = 0; i<9; i++){
                                if (sudoku[i] == num) errore = true;                
                            }
                        case (contatore >= 9 && contatore < 18 ):
                            for (i = 9; i<18; i++){
                                if (sudoku[i] == num) errore = true;  
                            }
                        case (contatore >= 18 && contatore < 27 ):
                            for (i = 18; i<27; i++){
                                if (sudoku[i] == num) errore = true;  
                            }
                        case (contatore >= 27 && contatore < 36 ):
                            for (i = 27; i<36; i++){
                                if (sudoku[i] == num) errore = true;  
                            }
                        case (contatore >= 36 && contatore < 45 ):
                            for (i = 36; i<45; i++){
                                if (sudoku[i] == num) errore = true;  
                            }  
                        case (contatore >= 45 && contatore < 54 ):
                            for (i = 45; i<54; i++){
                                if (sudoku[i] == num) errore = true;  
                            } 
                        case (contatore >= 54 && contatore < 63 ):
                            for (i = 54; i<63; i++){
                                if (sudoku[i] == num) errore = true;  
                            }  
                        case (contatore >= 63 && contatore < 72 ):
                            for (i = 63; i<72; i++){
                                if (sudoku[i] == num) errore = true;  
                            } 
                        case (contatore >= 72 && contatore < 81 ):
                            for (i = 72; i<81; i++){
                                if (sudoku[i] == num) errore = true; 
                            }                                                                                        
                    }
    
    
                    switch(contatore % 9){                 //controllo colonne
                        case (0):
                            for (i = 0; i<9; i++){
                                if (sudoku[(i*9)+contatore % 9] == num) errore = true;                
                            }
                            break;
                        case (1):
                            for (i = 9; i<18; i++){
                                if (sudoku[(i*9)+contatore % 9] == num) errore = true;                
                            }
                            break;                      
                        case (2):
                            for (i = 18; i<18; i++){
                                if (sudoku[(i*9)+contatore % 9] == num) errore = true;                
                            }
                            break;                        
                        case (3):
                            for (i = 27; i<36; i++){
                                if (sudoku[(i*9)+contatore % 9] == num) errore = true;                
                            }
                            break; 
                        case (4):
                            for (i = 36; i<45; i++){
                                if (sudoku[(i*9)+contatore % 9] == num) errore = true;                
                            }
                            break;
                        case (5):
                            for (i = 45; i<54; i++){
                                if (sudoku[(i*9)+contatore % 9] == num) errore = true;                
                            }
                            break;
                        case (6):
                            for (i = 54; i<63; i++){
                                if (sudoku[(i*9)+contatore % 9] == num) errore = true;                
                            }
                            break; 
                        case (7):
                            for (i = 63; i<72; i++){
                                if (sudoku[(i*9)+contatore % 9] == num) errore = true;                
                            }
                            break; 
                        case (8):
                            for (i = 72; i<81; i++){
                                if (sudoku[(i*9)+contatore % 9] == num) errore = true;                
                            }
                            break;                                                                                      
                    }                
    
    
    
                if (errore == false){
                    sudoku[contatore] = num;
                    arrayControllo[arrayControllo.length] = num;
                    contatore++;
                    possibiliNumeri = [1,2,3,4,5,6,7,8,9];
                    creaSudoku();
                }
                else{
                    var c=0;
                    for (i = 0; i < 9; i++){
                        if (possibiliNumeri[i] != num){
                            possibiliNumeri2[c] = num;
                            c++;
                        }
                    }
                    possibiliNumeri = possibiliNumeri2;
                    creaSudoku();
                }
    
    
            }
        }
    
    
    }
    
    
    function visuaSudoku(){
        var c;
        for (c=0; c<81; c++){
            console.log(sudoku[c]);
        }
    
    
    }
    Grazie mille per l'aiuto P.S. ho tralasciato il controllo delle regioni perchè superavo il numero max di caratteri disponibili

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao.
    Il problema è che il mio algoritmo riempe gli 81 elementi dell'array di 0 e non so dove ho sbagliato.
    Bhe, gli zero vengono scritti qui:
    codice:
    sudoku = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    Il problema è che là rimangono.
    Non ho approfondito ma la prima condizione incontrata nel procedimento non viene vista, per cui non accade praticamente nulla e tutti gli elementi dell'array restano chiaramente a zero:
    codice:
    if (sudoku.length < 81){
    L'array sudoku è già lungo 81 (perché è stato dichiarato con 81 elementi) per cui quella condizione non sarà vista e non accadrà nulla.

  3. #3
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao.

    Bhe, gli zero vengono scritti qui:
    codice:
    sudoku = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    Il problema è che là rimangono.
    Non ho approfondito ma la prima condizione incontrata nel procedimento non viene vista, per cui non accade praticamente nulla e tutti gli elementi dell'array restano chiaramente a zero:
    codice:
    if (sudoku.length < 81){
    L'array sudoku è già lungo 81 (perché è stato dichiarato con 81 elementi) per cui quella condizione non sarà vista e non accadrà nulla.
    Grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.