Задача о 8 ферзях на шахматной доске


Прочел в твиттере у девушки из cboss'a о посте с решением этой задачки на Oracle SQL и захотелось решить самому... В общем, вот:
with t as (          select level-1 n          from dual          connect by level<=8 ) select   lpad(to_char(power(10,t1.n)),8,'0')||chr(13) ||lpad(to_char(power(10,t2.n)),8,'0')||chr(13) ||lpad(to_char(power(10,t3.n)),8,'0')||chr(13) ||lpad(to_char(power(10,t4.n)),8,'0')||chr(13) ||lpad(to_char(power(10,t5.n)),8,'0')||chr(13) ||lpad(to_char(power(10,t6.n)),8,'0')||chr(13) ||lpad(to_char(power(10,t7.n)),8,'0')||chr(13) ||lpad(to_char(power(10,t8.n)),8,'0')||chr(13) "В графическом виде" ,chr(97+t1.n)||'1' "1" ,chr(97+t2.n)||'2' "2" ,chr(97+t3.n)||'3' "3" ,chr(97+t4.n)||'4' "4" ,chr(97+t5.n)||'5' "5" ,chr(97+t6.n)||'6' "6" ,chr(97+t7.n)||'7' "7" ,chr(97+t8.n)||'8' "8" from t t1, t t2, t t3, t t4, t t5, t t6, t t7, t t8 where power(2,t1.n)+power(2,t2.n)+power(2,t3.n)+power(2,t4.n)+power(2,t5.n)   +power(2,t6.n)+power(2,t7.n)+power(2,t8.n) = 255 and not exists(   select null   from      table(sys.odcinumberlist(t1.n+11,t2.n+21,t3.n+31,t4.n+41,t5.n+51,t6.n+61,t7.n+71,t8.n+81)) x1     ,table(sys.odcinumberlist(t1.n+11,t2.n+21,t3.n+31,t4.n+41,t5.n+51,t6.n+61,t7.n+71,t8.n+81)) x2   where      x1.column_value>x2.column_value      and abs(trunc(x1.column_value/10)-trunc(x2.column_value/10))          = abs(mod(x1.column_value,10)-mod(x2.column_value,10)) ) * This source code was highlighted with Source Code Highlighter.

Comments

Отправить комментарий