<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-27687446</id><updated>2011-12-14T18:58:49.254-08:00</updated><title type='text'>Andrea Pannitti Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://andreapannitti.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27687446/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://andreapannitti.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andrea Pannitti</name><uri>http://www.blogger.com/profile/07451017595393846654</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27687446.post-8056581589128207196</id><published>2011-01-05T00:55:00.000-08:00</published><updated>2011-01-05T00:58:42.549-08:00</updated><title type='text'>Scambio di due variabili senza la variabile di appoggio</title><content type='html'>&lt;div style="text-align: justify;"&gt;Il metodo classico per lo scambio di due variabili, denotiamole con a e b, prevede l'utilizzo di una terza variabile di appoggio, chiamiamola c, e consiste, sostanzialmente, nell'eseguire in successione le seguenti assegnazioni:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;c = a&lt;/div&gt;&lt;div&gt;a = b&lt;/div&gt;&lt;div&gt;b = c&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In questo topic, sarà mostrato un metodo alternativo che effettuerà il suddetto scambio senza l'utilizzo della terza variable di appoggio c.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;L'idea di tale metodo per variabili numeriche è da attribuirsi al caro amico &lt;b&gt;Giovanni Valentino&lt;/b&gt; ed è stato poi, successivamente, da me esteso al caso alfanumerico. Nel prosieguo, quindi, distingueremo i due casi analizzandoli separatamente.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Caso numerico&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Dette a e b le variabili numeriche da scambiare, possiamo effettuare lo scambio effettuando in successione le seguenti operazioni:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;a = a + b&lt;/div&gt;&lt;div&gt;b = a - b&lt;/div&gt;&lt;div&gt;a = a - b&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Come si potrà verificare, tale metodo funziona correttamente per qualsiasi valore numerico che si attribuisce alle variabili a e b.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Passiamo quindi ad esaminare il caso alfanumerico.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Caso alfanumerico&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Per esaminare tale caso, al fine di aumentare la chiarezza espositiva e la comprensione in termini pratici dello stesso, faremo riferimento alla sintassi di uno specifico linguaggio di programmazione, sebbene il procedimento possa essere applicato utilizzando qualsiasi altro linguaggio.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Per quanto detto, la sintassi che utilizzeremo è quella del linguaggio Java.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Le operazioni da eseguire, ricalcano le orme del caso numerico e si discostano da questo solo per alcuni dettagli.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Più precisamente, dette a e b le variabili alfanumeriche da scambiare, le operazioni da compiere sono le seguenti:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;a = a + b;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;// b = a.substring(0, 0 + a.length() - b.length()); Equivale a:&lt;/div&gt;&lt;div&gt;b = a.substring(0, a.length() - b.length());&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;//a = a.substring(b.length(), b.length() + a.length() - b.length()); Equivale a:&lt;/div&gt;&lt;div&gt;//a = a.substring(b.length(), a.length()); Equivale a:&lt;/div&gt;&lt;div&gt;a = a.substring(b.length());&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Anche in questo caso, si potrà facilmente constatare, che il metodo funziona per qualsiasi stringa attribuita alle variabili a e b.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Concludiamo tale topic, osservando che: sebbene il metodo illustrato ottimizza l'utilizzo dello spazio di memoria, esso ha, come rovescio della medaglia, l'aumento del tempo computazionale dovuto alle operazioni che devono essere eseguite.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In definitiva, il suddetto metodo, è equivalente a quello tradizionale e la scelta dell'uno o dell'altro, dipende esclusivamente dal tipo di ottimizzazione che si desidera: più spazio e meno tempo nel caso tradizionale, meno spazio e più tempo per il metodo illustrato. Ovviamente, però, essendo tali ottimizzazioni veramente minime, soprattutto in considerazione della potenza raggiunta dagli attuali computers, la scelta del metodo, in realtà, dipende da fattori dovuti esclusivamente al gusto personale.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27687446-8056581589128207196?l=andreapannitti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andreapannitti.blogspot.com/feeds/8056581589128207196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27687446&amp;postID=8056581589128207196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27687446/posts/default/8056581589128207196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27687446/posts/default/8056581589128207196'/><link rel='alternate' type='text/html' href='http://andreapannitti.blogspot.com/2011/01/scambio-di-due-variabili-senza-la.html' title='Scambio di due variabili senza la variabile di appoggio'/><author><name>Andrea Pannitti</name><uri>http://www.blogger.com/profile/07451017595393846654</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27687446.post-954139591973446022</id><published>2009-05-22T00:40:00.000-07:00</published><updated>2011-01-09T22:31:59.589-08:00</updated><title type='text'>Algoritmo per la generazione di un calendario di calcio</title><content type='html'>&lt;div style="text-align: justify;"&gt;In questo topic illustrerò un algoritmo, sin'ora inedito, per la generazione di un calendario di calcio.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;L'ideatore di tale algoritmo è &lt;span style="font-weight:bold;"&gt;Giuseppe Di Falco&lt;/span&gt;, un bravo professore di matematica dell'ITC che ho frequentato negli anni ottanta.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Prima di passare alla descrizione vera e propria dell'algoritmo, cercherò di spiegare meglio qual'è il problema che si intende risolvere.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dato un numero n di squadre, si desidera visualizzare un calendario, suddiviso in n giornate, in cui ciascuna delle n squadre incontra una ed una sola volta tutte le altre.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ogni giornata sarà costituita da n/2 partite e, nel caso in cui n sia dispari, una squadra riposerà.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Al termine del girone, costituito dall'insieme delle giornate, tutte le squadre dovranno aver sfidato una ed una sola volta tutte le altre ed inoltre, sempre nel caso che il numero di squadre sia dispari, tutte dovranno aver riposato una ed una sola volta.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ovviamente, il nome delle squadre non è importante: potremo riferirci a ciascuna di esse identificandole con un numero compreso tra 1 e n.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A questo punto, vediamo come funziona l'algoritmo in questione, riferendoci, per fissare le idee, ad un caso specifico.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Per comodità, prendiamo in esame prima il caso in cui n è dispari; quindi, a titolo di esempio, supponiamo n=5.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Scriviamo in verticale i nomi (nel nostro caso, come abbiamo detto, le identifichiamo con numeri) delle squadre:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Immaginando la suddetta lista come una "striscia" pieghevole, la spezziamo in due "ruotando" in senso antiorario la seconda metà in modo tale che essa assuma la seguente forma:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;  5&lt;br /&gt;14&lt;br /&gt;23&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Quella che abbiamo ottenuto costituisce la prima giornata del calendario: la prima squadra gioca contro la quarta, la seconda contro la terza e la quinta riposa.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;Ora, tenendo fissa la forma della nostra stricia, facciamo "slittare" in senso antiorario i nomi delle squadre che la compongono.&lt;br /&gt;Così facendo, essa assumerà la seguente conformazione:&lt;br /&gt;&lt;br /&gt;  4&lt;br /&gt;53&lt;br /&gt;12&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Questa costituisce la seconda giornata del nostro calendario.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ripetendo tale operazione altre n-2 volte otterremo il girone di "andata" del nostro calendario. Non sarà necessario generare il girone di "ritorno" in quanto esso è identico a quello di andata con il solo scambio dei ruoli tra le squadre che giocano "in casa" e quelle che giocano "fuori casa".&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In definitiva, quindi, l'output che otterremo sarà il seguente:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Giornata 1:&lt;br /&gt;1 - 4&lt;br /&gt;2 - 3&lt;br /&gt;Riposa la squadra: 5&lt;br /&gt;&lt;br /&gt;Giornata 2:&lt;br /&gt;5 - 3&lt;br /&gt;1 - 2&lt;br /&gt;Riposa la squadra: 4&lt;br /&gt;&lt;br /&gt;Giornata 3:&lt;br /&gt;4 - 2&lt;br /&gt;5 - 1&lt;br /&gt;Riposa la squadra: 3&lt;br /&gt;&lt;br /&gt;Giornata 4:&lt;br /&gt;3 - 1&lt;br /&gt;4 - 5&lt;br /&gt;Riposa la squadra: 2&lt;br /&gt;&lt;br /&gt;Giornata 5:&lt;br /&gt;2 - 5&lt;br /&gt;3 - 4&lt;br /&gt;Riposa la squadra: 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;A questo punto, dovremmo esaminare il caso in cui n è pari. Possiamo notare, però, che se "fissiamo" l'ultima squadra, facendola giocare con la squadra che dovrebbe riposare nel caso n-1, otterremmo in modo del tutto automatico proprio il calendario che desideriamo.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Allora, per fissare le idee, supponiamo n=6. Per quanto detto, il calendario che otterremo sarà il seguente:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;Giornata 1:&lt;br /&gt;6 - 5&lt;br /&gt;1 - 4&lt;br /&gt;2 - 3&lt;br /&gt;&lt;br /&gt;Giornata 2:&lt;br /&gt;6 - 4&lt;br /&gt;5 - 3&lt;br /&gt;1 - 2&lt;br /&gt;&lt;br /&gt;Giornata 3:&lt;br /&gt;6 - 3&lt;br /&gt;4 - 2&lt;br /&gt;5 - 1&lt;br /&gt;&lt;br /&gt;Giornata 4:&lt;br /&gt;6 - 2&lt;br /&gt;3 - 1&lt;br /&gt;4 - 5&lt;br /&gt;&lt;br /&gt;Giornata 5:&lt;br /&gt;6 - 1&lt;br /&gt;2 - 5&lt;br /&gt;3 - 4&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Ovviamente, in ogni caso, il numero totale delle giornate (del solo girone di andata), sarà: n - 1 + (n%2).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Per finire, vediamo un'implementazione in &lt;b&gt;Java&lt;/b&gt;, rilasciata sotto &lt;b&gt;Licenza GPL 3&lt;/b&gt;, come tutto il codice del software presente in questo blog, del suddetto algoritmo.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;/**&lt;/div&gt;&lt;div&gt; * @author Andrea Pannitti&lt;/div&gt;&lt;div&gt; *&lt;/div&gt;&lt;div&gt; */&lt;/div&gt;&lt;div&gt;public class CalendarioDiCalcio {&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;   /**&lt;/div&gt;&lt;div&gt;    * @param args&lt;/div&gt;&lt;div&gt;    */&lt;/div&gt;&lt;div&gt;   public static void main(String[] args) {&lt;/div&gt;&lt;div&gt;      int n;&lt;/div&gt;&lt;div&gt;      &lt;/div&gt;&lt;div&gt;      //Controllo sul parametro di input&lt;/div&gt;&lt;div&gt;      try {&lt;/div&gt;&lt;div&gt;         n=Integer.parseInt(args[0]);         &lt;/div&gt;&lt;div&gt;         if (n&amp;lt;1 || n&amp;gt;99) {&lt;/div&gt;&lt;div&gt;            System.out.println("Attenzione: il parametro di input deve essere un numero intero compreso tra 1 e 99!");&lt;/div&gt;&lt;div&gt;            return;&lt;/div&gt;&lt;div&gt;         }&lt;/div&gt;&lt;div&gt;      }&lt;/div&gt;&lt;div&gt;      catch (Exception e) {&lt;/div&gt;&lt;div&gt;         System.out.println("Attenzione: il parametro di input deve essere un numero intero compreso tra 1 e 99!");&lt;/div&gt;&lt;div&gt;         return;&lt;/div&gt;&lt;div&gt;      }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;      //Inizializzazione della stringa delle squadre&lt;/div&gt;&lt;div&gt;      String StringaSquadre = "";&lt;/div&gt;&lt;div&gt;      for (int i=1; i&lt;=n; i++)&lt;/div&gt;&lt;div&gt;         StringaSquadre+=(" " + String.valueOf(i)).substring((" " + String.valueOf(i)).length()-2);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;      //Genera il calendario&lt;/div&gt;&lt;div&gt;      for (int i=1; i&lt;=n-1+(n%2); i++) {&lt;/div&gt;&lt;div&gt;         System.out.println("Giornata " + i +":");&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;         if (n%2==0)&lt;/div&gt;&lt;div&gt;            System.out.println(StringaSquadre.substring((n - 1)* 2) + " - " + StringaSquadre.substring((n - 2) * 2, (n - 1) * 2));&lt;/div&gt;&lt;div&gt;            &lt;/div&gt;&lt;div&gt;         for (int j=0; j&lt;(int)((n-1)/2); j++) {&lt;/div&gt;&lt;div&gt;            System.out.println(StringaSquadre.substring(j * 2, (j + 1)* 2) + " - " + StringaSquadre.substring((n - j - 3 + (n%2)) * 2, (n - j - 2 + (n%2)) * 2));&lt;/div&gt;&lt;div&gt;         }&lt;/div&gt;&lt;div&gt;         &lt;/div&gt;&lt;div&gt;         if (n%2==1)&lt;/div&gt;&lt;div&gt;            System.out.println("Riposa la squadra: " + StringaSquadre.substring((n - 1) * 2));&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;         //Ruota la stringa delle squadre&lt;/div&gt;&lt;div&gt;         StringaSquadre = StringaSquadre.substring((n - 2 + (n%2)) * 2, (n - 1 + (n%2)) * 2) + StringaSquadre;&lt;/div&gt;&lt;div&gt;         StringaSquadre = StringaSquadre.substring(0, (n - 1 + (n%2)) * 2) + StringaSquadre.substring(n * 2, (n + 1 - (n%2)) * 2);&lt;/div&gt;&lt;div&gt;         &lt;/div&gt;&lt;div&gt;         System.out.println();&lt;/div&gt;&lt;div&gt;      }&lt;/div&gt;&lt;div&gt;   }&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27687446-954139591973446022?l=andreapannitti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andreapannitti.blogspot.com/feeds/954139591973446022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27687446&amp;postID=954139591973446022' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27687446/posts/default/954139591973446022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27687446/posts/default/954139591973446022'/><link rel='alternate' type='text/html' href='http://andreapannitti.blogspot.com/2009/05/algoritmo-per-la-generazione-di-un.html' title='Algoritmo per la generazione di un calendario di calcio'/><author><name>Andrea Pannitti</name><uri>http://www.blogger.com/profile/07451017595393846654</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27687446.post-964894419217088597</id><published>2008-01-26T10:11:00.000-08:00</published><updated>2008-02-19T13:03:48.354-08:00</updated><title type='text'>CRC Reverser Java Version</title><content type='html'>&lt;div align="justify"&gt;In una sfida di un gioco da Hackers a cui partecipo, il problema da risolvere era trovare una parola chiave a partire dal suo codice hash CRC32.&lt;br /&gt;Allora, cercando su Internet, ho trovato un interessante &lt;a href="http://blog.w-nz.com/archives/2005/07/15/reversing-crc/"&gt;blog di Bas Westerbaan&lt;/a&gt;. Da tale blog è possibile scaricare un &lt;a href="http://w-nz.com/~darkshines/projects/crc-rev-v0.01b.tar"&gt;programma&lt;/a&gt; scritto in python che trova tutte le parole che hanno un determinato codice hash CRC32.&lt;br /&gt;Con questo programma ho risolto il mio problema... ma ora la prossima sfida per me era di tradurre tale programma da Python in Java, il mio linguaggio di programmazione preferito insieme a C# e Visual Basic.&lt;br /&gt;Così, ho appreso le basi del linguaggio python ed ho tradotto tale programma.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;Potete scaricare la versione Java di tale programma da &lt;a href="http://rapidshare.com/files/86830114/CrcReverser.zip.html"&gt;qui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Questo programma, come quello di Bas Westerbaan, è rilasciato sotto &lt;strong&gt;licenza GPL 2&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Come Usare il programma&lt;/strong&gt;: &lt;span style="font-family:courier new;"&gt;java CrcReverser &lt;em&gt;hash&lt;/em&gt; &lt;/span&gt;(in decimale o esadecimale con h prefisso, senza hash viene inizializzato automaticamente con 4157704578).&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Esempio&lt;/strong&gt;: &lt;span style="font-family:courier new;"&gt;java CrcReverser 4157704578&lt;/span&gt; oppure &lt;span style="font-family:courier new;"&gt;java CrcReverser hf7d18982&lt;/span&gt; &lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;strong&gt;Aggiornamento&lt;/strong&gt;: Potete scaricare la nuova versione con interfaccia utente grafica da &lt;a href="http://w-nz.com/~bas/pannitti/CRCReverserGUI.jar"&gt;qui&lt;/a&gt;. Il codice sorgente è &lt;a href="http://w-nz.com/~bas/pannitti/CRCReverserGUI.zip"&gt;qui&lt;/a&gt;.&lt;br /&gt;&lt;p align="justify"&gt; &lt;/p&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;strong&gt;English&lt;/strong&gt;&lt;br /&gt;In a Hacker's Game challenge which I play, the problem to solve was to find a keyword from its CRC32 hash code.&lt;br /&gt;Then, looking on the Internet, I found an interesting &lt;a href="http://blog.w-nz.com/archives/2005/07/15/reversing-crc/"&gt;blog of Bas Westerbaan&lt;/a&gt;. From this blog is possible to download a &lt;a href="http://w-nz.com/~darkshines/projects/crc-rev-v0.01b.tar"&gt;program&lt;/a&gt; written in python that finds all the words with a specifc CRC32 hash code.&lt;br /&gt;With this program I solved my problem... but now the next challenge for me was to translate this program from Python to Java, my favorite programming language with C# and Visual Basic.&lt;br /&gt;So, I learned the basics of python language and I translated this program. &lt;/p&gt;&lt;p align="justify"&gt;You can download the Java version of this program from &lt;a href="http://rapidshare.com/files/86830114/CrcReverser.zip.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This program, like that of Bas Westerbaan, is released under &lt;strong&gt;GPL 2 license&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How to use the program&lt;/strong&gt;: &lt;span style="font-family:courier new;"&gt;java CrcReverser &lt;em&gt;hash &lt;/em&gt;&lt;/span&gt;(in decimal or hexadecimal with h prefix, without hash the default is 4157704578).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Exemple&lt;/strong&gt;: &lt;span style="font-family:courier new;"&gt;java CrcReverser 4157704578&lt;/span&gt; or &lt;span style="font-family:courier new;"&gt;java CrcReverser hf7d18982&lt;/span&gt; &lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;Update&lt;/strong&gt;: You can download the new version with GUI from &lt;a href="http://w-nz.com/~bas/pannitti/CRCReverserGUI.jar"&gt;here&lt;/a&gt;. The source code is &lt;a href="http://w-nz.com/~bas/pannitti/CRCReverserGUI.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27687446-964894419217088597?l=andreapannitti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andreapannitti.blogspot.com/feeds/964894419217088597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27687446&amp;postID=964894419217088597' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27687446/posts/default/964894419217088597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27687446/posts/default/964894419217088597'/><link rel='alternate' type='text/html' href='http://andreapannitti.blogspot.com/2008/01/crc-reverser-java-version.html' title='CRC Reverser Java Version'/><author><name>Andrea Pannitti</name><uri>http://www.blogger.com/profile/07451017595393846654</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27687446.post-114701445314156843</id><published>2006-05-07T07:31:00.000-07:00</published><updated>2011-01-11T10:49:04.028-08:00</updated><title type='text'>Algoritmo per lo sviluppo di sistemi integrali per il Totocalcio</title><content type='html'>&lt;div align="justify"&gt;Questo è il mio primo blog.&lt;/div&gt;&lt;div align="justify"&gt;L'idea di questo post nasce da una passione innata che ho per la matematica applicata ai giochi a pronostico, come il Totocalcio, il Superenalotto o il Lotto.&lt;/div&gt;&lt;div align="justify"&gt;Di seguito proporrò un algoritmo che ho concepito per lo sviluppo di un sistema integrale per il totocalcio.&lt;/div&gt;&lt;div align="justify"&gt;Allora, vediamo come funziona l'algoritmo anzidetto.&lt;/div&gt;&lt;div align="justify"&gt;Fondamentalmente si tratta, definito il pronostico, di determinare in modo diretto qual'è la i-esima colonna dello sviluppo integrale.&lt;/div&gt;&lt;div align="justify"&gt;Come Fare?&lt;/div&gt;&lt;div align="justify"&gt;L'idea è quella di sfruttare la matematica relativa ai cambiamenti di base: la stessa che si utilizza quando si vuole passare dal sistema di numerazione decimale a quello binario, ottale, esadecimale o qualsiasi altro.&lt;/div&gt;&lt;div align="justify"&gt;Perchè ciò?&lt;/div&gt;&lt;div align="justify"&gt;Per spiegarlo consideriamo un semplice sistema di 3 doppie:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1x&lt;br /&gt;1x&lt;br /&gt;1x&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Lo sviluppo di tale sistema è il seguente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;1111xxxx&lt;br /&gt;11xx11xx&lt;br /&gt;1x1x1x1x&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Cosa accadrebbe se trasformassimo gli 1 in 0 e le x in 1?&lt;br /&gt;Lo sviluppo assumerebbe la seguente forma:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;00001111&lt;br /&gt;00110011&lt;br /&gt;01010101&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div align="justify"&gt;Leggendo in verticale le colonne, come numeri binari, ci accorgeremmo che, nel sistema decimale, esse coincidono con i numeri:&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;01234567&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Quindi, per determinare la i-esima colonna del sistema ci basta trasformare il numero decimale i-1 in binario e modificare gli zeri in uno e gli uno in x.&lt;/div&gt;&lt;div align="justify"&gt;Quanto detto ci fa comprendere meglio il legame dello sviluppo del sistema (di sole doppie) con l'aritmetica binaria.&lt;/div&gt;&lt;div align="justify"&gt;Quella illustrata, però, è la situazione più semplice in cui il pronostico è omogeneo e costituito da tutte doppie.&lt;/div&gt;&lt;div align="justify"&gt;Ma cosa accadrebbe nel caso in cui il pronostico non fosse più costituito da sole doppie? Questa è sicuramente una complicazione in quanto desideriamo passare ad un sistema di numerazione che non è più a base omogenea ma bensì a base variabile.&lt;/div&gt;&lt;div align="justify"&gt;Tale ostacolo, però, può essere facilmente superato seguendo l'algoritmo che andiamo di seguito a descrivere.&lt;/div&gt;&lt;div align="justify"&gt;Per descrivere meglio tale algoritmo, ci riferiremo ancora una volta ad un esempio concreto.&lt;/div&gt;&lt;div align="justify"&gt;Allo scopo, consideriamo il seguente sistema:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1&lt;br /&gt;1x&lt;br /&gt;1x2&lt;br /&gt;1x&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Lo sviluppo di tale sistema è il seguente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;111111111111&lt;br /&gt;111111xxxxxx&lt;br /&gt;11xx2211xx22&lt;br /&gt;1x1x1x1x1x1x&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;000000000111&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;123456789012&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Il sistema di numerazione in cui dovremmo trasformare i numeri (da 0 a 11) avrà la seguente base:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1232&lt;br /&gt;&lt;/span&gt;(ogni posizione equivale alla lungezza del pronostico per quella posizione)&lt;br /&gt;&lt;br /&gt;Supponiamo di voler individuare la sesta colonna (la numero 5 numerandole da 0 a 11) in tale sistema di numerazione.&lt;/div&gt;&lt;div align="justify"&gt;Allora Procediamo nel seguente modo:&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Dividiamo il numero della colonna che vogliamo determinare per l'ultimo elemento della base:&lt;/div&gt;&lt;div align="justify"&gt;5:2=2 con resto 1&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Dividiamo il risultato ottenuto per il penultimo elemento della base:&lt;/div&gt;&lt;div align="justify"&gt;2:3=0 con resto 2&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Dividiamo il risultato ottenuto per il secondo elemento della base:&lt;/div&gt;&lt;div align="justify"&gt;0:2=0 con resto 0&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Dividiamo il risultato ottenuto per il primo elemento della base:&lt;/div&gt;&lt;div align="justify"&gt;0:1=0 con resto 0&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Considerando all'inverso tali resti, otteniamo la colonna:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;0021&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Aggiungendo 1 ad ogni posizione si avrebbe:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1132&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Da cui, sostituendo il rispettivo simbolo del pronostico, si ottiene la colonna:&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;112x&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Quindi abbiamo visto che la funzione effettua la seguente trasformazione:&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;5 -&gt; 0021&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Equivalente a:&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;6 -&gt; 112x&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Denominando Dec2Col tale funzione, in Linguaggio C# essa può essere scritta nel seguente modo:&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;string Dec2Col(int NCol, string Base)&lt;/div&gt;{&lt;br /&gt;int NPartite = Base.Length;&lt;br /&gt;string Col="";&lt;br /&gt;&lt;br /&gt;NCol--;&lt;br /&gt;for (int i=NPartite-1; i&gt;=0; i--)&lt;br /&gt;{&lt;br /&gt;Col = Pronostico[i].Substring(NCol % Convert.ToInt32(Base.Substring(i,1)), 1) + Col;&lt;br /&gt;NCol /= Convert.ToInt32(Base.Substring(i,1));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return Col;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;Quindi, lo sviluppo completo del sistema può essere effettuato eseguendo un ciclo che ad ogni passo richiama la suddetta funzione e ne stampa il risultato, come mostrato dal seguente codice:&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;// Sviluppa il sistema&lt;br /&gt;for (int i=1; i&lt;=NCol; i++)&lt;/div&gt;&lt;div align="justify"&gt;Console.WriteLine(Dec2Col(i, Base));&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;b&gt;Aggiornamento&lt;/b&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Vorrei far osservare che, tra i pregi di tale algoritmo, vi è indubbiamente quello della sua immediata &lt;b&gt;parallelizzazione&lt;/b&gt;.&lt;/div&gt;&lt;div align="justify"&gt;Inoltre, per dar seguito al commento di Claudio, riporto di seguito il codice d'esempio completo, rilasciato sotto &lt;b&gt;Licenza&lt;/b&gt; &lt;b&gt;GPL 3&lt;/b&gt;, che ho scritto in &lt;b&gt;Visual Basic .NET&lt;/b&gt;:&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;div align="justify"&gt;Module Program&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Dim Pronostico(13) As String&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Sub Main()&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Dim NCol As Long&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Dim Base As String&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Pronostico = new String(){"1", "1", "1x", "x", "1", "1", "1x2", "x", "1x2", "1", "x", "1", "1x", "1x2"} &lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;NCol = 1 : Base = ""&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;For i=0 To Pronostico.Length - 1&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;NCol *= Pronostico(i).Length&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Base += Pronostico(i).Length.ToString&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Next&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Console.WriteLine("Colonne da sviluppare: " + NCol.ToString)&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;For i=1 To NCol&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Console.WriteLine(Dec2Col(i, Base))&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Next&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Console.Write("Premi un tasto per continuare . . . ")&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Console.ReadKey(True)&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;End Sub&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Function Dec2Col(NCol As Long, Base As String) as String&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Dim NPartite As Integer = Base.Length&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Dim Col As String = ""&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;NCol -= 1&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;For i = NPartite - 1 To 0 Step -1&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Col = Mid(Pronostico(i), (NCol Mod Integer.Parse(Mid(Base, i + 1, 1))) + 1, 1) + Col&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;NCol = Int(NCol / (Integer.Parse(Mid(Base, i + 1, 1), 1)))&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Next&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Return Col&lt;/div&gt;&lt;div align="justify"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;End Function&lt;/div&gt;&lt;div align="justify"&gt;End Module&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nonché, quello scritto in &lt;b&gt;C#:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;using System;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;namespace TotoC&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;class Program&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;static String[] Pronostico;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;public static void Main(string[] args) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;int NCol;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;String Base = "";&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Pronostico = new String[] {"1", "1", "1x", "x", "1", "1", "1x2", "x", "1x2", "1", "x", "1", "1x", "1x2"};&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;NCol = 1;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;for (int i=0; i&lt;pronostico.length;&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;NCol *= Pronostico[i].Length;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;Base += Pronostico[i].Length;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Console.WriteLine("Colonne da sviluppare: " + NCol);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// Sviluppa il sistema&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;for (int i=1; i&lt;=NCol; i++)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Console.WriteLine(Dec2Col(i, Base));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Console.Write("Premi un tasto per continuare . . . ");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Console.ReadKey(true);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;public static String Dec2Col(int NCol, String Base) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;int NPartite = Base.Length;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;String Col = "";&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;NCol--;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;for (int i=NPartite-1; i&gt;=0; i--)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;Col = Pronostico[i].Substring(NCol % Convert.ToInt32(Base.Substring(i,1)), 1) + Col;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;NCol /= Convert.ToInt32(Base.Substring(i,1));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;return Col;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/pronostico.length;&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;E quello in &lt;b&gt;Java&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;public class Toto {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;static String[] Pronostico;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;public static void main(String[] args) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;int NCol;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;String Base = "";&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Pronostico = new String[] {"1", "1", "1x", "x", "1", "1", "1x2", "x", "1x2", "1", "x", "1", "1x", "1x2"};&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;NCol = 1;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;for (int i=0; i&lt;pronostico.length;&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;NCol *= Pronostico[i].length();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Base += Pronostico[i].length();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;System.out.println("Colonne da sviluppare: " + NCol);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;// Sviluppa il sistema&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;for (int i=1; i&lt;=NCol; i++)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;System.out.println(Dec2Col(i, Base));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;System.out.println("Premi un tasto per continuare . . . ");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;public static String Dec2Col(int NCol, String Base) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;int NPartite = Base.length();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;String Col = "";&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;NCol--;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;for (int i=NPartite-1; i&gt;=0; i--)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;Col = Pronostico[i].substring(NCol % Integer.parseInt(Base.substring(i,i+1)), (NCol % Integer.parseInt(Base.substring(i,i+1)))+1) + Col;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;NCol /= Integer.parseInt(Base.substring(i,i+1));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return Col;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/pronostico.length;&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27687446-114701445314156843?l=andreapannitti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andreapannitti.blogspot.com/feeds/114701445314156843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27687446&amp;postID=114701445314156843' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27687446/posts/default/114701445314156843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27687446/posts/default/114701445314156843'/><link rel='alternate' type='text/html' href='http://andreapannitti.blogspot.com/2006/05/algoritmo-per-lo-sviluppo-di-sistemi.html' title='Algoritmo per lo sviluppo di sistemi integrali per il Totocalcio'/><author><name>Andrea Pannitti</name><uri>http://www.blogger.com/profile/07451017595393846654</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
