sudoku solver a way

New to FreeBASIC? Post your questions here.
gentilecliente
Posts: 14
Joined: Mar 29, 2006 14:07

sudoku solver a way

Postby gentilecliente » Sep 13, 2007 8:21

i hope this source will be usefull to start Federico.
'------------------------------grafica e input--------------------------------------
60 dim el(81) as uinteger:dim sel(81) as uinteger: dim al(81) as uinteger:dim t as ubyte: dim eb(81, 9) as uinteger : dim ctr as uinteger: dim e(9) as uinteger: dim primo as uinteger:dim salvata as uinteger :
72 dim z(81) as uinteger: dim num as uinteger: dim ctrz as uinteger : dim pip as uinteger:dim k as uinteger:dim rn2(2) as uinteger:dim secondo as uinteger:dim seb(81, 9) as uinteger :
73 dim Q1 (9,9) as uinteger:dim Q2 (9,9) as uinteger:dim Q3 (9,9) as uinteger:dim Q4 (9,9) as uinteger:dim Q5 (9,9) as uinteger:dim Q6 (9,9) as uinteger:dim Q7 (9,9) as uinteger:dim Q8 (9,9) as uinteger:dim Q9 (9,9) as uinteger
80 for i = 1 to 81: el(i) = 0: next i ' pulizia iniziale matrice di 81 valori iniziali
94 open "matempty.dat" for binary as #1
95 for i = 1 to 81: get #1, ,t : al(i) = val(chr(t)) : next i:
97 close #1:
100 screen 12
106 gosub 10000: if esito = 1 then salvata = 0: goto 299 else goto 106: end if
299 for i = 1 to 81: for h = 1 to 9: eb(i,h)=0: seb(i,h)=0: next h: next i: 'pulizia matrici contenenti valori 123056089... e numeri trovati fino a quel punto le posizioni degli 0 sono i possibili valori
300 ctr = 0: for i = 1 to 81: z(i)=0: next i : ' zeri nelle 81 celle di somme di zeri
303 for i = 1 to 9: eb(1, el(i)) = el(i) : next i 'carico 1° numero con possibili valori riga
304 for i = 1 to 73 step 9: eb(1 , el(i)) = el(i) : next i 'sovrappongo o aggiungo alla tabella del 1° numero i possibili altri valori verticali
306 eb(1, el(11)) = el(11) : eb(1, el(12)) =el(12) : eb(1, el(20)) =el(20) : eb(1, el(21))=el(21): 'altri 4 valori del quadro che aiutano
308 for i = 1 to 9: eb(2, el(i)) = el(i) : next i 'carico 2° numero con possibili valori riga
310 for i = 2 to 74 step 9: eb(2, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 2° numero i possibili altri valori verticali
312 eb(2, el(10)) = el(10) : eb(2, el(12)) =el(12) : eb(2, el(19)) =el(19) : eb(2, el(21))=el(21): 'altri 4 valori del quadro che aiutano
314 for i = 1 to 9: eb(3, el(i)) = el(i) : next i 'carico 3° numero con possibili valori riga
316 for i = 3 to 75 step 9: eb(3, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 3° numero i possibili altri valori verticali
318 eb(3, el(10)) = el(10) : eb(3, el(11)) =el(11) : eb(3, el(19)) =el(19) : eb(3, el(20))=el(20): 'altri 4 valori del quadro che aiutano
320 for i = 1 to 9: eb(4, el(i)) = el(i) : next i 'carico 4° numero con possibili valori riga
322 for i = 4 to 76 step 9: eb(4, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 4° numero i possibili altri valori verticali
324 eb(4, el(14)) = el(14) : eb(4, el(15)) =el(15) : eb(4, el(23)) =el(23) : eb(4, el(24))=el(24): 'altri 4 valori del quadro che aiutano
326 for i = 1 to 9: eb(5, el(i)) = el(i) : next i 'carico 5° numero con possibili valori riga
328 for i = 5 to 77 step 9: eb(5, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 5° numero i possibili altri valori verticali
330 eb(5, el(13)) = el(13) : eb(5, el(15)) =el(15) : eb(5, el(22)) =el(22) : eb(5, el(24))=el(24): 'altri 4 valori del quadro che aiutano
332 for i = 1 to 9: eb(6, el(i)) = el(i) : next i 'carico 6° numero con possibili valori riga
334 for i = 6 to 78 step 9: eb(6, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 6° numero i possibili altri valori verticali
336 eb(6, el(13)) = el(13) : eb(6, el(14)) =el(14) : eb(6, el(22)) =el(22) : eb(6, el(23))=el(23): 'altri 4 valori del quadro che aiutano
338 for i = 1 to 9: eb(7, el(i)) = el(i) : next i 'carico 7° numero con possibili valori riga
340 for i = 7 to 79 step 9: eb(7, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 7° numero i possibili altri valori verticali
342 eb(7, el(17)) = el(17) : eb(7, el(18)) =el(18) : eb(7, el(26)) =el(26) : eb(7, el(27))=el(27): 'altri 4 valori del quadro che aiutano
344 for i = 1 to 9: eb(8, el(i)) = el(i) : next i 'carico 8° numero con possibili valori riga
346 for i = 8 to 80 step 9: eb(8, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 8° numero i possibili altri valori verticali
348 eb(8, el(16)) = el(16) : eb(8, el(18)) =el(18) : eb(8, el(25)) =el(25) : eb(8, el(27))=el(27): 'altri 4 valori del quadro che aiutano
350 for i = 1 to 9: eb(9, el(i)) = el(i) : next i 'carico 9° numero con possibili valori riga
352 for i = 9 to 81 step 9: eb(9, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 9° numero i possibili altri valori verticali
354 eb(9, el(16)) = el(16) : eb(9, el(17)) =el(17) : eb(9, el(25)) =el(25) : eb(9, el(26))=el(26): 'altri 4 valori del quadro che aiutano
356 for i = 10 to 18: eb(10, el(i)) = el(i) : next i 'carico 10° numero con possibili valori riga
358 for i = 1 to 73 step 9: eb(10, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 10° numero i possibili altri valori verticali
360 eb(10, el(2)) = el(2) : eb(10, el(3)) =el(3) : eb(10, el(20)) =el(20) : eb(10, el(21))=el(21): 'altri 4 valori del quadro che aiutano
362 for i = 10 to 18: eb(11, el(i)) = el(i) : next i 'carico 11° numero con possibili valori riga
364 for i = 2 to 74 step 9: eb(11, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 11° numero i possibili altri valori verticali
366 eb(11, el(1)) = el(1) : eb(11, el(3)) =el(3) : eb(11, el(19)) =el(19) : eb(11, el(21))=el(21): 'altri 4 valori del quadro che aiutano
368 for i = 10 to 18: eb(12, el(i)) = el(i) : next i 'carico 12° numero con possibili valori riga
370 for i = 3 to 75 step 9: eb(12, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 12° numero i possibili altri valori verticali
372 eb(12, el(1)) = el(1) : eb(12, el(2)) =el(2) : eb(12, el(19)) =el(19) : eb(12, el(20))=el(20): 'altri 4 valori del quadro che aiutano
374 for i = 10 to 18: eb(13, el(i)) = el(i) : next i 'carico 13° numero con possibili valori riga
376 for i = 4 to 76 step 9: eb(13, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 13° numero i possibili altri valori verticali
378 eb(13, el(5)) = el(5) : eb(13, el(6)) =el(6) : eb(13, el(23)) =el(23) : eb(13, el(24))=el(24): 'altri 4 valori del quadro che aiutano
380 for i = 10 to 18: eb(14, el(i)) = el(i) : next i 'carico 14° numero con possibili valori riga
382 for i = 5 to 77 step 9: eb(14, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 14° numero i possibili altri valori verticali
384 eb(14, el(4)) = el(4) : eb(14, el(6)) =el(6) : eb(14, el(22)) =el(22) : eb(14, el(24))=el(24): 'altri 4 valori del quadro che aiutano
386 for i = 10 to 18: eb(15, el(i)) = el(i) : next i 'carico 15° numero con possibili valori riga
388 for i = 6 to 78 step 9: eb(15, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 15° numero i possibili altri valori verticali
390 eb(15, el(4)) = el(4) : eb(15, el(5)) =el(5) : eb(15, el(22)) =el(22) : eb(15, el(23))=el(23): 'altri 4 valori del quadro che aiutano
392 for i = 10 to 18: eb(16, el(i)) = el(i) : next i 'carico 16° numero con possibili valori riga
394 for i = 7 to 79 step 9: eb(16, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 16° numero i possibili altri valori verticali
396 eb(16, el(8)) = el(8) : eb(16, el(9)) =el(9) : eb(16, el(26)) =el(26) : eb(16, el(27))=el(27): 'altri 4 valori del quadro che aiutano
398 for i = 10 to 18: eb(17, el(i)) = el(i) : next i 'carico 17° numero con possibili valori riga
400 for i = 8 to 80 step 9: eb(17, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 17° numero i possibili altri valori verticali
402 eb(17, el(7)) = el(7) : eb(17, el(9)) =el(9) : eb(17, el(25)) =el(25) : eb(17, el(27))=el(27): 'altri 4 valori del quadro che aiutano
404 for i = 10 to 18: eb(18, el(i)) = el(i) : next i 'carico 18° numero con possibili valori riga
406 for i = 9 to 81 step 9: eb(18, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 18° numero i possibili altri valori verticali
408 eb(18, el(7)) = el(7) : eb(18, el(8)) =el(8) : eb(18, el(25)) =el(25) : eb(18, el(26))=el(26): 'altri 4 valori del quadro che aiutano
410 for i = 19 to 27: eb(19, el(i)) = el(i) : next i 'carico 19° numero con possibili valori riga
412 for i = 1 to 73 step 9: eb(19, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 19° numero i possibili altri valori verticali
414 eb(19, el(2)) = el(2) : eb(19, el(3)) =el(3) : eb(19, el(11)) =el(11) : eb(19, el(12))=el(12): 'altri 4 valori del quadro che aiutano
416 for i = 19 to 27: eb(20, el(i)) = el(i) : next i 'carico 20° numero con possibili valori riga
418 for i = 2 to 74 step 9: eb(20, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 20° numero i possibili altri valori verticali
420 eb(20, el(1)) = el(1) : eb(20, el(3)) =el(3) : eb(20, el(10)) =el(10) : eb(20, el(12))=el(12): 'altri 4 valori del quadro che aiutano
422 for i = 19 to 27: eb(21, el(i)) = el(i) : next i 'carico 21° numero con possibili valori riga
424 for i = 3 to 75 step 9: eb(21, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 21° numero i possibili altri valori verticali
426 eb(21, el(1)) = el(1) : eb(21, el(2)) =el(2) : eb(21, el(10)) =el(10) : eb(21, el(11))=el(11): 'altri 4 valori del quadro che aiutano
428 for i = 19 to 27: eb(22, el(i)) = el(i) : next i 'carico 22° numero con possibili valori riga
430 for i = 4 to 76 step 9: eb(22, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 22° numero i possibili altri valori verticali
432 eb(22, el(5)) = el(5) : eb(22, el(6)) =el(6) : eb(22, el(14)) =el(14) : eb(22, el(15))=el(15): 'altri 4 valori del quadro che aiutano
434 for i = 19 to 27: eb(23, el(i)) = el(i) : next i 'carico 23° numero con possibili valori riga
436 for i = 5 to 77 step 9: eb(23, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 23° numero i possibili altri valori verticali
438 eb(23, el(4)) = el(4) : eb(23, el(6)) =el(6) : eb(23, el(13)) =el(13) : eb(23, el(15))=el(15): 'altri 4 valori del quadro che aiutano
440 for i = 19 to 27: eb(24, el(i)) = el(i) : next i 'carico 24° numero con possibili valori riga
442 for i = 6 to 78 step 9: eb(24, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 24° numero i possibili altri valori verticali
446 eb(24, el(4)) = el(4) : eb(24, el(5)) =el(5) : eb(24, el(13)) =el(13) : eb(24, el(14))=el(14): 'altri 4 valori del quadro che aiutano
448 for i = 19 to 27: eb(25, el(i)) = el(i) : next i 'carico 25° numero con possibili valori riga
450 for i = 7 to 79 step 9: eb(25, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 25° numero i possibili altri valori verticali
452 eb(25, el(8)) = el(8) : eb(25, el(9)) =el(9) : eb(25, el(17)) =el(17) : eb(25, el(18))=el(18): 'altri 4 valori del quadro che aiutano

454 for i = 19 to 27: eb(26, el(i)) = el(i) : next i 'carico 26° numero con possibili valori riga
456 for i = 8 to 80 step 9: eb(26, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 26° numero i possibili altri valori verticali
458 eb(26, el(7)) = el(7) : eb(26, el(9)) =el(9) : eb(26, el(16)) =el(16) : eb(26, el(18))=el(18): 'altri 4 valori del quadro che aiutano

460 for i = 19 to 27: eb(27, el(i)) = el(i) : next i 'carico 27° numero con possibili valori riga
462 for i = 9 to 81 step 9: eb(27, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 27° numero i possibili altri valori verticali
464 eb(27, el(7)) = el(7) : eb(27, el(8)) =el(8) : eb(27, el(16)) =el(16) : eb(27, el(17))=el(17): 'altri 4 valori del quadro che aiutano
466 for i = 28 to 36: eb(28, el(i)) = el(i) : next i 'carico 28° numero con possibili valori riga
468 for i = 1 to 73 step 9: eb(28, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 28° numero i possibili altri valori verticali
470 eb(28, el(38)) = el(38) : eb(28, el(39)) =el(39) : eb(28, el(47)) =el(47) : eb(28, el(48))=el(48): 'altri 4 valori del quadro che aiutano
472 for i = 28 to 36: eb(29, el(i)) = el(i) : next i 'carico 29° numero con possibili valori riga
474 for i = 2 to 74 step 9: eb(29, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 29° numero i possibili altri valori verticali
476 eb(29, el(37)) = el(37) : eb(29, el(39)) =el(39) : eb(29, el(46)) =el(46) : eb(29, el(48))=el(48): 'altri 4 valori del quadro che aiutano
478 for i = 28 to 36: eb(30, el(i)) = el(i) : next i 'carico 30° numero con possibili valori riga
480 for i = 3 to 75 step 9: eb(30, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 30° numero i possibili altri valori verticali
482 eb(30, el(37)) = el(37) : eb(30, el(38)) =el(38) : eb(30, el(46)) =el(46) : eb(30, el(47))=el(47): 'altri 4 valori del quadro che aiutano
484 for i = 28 to 36: eb(31, el(i)) = el(i) : next i 'carico 31° numero con possibili valori riga
486 for i = 4 to 76 step 9: eb(31, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 31° numero i possibili altri valori verticali
488 eb(31, el(41)) = el(41) : eb(31, el(42)) =el(42) : eb(31, el(50)) =el(50) : eb(31, el(51))=el(51): 'altri 4 valori del quadro che aiutano
490 for i = 28 to 36: eb(32, el(i)) = el(i) : next i 'carico 32° numero con possibili valori riga
492 for i = 5 to 77 step 9: eb(32, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 32° numero i possibili altri valori verticali
494 eb(32, el(40)) = el(40) : eb(32, el(42)) =el(42) : eb(32, el(49)) =el(49) : eb(32, el(51))=el(51): 'altri 4 valori del quadro che aiutano
496 for i = 28 to 36: eb(33, el(i)) = el(i) : next i 'carico 33° numero con possibili valori riga
498 for i = 6 to 78 step 9: eb(33, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 33° numero i possibili altri valori verticali
500 eb(33, el(40)) = el(40) : eb(33, el(41)) =el(41) : eb(33, el(49)) =el(49) : eb(33, el(50))=el(50): 'altri 4 valori del quadro che aiutano
502 for i = 28 to 36: eb(34, el(i)) = el(i) : next i 'carico 34° numero con possibili valori riga
504 for i = 7 to 79 step 9: eb(34, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 34° numero i possibili altri valori verticali
506 eb(34, el(44)) = el(44) : eb(34, el(45)) =el(45) : eb(34, el(53)) =el(53) : eb(34, el(54))=el(54): 'altri 4 valori del quadro che aiutano
508 for i = 28 to 36: eb(35, el(i)) = el(i) : next i 'carico 35° numero con possibili valori riga
510 for i = 8 to 80 step 9: eb(35, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 35° numero i possibili altri valori verticali
512 eb(35, el(43)) = el(43) : eb(35, el(45)) =el(45) : eb(35, el(52)) =el(52) : eb(35, el(54))=el(54): 'altri 4 valori del quadro che aiutano
514 for i = 28 to 36: eb(36, el(i)) = el(i) : next i 'carico 36° numero con possibili valori riga
516 for i = 9 to 81 step 9: eb(36, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 36° numero i possibili altri valori verticali
518 eb(36, el(43)) = el(43) : eb(36, el(44)) =el(44) : eb(36, el(52)) =el(52) : eb(36, el(53))=el(53): 'altri 4 valori del quadro che aiutano
566 for i = 37 to 45: eb(37, el(i)) = el(i) : next i 'carico 37° numero con possibili valori riga
568 for i = 1 to 73 step 9: eb(37, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 37° numero i possibili altri valori verticali
570 eb(37, el(29)) = el(29) : eb(37, el(30)) =el(30) : eb(37, el(47)) =el(47) : eb(37, el(48))=el(48): 'altri 4 valori del quadro che aiutano
572 for i = 37 to 45: eb(38, el(i)) = el(i) : next i 'carico 38° numero con possibili valori riga
574 for i = 2 to 74 step 9: eb(38, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 38° numero i possibili altri valori verticali
576 eb(38, el(28)) = el(28) : eb(38, el(30)) =el(30) : eb(38, el(46)) =el(46) : eb(38, el(48))=el(48): 'altri 4 valori del quadro che aiutano
578 for i = 37 to 45: eb(39, el(i)) = el(i) : next i 'carico 39° numero con possibili valori riga
580 for i = 3 to 75 step 9: eb(39, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 39° numero i possibili altri valori verticali
582 eb(39, el(28)) = el(28) : eb(39, el(29)) =el(29) : eb(39, el(46)) =el(46) : eb(39, el(47))=el(47): 'altri 4 valori del quadro che aiutano
584 for i = 37 to 45: eb(40, el(i)) = el(i) : next i 'carico 40° numero con possibili valori riga
586 for i = 4 to 76 step 9: eb(40, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 40° numero i possibili altri valori verticali
588 eb(40, el(32)) = el(32) : eb(40, el(33)) =el(33) : eb(40, el(50)) =el(50) : eb(40, el(51))=el(51): 'altri 4 valori del quadro che aiutano
590 for i = 37 to 45: eb(41, el(i)) = el(i) : next i 'carico 41° numero con possibili valori riga
592 for i = 5 to 77 step 9: eb(41, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 41° numero i possibili altri valori verticali
594 eb(41, el(31)) = el(31) : eb(41, el(33)) =el(33) : eb(41, el(49)) =el(49) : eb(41, el(51))=el(51): 'altri 4 valori del quadro che aiutano
596 for i = 37 to 45: eb(42, el(i)) = el(i) : next i 'carico 42° numero con possibili valori riga
598 for i = 6 to 78 step 9: eb(42, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 42° numero i possibili altri valori verticali
600 eb(42, el(31)) = el(31) : eb(42, el(32)) =el(32) : eb(42, el(49)) =el(49) : eb(42, el(50))=el(50): 'altri 4 valori del quadro che aiutano
602 for i = 37 to 45: eb(43, el(i)) = el(i) : next i 'carico 43° numero con possibili valori riga
604 for i = 7 to 79 step 9: eb(43, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 43° numero i possibili altri valori verticali
606 eb(43, el(35)) = el(35) : eb(43, el(36)) =el(36) : eb(43, el(53)) =el(53) : eb(43, el(54))=el(54): 'altri 4 valori del quadro che aiutano
608 for i = 37 to 45: eb(44, el(i)) = el(i) : next i 'carico 44° numero con possibili valori riga
610 for i = 8 to 80 step 9: eb(44, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 44° numero i possibili altri valori verticali
612 eb(44, el(34)) = el(34) : eb(44, el(36)) =el(36) : eb(44, el(52)) =el(52) : eb(44, el(54))=el(54): 'altri 4 valori del quadro che aiutano
614 for i = 37 to 45: eb(45, el(i)) = el(i) : next i 'carico 45° numero con possibili valori riga
616 for i = 9 to 81 step 9: eb(45, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 45° numero i possibili altri valori verticali
618 eb(45, el(34)) = el(34) : eb(45, el(35)) =el(35) : eb(45, el(52)) =el(52) : eb(45, el(53))=el(53): 'altri 4 valori del quadro che aiutano
766 for i = 46 to 54: eb(46, el(i)) = el(i) : next i 'carico 46° numero con possibili valori riga
768 for i = 1 to 73 step 9: eb(46, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 46° numero i possibili altri valori verticali
770 eb(46, el(29)) = el(29) : eb(46, el(30)) =el(30) : eb(46, el(38)) =el(38) : eb(46, el(39))=el(39): 'altri 4 valori del quadro che aiutano
772 for i = 46 to 54: eb(47, el(i)) = el(i) : next i 'carico 47° numero con possibili valori riga
774 for i = 2 to 74 step 9: eb(47, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 47° numero i possibili altri valori verticali
776 eb(47, el(28)) = el(28) : eb(47, el(30)) =el(30) : eb(47, el(37)) =el(37) : eb(47, el(39))=el(39): 'altri 4 valori del quadro che aiutano
778 for i = 46 to 54: eb(48, el(i)) = el(i) : next i 'carico 48° numero con possibili valori riga
780 for i = 3 to 75 step 9: eb(48, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 48° numero i possibili altri valori verticali
782 eb(48, el(28)) = el(28) : eb(48, el(29)) =el(29) : eb(48, el(37)) =el(37) : eb(48, el(38))=el(38): 'altri 4 valori del quadro che aiutano
784 for i = 46 to 54: eb(49, el(i)) = el(i) : next i 'carico 49° numero con possibili valori riga
786 for i = 4 to 76 step 9: eb(49, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 49° numero i possibili altri valori verticali
788 eb(49, el(32)) = el(32) : eb(49, el(33)) =el(33) : eb(49, el(41)) =el(41) : eb(49, el(42))=el(42): 'altri 4 valori del quadro che aiutano
790 for i = 46 to 54: eb(50, el(i)) = el(i) : next i 'carico 50° numero con possibili valori riga
792 for i = 5 to 77 step 9: eb(50, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 50° numero i possibili altri valori verticali
794 eb(50, el(31)) = el(31) : eb(50, el(33)) =el(33) : eb(50, el(40)) =el(40) : eb(50, el(42))=el(42): 'altri 4 valori del quadro che aiutano
796 for i = 46 to 54: eb(51, el(i)) = el(i) : next i 'carico 51° numero con possibili valori riga
798 for i = 6 to 78 step 9: eb(51, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 51° numero i possibili altri valori verticali
800 eb(51, el(31)) = el(31) : eb(51, el(32)) =el(32) : eb(51, el(40)) =el(40) : eb(51, el(41))=el(41): 'altri 4 valori del quadro che aiutano
802 for i = 46 to 54: eb(52, el(i)) = el(i) : next i 'carico 52° numero con possibili valori riga
804 for i = 7 to 79 step 9: eb(52, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 52° numero i possibili altri valori verticali
806 eb(52, el(35)) = el(35) : eb(52, el(36)) =el(36) : eb(52, el(44)) =el(44) : eb(52, el(45))=el(45): 'altri 4 valori del quadro che aiutano
808 for i = 46 to 54: eb(53, el(i)) = el(i) : next i 'carico 53° numero con possibili valori riga
810 for i = 8 to 80 step 9: eb(53, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 53° numero i possibili altri valori verticali
812 eb(53, el(34)) = el(34) : eb(53, el(36)) =el(36) : eb(53, el(43)) =el(43) : eb(53, el(45))=el(45): 'altri 4 valori del quadro che aiutano
814 for i = 46 to 54: eb(54, el(i)) = el(i) : next i 'carico 54° numero con possibili valori riga
816 for i = 9 to 81 step 9: eb(54, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 54° numero i possibili altri valori verticali
818 eb(54, el(34)) = el(34) : eb(54, el(35)) =el(35) : eb(54, el(43)) =el(43) : eb(54, el(44))=el(44): 'altri 4 valori del quadro che aiutano
866 for i = 55 to 63: eb(55, el(i)) = el(i) : next i 'carico 55° numero con possibili valori riga
868 for i = 1 to 73 step 9: eb(55, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 55° numero i possibili altri valori verticali
870 eb(55, el(65)) = el(65) : eb(55, el(66)) =el(66) : eb(55, el(74)) =el(74) : eb(55, el(75))=el(75): 'altri 4 valori del quadro che aiutano
872 for i = 55 to 63: eb(56, el(i)) = el(i) : next i 'carico 56° numero con possibili valori riga
874 for i = 2 to 74 step 9: eb(56, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 56° numero i possibili altri valori verticali
876 eb(56, el(64)) = el(64) : eb(56, el(66)) =el(66) : eb(56, el(73)) =el(73) : eb(56, el(75))=el(75): 'altri 4 valori del quadro che aiutano
878 for i = 55 to 63: eb(57, el(i)) = el(i) : next i 'carico 57° numero con possibili valori riga
880 for i = 3 to 75 step 9: eb(57, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 57° numero i possibili altri valori verticali
882 eb(57, el(64)) = el(64) : eb(57, el(65)) =el(65) : eb(57, el(73)) =el(73) : eb(57, el(74))=el(74): 'altri 4 valori del quadro che aiutano
884 for i = 55 to 63: eb(58, el(i)) = el(i) : next i 'carico 58° numero con possibili valori riga
886 for i = 4 to 76 step 9: eb(58, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 58° numero i possibili altri valori verticali
888 eb(58, el(68)) = el(68) : eb(58, el(69)) =el(69) : eb(58, el(77)) =el(77) : eb(58, el(78))=el(78): 'altri 4 valori del quadro che aiutano
890 for i = 55 to 63: eb(59, el(i)) = el(i) : next i 'carico 59° numero con possibili valori riga
892 for i = 5 to 77 step 9: eb(59, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 59° numero i possibili altri valori verticali
894 eb(59, el(67)) = el(67) : eb(59, el(69)) =el(69) : eb(59, el(76)) =el(76) : eb(59, el(78))=el(78): 'altri 4 valori del quadro che aiutano
896 for i = 55 to 63: eb(60, el(i)) = el(i) : next i 'carico 60° numero con possibili valori riga
898 for i = 6 to 78 step 9: eb(60, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 60° numero i possibili altri valori verticali
900 eb(60, el(67)) = el(67) : eb(60, el(68)) =el(68) : eb(60, el(76)) =el(76) : eb(60, el(77))=el(77): 'altri 4 valori del quadro che aiutano
902 for i = 55 to 63: eb(61, el(i)) = el(i) : next i 'carico 61° numero con possibili valori riga
904 for i = 7 to 79 step 9: eb(61, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 61° numero i possibili altri valori verticali
906 eb(61, el(71)) = el(71) : eb(61, el(72)) =el(72) : eb(61, el(80)) =el(80) : eb(61, el(81))=el(81): 'altri 4 valori del quadro che aiutano
908 for i = 55 to 63: eb(62, el(i)) = el(i) : next i 'carico 62° numero con possibili valori riga
910 for i = 8 to 80 step 9: eb(62, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 62° numero i possibili altri valori verticali
912 eb(62, el(70)) = el(70) : eb(62, el(72)) =el(72) : eb(62, el(79)) =el(79) : eb(62, el(81))=el(81): 'altri 4 valori del quadro che aiutano
914 for i = 55 to 63: eb(63, el(i)) = el(i) : next i 'carico 63° numero con possibili valori riga
916 for i = 9 to 81 step 9: eb(63, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 63° numero i possibili altri valori verticali
918 eb(63, el(70)) = el(70) : eb(63, el(71)) =el(71) : eb(63, el(79)) =el(79) : eb(63, el(80))=el(80): 'altri 4 valori del quadro che aiutano
1866 for i = 64 to 72: eb(64, el(i)) = el(i) : next i 'carico 64° numero con possibili valori riga
1868 for i = 1 to 73 step 9: eb(64, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 64° numero i possibili altri valori verticali
1870 eb(64, el(56)) = el(56) : eb(64, el(57)) =el(57) : eb(64, el(74)) =el(74) : eb(64, el(75))=el(75): 'altri 4 valori del quadro che aiutano
1872 for i = 64 to 72: eb(65, el(i)) = el(i) : next i 'carico 65° numero con possibili valori riga
1874 for i = 2 to 74 step 9: eb(65, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 65° numero i possibili altri valori verticali
1876 eb(65, el(55)) = el(55) : eb(65, el(57)) =el(57) : eb(65, el(73)) =el(73) : eb(65, el(75))=el(75): 'altri 4 valori del quadro che aiutano
1878 for i = 64 to 72: eb(66, el(i)) = el(i) : next i 'carico 66° numero con possibili valori riga
1880 for i = 3 to 75 step 9: eb(66, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 66° numero i possibili altri valori verticali
1882 eb(66, el(55)) = el(55) : eb(66, el(56)) =el(56) : eb(66, el(73)) =el(73) : eb(66, el(74))=el(74): 'altri 4 valori del quadro che aiutano
1884 for i = 64 to 72: eb(67, el(i)) = el(i) : next i 'carico 67° numero con possibili valori riga
1886 for i = 4 to 76 step 9: eb(67, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 67° numero i possibili altri valori verticali
1888 eb(67, el(59)) = el(59) : eb(67, el(60)) =el(60) : eb(67, el(77)) =el(77) : eb(67, el(78))=el(78): 'altri 4 valori del quadro che aiutano
1890 for i = 64 to 72: eb(68, el(i)) = el(i) : next i 'carico 68° numero con possibili valori riga
1892 for i = 5 to 77 step 9: eb(68, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 68° numero i possibili altri valori verticali
1894 eb(68, el(58)) = el(58) : eb(68, el(60)) =el(60) : eb(68, el(76)) =el(76) : eb(68, el(78))=el(78): 'altri 4 valori del quadro che aiutano
1896 for i = 64 to 72: eb(69, el(i)) = el(i) : next i 'carico 69° numero con possibili valori riga
1898 for i = 6 to 78 step 9: eb(69, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 69° numero i possibili altri valori verticali
1900 eb(69, el(58)) = el(58) : eb(69, el(59)) =el(59) : eb(69, el(76)) =el(76) : eb(69, el(77))=el(77): 'altri 4 valori del quadro che aiutano
1902 for i = 64 to 72: eb(70, el(i)) = el(i) : next i 'carico 70° numero con possibili valori riga
1904 for i = 7 to 79 step 9: eb(70, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 70° numero i possibili altri valori verticali
1906 eb(70, el(62)) = el(62) : eb(70, el(63)) =el(63) : eb(70, el(80)) =el(80) : eb(70, el(81))=el(81): 'altri 4 valori del quadro che aiutano
1908 for i = 64 to 72: eb(71, el(i)) = el(i) : next i 'carico 71° numero con possibili valori riga
1910 for i = 8 to 80 step 9: eb(71, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 71° numero i possibili altri valori verticali
1912 eb(71, el(61)) = el(61) : eb(71, el(63)) =el(63) : eb(71, el(79)) =el(79) : eb(71, el(81))=el(81): 'altri 4 valori del quadro che aiutano
1914 for i = 64 to 72: eb(72, el(i)) = el(i) : next i 'carico 72° numero con possibili valori riga
1916 for i = 9 to 81 step 9: eb(72, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 72° numero i possibili altri valori verticali
1918 eb(72, el(61)) = el(61) : eb(72, el(62)) =el(62) : eb(72, el(79)) =el(79) : eb(72, el(80))=el(80): 'altri 4 valori del quadro che aiutano
2866 for i = 73 to 81: eb(73, el(i)) = el(i) : next i 'carico 73° numero con possibili valori riga
2868 for i = 1 to 73 step 9: eb(73, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 73° numero i possibili altri valori verticali
2870 eb(73, el(56)) = el(56) : eb(73, el(57)) =el(57) : eb(73, el(65)) =el(65) : eb(73, el(66))=el(66): 'altri 4 valori del quadro che aiutano
2872 for i = 73 to 81: eb(74, el(i)) = el(i) : next i 'carico 74° numero con possibili valori riga
2874 for i = 2 to 74 step 9: eb(74, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 74° numero i possibili altri valori verticali
2876 eb(74, el(55)) = el(55) : eb(74, el(57)) =el(57) : eb(74, el(64)) =el(64) : eb(74, el(66))=el(66): 'altri 4 valori del quadro che aiutano
2878 for i = 73 to 81: eb(75, el(i)) = el(i) : next i 'carico 75° numero con possibili valori riga
2880 for i = 3 to 75 step 9: eb(75, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 75° numero i possibili altri valori verticali
2882 eb(75, el(55)) = el(55) : eb(75, el(56)) =el(56) : eb(75, el(64)) =el(64) : eb(75, el(65))=el(65): 'altri 4 valori del quadro che aiutano
2884 for i = 73 to 81: eb(76, el(i)) = el(i) : next i 'carico 76° numero con possibili valori riga
2886 for i = 4 to 76 step 9: eb(76, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 76° numero i possibili altri valori verticali
2888 eb(76, el(59)) = el(59) : eb(76, el(60)) =el(60) : eb(76, el(68)) =el(68) : eb(76, el(69))=el(69): 'altri 4 valori del quadro che aiutano
2890 for i = 73 to 81: eb(77, el(i)) = el(i) : next i 'carico 77° numero con possibili valori riga
2892 for i = 5 to 77 step 9: eb(77, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 77° numero i possibili altri valori verticali
2894 eb(77, el(58)) = el(58) : eb(77, el(60)) =el(60) : eb(77, el(67)) =el(67) : eb(77, el(69))=el(69): 'altri 4 valori del quadro che aiutano
2896 for i = 73 to 81: eb(78, el(i)) = el(i) : next i 'carico 78° numero con possibili valori riga
2898 for i = 6 to 78 step 9: eb(78, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 78° numero i possibili altri valori verticali
2900 eb(78, el(58)) = el(58) : eb(78, el(59)) =el(59) : eb(78, el(67)) =el(67) : eb(78, el(68))=el(68): 'altri 4 valori del quadro che aiutano
2902 for i = 73 to 81: eb(79, el(i)) = el(i) : next i 'carico 79° numero con possibili valori riga
2904 for i = 7 to 79 step 9: eb(79, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 79° numero i possibili altri valori verticali
2906 eb(79, el(62)) = el(62) : eb(79, el(63)) =el(63) : eb(79, el(71)) =el(71) : eb(79, el(72))=el(72): 'altri 4 valori del quadro che aiutano
2908 for i = 73 to 81: eb(80, el(i)) = el(i) : next i 'carico 80° numero con possibili valori riga
2910 for i = 8 to 80 step 9: eb(80, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 80° numero i possibili altri valori verticali
2912 eb(80, el(61)) = el(61) : eb(80, el(63)) =el(63) : eb(80, el(70)) =el(70) : eb(80, el(72))=el(72): 'altri 4 valori del quadro che aiutano
2914 for i = 73 to 81: eb(81, el(i)) = el(i) : next i 'carico 81° numero con possibili valori riga
2916 for i = 9 to 81 step 9: eb(81, el(i)) = el(i): next i 'sovrappongo o aggiungo alla tabella del 81° numero i possibili altri valori verticali
2918 eb(81, el(61)) = el(61) : eb(81, el(62)) =el(62) : eb(81, el(70)) =el(70) : eb(81, el(71))=el(71): 'altri 4 valori del quadro che aiutano
3000 'questa riga indica inizio operazioni controllo
3010 gosub 80000:'conta gli zeri nelle 81 celle e con z(i) = 0 allora elemento trovato gia'
7470 for i = 1 to 81:if el(i) > 0 then eb(i, 1) = 1: eb(i, 2) = 2: eb(i, 3) = 3 : eb(i, 4) = 4 : eb(i, 5) = 5 : eb(i, 6) = 6 : eb(i, 7) = 7 : eb(i, 8) = 8 : eb(i, 9) = 9 : ctr = ctr + 1 : end if : next i :' carico da 1 a 9 negli el(da 1 a 81) il cui valore e' stato trovato
3475 for i = 1 to 81: for h = 1 to 9: if eb(i, h) = 0 and z(i) = 1 and el(i) = 0 then el(i) = h : eb(i, 1) = 1:eb(i, 2) = 2:eb(i, 3) = 3:eb(i, 4) = 4:eb(i, 5) = 5:eb(i, 6) = 6 : eb(i, 7) = 7 : eb(i, 8) = 8: eb(i, 9) = 9 : h = 9 : i = 81 :end if: next h: next i :'inserisce quelli certi cioe' con 1 solo valore possibile
7500 if ctrold = ctr then goto 7502 :end if : goto 7550: 'rintraccia presenza singolarita' orizzontale e poi verticale
7502 'inserimento funzione : ricerca unico elemento possibile di riga
7504 gosub 40000:For i = 1 To 9: gosub 50000: Next i: For i = 1 To 9:gosub 40000: gosub 70000: Next i :
7506 gosub 40000:for i = 10 to 18:gosub 50000: next i: for i = 10 to 18:gosub 40000:gosub 70000: next i :
7508 gosub 40000:for i = 19 to 27:gosub 50000: next i: for i = 19 to 27:gosub 40000:gosub 70000: next i :
7510 gosub 40000:for i = 28 to 36:gosub 50000: next i: for i = 28 to 36:gosub 40000:gosub 70000: next i :
7512 gosub 40000:for i = 37 to 45:gosub 50000: next i: for i = 37 to 45:gosub 40000:gosub 70000: next i :
7514 gosub 40000:for i = 46 to 54:gosub 50000: next i: for i = 46 to 54:gosub 40000:gosub 70000: next i :
7516 gosub 40000:for i = 55 to 63:gosub 50000: next i: for i = 55 to 63:gosub 40000:gosub 70000: next i :
7518 gosub 40000:for i = 64 to 72:gosub 50000: next i: for i = 64 to 72:gosub 40000:gosub 70000: next i :
7520 gosub 40000:for i = 73 to 81:gosub 50000: next i: for i = 73 to 81:gosub 40000:gosub 70000: next i :
7530 ' e ricerca unico elemento di colonna
7532 gosub 40000:For i = 1 To 73 Step 9: gosub 50000: Next i:For i = 1 To 73 Step 9: gosub 70000: Next i :
7534 gosub 40000:for i = 2 to 74 step 9: gosub 50000: next i:for i = 2 to 74 step 9: gosub 70000: next i :
7536 gosub 40000:for i = 3 to 75 step 9: gosub 50000: next i:for i = 3 to 75 step 9: gosub 70000: next i :
7538 gosub 40000:for i = 4 to 76 step 9: gosub 50000: next i:for i = 4 to 76 step 9: gosub 70000: next i :
7540 gosub 40000:for i = 5 to 77 step 9: gosub 50000: next i:for i = 5 to 77 step 9: gosub 70000: next i :
7542 gosub 40000:for i = 6 to 78 step 9: gosub 50000: next i:for i = 6 to 78 step 9: gosub 70000: next i :
7544 gosub 40000:for i = 7 to 79 step 9: gosub 50000: next i:for i = 7 to 79 step 9: gosub 70000: next i :
7546 gosub 40000:for i = 8 to 80 step 9: gosub 50000: next i:for i = 8 to 80 step 9: gosub 70000: next i :
7548 gosub 40000:for i = 9 to 81 step 9: gosub 50000: next i:for i = 9 to 81 step 9: gosub 70000: next i :
7550 if ctrold = ctr then goto 7555:end if:goto 8500:
7555'-------------------------------------------------------
7600 gosub 80000:gosub 100000:'controllo quadri----------------------------
8010 gosub 40000:gosub 55001: For i = 1 To 3:gosub 170000: Next i : '1
8020 for i = 10 to 12:gosub 170000: Next i : '1
8030 for i = 19 to 21:gosub 170000: Next i : '1
8040 gosub 40000:gosub 55002: For i = 4 To 6: gosub 170000: Next i : '2
8050 for i = 13 to 15:gosub 170000: Next i : '2
8060 for i = 22 to 24:gosub 170000: Next i : '2
8070 gosub 40000:gosub 55003: for i = 7 to 9: gosub 170000: Next i : '3
8080 for i = 16 to 18:gosub 170000: Next i : '3
8090 for i = 25 to 27:gosub 170000: Next i : '3
8100 gosub 40000:gosub 55004: for i = 28 to 30:gosub 170000: Next i : '4
8110 for i = 37 to 39:gosub 170000: Next i : '4
8120 for i = 46 to 48:gosub 170000: Next i : '4
8130 gosub 40000:gosub 55005: for i = 31 to 33:gosub 170000: Next i : '5
8140 for i = 40 to 42:gosub 170000: Next i : '5
8150 for i = 49 to 51:gosub 170000: Next i : '5
8160 gosub 40000:gosub 55006: for i = 34 to 36:gosub 170000: Next i : '6
8170 for i = 43 to 45:gosub 170000: Next i : '6
8180 for i = 52 to 54:gosub 170000: Next i : '6
8190 gosub 40000:gosub 55007: for i = 55 to 57:gosub 170000: Next i : '7
8200 for i = 64 to 66:gosub 170000: Next i : '7
8210 for i = 73 to 75:gosub 170000: Next i : '7
8230 gosub 40000:gosub 55008: for i = 58 to 60:gosub 170000: Next i : '8
8240 for i = 67 to 69:gosub 170000: Next i : '8
8250 for i = 76 to 78:gosub 170000: Next i : '8
8260 gosub 40000:gosub 55009: for i = 61 to 63:gosub 170000: Next i : '9
8270 for i = 70 to 72:gosub 170000: Next i : '9
8280 for i = 79 to 81:gosub 170000: Next i : '9
8300 '-----------------------------------------------------------------------------------
8500 if ctrold = ctr then gosub 80000:gosub 400000:gosub 200000: end if: ctrold = ctr:for i = 1 to 81: if el(i) = 0 then goto 299 : end if: next i :
9000 gosub 15000: sleep:gosub 20000: stop(0): 'fine programma.
10000 cls:paint (10, 10), 1, 15
10116 LINE (10, 10)-(440, 440), 15,b
10117 LINE (150, 10)-(150,440),14:
10118 LINE (300, 10)-(300,440),14:
10119 LINE (10, 150)-(440,150),14:
10120 LINE (10, 300)-(440,300),14:
10125 for px = 1 to 9 :tot =tot+1:DO :a=getkey:LOOP UNTIL (a>47 and a< 58 or a = 13) :if a= 13 then el(px)= al(px): else el(px) = val(chr$(a)):end if: locate 2,5+6*tot-6:? el(px);: next px:tot=0
10150 for px = 10 to 18 :tot =tot+1:DO :a=getkey:LOOP UNTIL (a>47 and a< 58 or a = 13) :if a= 13 then el(px)= al(px): else el(px) = val(chr$(a)):end if: locate 5,5+6*tot-6:? el(px);: next px:tot=0
10165 for px = 19 to 27 :tot =tot+1::DO :a=getkey:LOOP UNTIL (a>47 and a< 58 or a = 13) :if a= 13 then el(px)= al(px): else el(px) = val(chr$(a)):end if: locate 8,5+6*tot-6:? el(px);: next px:tot=0
10175 for px = 28 to 36 :tot =tot+1::DO :a=getkey:LOOP UNTIL (a>47 and a< 58 or a = 13) :if a= 13 then el(px)= al(px): else el(px) = val(chr$(a)):end if: locate 11,5+6*tot-6:? el(px);: next px:tot=0
10180 for px = 37 to 45 :tot =tot+1::DO :a=getkey:LOOP UNTIL (a>47 and a< 58 or a = 13) :if a= 13 then el(px)= al(px): else el(px) = val(chr$(a)):end if: locate 14,5+6*tot-6:? el(px);: next px:tot=0
10185 for px = 46 to 54 :tot =tot+1::DO :a=getkey:LOOP UNTIL (a>47 and a< 58 or a = 13) :if a= 13 then el(px)= al(px): else el(px) = val(chr$(a)):end if: locate 17,5+6*tot-6:? el(px);: next px:tot=0
10190 for px = 55 to 63 :tot =tot+1::DO :a=getkey:LOOP UNTIL (a>47 and a< 58 or a = 13) :if a= 13 then el(px)= al(px): else el(px) = val(chr$(a)):end if: locate 20,5+6*tot-6:? el(px);: next px:tot=0
10200 for px = 64 to 72 :tot =tot+1::DO :a=getkey:LOOP UNTIL (a>47 and a< 58 or a = 13) :if a= 13 then el(px)= al(px): else el(px) = val(chr$(a)):end if: locate 23,5+6*tot-6:? el(px);: next px:tot=0
10202 for px = 73 to 81 :tot =tot+1::DO :a=getkey:LOOP UNTIL (a>47 and a< 58 or a = 13) :if a= 13 then el(px)= al(px): else el(px) = val(chr$(a)):end if: locate 26,5+6*tot-6:? el(px);: next px:tot=0
10204 locate 2,58: input"esatto=e riscrivo=r";er$:if er$ = "e" then esito =1 else esito = 0 :end if:return
15000 cls:paint (10, 10), 1, 15
15116 LINE (10, 10)-(440, 440), 15,b
15117 LINE (150, 10)-(150,440),14:
15118 LINE (300, 10)-(300,440),14:
15119 LINE (10, 150)-(440,150),14:
15120 LINE (10, 300)-(440,300),14:
15130 for px = 1 to 9 :tot =tot+1:locate 2,5+6*tot-6:? el(px);: next px:tot=0
15150 for px = 10 to 18 :tot =tot+1:locate 5,5+6*tot-6:? el(px);: next px:tot=0
15165 for px = 19 to 27 :tot =tot+1:locate 8,5+6*tot-6:? el(px);: next px:tot=0
15175 for px = 28 to 36 :tot =tot+1:locate 11,5+6*tot-6:? el(px);: next px:tot=0
15180 for px = 37 to 45 :tot =tot+1:locate 14,5+6*tot-6:? el(px);: next px:tot=0
15185 for px = 46 to 54 :tot =tot+1:locate 17,5+6*tot-6:? el(px);: next px:tot=0
15190 for px = 55 to 63 :tot =tot+1:locate 20,5+6*tot-6:? el(px);: next px:tot=0
15200 for px = 64 to 72 :tot =tot+1:locate 23,5+6*tot-6:? el(px);: next px:tot=0
15202 for px = 73 to 81 :tot =tot+1:locate 26,5+6*tot-6:? el(px);: next px:tot=0:return
20000 open "soluzione.dat" for output as #2
20095 for i = 1 to 81:cubyte(t) = el(i) + 48: put #2, ,t : next i
20097 close #2: return
'===================routines=======================
40000 For h = 1 To 9: e(h) = 0: Next h: return
50000 for h = 1 to 9: if eb(i, h) = 0 and el(i) = 0 then e(h)= e(h)+1: end if: next h: return
55001 for i = 1 to 9:for h = 1 to 9: if Q1(i, h) = 0 then e(h)= e(h)+1: end if:next h: next i: return
55002 for i = 1 to 9:for h = 1 to 9: if Q2(i, h) = 0 then e(h)= e(h)+1: end if:next h: next i: return
55003 for i = 1 to 9:for h = 1 to 9: if Q3(i, h) = 0 then e(h)= e(h)+1: end if:next h: next i: return
55004 for i = 1 to 9:for h = 1 to 9: if Q4(i, h) = 0 then e(h)= e(h)+1: end if:next h: next i: return
55005 for i = 1 to 9:for h = 1 to 9: if Q5(i, h) = 0 then e(h)= e(h)+1: end if:next h: next i: return
55006 for i = 1 to 9:for h = 1 to 9: if Q6(i, h) = 0 then e(h)= e(h)+1: end if:next h: next i: return
55007 for i = 1 to 9:for h = 1 to 9: if Q7(i, h) = 0 then e(h)= e(h)+1: end if:next h: next i: return
55008 for i = 1 to 9:for h = 1 to 9: if Q8(i, h) = 0 then e(h)= e(h)+1: end if:next h: next i: return
55009 for i = 1 to 9:for h = 1 to 9: if Q9(i, h) = 0 then e(h)= e(h)+1: end if:next h: next i: return
70000 For h = 1 To 9: If eb(i, h) = 0 and e(h) = 1 and el(i) = 0 Then el(i) = h:eb(i, 1)=1:eb(i, 2)=2:eb(i, 3)=3:eb(i, 4)=4:eb(i, 5)=5:eb(i, 6)=6:eb(i, 7)=7:eb(i, 8)=8:eb(i, 9)=9:h = 9: i = 81 : End If :Next h :return
80000 ctrz=0: for i = 1 to 81: for h = 1 to 9: if eb(i,h) = 0 then ctrz = ctrz + 1: end if: next h: z(i) = ctrz : ctrz = 0: next i :return: ' conto gli zeri di ogni el(da 1 a 81)
'assegnazioni 9 quadri
100000 for h = 1 to 9:Q1(1, h)=eb(1, h): Q1(2, h)=eb(2, h):Q1(3, h)=eb(3, h):Q1(4, h)=eb(10, h):Q1(5, h)=eb(11, h):Q1(6, h)=eb(12, h):Q1(7, h)=eb(19, h):Q1(8, h)=eb(20, h):Q1(9, h)=eb(21, h): next h: 'carico il 1° quadro con i valori trovati
100010 for h = 1 to 9:Q2(1, h)=eb(4, h): Q2(2, h)=eb(5, h):Q2(3, h)=eb(6, h):Q2(4, h)=eb(13, h):Q2(5, h)=eb(14, h):Q2(6, h)=eb(15, h):Q2(7, h)=eb(22, h):Q2(8, h)=eb(23, h):Q2(9, h)=eb(24, h): next h: 'carico il 2° quadro con i valori trovati
100020 for h = 1 to 9:Q3(1, h)=eb(7, h): Q3(2, h)=eb(8, h):Q3(3, h)=eb(9, h):Q3(4, h)=eb(16, h):Q3(5, h)=eb(17, h):Q3(6, h)=eb(18, h):Q3(7, h)=eb(25, h):Q3(8, h)=eb(26, h):Q3(9, h)=eb(27, h): next h: 'carico il 3° quadro con i valori trovati
100030 for h = 1 to 9:Q4(1, h)=eb(28, h):Q4(2, h)=eb(29, h):Q4(3, h)=eb(30, h):Q4(4, h)=eb(37, h):Q4(5, h)=eb(38, h):Q4(6, h)=eb(39, h):Q4(7, h)=eb(46, h):Q4(8, h)=eb(47, h):Q4(9, h)=eb(48, h): next h: 'carico il 4° quadro con i valori trovati
100040 for h = 1 to 9:Q5(1, h)=eb(31, h):Q5(2, h)=eb(32, h):Q5(3, h)=eb(33, h):Q5(4, h)=eb(40, h):Q5(5, h)=eb(41, h):Q5(6, h)=eb(42, h):Q5(7, h)=eb(49, h):Q5(8, h)=eb(50, h):Q5(9, h)=eb(51, h): next h: 'carico il 5° quadro con i valori trovati
100050 for h = 1 to 9:Q6(1, h)=eb(34, h):Q6(2, h)=eb(35, h):Q6(3, h)=eb(36, h):Q6(4, h)=eb(43, h):Q6(5, h)=eb(44, h):Q6(6, h)=eb(45, h):Q6(7, h)=eb(52, h):Q6(8, h)=eb(53, h):Q6(9, h)=eb(54, h): next h: 'carico il 6° quadro con i valori trovati
100060 for h = 1 to 9:Q7(1, h)=eb(55, h):Q7(2, h)=eb(56, h):Q7(3, h)=eb(57, h):Q7(4, h)=eb(64, h):Q7(5, h)=eb(65, h):Q7(6, h)=eb(66, h):Q7(7, h)=eb(73, h):Q7(8, h)=eb(74, h):Q7(9, h)=eb(75, h): next h: 'carico il 7° quadro con i valori trovati
100070 for h = 1 to 9:Q8(1, h)=eb(58, h):Q8(2, h)=eb(59, h):Q8(3, h)=eb(60, h):Q8(4, h)=eb(67, h):Q8(5, h)=eb(68, h):Q8(6, h)=eb(69, h):Q8(7, h)=eb(76, h):Q8(8, h)=eb(77, h):Q8(9, h)=eb(78, h): next h: 'carico il 8° quadro con i valori trovati
100080 for h = 1 to 9:Q9(1, h)=eb(61, h):Q9(2, h)=eb(62, h):Q9(3, h)=eb(63, h):Q9(4, h)=eb(70, h):Q9(5, h)=eb(71, h):Q9(6, h)=eb(72, h):Q9(7, h)=eb(79, h):Q9(8, h)=eb(80, h):Q9(9, h)=eb(81, h): next h: 'carico il 9° quadro con i valori trovati
100090 return:
170000 For h = 1 To 9: If e(h) = 1 and eb(i, h) = 0 and z(i) = 1 and el(i) = 0 Then el(i) = h: h = 9 : i = 81 :gosub 40000: End If: Next h :return
200000 primo = 0: secondo = 0:gosub 300000:rn2(1) = primo: rn2(2) = secondo:valore = rn2( INT(RND(1) * 2) + 1 ): for i = 1 to 81 : for h = 1 to 9 : if eb(i, h) = 0 and z(i) = 2 then el(i) = valore :h = 9: i = 81 :end if: next h : next i:if primo = 0 and secondo = 0 then gosub 500000:end if : return:
300000 'carico i due possibili valori in primo e secondo in modo random per variare la faccenda
300010 for i = 1 to 81 : for h = 1 to 9 :if primo > 0 and eb(i, h) = 0 and z(i) = 2 then gosub 400000: secondo = h : h = 9: i = 81 : end if : if eb(i, h) = 0 and z(i) = 2 then primo = h :gosub 400000: end if: next h: next i: return:
400000 if salvata > 0 then goto 400020 : end if : salvata = salvata + 1 :'------------------------ salvo la matrice eb(i, h) in seb(i, h) al momento della scelta tra due valori possibili
400010 for i = 1 to 81 :sel(i) = el(i): for h = 1 to 9: seb(i, h) = eb(i, h): next h: next i:
400020 return:
500000 '---------------------------
500010 for i = 1 to 81 :el(i) = sel(i):for h = 1 to 9:eb(i, h) = seb(i, h): next h:next i:
500020 return:
Last edited by gentilecliente on Oct 03, 2007 10:23, edited 6 times in total.
1000101
Posts: 2556
Joined: Jun 13, 2005 23:14
Location: SK, Canada

Postby 1000101 » Sep 13, 2007 12:41

gw basic ftw!

btw, you can use the code tags to make posting code easier

ie:
[code]Print "Hello World!"[/code]

Code: Select all

Print "Hello World!"
notthecheatr
Posts: 1759
Joined: May 23, 2007 21:52
Location: Cut Bank, MT
Contact:

Postby notthecheatr » Sep 13, 2007 22:11

*goes blind*

This is interesting, but I would far prefer it without all those line numbers...
cha0s
Site Admin
Posts: 5317
Joined: May 27, 2005 6:42
Location: Illinois
Contact:

Postby cha0s » Sep 14, 2007 4:59

I'd need a shot of crack directly in my eye to be able to maintain code like this.
jevans4949
Posts: 1148
Joined: May 08, 2006 21:58
Location: Crewe, England

Postby jevans4949 » Sep 14, 2007 9:57

But it does compile using -lang qb.

Doesn't appear to do much, tho.
Antoni
Posts: 1393
Joined: May 27, 2005 15:40
Location: Barcelona, Spain

Postby Antoni » Sep 14, 2007 13:44

gentilecliente:
In all basics sinca 1988 the line numbers can be removed. Only numbers in lines that are the destination of a GOTO and GOSUB are required, and even those can be replaced by meaningful labels:

Code: Select all

....
gosub  mysolver

....

end

mysolver:
.....
return

This makes long listings more readable.
notthecheatr
Posts: 1759
Joined: May 23, 2007 21:52
Location: Cut Bank, MT
Contact:

Postby notthecheatr » Sep 14, 2007 15:15

cha0s wrote:I'd need a shot of crack directly in my eye to be able to maintain code like this.


I don't really think that would be enough...
Sisophon2001
Posts: 1704
Joined: May 27, 2005 6:34
Location: Cambodia, Thailand, Lao, Ireland etc.
Contact:

Postby Sisophon2001 » Sep 14, 2007 15:25

cha0s wrote:I'd need a shot of crack directly in my eye to be able to maintain code like this.


How about a challenge, write a program that cleans up this type of code and converts it into something readable in the modern sense.!!!

@gentilecliente
Your code looks like something that was written 20 years ago before they invented structured programming. Do not be surprised that they young kids can't read it.

Garvan
Mysoft
Posts: 774
Joined: Jul 28, 2005 13:56
Location: Brazil, Santa Catarina, Indaial (ouch!)
Contact:

Postby Mysoft » Sep 14, 2007 17:12

well, i started in programming, with those type of lines, (in my INPUT collection) about programming in COCO, MSX, SPECTRUM, and such, when i was 4, but now, im nearly losing my mind reading this code, xD

VERY FUNNY =]
tinram
Posts: 88
Joined: Nov 30, 2006 13:35
Location: UK

Postby tinram » Sep 14, 2007 19:20

Yes, very funny, to me at least. An example that richly deserves to be featured on the 'unmaintainable code' website.


I'd need a shot of crack directly in my eye to be able to maintain code like this.


Love it cha0s!
Antoni
Posts: 1393
Joined: May 27, 2005 15:40
Location: Barcelona, Spain

Postby Antoni » Sep 14, 2007 20:07

I started programming in a Sinclair Spectrum, where line numbers were mandatory. But the user frendliness of the single line editor taught me fast to write clever code.

This source would be impossible in a computer 25 years old, the cut and paste facilities of the present editors make it possible.

FB is evil, let's get back to GW-BASIC ! :)
Eponasoft
Posts: 264
Joined: Jul 26, 2007 2:40

Postby Eponasoft » Sep 14, 2007 20:55

GW-BASIC is for newbies. Give me back my ENIAC!
badmrbox
Posts: 659
Joined: Oct 27, 2005 14:40
Location: Sweden
Contact:

Postby badmrbox » Sep 14, 2007 22:24

Oo That's a helluva lot of For/Next's.
Richard
Posts: 2964
Joined: Jan 15, 2007 20:44
Location: Australia

Postby Richard » Sep 14, 2007 23:01

Here is my Sudoku Assistant. It was written to help solve the difficult ones. It only does the routine book work so you still have to think. It also generates a text file that records its reason for decisions.
Start with the nine rows in the nine data statements. Zero represents an unknown cell. It will solve most but when stuck, it displays all remaining possibilities. Use your intelligence to analyse the situation, edit one cell in the data statements and then run it again.

Code: Select all

'=======================================================================
' Sudoku Assistant.
'=======================================================================
Declare Sub killer(Byval As Integer, Byval As Integer)
Declare Sub display

'=======================================================================
Dim As Integer r, c, b, s, done(1 To 9, 1 To 9)
Dim Shared As Integer a(1 To 9, 1 To 9)
Screen 19
Cls
open "sudoku.txt" for output as #1

'-----------------------------------------------------------------------
' first set all nine possible bit flags
'-----------------------------------------------------------------------
' symbol bit values, are as follows
'"0"= 1 is used for unknown inputs, but replaced with 1022 = allbits set
'"1"= 2, "2"= 4, "3"= 8, "4"= 16, "5"=32, "6"=64, "7"=128, "8"=256, "9"=512
'-----------------------------------------------------------------------
Dim Shared As Integer allbits = 0, bv(1 To 9)
For b = 1 To 9
    bv(b) = Bitset(0, b)             ' bit values
    allbits = Bitset(allbits, b)
Next b

'-----------------------------------------------------------------------
' read in the initial data
'-----------------------------------------------------------------------
For r = 1 To 9
    For c = 1 To 9
        Read s
        If s > 0 Then
            a(r, c) = bv(s)
            done(r, c) = 0    ' flag the cell as done
        Else
            a(r, c) = allbits
            done(r, c) = 0      ' flag unknown bits as not done
        End If
    Next c
Next r
Print " Input data, press any key to continue. "
display
Sleep
Cls

'-----------------------------------------------------------------------
' repeat the following tests until there is no change at any point
'-----------------------------------------------------------------------
Dim As Integer row, col, count, finished
Do
    finished = 1
   
    '--------------------------------------------------------------
    ' test if only one bit is left in any one cell
    For r = 1 To 9
        For c = 1 To 9
            If done(r, c) = 0 Then  ' not yet done
                s = a(r, c)
                For b = 1 To 9      ' next test if just one bit left
                    If s = bv(b) Then
                        print #1, chr(64+r); c; " is";b ;" since unique in cell."
                        killer(r, c)      ' bit is known
                        done(r, c) = 1    ' flag the cell as done
                        finished = 0      ' change detected
                    End If
                Next b
            End If
        Next c
    Next r
   
    '--------------------------------------------------------------
    ' test if last possible symbol in a row
    For row = 1 To 9
        For b = 1 To 9
            count = 0
            For col = 1 To 9
                If (a(row, col) And bv(b)) Then
                    r = row     ' remember where the last bit was
                    c = col
                    count = count + 1
                End If
            Next col
            If (count = 1) And (done(r, c) = 0) Then
                print #1, chr(64+r); c; " is";b ;" since unique in row."
                a(r, c) = bv(b)
                done (r, c) = 1
                killer(r, c)
                finished = 0
            End If
        Next b
    Next row
   
    '--------------------------------------------------------------
    ' test if last symbol in that column
    For col = 1 To 9
        For b = 1 To 9
            count = 0
            For row = 1 To 9
                If (a(row, col) And bv(b)) Then
                    r = row     ' remember where the last bit was
                    c = col
                    count = count + 1
                End If
            Next row
            If (count = 1) And (done(r, c) = 0) Then
                print #1, chr(64+r); c; " is";b ;" since unique in column."
                a(r, c) = bv(b)
                done (r, c) = 1
                killer(r, c)
                finished = 0
            End If
        Next b
    Next col
   
    '--------------------------------------------------------------
    ' test if last symbol in that square
    Dim As Integer br, bc   ' base row and base column
    For br = 1 To 9 Step 3  ' base row
        For bc = 1 To 9 Step 3  ' base column
            For b = 1 To 9
                count = 0
                For row = br To br + 2
                    For col = bc To bc + 2
                        If (a(row, col) And bv(b)) Then
                            r = row     ' remember where the last bit was
                            c = col
                            count = count + 1
                        End If
                    Next col
                Next row
                If (count = 1) And (done(r, c) = 0) Then
                    print #1, chr(64+r); c; " is";b ;" since unique in square."
                    a(r, c) = bv(b)
                    killer(r, c)
                    done (r, c) = 1
                    finished = 0
                End If
            Next b
        Next bc
    Next br
   
Loop Until finished = 1

'-----------------------------------------------------------------------
close #1
color 15
print "End of processing, press any key to exit."
display
Sleep

'=======================================================================
'            S u b - p r o g r a m s   F o l l o w
'=======================================================================
' point to a(r, c) which has only one bit set
' kill that bit in its row, column and square, restore the bit
Sub killer(Byval r As Integer, Byval c As Integer)
    Dim As Integer thisbit, mask, br, bc, row, col
   
    thisbit = a(r, c)
    mask = allbits - thisbit
   
    ' first the row
    For col = 1 To 9
        a(r, col) = mask And a(r, col)
    Next col
   
    ' then the column
    For row = 1 To 9
        a(row, c) = mask And a(row, c)
    Next row
   
    ' plus the 3 x 3 square
    br = 3 *((r + 2) \ 3) - 2    ' base row
    bc = 3 *((c + 2) \ 3) - 2    ' base column
    For row = br To br + 2
        For col = bc To bc + 2
            a(row, col) = mask And a(row, col)
        Next col
    Next row
   
    ' finally reinsert the masked bit
    a(r, c) = thisbit
   
End Sub

'-----------------------------------------------------------------------
Sub display       ' display tableau screen
    Dim As Integer i, j, s
    Color 7
    print
    print "     ";
    for i = 1 to 9
        print "   "; i;"  ";
        If (i = 3) Or (i = 6) Then Print "  ";
    next i
    print
    For i = 1 To 9
        If (i = 1) Or (i = 4) Or (i = 7) Then Print
        print chr(32, i + 64);"   ";
        For j = 1 To 9
            If (j = 1) Or (j = 4) Or (j = 7) Then Print "  ";
            s = a(i, j)
            If s = 0 Then Color 13
            ' upper line x1234
            If (s = 2) Or (s = 4) Or (s = 8) Or (s = 16) Then Color 14
            If (s = 0)    Then Print "X";  Else Print ".";
            If s And    2 Then Print "1";  Else Print ".";
            If s And    4 Then Print "2";  Else Print ".";
            If s And    8 Then Print "3";  Else Print ".";
            If s And   16 Then Print "4";  Else Print ".";
            Color 7
            Print "  ";
        Next j
        Print
        print "     ";
        For j = 1 To 9
            If (j = 1) Or (j = 4) Or (j = 7) Then Print "  ";
            s = a(i, j)
            If s = 0 Then Color 13
            ' lower line 56789
            If (s = 32) Or (s = 64) Or (s = 128) Or (s = 256) Or (s = 512) Then Color 14
            If s And  32 Then Print "5";  Else Print ".";
            If s And  64 Then Print "6";  Else Print ".";
            If s And 128 Then Print "7";  Else Print ".";
            If s And 256 Then Print "8";  Else Print ".";
            If s And 512 Then Print "9";  Else Print ".";
            Color 7
            Print "  ";
        Next j
        Print
        Print
    Next i
End Sub

'=======================================================================
'                     E n d  of  P r o g r a m
'=======================================================================

' Number 33. Medium
Data  6,1,0, 0,0,0, 0,3,5
Data  0,9,0, 0,1,0, 0,8,0
Data  0,0,8, 5,0,7, 4,0,0

Data  0,0,0, 6,0,5, 0,0,0
Data  2,0,0, 0,0,0, 0,0,3
Data  0,0,0, 2,0,1, 0,0,0

Data  0,0,6, 9,0,2, 1,0,0
Data  0,5,0, 0,4,0, 0,6,0
Data  4,8,0, 0,0,0, 0,5,7

'-----------------------------------------------------------------------
' Tough
DATA 0,4,0, 8,0,9, 0,2,0
DATA 0,9,0, 0,3,0, 0,6,0
DATA 0,0,2, 0,0,0, 4,0,0

DATA 0,0,0, 9,2,7, 0,0,0
DATA 8,0,0, 0,0,0, 0,0,3
DATA 0,0,0, 3,1,8, 0,0,0

DATA 0,0,3, 0,0,0, 5,0,0
DATA 0,6,0, 0,4,0, 0,7,0
DATA 0,1,0, 6,0,5, 0,4,0

'-----------------------------------------------------------------------
Sisophon2001
Posts: 1704
Joined: May 27, 2005 6:34
Location: Cambodia, Thailand, Lao, Ireland etc.
Contact:

Postby Sisophon2001 » Sep 15, 2007 9:13

Sisophon2001 wrote:<snip>How about a challenge, write a program that cleans up this type of code and converts it into something readable in the modern sense.!!!</snip>


I actually gave this some thought today, and came to the conclusion that it would not be possible without an effort comparable to that required to write a compiler like FB itself.

Some of the steps look feasible. I have a utility that stripes line numbers using regular expressions, and a reformatter, and if you made all the variables global, you should be able to convert the gosubs to normal subroutines. But you still have the problem of all the goto's. Converting the : to line endings would doable but be tricky because of the if .. then ... : ... : ... . But then what about the undeclared variables?

In the end, it is not worth it, is it?

Garvan

Return to “Beginners”

Who is online

Users browsing this forum: storm5510 and 1 guest