Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Grattacieli - Grattacieli C#
Forum - Grattacieli - Grattacieli C# - Pagina 3

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Ultimo (Member)
Guru


Messaggi: 891
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 21:58
Mercoledì, 01/05/2024
Si vero, il numero è quello :k:

allego il codice che ho scritto

il 6x6 genera un numero elevato di griglie difficile da gestire

il file compresso zip non lo carica per adesso metto il codice

Codice sorgente - presumibilmente C#

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5.  
  6. namespace Grattacieli
  7. {
  8.     public partial class Form1 : Form
  9.     {
  10.         TextBox[,] schema; // contiene la griglia delle textBox
  11.        
  12.         // matrice master
  13.         public int[,] schemeM;
  14.  
  15.         internal struct S // la scacchiera ha le seguenti info
  16.         {
  17.             public byte nRighe; // numero di righe
  18.             public byte nColonne; // numero di colonne
  19.             public byte wQuadratino; // larghezza del quadratino
  20.             public byte hQuadratino; // altezza del quadratino            
  21.         }
  22.        
  23.         private S Scacchiera; // contiene le info della scacchiera
  24.      
  25.           // matrice della griglia
  26.         sbyte[,] grid = new sbyte[5, 5];
  27.         byte sizeL = 5;
  28.         byte SGL = 5 + 2;
  29.    
  30.         // lista che conterrà tutte le matrici grid con tutte le combinazioni valide possibili (576)
  31.         List<sbyte[,]> listGrid = new List<sbyte[,]>();    
  32.         int mostra = -1;
  33.  
  34.         public Form1()
  35.         {
  36.             InitializeComponent();
  37.             int Rg= Grattacieli.Properties.Settings.Default.SizeGInteg;
  38.             int Cg = Grattacieli.Properties.Settings.Default.SizeGInteg;
  39.             grid = new sbyte[Rg, Cg];        
  40.             SGL = Convert.ToByte(Grattacieli.Properties.Settings.Default.SizeGbyte +2) ;
  41.             sizeL = Grattacieli.Properties.Settings.Default.SizeGbyte;
  42.             numupdownDimensioneGr.Value = Rg;
  43.             preparaGriglia(Rg);
  44.             risolviGrid(grid); // creazione di tutte le griglie possibili ma valide
  45.             labInfo.Text = "griglie n. " + listGrid.Count.ToString();
  46.         }
  47.  
  48.         public void preparaGriglia(int size)
  49.         {
  50.             if(size == 4)
  51.             { // matrice con una soluzione da trovare
  52.               int[,] schemeM4 = {{ 0, 2, 1, 3, 2, 0 },
  53.                                 { 2, 0, 0, 0, 0, 2 },
  54.                                 { 1, 0, 0, 0, 0, 3 },
  55.                                 { 3, 0, 0, 0, 0, 2 },
  56.                                 { 2, 0, 0, 0, 0, 1 },                              
  57.                                 { 0, 2, 3, 2, 1, 0 }};
  58.                 int len = size + 2;
  59.                 schemeM = new int[len, len];
  60.                 schemeM = (int[,])schemeM4.Clone();
  61.             }
  62.             if (size == 5)
  63.             { // matrice con una soluzione da trovare
  64.                int[,] schemeM5 = {{ 0, 1, 2, 2, 3, 4, 0 },
  65.                                   { 1, 0, 0, 0, 0, 0, 5 },
  66.                                   { 2, 0, 0, 0, 0, 0, 3 },
  67.                                   { 2, 0, 0, 0, 0, 0, 2 },
  68.                                   { 3, 0, 0, 0, 0, 0, 2 },
  69.                                   { 4, 0, 0, 0, 0, 0, 1 },
  70.                                   { 0, 5, 2, 3, 2, 1, 0 }};
  71.                 int len = size + 2;
  72.                 schemeM = new int[len, len];
  73.                 schemeM = (int[,])schemeM5.Clone();
  74.             }
  75.             if (size == 6)
  76.             { // matrice con una soluzione da trovare
  77.                int[,] schemeM6 = {{ 0, 6, 1, 2, 2, 3, 3, 0 },
  78.                                   { 2, 0, 0, 0, 0, 0, 0, 3 },
  79.                                   { 3, 0, 0, 0, 0, 0, 0, 2 },
  80.                                   { 3, 0, 0, 0, 0, 0, 0, 1 },
  81.                                   { 2, 0, 0, 0, 0, 0, 0, 4 },
  82.                                   { 2, 0, 0, 0, 0, 0, 0, 2 },
  83.                                   { 1, 0, 0, 0, 0, 0, 0, 3 },
  84.                                   { 0, 1, 4, 2, 4, 2, 2, 0 }};
  85.                 int len = size + 2;
  86.                 schemeM = new int[len,len];
  87.                 schemeM = (int[,])schemeM6.Clone();
  88.             }
  89.         }
  90.  
  91.         // *************** GENERAZIONE 576 GRIGLIE VALIDE ****************
  92.         public void risolviGrid(sbyte[,] grid)
  93.         {
  94.             int size = grid.GetLength(0);            
  95.             int[] row = new int[size];
  96.             int[] col = new int[size];
  97.             for (int i = 0; i < size; i++)
  98.             {
  99.                 row[i] = -1;
  100.                 col[i] = -1;
  101.             }
  102.             risolviCell(grid, row, col, 0, 0);
  103.         }
  104.  
  105.         int conta = 0;
  106.         public void risolviCell(sbyte[,] grid, int[] row, int[] col, int r, int c)
  107.         {
  108.             int size = grid.GetLength(0);
  109.             if (r == size)
  110.             {
  111.                 if (ControlloCoerenza(grid)==false)
  112.                 {
  113.                     return;
  114.                 }
  115.                 conta += 1;
  116.                 if (conta % (10000) == 0)
  117.                 {
  118.                     sbyte[,] clonedGrid = (sbyte[,])grid.Clone();
  119.                     listGrid.Add(clonedGrid); // aggiungo la griglia valida alla lista
  120.                     this.Text = "griglie n." + (conta);
  121.                 }
  122.                 return;
  123.             }
  124.             if (c == size)
  125.             {
  126.                 risolviCell(grid, row, col, r + 1, 0);
  127.                 return;
  128.             }
  129.             if (listGrid.Count > 99) return;//esce quando raggiunge il limite selezionato.
  130.                 for (sbyte i = 1; i <= size; i++)
  131.                 {
  132.                     if (valida(grid, row, col, r, c, i))
  133.                         {
  134.                             grid[r, c] = i;
  135.                             row[r] = i;
  136.                             col[c] = i;
  137.                             risolviCell(grid, row, col, r, c + 1);
  138.                             grid[r, c] = 0;
  139.                             row[r] = -1;
  140.                             col[c] = -1;
  141.                         }
  142.                 }
  143.         }
  144.  
  145.         static bool valida(sbyte[,] grid, int[] row, int[] col, int r, int c, int num)
  146.         {
  147.             int size = grid.GetLength(0);
  148.             for (int i = 0; i < size; i++)
  149.             {
  150.                 if (row[r] == num || col[c] == num || grid[r, i] == num || grid[i, c] == num)
  151.                 {
  152.                     return false;
  153.                 }
  154.             }
  155.             return true;
  156.         }
  157.  
  158.         static bool ControlloCoerenza(sbyte[,] grid)
  159.         {
  160.             int size = grid.GetLength(0);
  161.             for (int ir = 0; ir < size; ir++)
  162.             {
  163.                 for (int j = 0; j < size; j++)
  164.                 {
  165.                     if (grid[ir, j] == 0)
  166.                     {
  167.                       return false;
  168.                     }
  169.                 }
  170.             }
  171.  
  172.             for (int ir = 0; ir < size; ir++)
  173.             {
  174.                 for (int j = 0; j < size; j++)
  175.                 {
  176.                     for (int v = j+1; v < size; v++)
  177.                     {
  178.                       if (grid[ir, j] == grid[ir, v])
  179.                        {
  180.                         return false;
  181.                        }
  182.                     }              
  183.                 }
  184.             }
  185.  
  186.             for (int ic = 0; ic < size ; ic++)
  187.             {
  188.                 for (int j = 0; j < size; j++)
  189.                 {
  190.                     for (int v = j + 1; v < size; v++)
  191.                     {
  192.                         if (grid[j, ic] == grid[v, ic])
  193.                         {
  194.                             return false;
  195.                         }
  196.                     }
  197.                 }
  198.             }
  199.  
  200.             return true;
  201.         }
  202.         // *************** FINE GENERAZIONE 576 GRIGLIE VALIDE ****************
  203.  
  204.         private void Form1_Shown(object sender, EventArgs e)
  205.         {
  206.             Scacchiera.nColonne = SGL;
  207.             Scacchiera.nRighe = SGL;
  208.             Scacchiera.wQuadratino = 40;
  209.             Scacchiera.hQuadratino = 35;
  210.             sizeL = Scacchiera.nRighe;
  211.             creaSchema();
  212.             visualizzaScheme(schemeM); // prima visualizzazione
  213.         }
  214.  
  215.         private void creaSchema()
  216.         {
  217.             schema = new TextBox[Scacchiera.nColonne, Scacchiera.nRighe]; // nuova matrice di textBox vuota
  218.             for (byte riga = 0; riga < sizeL; riga++)
  219.             {
  220.                 for (byte colonna = 0; colonna < sizeL; colonna++)
  221.                 {
  222.                     schema[colonna, riga] = new TextBox();                  
  223.                     if (colonna > 0 && colonna < sizeL-1 && riga > 0 && riga < sizeL-1)
  224.                     {   // griglia interna
  225.                         schema[colonna, riga].BackColor = Color.Yellow;
  226.                         schema[colonna, riga].ReadOnly = true;
  227.                         schema[colonna, riga].Font = new Font("Microsoft San Serif",8,FontStyle.Bold);
  228.                     }
  229.                     else
  230.                     {   // corona esterna
  231.                         schema[colonna, riga].TextChanged += schema_TextChanged;
  232.                         schema[colonna, riga].Click += schema_Click;
  233.                     }
  234.                     if (colonna == 0 && riga == 0 || colonna == sizeL - 1 && riga == 0 || colonna == 0 && riga == sizeL - 1 || colonna == sizeL - 1 && riga == sizeL - 1) schema[colonna, riga].Visible = false;
  235.                     // tutte
  236.                     schema[colonna, riga].Name = colonna.ToString() + ";" + riga.ToString(); // il nome contiene gli indici "colonna;riga"
  237.                     schema[colonna, riga].TextAlign = HorizontalAlignment.Center;
  238.                     schema[colonna, riga].Size = new Size(Scacchiera.wQuadratino, Scacchiera.hQuadratino);
  239.                     schema[colonna, riga].Location = new Point(colonna * Scacchiera.wQuadratino + 20, riga * Scacchiera.hQuadratino + 50);
  240.                     this.Controls.Add(schema[colonna, riga]);  
  241.                 }
  242.             }            
  243.         }
  244.  
  245.         public void schema_Click(object sender, EventArgs e)
  246.         {
  247.             TextBox tb = (TextBox)sender;
  248.             tb.SelectAll(); // seleziona il testo della textBox cliccata
  249.         }
  250.         public void schema_TextChanged(object sender, EventArgs e)
  251.         {
  252.             TextBox tb = (TextBox)sender;
  253.             int val = 0;
  254.             string []coord = tb.Name.Split(';');
  255.             if (int.TryParse(tb.Text, out val)) // se il valore è ammesso viene inserito in scheme
  256.             {
  257.                 if (val > 0 && val < Scacchiera.nColonne - 1) schemeM[Convert.ToInt16(coord[1]), Convert.ToInt16(coord[0])] = val; else visualizzaScheme(schemeM);
  258.             }
  259.             else visualizzaScheme(schemeM); // visualizzo vecchio
  260.  
  261.             tb.SelectAll(); // riseleziona
  262.         }
  263.  
  264.         int np = 0;
  265.         public void butTrova_Click(object sender, EventArgs e)
  266.         {
  267.            
  268.             for (int i = np; i < listGrid.Count; i++)
  269.             {
  270.                 soluzioneN(i, schemeM);
  271.                
  272.                 if (Verifica(schemeM)) // se tutti i grattacieli che devono essere visibili lo sono
  273.                 {
  274.                     labInfo.Text = "griglia corrispondente n." + (i+1);
  275.                     visualizzaScheme(schemeM);
  276.                     np = i+1;
  277.                     break;
  278.                 }
  279.                 else // se anche solo uno dei grattacieli che devono essere visibili non lo è
  280.                 {
  281.                     if(i == listGrid.Count-1)
  282.                     {
  283.                      labInfo.Text = "griglia n. " + (i + 1).ToString("000") + "  nessuna valida trovata";
  284.                      labInfo.Refresh();
  285.                       np = 0;
  286.                     }
  287.                    
  288.                 }                
  289.             }
  290.         }
  291.  
  292.         public bool Verifica(int[,] scheme) // conta le corrispondenze grattacieli trovati visibili, con il numero nella corona che stabilisce i visibili
  293.         {
  294.             int size = scheme.GetLength(0);
  295.             int quanti = 0;
  296.             int Targhet = (size-2) * 4;
  297.             int []gratta = new int[size-2]; // vettore che contiene i grattacieli in esame
  298.             // controllo colonne 1/4 da posizione riga 0
  299.             for (int i = 1; i < size - 1; i++)
  300.             {
  301.                 for (int c = 0; c < size - 2; c++) gratta[c ] = scheme[c + 1, i]; // elenco
  302.                 int trovati = contaGrattaVisibili(gratta);
  303.                 int visibili = scheme[0,i];
  304.                 if (trovati == visibili) quanti++;
  305.             }
  306.  
  307.             //  controllo colonne 1/4 da posizione riga 5
  308.             for (int i = 1; i < size - 1; i++)
  309.             {
  310.                 for (int c = 0; c < size - 2; c++) gratta[size - 3 - c] = scheme[c + 1, i]; // elenco al contrario
  311.                 int trovati = contaGrattaVisibili(gratta);
  312.                 int visibili = scheme[size - 1, i];
  313.                 if (trovati == visibili) quanti++;
  314.             }
  315.  
  316.             // controllo righe 1/4 da posizione colonna 0
  317.             for (int i = 1; i < size - 1; i++)
  318.             {
  319.                 for (int c = 0; c < size - 2; c++) gratta[c] = scheme[i, c + 1]; // elenco
  320.                 int trovati = contaGrattaVisibili(gratta);
  321.                 int visibili = scheme[i, 0];
  322.                 if (trovati == visibili) quanti++;
  323.             }
  324.  
  325.             // controllo righe 1/4 da posizione colonna 5
  326.             for (int i = 1; i < size - 1; i++)
  327.             {
  328.                 for (int c = 0; c < size - 2; c++) gratta[size - 3 - c] = scheme[i, c + 1]; // elenco al contrario
  329.                 int trovati = contaGrattaVisibili(gratta);
  330.                 int visibili = scheme[i, size - 1];
  331.                 if (trovati == visibili) quanti++;
  332.             }
  333.  
  334.             if (quanti == Targhet) return true; else return false;
  335.         }
  336.  
  337.         static int contaGrattaVisibili(int[] buildings)
  338.         {
  339.             int visibleBuildings = 0;
  340.             int maxHeight = 0;
  341.  
  342.             foreach (int height in buildings)
  343.             {
  344.                 if (height > maxHeight)
  345.                 {
  346.                     visibleBuildings++;
  347.                     maxHeight = height;
  348.                 }
  349.             }
  350.             return visibleBuildings;
  351.         }
  352.  
  353.         public void visualizzaScheme(int[,] scheme)
  354.         {
  355.             Console.WriteLine("---------------------");
  356.             int size = scheme.GetLength(0);
  357.             for (int i = 0; i < size ; i++)
  358.             {
  359.                 for (int j = 0; j < size ; j++)
  360.                 {
  361.                     Console.Write(scheme[i, j] + " ");
  362.                     schema[j, i].Text = scheme[i,j].ToString(); // indici invertiti tra schema e scheme
  363.                 }
  364.                 Console.WriteLine();
  365.             }
  366.         }
  367.  
  368.         private void soluzioneN(int solN, int[,] scheme)
  369.         {
  370.             int size = scheme.GetLength(0);
  371.             for (int i = 1; i < size-1; i++)
  372.             {
  373.                 for (int j = 1; j < size-1; j++) // mette la griglia in esame in scheme
  374.                 {                  
  375.                     scheme[j, i] = listGrid[solN][i-1, j-1] * 10; // indici invertiti tra schema e scheme
  376.                 }              
  377.             }
  378.         }
  379.  
  380.         private void butIstruzioni_Click(object sender, EventArgs e)
  381.         {
  382.             MessageBox.Show("Il gioco consiste nel posizionare i grattacieli in modo da rispettare la visibilità.\n" +
  383.                             "I grattacieli con più piani coprono i più bassi.\n" +
  384.                             "se abbiamo -> 30 20 10 40, due sono i grattacieli visibili il 30 e il 40, all'inverso solo il 40\n\n" +
  385.                             "I numeri nella corona stabiliscono quanti grattacieli sono visibili, " +
  386.                             "puoi modificare quelli di default.\n\nClicca [trova] per verificare se c'è soluzione\n\n" +
  387.                             "Il programma non serve per giocare ma per trovare le soluzioni se esistono, inserendo i numeri nella corona.\n\n" +
  388.                             "Con [<] e [>] si possono esplorare tutte le soluzioni possibili", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information);
  389.         }
  390.  
  391.         private void butMeno_Click(object sender, EventArgs e)
  392.         {
  393.             if (--mostra < 0) mostra = listGrid.Count - 1;
  394.             soluzioneN(mostra, schemeM);
  395.             calcolaCorona(schemeM);
  396.             visualizzaScheme(schemeM);
  397.             labInfo.Text = "griglia n." + mostra;
  398.             np = 0;
  399.         }
  400.  
  401.         private void butPiu_Click(object sender, EventArgs e)
  402.         {
  403.             if (++mostra > listGrid.Count - 1) mostra = 0;
  404.             soluzioneN(mostra, schemeM);
  405.             calcolaCorona(schemeM);
  406.             visualizzaScheme(schemeM);
  407.             labInfo.Text = "griglia n." + mostra;
  408.             np = 0;
  409.         }
  410.  
  411.         private void calcolaCorona(int[,] scheme)
  412.         {
  413.             int size = scheme.GetLength(0);
  414.             int[] gratta = new int[size - 2]; // vettore che contiene i grattacieli in esame
  415.             // controllo colonne 1/4 da posizione riga 0
  416.             for (int i = 1; i < size - 1; i++)
  417.             {
  418.                 for (int c = 0; c < size - 2; c++) gratta[c] = scheme[c + 1, i];
  419.                 int trovati = contaGrattaVisibili(gratta);
  420.                 scheme[0, i] = trovati;
  421.             }
  422.  
  423.             //  controllo colonne 1/4 da posizione riga 5
  424.             for (int i = 1; i < size - 1; i++)
  425.             {
  426.                 for (int c = 0; c < size - 2; c++) gratta[size - 3 - c] = scheme[c + 1, i]; // al contrario
  427.                 int trovati = contaGrattaVisibili(gratta);
  428.                 scheme[size - 1, i] = trovati; ;
  429.             }
  430.  
  431.             // controllo righe 1/4 da posizione colonna 0
  432.             for (int i = 1; i < size - 1; i++)
  433.             {
  434.                 for (int c = 0; c < size - 2; c++) gratta[c] = scheme[i, c + 1];
  435.                 int trovati = contaGrattaVisibili(gratta);
  436.                 scheme[i, 0] = trovati;
  437.             }
  438.  
  439.             // controllo righe 1/4 da posizione colonna 5
  440.             for (int i = 1; i < size - 1; i++)
  441.             {
  442.                 for (int c = 0; c < size - 2; c++) gratta[size - 3 - c] = scheme[i, c + 1]; // al contrario
  443.                 int trovati = contaGrattaVisibili(gratta);
  444.                 scheme[i, size - 1] = trovati;
  445.             }
  446.         }
  447.  
  448.         private void btn_CambiaGriglia_Click(object sender, EventArgs e)
  449.         {
  450.             int s = Convert.ToInt16(numupdownDimensioneGr.Value);
  451.             byte sb = Convert.ToByte(numupdownDimensioneGr.Value);
  452.             if (s > 6) return;
  453.  
  454.            Grattacieli.Properties.Settings.Default.SizeGbyte = sb;
  455.            Grattacieli.Properties.Settings.Default.SizeGInteg = s;
  456.            Grattacieli.Properties.Settings.Default.Save();
  457.  
  458.             MessageBox.Show("Riavviare il programma");
  459.             this.Close();
  460.         }
  461.     }    
  462. }






Ultima modifica effettuata da Ultimo il 01/05/2024 alle 22:19


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 891
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 23:34
Mercoledì, 01/05/2024
"Resto ancora sorpreso dall'enorme differenza di schemi generabili tra griglia 5x5 e griglia 6x6 :om:"

Differenza mostruosa

7x7 sarà a 10 miliardi


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 891
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 10:38
Giovedì, 02/05/2024
Testo quotato

Postato originariamente da Carlo:

Testo quotato

Postato originariamente da Ultimo:

Ciao, col 6x6 l'algoritmo ricorsivo ha generato 812.850.000 griglie valide (dopo più di un ora )

ho verificato con una funzione non ci sono zeri, ne ripetizioni nelle righe e nelle colonne

se nella lista non ci sono griglie ripetute e sembra che non c'è ne siano questo è il numero esatto.




Hai messo tutte le griglie in una lista? credo di no.
il numero 812.850.000 non è esatto perchè con mod 10000 ti predi i conteggi, avresti dovuto ristampare conta.
Il numero esatto è 812.851.200, conteggio effettuato senza aggiungere le griglie in una lista.
Nelle mie prove ho verificato che a 64bit la lista riesce a contenere poco più di 134 milioni di schemi 6x6 composti da byte. :yup:

Resto ancora sorpreso dall'enorme differenza di schemi generabili tra griglia 5x5 e griglia 6x6 :om:





812.851.200 diviso 4 = 203.212.800

Quando troviamo una griglia, in realtà sono 4, nord sud est ovest

se permutiamo i valori, per esempio il 6 con 1, da una griglia ne troviamo un altra.




Ultima modifica effettuata da Ultimo il 02/05/2024 alle 10:42


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1372
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 0:44
Venerdì, 03/05/2024
Testo quotato

Postato originariamente da Ultimo:

Quando troviamo una griglia, in realtà sono 4, nord sud est ovest

se permutiamo i valori, per esempio il 6 con 1, da una griglia ne troviamo un altra.


Bingo... grazieee. :rotfl:

Era quello che mi serviva, avevo in mente per il gioco Grattacieli di prendere le prime 50.000 griglie valide per gli schemi più grandi di 4x4, ma prendendo solo le prime avrei avuto sempre la prima riga uguale in tutti gli schemi, e anche la seconda e la terza sullo schema 9x9. Ora ogni schema generato lo ruoto due volte e ci ottengo 3 griglie, con questo metodo le griglie sono variegate, ne genero 60.000, più che sufficienti per non annoiarsi e per evitare che qualcuno le impari a memoria.

Ho pubblicato la versione del gioco Grattacieli 1.0.02, http://www.pierotofy.it/pages/projects/files.php?id=732 griglie 2x2 3x3 4x4 5x5 6x6 7x7 8x8 9x9. (Copio il post nella discussione giusta)
A mio avviso le griglie da 6x6 in su sono irrisolvibili, per questo ho introdotto la possibilità di rivelare qualsiasi casella cliccandola con il tasto centrale del mouse, la casella diventa rosa ed il contatore degli aiuti si incrementa.
Ultimo rigrazie per la dritta. :k:

Ultima modifica effettuata da Carlo il 16/05/2024 alle 17:45


in programmazione tutto è permesso
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 891
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 11:17
Venerdì, 03/05/2024
"Ultimo rigrazie per la dritta. :k:"

Ottimo, :k:


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1372
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 8:52
Mercoledì, 15/05/2024
Solutore del gioco enigmistico Grattacieli su griglia 2x2 3x3 4x4 5x5
Nuova versione 1.0.02 http://www.pierotofy.it/pages/sorgenti/dettagli/19655-Grat ...

Creazione di tutte le soluzioni possibili.
Possibilità di inserire nella corona (vedette) i valori presi da uno schema da risolvere (mouseDx/Sx incrementa/decrementa il valore della vedetta), con [trova] la soluzione verrà fornita.

Con i tasti [<] e [>] si possono scorrere tutti gli schemi possibili
griglia 2x2 = 2 schemi
griglia 3x3 = 12 schemi
griglia 4x4 = 576 schemi
griglia 5x5 = 161280 schemi

Ottimizzata velocità di ricerca con un aumento di oltre 500 volte, lo schema 5x5 viene risolto in meno di un secondo.

Ultima modifica effettuata da Carlo il 16/05/2024 alle 17:44


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo