Re: sudoku in an sql statement - Mailing list pgsql-general

From marcin mank
Subject Re: sudoku in an sql statement
Date
Msg-id b1b9fac60911041518o3c5f6917r9d47b60feab76512@mail.gmail.com
Whole thread Raw
In response to Re: sudoku in an sql statement  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: sudoku in an sql statement  (Scott Marlowe <scott.marlowe@gmail.com>)
Re: sudoku in an sql statement  (Andrej <andrej.groups@gmail.com>)
Re: sudoku in an sql statement  (Richard Broersma <richard.broersma@gmail.com>)
Re: sudoku in an sql statement  (Hitoshi Harada <umi.tanuki@gmail.com>)
List pgsql-general
> I think the Oracle guy's version could easily be adapted to PG 8.4 ---
> those little rownum subqueries seem to be just a substitute for not
> having generate_series(1,9), and everything else is just string-pushing.

indeed.

marcin=# with recursive x( s, ind ) as
( select sud, position( ' ' in sud )
  from  (select '53  7    6  195    98    6 8   6   34  8 3  17   2
6 6    28    419  5    8  79'::text as sud) xx
  union all
  select substr( s, 1, ind - 1 ) || z || substr( s, ind + 1 )
       , position(' ' in repeat('x',ind) || substr( s, ind + 1 ) )
  from x
     ,  (select gs::text as z from generate_series(1,9) gs)z
  where ind > 0
  and not exists ( select null
                   from generate_series(1,9) lp
                   where z.z = substr( s, ( (ind - 1 ) / 9 ) * 9 + lp, 1 )
                   or    z.z = substr( s, mod( ind - 1, 9 ) - 8 + lp * 9, 1 )
                   or    z.z = substr( s, mod( ( ( ind - 1 ) / 3 ), 3 ) * 3
                                      + ( ( ind - 1 ) / 27 ) * 27 + lp
                                      + ( ( lp - 1 ) / 3 ) * 6
                                   , 1 )
                 )
)
select s
from x
where ind = 0;
                                         s
-----------------------------------------------------------------------------------
 534678912672195348198342567859761423426853791713924856961537284287419635345286179
(1 row)

Time: 472.027 ms


btw: it is pretty cool to replace some of the numbers in input with
spaces and see how the query finds multiple solutions

btw2: is SQL with 'with recursive' turing-complete ? Anyone care to
try a Brainf*ck interpreter ? :)

Greetings
marcin Mańk

pgsql-general by date:

Previous
From: John R Pierce
Date:
Subject: Re: Where I can find "SSL specification"?
Next
From: Scott Marlowe
Date:
Subject: Re: sudoku in an sql statement