m@rc-lenzin

Wenn etwas schief geht, dann freu dich. Das sind die Geschichten die dir in Erinnerung bleiben werden

oracle – sudoku solver

Eine Möglichkeit ein Sudoku per SQL in Oracle zu lösen.

with a(b,c) 
as
  ( select  d, 
            instr(d,'0')
      from (select  '405002700600900000000030090200006005300000000079004800006200008050000200000058647' d -- EXTREM 
                    --'597410802030250100200608503459102630786009210000740000975004301823071006064300098' d -- EASY 
                    --'010000000080000000020005100090730200531090060040506319000600007900002000278000694' d -- MEDIUM 
                    --'020003010005000894608090000032700000050020900900061030000000080070200650000000740' d -- HARD 
              from  dual)
    union all
    select  substr(b,1,c-1) ||z|| substr(b,c+1), 
            instr(b,'0',c+1)
      from  a,
           (select  to_char(rownum) z
              from  dual 
              connect by rownum <= 9)z
      where c > 0
      and   not exists (select  null
                          from (select  rownum e
                                  from  dual
                                  connect by rownum <= 9)
                          where z = substr(b,trunc((c-1)/9)*9+e,1)
                          or    z = substr(b,mod(c-1,9)-8+e*9,1)
                          or    z = substr(b,mod(trunc((c-1)/3),3)*3 
                                    +trunc((c-1)/27)*27+e 
                                    +trunc((e-1)/3)*6,1)))
select  b
 from   a
 where  c = 0;
/

Weiter Beitrag

Zurück Beitrag

© 2025 m@rc-lenzin

Thema von Anders Norén