|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#81 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
|
#82 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
1. utilizzando questo metodo di procedimento, ovvero inserendo metodi di eliminazione/inserimento/ottimizzazione, come fa ad avere la certezza che il programma riesca a risolvere qualsiasi istanza di Sudoku? 2. perdonami ma non riesco a leggere il tuo codice, ma ho una domandina facile: hai per caso implementato una qualche sorta di stack?
__________________
|
|
|
|
|
|
|
#83 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:38. |
|
|
|
|
|
#84 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
resuscito questo topic per linkare questo video quanto mai azzeccato!
http://www.youtube.com/watch?v=Mp8Y2yjV4fU |
|
|
|
|
|
#85 |
|
Member
Iscritto dal: Jul 2009
Messaggi: 81
|
salve a tutti,
è possibile risolvere questo sudoku in batch??? Non importa quanto tempo impiega, mi interesserebbe solo sapere il codice per farlo. Grazie in anticipo per il vostro sicuro aiuto. |
|
|
|
|
|
#86 |
|
Member
Iscritto dal: Jul 2009
Messaggi: 81
|
up
|
|
|
|
|
|
#87 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Ecco.
Dato questo input ![]() Una soluzione SQL, sotto Oracle che permette le query ricorsive, e' questa Codice:
with x( s, ind ) as
( select sud, instr( sud, ' ' )
from ( select '53 7 6 195 98 6 8 6 34 8 3 17 2 6 6 28 419 5 8 79' sud from dual )
union all
select substr( s, 1, ind - 1 ) || z || substr( s, ind + 1 )
, instr( s, ' ', ind + 1 )
from x
, ( select to_char( rownum ) z
from dual
connect by rownum <= 9
) z
where ind > 0
and not exists ( select null
from ( select rownum lp
from dual
connect by rownum <= 9
)
where z = substr( s, trunc( ( ind - 1 ) / 9 ) * 9 + lp, 1 )
or z = substr( s, mod( ind - 1, 9 ) - 8 + lp * 9, 1 )
or z = substr( s, mod( trunc( ( ind - 1 ) / 3 ), 3 ) * 3
+ trunc( ( ind - 1 ) / 27 ) * 27 + lp
+ trunc( ( lp - 1 ) / 3 ) * 6
, 1 )
)
)
select s
from x
where ind = 0
Il risultato eseguito: ![]() Ed eventualmente riprocessato ![]() http://technology.amis.nl/blog/6404/...uery-factoring
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 07-12-2009 alle 18:12. |
|
|
|
|
|
#88 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
![]() La devo presentare alla mia prof di informatica, che crede di interndersene di db
__________________
|
|
|
|
|
|
|
#89 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
|
|
|
|
|
|
#90 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Nono, lenta. Piu' lenta di quella in C# di almeno 10 volte.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#91 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#92 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Vedo cosa posso fare. Comunque dovrebbe funzionare anche su una 8i
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#93 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Eh no, purtroppo il 'recursive subquery factoring' come l'hanno chiamato è una feature dell'11gR2... intendo quel "with x ... as ... select ... from x..." dove fai il 'from x' della 'x' che dichiare nella 'with'. Forse mi sono ingarbugliato con le parole..
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
#94 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
SI', hai ragione. Non posso richiamare la With all'interno della With stessa sotto 10g.
Mi sa che dovremo aspettare per il piano d'esecuzione allora. Immagino tante belle "Connect By Pump".
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#95 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Spettacolo!
Io averi preferito un calcio nei coglioni piuttosto che anche solo provare a scrivere qualcosa di simile in SQL.
__________________
|
|
|
|
|
|
#96 |
|
Bannato
Iscritto dal: Nov 2002
Città: Roma
Messaggi: 810
|
Mi aggiungo al coro di complimenti per rеpne scasb. Fa veramente piacere sentir parlare in italiano una persona tanto abile con gli algoritmi (e con l'offuscamento artistico del codice).
Complimenti davvero, ho visto tardi questo topic per poter partecipare al contest, ma sono felice di esserci comunque approdato per averci trovato numerose menti brillanti. |
|
|
|
|
|
#97 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Puoi sempre provare questo e anche gli altri. Sono esercizi penso interessanti, un po' al di la' anche di alcuni test universitari necessariamente focalizzati su qualche punto invece che cosi' aperti. Qui gli altri, secondo cortese lista offerta da Vincenzo1968, il nostro segretario nonche' boia (strano accoppiamento) Quote:
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 10-12-2009 alle 14:03. |
|
|
|
|
|
|
#98 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Come attivita' natalizia mi sono dedicato alla stesura di una versione in common lisp.
Backtracking con pruning dell'albero semplice semplice. Unica furbizia la rappresentazione dei dati e un po' di ottimizzazioni sparse. Volevo fare un po' di paragoni con gli esempi presenti su http://en.wikipedia.org/wiki/Algorithmics_of_sudoku ma ho avuto qualche difficolta' a far funzionare il codice degli altri. in particolare il codice di vincenzo mi riporta uno schema diverso a quello che gli do in pasto... forse devo usare una notazione diversa ? esempio: Codice:
# cat input4.txt 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 8 5 0 0 1 0 2 0 0 0 0 0 0 0 5 0 7 0 0 0 0 0 4 0 0 0 1 0 0 0 9 0 0 0 0 0 0 0 5 0 0 0 0 0 0 7 3 0 0 2 0 1 0 0 0 0 0 0 0 0 4 0 0 0 9 # ./vincenzo input4.txt +---+---+---+---+---+---+---+---+---+ | | | | | | | | | | +---+---+---+---+---+---+---+---+---+ | | | | | | | | | | +---+---+---+---+---+---+---+---+---+ | | | | | | | | | | +---+---+---+---+---+---+---+---+---+ | 3 | | | | 8 | | 5 | | | +---+---+---+---+---+---+---+---+---+ | | | | | 1 | | | | 2 | +---+---+---+---+---+---+---+---+---+ | | | | | | | | | | +---+---+---+---+---+---+---+---+---+ | | | | | | | 5 | | | +---+---+---+---+---+---+---+---+---+ | 7 | | | | | | | | | +---+---+---+---+---+---+---+---+---+ | | | | | 4 | | | | | +---+---+---+---+---+---+---+---+---+ esempio: Codice:
*** Input *** 0 0 0 0 0 0 0 3 9 0 0 0 0 0 1 0 0 5 0 0 3 0 5 0 8 0 0 0 0 8 0 9 0 0 0 6 0 7 0 0 0 2 0 0 0 1 0 0 4 0 0 0 0 0 0 0 9 0 8 0 0 5 0 0 2 0 0 0 0 6 0 0 4 0 0 7 0 0 0 0 0 *** Soluzione parziale (60) *** 25678 14568 124567 268 2467 4678 1247 3 9 26789 4689 2467 23689 23467 1 247 2467 5 2679 1469 3 269 5 4679 8 12467 1247 235 345 8 135 9 357 123457 1247 6 3569 7 456 13568 136 2 13459 1489 1348 1 3569 256 4 367 35678 23579 2789 2378 367 136 9 1236 8 346 12347 5 12347 3578 2 157 1359 134 3459 6 14789 13478 4 13568 156 7 1236 3569 1239 1289 1238 Vicious: non viene trovato il Modulo matrix... e' una qualche libreria disponibile ? Sono sotto linux e non ho potuto provare la versione F# e quella Oracle. Vedo citata una versione C#, ma non trovo il codice ![]() Se mi spiegate come far andare gli esempi provo a compilare una tabellina,intanto questi sono i miei risultati coi problemi indicati in quella pagina. I tempi sono il tempo medio su mille esecuzioni Codice:
processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 15 model name : Intel(R) Core(TM)2 Duo CPU T7250 @ 2.00GHz stepping : 13 cpu MHz : 2001.000 cache size : 2048 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida tpr_shadow vnmi flexpriority bogomips : 3990.00 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: Codice:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 8 5 0 0 1 0 2 0 0 0 0 0 0 0 5 0 7 0 0 0 0 0 4 0 0 0 1 0 0 0 9 0 0 0 0 0 0 0 5 0 0 0 0 0 0 7 3 0 0 2 0 1 0 0 0 0 0 0 0 0 4 0 0 0 9 Tempo : 18.53 ms 1 0 0 0 0 0 0 0 2 0 9 0 4 0 0 0 5 0 0 0 6 0 0 0 7 0 0 0 5 0 9 0 3 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 8 5 0 0 4 0 7 0 0 0 0 0 6 0 0 0 3 0 0 0 9 0 8 0 0 0 2 0 0 0 0 0 1 Tempo: 25.55 ms 0 0 1 0 0 4 0 0 0 0 0 0 0 6 0 3 0 5 0 0 0 9 0 0 0 0 0 8 0 0 0 0 0 7 0 3 0 0 0 0 0 0 0 2 8 5 0 0 0 7 0 6 0 0 3 0 0 0 8 0 0 0 6 0 0 9 2 0 0 0 0 0 0 4 0 0 0 1 0 0 0 Tempo: 9.13 ms 9 0 0 1 0 4 0 0 2 0 8 0 0 6 0 0 7 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 7 0 0 0 0 0 3 0 3 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 3 0 0 7 0 0 8 0 1 0 0 2 0 9 0 0 4 Tempo: 3.72 ms 0 0 1 0 0 4 0 0 0 0 0 0 0 6 0 3 0 5 0 0 0 9 0 0 0 0 0 8 0 0 0 0 0 7 0 3 0 0 0 0 0 0 0 2 8 5 0 0 0 7 0 6 0 0 3 0 0 0 8 0 0 0 6 0 0 9 2 0 0 0 0 0 0 4 0 0 0 1 0 0 0 Tempo: 9.04 ms 0 0 0 0 0 0 0 3 9 0 0 0 0 0 1 0 0 5 0 0 3 0 5 0 8 0 0 0 0 8 0 9 0 0 0 6 0 7 0 0 0 2 0 0 0 1 0 0 4 0 0 0 0 0 0 0 9 0 8 0 0 5 0 0 2 0 0 0 0 6 0 0 4 0 0 7 0 0 0 0 0 Tempo: 50.37 ms 0 2 0 4 0 3 7 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 4 0 4 0 2 0 0 0 7 0 8 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 5 0 0 0 0 0 9 0 0 0 3 0 9 0 0 0 0 7 0 0 1 0 0 8 6 0 0 Tempo: 67.96 ms 0 0 1 0 8 0 6 0 4 0 3 7 6 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 6 0 1 0 8 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 7 5 2 0 8 0 2 0 9 0 7 0 0 Tempo: 2.04 ms Codice:
(declaim (optimize (speed 3) (debug 0) (safety 0)))
(deftype choices-length () '(integer 0 9))
(deftype choice () '(integer 1 9))
(deftype cell-pos () '(mod 81))
(deftype choices () '(cons list choices-length))
(deftype cell () '(cons choices cell-pos))
(deftype row () '(integer 0 8))
(deftype col () '(integer 0 8))
(deftype bblock () '(integer 0 8))
;;; Position related code
(defun make-pos (row col)
(+ (* row 9) col))
(defun row-of-orig (pos)
(floor pos 9))
(defparameter *row-of-table*
(make-array 81 :element-type 'row :initial-contents (loop for n below 81 collect (row-of-orig n))))
(defun row-of (pos)
(declare (type cell-pos pos)
(type (simple-array row (81)) *row-of-table*))
(the fixnum (aref *row-of-table* pos)))
(defun col-of-orig (pos)
(mod pos 9))
(defparameter *col-of-table*
(make-array 81 :element-type 'col :initial-contents (loop for n below 81 collect (col-of-orig n))))
(defun col-of (pos)
(declare (type cell-pos pos)
(type (simple-array col (81)) *col-of-table*))
(the fixnum (aref *col-of-table* pos)))
(defun block-of-orig (pos)
(let ((brow (floor (row-of pos) 3))
(bcol (floor (col-of pos) 3)))
(+ (* 3 brow) bcol)))
(defparameter *block-of-table*
(make-array 81 :element-type 'bblock :initial-contents (loop for n below 81 collect (block-of-orig n))))
(defun block-of (pos)
(declare (type cell-pos pos)
(type (simple-array bblock (81)) *block-of-table*))
(the fixnum (aref *block-of-table* pos)))
(defun same-row (pos1 pos2)
(declare (type cell-pos pos1)
(type cell-pos pos2))
(= (row-of pos1) (row-of pos2)))
(defun same-col (pos1 pos2)
(= (col-of pos1) (col-of pos2)))
(defun same-block (pos1 pos2)
(= (block-of pos1) (block-of pos2)))
(defun remove-first-choice (elem list)
(declare (type choice elem)
(type choices list))
(loop for x in (car list)
when (/= x elem)
sum 1 into n
and
collecting x into xs
finally (return (cons xs n))))
(defun remove-first-cell (elem list)
(declare (type cell elem)
(type list list))
(loop for x in (car list)
when (not (eql elem x))
collect x))
(defun values-of (x)
; (declare (type cell x)
; (optimize (speed 3) (debug 0) (safety 0)))
(car x))
(defun position-of (x)
(declare (type cell x))
(cdr x))
(defun insert-number (board pos new-value)
(declare (type cell-pos pos)
(type choice new-value))
(loop for x in board
for p = (position-of x)
for values = (values-of x)
for new-list = (cond ((eql p pos) (cons (list new-value) 1))
((same-row p pos) (remove-first-choice new-value values))
((same-col p pos) (remove-first-choice new-value values))
((same-block p pos) (remove-first-choice new-value values))
(t values))
collecting (cons new-list p)))
(defun empty-board ()
(loop for x below 81 collect (cons (cons '(1 2 3 4 5 6 7 8 9) 9) x)))
(defun read-board (filename)
(with-open-file (stream filename :direction :input)
(let ((board (empty-board)))
(loop for row from 0 below 9 do
(loop for col from 0 below 9
for number fixnum = (read stream)
when (> number 0) do
(setf board (insert-number board (make-pos row col) number))))
board)))
(defun n-of-values (x)
(declare (type cell x))
(cdr (car x)))
(defun pick-next (board)
(loop for cell in (cdr board)
with best = (first board)
and best-length = (n-of-values (first board))
and rest = ()
if (< (n-of-values cell) best-length)
do
(push best rest)
(setf best cell)
(setf best-length (n-of-values cell))
else do (push cell rest)
finally (return (list best rest))))
(defun rec-solve (count solution board)
(if (eql 81 count)
solution
(destructuring-bind (best remaining) (pick-next board)
(loop
for value in (values-of (car best))
for position = (position-of best) then (position-of best)
for sol = (rec-solve (1+ count)
(cons (list position value) solution)
(insert-number remaining position value))
do
(when sol
(return sol))))))
(defun solve (board)
(rec-solve 0 () board))
(defun print-solution (solution)
(labels ((cmp (x y) (< (first x) (first y))))
(let ((sorted (sort solution #'cmp)))
(loop for cell in sorted
do (if (= 0 (mod (1+ (first cell)) 9))
(format t "~a~%"(second cell))
(format t "~a " (second cell)))))))
(defun main (filename)
(let* ((board (read-board filename))
(solution (solve board)))
(print-solution solution)))
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele Ultima modifica di marco.r : 25-12-2009 alle 23:17. |
|
|
|
|
|
#99 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Io proprio stasera ho incontrato questo...
http://scottkirkwood.blogspot.com/20...in-python.html Questo si chiama "Obfuscated Python", vero cdimauro?
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#100 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Mai visto codice Python così brutto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:06.

























