Rezolvă problemele Sudoku cu o aplicație în Javascript de doar 140 bytes
4 Sunt sigur că ați jucat cel puțin o dată Sudoku, aș putea spune unul din jocurile copilăriei. Dacă nu, o căutare pe Google vă pune la dispoziție diverse aplicații care de care mai complexe prin care puteți juca atât singleplayer cât și multiplayer jocul. Bine, noi nu suntem aici să discutăm despre asta ci dorim să vă arătăm o soluție a unui personaj care a reușit să facă un algoritm recursiv de doar 140 de bytes care rezolvă această problemă. Codul sursă este scris în Javascript și este suficient de bine comentat pentru a putea fi înțeles.
Va las cu algoritmul! Mai multe detalii aici. 🙂
function R ( a, // the array representing the sudoko grid // placeholder arguments i, // index of the last empty cell j, // index to check the candidates for the cell 'i' m, // candidate number for the the cell 'i' g // flag whether 'm' is a already used in the same row|col|node as 'i' ){ // phase 1: look for an empty cell for ( i=80; a[i]; // keep going if the cell isn't empty i--||+a // decrease the index and call 'a.toString()' if we went through the whole grid ); // phase 2: check all candidate numbers for the cell 'i' for ( m=10; g=a[i]=--m; // put the candidate in the cell 'i' already and set 'g' to something truthy // at the end of phase 2, the cell 'i' is reset to 0 for "higher" branches of the recursion g&&R(a) // recurse if 'm' isn't already used in the same row|col|node as 'i' ) // phase 3: check if the candidate number is used already for(j in a) // loop through the whole grid again g*= // turn 'g' falsy if a[j^i==j] // we are not on the cell 'i' ^m // and the cell 'j' is set to 'm' || // and we are in the same row|col|node as 'i' i/9^j/9&&i%9^j%9&&i/27^j/27|i%9/3^j%9/3 }
Genial!
Gata, mi-ai dat o idee geniala. Voi incerca sa fac si eu o astfel de aplicatie, doar ca in C++. Bineinteles, ca voi evita alte surse de „inspiratie” (incluzand aici si articolul acesta). 😀
Astept rezultatul. 😀
buna idee. pune-l la treaba pe puturosul asta. 😉