powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Задача о восьми ферзях
25 сообщений из 37, страница 1 из 2
Задача о восьми ферзях
    #38495037
Фотография Просто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь я нашёл неработающее решение:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
WITH
  T1 AS (SELECT level - 1 AS K FROM dual CONNECT BY level <= &D)
, T2 (N, L, X, Y, D1, D2, NL)
  AS (SELECT a.K * &D + b.K, 0
           , POWER (2, a.K), POWER (2, b.K), POWER (2, a.K - b.K + &D - 1)
           , POWER (2, a.K + b.K), chr (a.K + 97) || to_char (b.K + 1)
      FROM T1 a, T1 b)
, T3 (RN, RL, RX, RY, RD1, RD2, RNL)
  AS (SELECT * FROM T2 UNION ALL
      SELECT N, RL + 1, RX + X, RY + Y, RD1 + D1, RD2 + D2, RNL || ' ' || NL
      FROM T2, T3
      WHERE bitand (RX , X ) = 0 AND bitand (RY , Y ) = 0 
        AND bitand (RD1, D1) = 0 AND bitand (RD2, D2) = 0 AND N > RN 
     )
SELECT RNL FROM T3 WHERE RL = &D - 1;



ORA-32033: unsupported column aliasing. А кто-нибудь пробовал решить эту задачу на sql?
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38495055
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Просто,

версия просто у вас не та...
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38495070
Фотография Просто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender, у меня 10.2.0.3. А какая нужна?
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38495086
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто,

Версию решения, скорей всего имел ввиду xtender.
Здесь посмотрите Задача о восьми Ферзях на Oracle SQL
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38495090
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Просто,

для того решения 11.2. В 10-ке можно этими решениями: http://habrahabr.ru/post/128137/
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38495511
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто,

см stff про домино и ферзей
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38498632
Вот как бы быстро реализовать маску ферзя со смещением? )))
То есть просто число в десятичной системе, из 64-х бит, где выставленные биты означают битое ферзем поле.
Далее берем ферзя и его 64 возможных позиции на доске + эту маску со смещением для каждой позиции.
Берем второго фрезя тоже с его маской+(смещение по позиции) и достаем только те его позиции, bitand которых с маской первого фрезя равно нулю + делаем bitor его маски с маской первого фрезя
Далее так же берем третьего фрезя, снова достаем все его позиции, bitand позиций которых с суммарной маской полученной на прде. шаге равно нулю и так далее 8 ферзей.
Можно конечно написать отдельную функцию, которая для каждой позиции будет возвращать число-матрицу, можно подзапрос, но подзапрос у меня получается какой-то... Некрасивый в общем, чую, можно написать коротко и красиво, как в примерах )

Вероятно, я чего-то не понял просто, и именно так все и реализовано здесь, но у меня просто ни один из примеров не сработал пока (11.2)
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38498638
Нет. Вру. Работают.
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499550
Я имел в виду вот такого рода запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
with f as (select f.f,  -- номер позиции ферзя
                  power(2, f.f-1) pos, -- просто бит соответствующий номеру позиции
                  ceil(f.f/8) hl,  -- номер горизонтали
                  mod(f.f, 8) vl, -- номер верт. линии
                  -- сама битовая маска битых полей (сори за коломбур)) позиции ферзя
                  sum(case when ceil(c.c/8) = ceil(f.f/8) -- отмечаем горизонтали
                                   or mod(c.c, 8) = mod(f.f, 8) -- отмечаем вертикали
                                   -- отмечаем диагонали (здесь как-то совсем уж тупо сделал, но придумывать дальше лень )) 
                                   or (c.c >= f.f and (c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*9 or c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*7))
                                   or (c.c < f.f  and (c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*9 or c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*7))
                          then 1 else 0 end * power(2, c.c-1)) mask
           from (select level f from dual connect by level<65) f,
                (select level c from dual connect by level<65) c
              group by f.f, power(2, f.f-1), ceil(f.f/8), mod(f.f, 8)),
     -- создали маски битых полей для каждой из 64-х возможных позиций ферзя
     -- теперь собственно цепляем самих ферзй
     f2 as (select f1.f f1, f2.f f2, 
                   f1.vl v1, f2.vl v2,
                   f1.mask - bitand(f1.mask, f2.mask) + f2.mask or_mask
             from (select * from f where hl=1) f1,  -- 1-й ферзь ставим его на первую горизонталь
                  (select * from f where hl=2) f2  -- 2-й ферзь, его ставим на вторую горизонталь
               where f1.vl <> f2.vl
                 and bitand(f1.mask, f2.pos) = 0),                
     f3 as (select f1, f2, f3.f f3,
                   v1, v2, f3.vl v3,
                   f2.or_mask - bitand(f2.or_mask, f3.mask) + f3.mask or_mask
             from f2, (select * from f where hl=3) f3 -- к первому и второму цепляем третьего ферзя на третью горизонталь и т.д.
               where f3.vl not in (v1, v2)
                 and bitand(f2.or_mask, f3.pos) = 0),           
     f4 as (select f1, f2, f3, f4.f f4, 
                   v1, v2, v3, f4.vl v4,                  
                   f3.or_mask - bitand(f3.or_mask, f4.mask) + f4.mask or_mask
             from f3, (select * from f where hl=4) f4
               where f4.vl not in (v1, v2, v3)
                 and bitand(f3.or_mask, f4.pos) = 0),                    
     f5 as (select f1, f2, f3, f4, f5.f f5, 
                   v1, v2, v3, v4, f5.vl v5,
                   f4.or_mask - bitand(f4.or_mask, f5.mask) + f5.mask or_mask
             from f4, (select * from f where hl=5) f5
               where f5.vl not in (v1, v2, v3, v4)             
                 and bitand(f4.or_mask, f5.pos) = 0),
     f6 as (select f1, f2, f3, f4, f5, f6.f f6, 
                   v1, v2, v3, v4, v5, f6.vl v6,
                   f5.or_mask - bitand(f5.or_mask, f6.mask) + f6.mask or_mask
             from f5, (select * from f where hl=6) f6
               where f6.vl not in (v1, v2, v3, v4, v5)                
                 and bitand(f5.or_mask, f6.pos) = 0),
     f7 as (select f1, f2, f3, f4, f5, f6, f7.f f7, 
                   v1, v2, v3, v4, v5, v6, f7.vl v7,
                   f6.or_mask - bitand(f6.or_mask, f7.mask) + f7.mask or_mask
             from f6, (select * from f where hl=7) f7
               where f7.vl not in (v1, v2, v3, v4, v5, v6)
                 and bitand(f6.or_mask, f7.pos) = 0)     
     select f1, f2, f3, f4, f5, f6, f7, f.f f8
       from f7, (select * from f where hl=8) f
          where f.vl not in (v1, v2, v3, v4, v5, v6, v7)                                       
            and bitand(f7.or_mask, f.pos) = 0



Так вот интересный момент (для меня).
Когда запускаю этот запрос, то не могу дождаться окончания его выполнения (хинты тоже пробовал типа материализовать самый первый запрос (хотя по плану он итак пишется в темп), но в общем или не те, или в принципе это бесполезно).
Для меня очевидно, что кол-во переборов в таком варианте должно быть очень небольшим на каждой итерации, но запрос виснет.

А вот если самый первый запрос (с матрицами битых полей для каждой позиции) сразу зафигачить в табличку:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table f 
as
 select f.f,  
        power(2, f.f-1) pos,
        ceil(f.f/8) hl,
        mod(f.f, 8) vl,
        sum(case when ceil(c.c/8) = ceil(f.f/8)
                         or mod(c.c, 8) = mod(f.f, 8)
                         or (c.c >= f.f and (c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*9 or c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*7))
                         or (c.c < f.f  and (c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*9 or c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*7))
                then 1 else 0 end * power(2, c.c-1)) mask
 from (select level f from dual connect by level<65) f,
      (select level c from dual connect by level<65) c
    group by f.f, power(2, f.f-1), ceil(f.f/8), mod(f.f, 8)



И потом уже выполнить этот же самый запрос, но обращаясь к готовой табличке с матрицами:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
 with f2 as (select f1.f f1, f2.f f2, 
                   f1.vl v1, f2.vl v2,
                   f1.mask - bitand(f1.mask, f2.mask) + f2.mask or_mask
             from (select * from f where hl=1) f1, 
                  (select * from f where hl=2) f2
               where f1.vl <> f2.vl
                 and bitand(f1.mask, f2.pos) = 0),                
     f3 as (select f1, f2, f3.f f3,
                   v1, v2, f3.vl v3,
                   f2.or_mask - bitand(f2.or_mask, f3.mask) + f3.mask or_mask
             from f2, (select * from f where hl=3) f3
               where f3.vl not in (v1, v2)
                 and bitand(f2.or_mask, f3.pos) = 0),           
     f4 as (select f1, f2, f3, f4.f f4, 
                   v1, v2, v3, f4.vl v4,                  
                   f3.or_mask - bitand(f3.or_mask, f4.mask) + f4.mask or_mask
             from f3, (select * from f where hl=4) f4
               where f4.vl not in (v1, v2, v3)
                 and bitand(f3.or_mask, f4.pos) = 0),                    
     f5 as (select f1, f2, f3, f4, f5.f f5, 
                   v1, v2, v3, v4, f5.vl v5,
                   f4.or_mask - bitand(f4.or_mask, f5.mask) + f5.mask or_mask
             from f4, (select * from f where hl=5) f5
               where f5.vl not in (v1, v2, v3, v4)             
                 and bitand(f4.or_mask, f5.pos) = 0),
     f6 as (select f1, f2, f3, f4, f5, f6.f f6, 
                   v1, v2, v3, v4, v5, f6.vl v6,
                   f5.or_mask - bitand(f5.or_mask, f6.mask) + f6.mask or_mask
             from f5, (select * from f where hl=6) f6
               where f6.vl not in (v1, v2, v3, v4, v5)                
                 and bitand(f5.or_mask, f6.pos) = 0),
     f7 as (select f1, f2, f3, f4, f5, f6, f7.f f7, 
                   v1, v2, v3, v4, v5, v6, f7.vl v7,
                   f6.or_mask - bitand(f6.or_mask, f7.mask) + f7.mask or_mask
             from f6, (select * from f where hl=7) f7
               where f7.vl not in (v1, v2, v3, v4, v5, v6)
                 and bitand(f6.or_mask, f7.pos) = 0)     
     select f1, f2, f3, f4, f5, f6, f7, f.f f8
       from f7, (select * from f where hl=8) f
          where f.vl not in (v1, v2, v3, v4, v5, v6, v7)                                       
            and bitand(f7.or_mask, f.pos) = 0



То запрос выполняется моментально.
То есть получается, что:
- сама таблица с матрицей полей создается за доли секунды
- запрос на основе этой таблички выполняется тоже за доли секунды
А вот если написать как в изначально варианте одним запросом, то все висит.
Колдуны, подскажите, как нормально написать запрос? :)
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499577
The_beginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
/*+ RULE*/
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499590
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
/*+ materialize */ 
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499597
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
materialize+ordered
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
with 
     f as (select==>--+ materialize
                  f.f,  -- номер позиции ферзя
                  power(2, f.f-1) pos, -- просто бит соответствующий номеру позиции
                  ceil(f.f/8) hl,  -- номер горизонтали
                  mod(f.f, 8) vl, -- номер верт. линии
                  -- сама битовая маска битых полей (сори за коломбур)) позиции ферзя
                  sum(case when ceil(c.c/8) = ceil(f.f/8) -- отмечаем горизонтали
                                   or mod(c.c, 8) = mod(f.f, 8) -- отмечаем вертикали
                                   -- отмечаем диагонали (здесь как-то совсем уж тупо сделал, но придумывать дальше лень )) 
                                   or (c.c >= f.f and (c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*9 or c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*7))
                                   or (c.c < f.f  and (c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*9 or c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*7))
                          then 1 else 0 end * power(2, c.c-1)) mask
           from (select level f from dual connect by level<65) f,
                (select level c from dual connect by level<65) c
              group by f.f --, power(2, f.f-1), ceil(f.f/8), mod(f.f, 8)
              ),
     -- создали маски битых полей для каждой из 64-х возможных позиций ферзя
     -- теперь собственно цепляем самих ферзй
     f2 as (select f1.f f1, f2.f f2, 
                   f1.vl v1, f2.vl v2,
                   f1.mask - bitand(f1.mask, f2.mask) + f2.mask or_mask
             from (select * from f where hl=1) f1,  -- 1-й ферзь ставим его на первую горизонталь
                  (select * from f where hl=2) f2  -- 2-й ферзь, его ставим на вторую горизонталь
               where f1.vl <> f2.vl
                 and bitand(f1.mask, f2.pos) = 0),                
     f3 as (select f1, f2, f3.f f3,
                   v1, v2, f3.vl v3,
                   f2.or_mask - bitand(f2.or_mask, f3.mask) + f3.mask or_mask
             from f2, (select * from f where hl=3) f3 -- к первому и второму цепляем третьего ферзя на третью горизонталь и т.д.
               where f3.vl not in (v1, v2)
                 and bitand(f2.or_mask, f3.pos) = 0),           
     f4 as (select f1, f2, f3, f4.f f4, 
                   v1, v2, v3, f4.vl v4,                  
                   f3.or_mask - bitand(f3.or_mask, f4.mask) + f4.mask or_mask
             from f3, (select * from f where hl=4) f4
               where f4.vl not in (v1, v2, v3)
                 and bitand(f3.or_mask, f4.pos) = 0),                    
     f5 as (select f1, f2, f3, f4, f5.f f5, 
                   v1, v2, v3, v4, f5.vl v5,
                   f4.or_mask - bitand(f4.or_mask, f5.mask) + f5.mask or_mask
             from f4, (select * from f where hl=5) f5
               where f5.vl not in (v1, v2, v3, v4)             
                 and bitand(f4.or_mask, f5.pos) = 0),
     f6 as (select f1, f2, f3, f4, f5, f6.f f6, 
                   v1, v2, v3, v4, v5, f6.vl v6,
                   f5.or_mask - bitand(f5.or_mask, f6.mask) + f6.mask or_mask
             from f5, (select * from f where hl=6) f6
               where f6.vl not in (v1, v2, v3, v4, v5)                
                 and bitand(f5.or_mask, f6.pos) = 0),
     f7 as (select f1, f2, f3, f4, f5, f6, f7.f f7, 
                   v1, v2, v3, v4, v5, v6, f7.vl v7,
                   f6.or_mask - bitand(f6.or_mask, f7.mask) + f7.mask or_mask
             from f6, (select * from f where hl=7) f7
               where f7.vl not in (v1, v2, v3, v4, v5, v6)
                 and bitand(f6.or_mask, f7.pos) = 0)     
     select--+ ordered
             f1, f2, f3, f4, f5, f6, f7, f.f f8
       from f7, (select * from f where hl=8) f
          where f.vl not in (v1, v2, v3, v4, v5, v6, v7)                                       
            and bitand(f7.or_mask, f.pos) = 0

по идее leading лучше конечно, но лениво перечислять
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499600
Elic , пробовал (но только самом изначальном запросе) не помогло.
The_beginner , RULE дало результат - 4 секунды уже кое-что, возможно большего уже и не выжать.
Хотя все равно создание таблички + запрос на ее основе в сумме меньше секунды...
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499605
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
хотя порядок исправляется сам если воткнуть материализацию в f2 вместо f
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499608
xtender , +ordered тоже 4 секунды.
В общем и целом наверно и нормально хз, хотя все же смущает факт, описанный в момем пред. каменте.
Про leading потыкаю на досуге )
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499614
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Матрица ферзя,

сколько вот так?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
with f as (select 
                  f.f,  -- номер позиции ферзя
                  power(2, f.f-1) pos, -- просто бит соответствующий номеру позиции
                  ceil(f.f/8) hl,  -- номер горизонтали
                  mod(f.f, 8) vl, -- номер верт. линии
                  -- сама битовая маска битых полей (сори за коломбур)) позиции ферзя
                  sum(case when ceil(c.c/8) = ceil(f.f/8) -- отмечаем горизонтали
                                   or mod(c.c, 8) = mod(f.f, 8) -- отмечаем вертикали
                                   -- отмечаем диагонали (здесь как-то совсем уж тупо сделал, но придумывать дальше лень )) 
                                   or (c.c >= f.f and (c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*9 or c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*7))
                                   or (c.c < f.f  and (c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*9 or c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*7))
                          then 1 else 0 end * power(2, c.c-1)) mask
           from (select level f from dual connect by level<65) f,
                (select level c from dual connect by level<65) c
              group by f.f, power(2, f.f-1), ceil(f.f/8), mod(f.f, 8)),
     -- создали маски битых полей для каждой из 64-х возможных позиций ферзя
     -- теперь собственно цепляем самих ферзй
     f2 as (select--+ materialize
                   f1.f f1, f2.f f2, 
                   f1.vl v1, f2.vl v2,
                   f1.mask - bitand(f1.mask, f2.mask) + f2.mask or_mask
             from (select * from f where hl=1) f1,  -- 1-й ферзь ставим его на первую горизонталь
                  (select * from f where hl=2) f2  -- 2-й ферзь, его ставим на вторую горизонталь
               where f1.vl <> f2.vl
                 and bitand(f1.mask, f2.pos) = 0),                
     f3 as (select f1, f2, f3.f f3,
                   v1, v2, f3.vl v3,
                   f2.or_mask - bitand(f2.or_mask, f3.mask) + f3.mask or_mask
             from f2, (select * from f where hl=3) f3 -- к первому и второму цепляем третьего ферзя на третью горизонталь и т.д.
               where f3.vl not in (v1, v2)
                 and bitand(f2.or_mask, f3.pos) = 0),           
     f4 as (select f1, f2, f3, f4.f f4, 
                   v1, v2, v3, f4.vl v4,                  
                   f3.or_mask - bitand(f3.or_mask, f4.mask) + f4.mask or_mask
             from f3, (select * from f where hl=4) f4
               where f4.vl not in (v1, v2, v3)
                 and bitand(f3.or_mask, f4.pos) = 0),                    
     f5 as (select f1, f2, f3, f4, f5.f f5, 
                   v1, v2, v3, v4, f5.vl v5,
                   f4.or_mask - bitand(f4.or_mask, f5.mask) + f5.mask or_mask
             from f4, (select * from f where hl=5) f5
               where f5.vl not in (v1, v2, v3, v4)             
                 and bitand(f4.or_mask, f5.pos) = 0),
     f6 as (select f1, f2, f3, f4, f5, f6.f f6, 
                   v1, v2, v3, v4, v5, f6.vl v6,
                   f5.or_mask - bitand(f5.or_mask, f6.mask) + f6.mask or_mask
             from f5, (select * from f where hl=6) f6
               where f6.vl not in (v1, v2, v3, v4, v5)                
                 and bitand(f5.or_mask, f6.pos) = 0),
     f7 as (select f1, f2, f3, f4, f5, f6, f7.f f7, 
                   v1, v2, v3, v4, v5, v6, f7.vl v7,
                   f6.or_mask - bitand(f6.or_mask, f7.mask) + f7.mask or_mask
             from f6, (select * from f where hl=7) f7
               where f7.vl not in (v1, v2, v3, v4, v5, v6)
                 and bitand(f6.or_mask, f7.pos) = 0)     
     select--
           f1, f2, f3, f4, f5, f6, f7, f.f f8
       from f7, (select * from f where hl=8) f
          where f.vl not in (v1, v2, v3, v4, v5, v6, v7)                                       
            and bitand(f7.or_mask, f.pos) = 0

...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499615
xtender , удивительно, но да. Цель достигнута (меньше секунды просто materialize, но в f2):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
with f as (select f.f,  
                  power(2, f.f-1) pos,
                  ceil(f.f/8) hl,
                  mod(f.f, 8) vl,
                  sum(case when ceil(c.c/8) = ceil(f.f/8)
                                   or mod(c.c, 8) = mod(f.f, 8)
                                   or (c.c >= f.f and (c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*9 or c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*7))
                                   or (c.c < f.f  and (c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*9 or c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*7))
                          then 1 else 0 end * power(2, c.c-1)) mask
           from (select level f from dual connect by level<65) f,
                (select level c from dual connect by level<65) c
              group by f.f, power(2, f.f-1), ceil(f.f/8), mod(f.f, 8)),
     f2 as (select /*+ materialize*/ f1.f f1, f2.f f2, 
                   f1.vl v1, f2.vl v2,
                   f1.mask - bitand(f1.mask, f2.mask) + f2.mask or_mask
             from (select * from f where hl=1) f1, 
                  (select * from f where hl=2) f2
               where f1.vl <> f2.vl
                 and bitand(f1.mask, f2.pos) = 0),                
     f3 as (select f1, f2, f3.f f3,
                   v1, v2, f3.vl v3,
                   f2.or_mask - bitand(f2.or_mask, f3.mask) + f3.mask or_mask
             from f2, (select * from f where hl=3) f3
               where f3.vl not in (v1, v2)
                 and bitand(f2.or_mask, f3.pos) = 0),           
     f4 as (select f1, f2, f3, f4.f f4, 
                   v1, v2, v3, f4.vl v4,                  
                   f3.or_mask - bitand(f3.or_mask, f4.mask) + f4.mask or_mask
             from f3, (select * from f where hl=4) f4
               where f4.vl not in (v1, v2, v3)
                 and bitand(f3.or_mask, f4.pos) = 0),                    
     f5 as (select f1, f2, f3, f4, f5.f f5, 
                   v1, v2, v3, v4, f5.vl v5,
                   f4.or_mask - bitand(f4.or_mask, f5.mask) + f5.mask or_mask
             from f4, (select * from f where hl=5) f5
               where f5.vl not in (v1, v2, v3, v4)             
                 and bitand(f4.or_mask, f5.pos) = 0),
     f6 as (select f1, f2, f3, f4, f5, f6.f f6, 
                   v1, v2, v3, v4, v5, f6.vl v6,
                   f5.or_mask - bitand(f5.or_mask, f6.mask) + f6.mask or_mask
             from f5, (select * from f where hl=6) f6
               where f6.vl not in (v1, v2, v3, v4, v5)                
                 and bitand(f5.or_mask, f6.pos) = 0),
     f7 as (select f1, f2, f3, f4, f5, f6, f7.f f7, 
                   v1, v2, v3, v4, v5, v6, f7.vl v7,
                   f6.or_mask - bitand(f6.or_mask, f7.mask) + f7.mask or_mask
             from f6, (select * from f where hl=7) f7
               where f7.vl not in (v1, v2, v3, v4, v5, v6)
                 and bitand(f6.or_mask, f7.pos) = 0)     
     select f1, f2, f3, f4, f5, f6, f7, f.f f8
       from f7, (select * from f where hl=8) f
          where f.vl not in (v1, v2, v3, v4, v5, v6, v7)                                       
            and bitand(f7.or_mask, f.pos) = 0



Всем спасибо
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499632
Ну и если materialize прописать вообще для каждого ферзя, то еще в 4 раза быстрее в районе 0.2с):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
with f as (select f.f,  
                  power(2, f.f-1) pos,
                  ceil(f.f/8) hl,
                  mod(f.f, 8) vl,
                  sum(case when ceil(c.c/8) = ceil(f.f/8)
                                   or mod(c.c, 8) = mod(f.f, 8)
                                   or (c.c >= f.f and (c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*9 or c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*7))
                                   or (c.c < f.f  and (c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*9 or c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*7))
                          then 1 else 0 end * power(2, c.c-1)) mask
           from (select level f from dual connect by level<65) f,
                (select level c from dual connect by level<65) c
              group by f.f, power(2, f.f-1), ceil(f.f/8), mod(f.f, 8)),
     f2 as (select /*+ materialize*/ f1.f f1, f2.f f2, 
                   f1.vl v1, f2.vl v2,
                   f1.mask - bitand(f1.mask, f2.mask) + f2.mask or_mask
             from (select * from f where hl=1) f1, 
                  (select * from f where hl=2) f2
               where f1.vl <> f2.vl
                 and bitand(f1.mask, f2.pos) = 0),                
     f3 as (select /*+ materialize*/ f1, f2, f3.f f3,
                   v1, v2, f3.vl v3,
                   f2.or_mask - bitand(f2.or_mask, f3.mask) + f3.mask or_mask
             from f2, (select * from f where hl=3) f3
               where f3.vl not in (v1, v2)
                 and bitand(f2.or_mask, f3.pos) = 0),           
     f4 as (select /*+ materialize*/ f1, f2, f3, f4.f f4, 
                   v1, v2, v3, f4.vl v4,                  
                   f3.or_mask - bitand(f3.or_mask, f4.mask) + f4.mask or_mask
             from f3, (select * from f where hl=4) f4
               where f4.vl not in (v1, v2, v3)
                 and bitand(f3.or_mask, f4.pos) = 0),                    
     f5 as (select /*+ materialize*/ f1, f2, f3, f4, f5.f f5, 
                   v1, v2, v3, v4, f5.vl v5,
                   f4.or_mask - bitand(f4.or_mask, f5.mask) + f5.mask or_mask
             from f4, (select * from f where hl=5) f5
               where f5.vl not in (v1, v2, v3, v4)             
                 and bitand(f4.or_mask, f5.pos) = 0),
     f6 as (select /*+ materialize*/ f1, f2, f3, f4, f5, f6.f f6, 
                   v1, v2, v3, v4, v5, f6.vl v6,
                   f5.or_mask - bitand(f5.or_mask, f6.mask) + f6.mask or_mask
             from f5, (select * from f where hl=6) f6
               where f6.vl not in (v1, v2, v3, v4, v5)                
                 and bitand(f5.or_mask, f6.pos) = 0),
     f7 as (select /*+ materialize*/ f1, f2, f3, f4, f5, f6, f7.f f7, 
                   v1, v2, v3, v4, v5, v6, f7.vl v7,
                   f6.or_mask - bitand(f6.or_mask, f7.mask) + f7.mask or_mask
             from f6, (select * from f where hl=7) f7
               where f7.vl not in (v1, v2, v3, v4, v5, v6)
                 and bitand(f6.or_mask, f7.pos) = 0)     
     select f1, f2, f3, f4, f5, f6, f7, f.f f8
       from f7, (select * from f where hl=8) f
          where f.vl not in (v1, v2, v3, v4, v5, v6, v7)                                       
            and bitand(f7.or_mask, f.pos) = 0

...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499654
Матрица ферзя,

Тупо перебором по orawish
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t as ( select level s from dual connect by level < = 8 )
  select a.s||b.s||c.s||d.s||e.s||f.s||g.s||h.s text
    from t a, t b, t c, t d, t e, t f, t g, t h
      where b.s not in (a.s-1,a.s,a.s+1 )
        and c.s not in (a.s-2,a.s,a.s+2 ,b.s-1,b.s,b.s+1 )
        and d.s not in (a.s-3,a.s,a.s+3 ,b.s-2,b.s,b.s+2 ,c.s-1,c.s,c.s+1 )
        and e.s not in (a.s-4,a.s,a.s+4 ,b.s-3,b.s,b.s+3 ,c.s-2,c.s,c.s+2 ,d.s-1,d.s,d.s+1 )
        and f.s not in (a.s-5,a.s,a.s+5 ,b.s-4,b.s,b.s+4 ,c.s-3,c.s,c.s+3 ,d.s-2,d.s,d.s+2 ,e.s-1,e.s,e.s+1 )
        and g.s not in (a.s-6,a.s,a.s+6 ,b.s-5,b.s,b.s+5 ,c.s-4,c.s,c.s+4 ,d.s-3,d.s,d.s+3 ,e.s-2,e.s,e.s+2 ,f.s-1,f.s,f.s+1 )
        and h.s not in (a.s-7,a.s,a.s+7 ,b.s-6,b.s,b.s+6 ,c.s-5,c.s,c.s+5 ,d.s-4,d.s,d.s+4 ,e.s-3,e.s,e.s+3 ,f.s-2,f.s,f.s+2 ,g.s-1,g.s,g.s+1 )
      order by text;
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499677
воткактотак , не понял правда что означает приведенный запрос ).
Или если это об условяих not in в целом, то их можно убрать (это так... мелочь - плюс какие-то еще доли секунды выигрвает и все), и без not in будет работать тоже за 0.2сек :):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
with f as (select f.f,  
                  power(2, f.f-1) pos,
                  ceil(f.f/8) hl,
                  mod(f.f, 8) vl,
                  sum(case when ceil(c.c/8) = ceil(f.f/8)
                                   or mod(c.c, 8) = mod(f.f, 8)
                                   or (c.c >= f.f and (c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*9 or c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*7))
                                   or (c.c < f.f  and (c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*9 or c.c = f.f - (ceil(f.f/8)- ceil(c.c/8))*7))
                          then 1 else 0 end * power(2, c.c-1)) mask
           from (select level f from dual connect by level<65) f,
                (select level c from dual connect by level<65) c
              group by f.f, power(2, f.f-1), ceil(f.f/8), mod(f.f, 8)),
     f2 as (select /*+ materialize*/ f1.f f1, f2.f f2, 
                   f1.vl v1, f2.vl v2,
                   f1.mask - bitand(f1.mask, f2.mask) + f2.mask or_mask
             from (select * from f where hl=1) f1, 
                  (select * from f where hl=2) f2
               where bitand(f1.mask, f2.pos) = 0),                
     f3 as (select /*+ materialize*/ f1, f2, f3.f f3,
                   v1, v2, f3.vl v3,
                   f2.or_mask - bitand(f2.or_mask, f3.mask) + f3.mask or_mask
             from f2, (select * from f where hl=3) f3
               where bitand(f2.or_mask, f3.pos) = 0),           
     f4 as (select /*+ materialize*/ f1, f2, f3, f4.f f4, 
                   v1, v2, v3, f4.vl v4,                  
                   f3.or_mask - bitand(f3.or_mask, f4.mask) + f4.mask or_mask
             from f3, (select * from f where hl=4) f4
               where bitand(f3.or_mask, f4.pos) = 0),                    
     f5 as (select /*+ materialize*/ f1, f2, f3, f4, f5.f f5, 
                   v1, v2, v3, v4, f5.vl v5,
                   f4.or_mask - bitand(f4.or_mask, f5.mask) + f5.mask or_mask
             from f4, (select * from f where hl=5) f5
               where bitand(f4.or_mask, f5.pos) = 0),
     f6 as (select /*+ materialize*/ f1, f2, f3, f4, f5, f6.f f6, 
                   v1, v2, v3, v4, v5, f6.vl v6,
                   f5.or_mask - bitand(f5.or_mask, f6.mask) + f6.mask or_mask
             from f5, (select * from f where hl=6) f6
               where bitand(f5.or_mask, f6.pos) = 0),
     f7 as (select /*+ materialize*/ f1, f2, f3, f4, f5, f6, f7.f f7, 
                   v1, v2, v3, v4, v5, v6, f7.vl v7,
                   f6.or_mask - bitand(f6.or_mask, f7.mask) + f7.mask or_mask
             from f6, (select * from f where hl=7) f7
               where bitand(f6.or_mask, f7.pos) = 0)     
     select f1, f2, f3, f4, f5, f6, f7, f.f f8
       from f7, (select * from f where hl=8) f
          where bitand(f7.or_mask, f.pos) = 0


Но мож что-то другое имели в виду.
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499802
Убрал все лишнее из запроса - время 0.15с:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
with f as (select f.f,  
                  power(2, f.f-1) pos,
                  ceil(f.f/8) hl,
                  -- в маске по сути можно оставить только вертикали и верхнюю часть диагоналей
                  sum(case when mod(c.c, 8) = mod(f.f, 8)  -- вертикали
                                or (c.c >= f.f and (c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*9 or c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*7))
                          then 1 else 0 end * power(2, c.c-1)) mask
           from (select level f from dual connect by level<65) f,
                (select level c from dual connect by level<65) c
              group by f.f, power(2, f.f-1), ceil(f.f/8), mod(f.f, 8)),
     f2 as (select /*+ materialize*/ f1.f f1, f2.f f2, 
                   f1.mask - bitand(f1.mask, f2.mask) + f2.mask or_mask
             from (select * from f where hl=1) f1, 
                  (select * from f where hl=2) f2
               where bitand(f1.mask, f2.pos) = 0),                
     f3 as (select /*+ materialize*/ f1, f2, f.f f3,
                   f2.or_mask - bitand(f2.or_mask, f.mask) + f.mask or_mask
             from f2, f 
               where f.hl=3 and bitand(f2.or_mask, f.pos) = 0),           
     f4 as (select /*+ materialize*/ f1, f2, f3, f.f f4,      
                   f3.or_mask - bitand(f3.or_mask, f.mask) + f.mask or_mask
             from f3, f
               where f.hl=4 and bitand(f3.or_mask, f.pos) = 0),                    
     f5 as (select /*+ materialize*/ f1, f2, f3, f4, f.f f5, 
                   f4.or_mask - bitand(f4.or_mask, f.mask) + f.mask or_mask
             from f4, f 
               where f.hl=5 and bitand(f4.or_mask, f.pos) = 0),
     f6 as (select /*+ materialize*/ f1, f2, f3, f4, f5, f.f f6, 
                   f5.or_mask - bitand(f5.or_mask, f.mask) + f.mask or_mask
             from f5, f 
               where f.hl=6 and bitand(f5.or_mask, f.pos) = 0),
     f7 as (select /*+ materialize*/ f1, f2, f3, f4, f5, f6, f.f f7, 
                   f6.or_mask - bitand(f6.or_mask, f.mask) + f.mask or_mask
             from f6, f 
               where f.hl = 7 and bitand(f6.or_mask, f.pos) = 0)     
     select f1, f2, f3, f4, f5, f6, f7, f.f f8
       from f7, f 
          where f.hl = 8 and bitand(f7.or_mask, f.pos) = 0


Но есть предчувствие, что этот запрос можно написать еще более кратко, - как-то законнектбаить само добавление ферзей, тогда его и масштабировать будет проще да и просто лучше смотреться будет )
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499809
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Матрица ферзя,

можно попробовать вместо materialize добавить поле rownum везде
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499824
xtenderможно попробовать вместо materialize добавить поле rownum везде
0.4-0.5с ):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
with f as (select f.f,  
                  power(2, f.f-1) pos,
                  ceil(f.f/8) hl,
                  -- в маску пишем только верхнюю часть вертикалей и диагоналей
                  sum(case when (c.c >= f.f and 
                                  (c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*9 or c.c = f.f + (ceil(c.c/8)- ceil(f.f/8))*7 
                                   or mod(c.c, 8) = mod(f.f, 8))
                                )
                          then 1 else 0 end * power(2, c.c-1)) mask
           from (select level f from dual connect by level<65) f,
                (select level c from dual connect by level<65) c
              group by f.f, power(2, f.f-1), ceil(f.f/8), mod(f.f, 8)),
     f2 as (select rownum rnum, f1.f f1, f2.f f2, 
                   f1.mask - bitand(f1.mask, f2.mask) + f2.mask or_mask
             from (select * from f where hl=1) f1, 
                  (select * from f where hl=2) f2
               where bitand(f1.mask, f2.pos) = 0),                
     f3 as (select rownum rn, f1, f2, f.f f3,
                   f2.or_mask - bitand(f2.or_mask, f.mask) + f.mask or_mask
             from f2, f 
               where f.hl=3 and bitand(f2.or_mask, f.pos) = 0),           
     f4 as (select rownum rn, f1, f2, f3, f.f f4,      
                   f3.or_mask - bitand(f3.or_mask, f.mask) + f.mask or_mask
             from f3, f
               where f.hl=4 and bitand(f3.or_mask, f.pos) = 0),                    
     f5 as (select rownum rn, f1, f2, f3, f4, f.f f5, 
                   f4.or_mask - bitand(f4.or_mask, f.mask) + f.mask or_mask
             from f4, f 
               where f.hl=5 and bitand(f4.or_mask, f.pos) = 0),
     f6 as (select rownum rn, f1, f2, f3, f4, f5, f.f f6, 
                   f5.or_mask - bitand(f5.or_mask, f.mask) + f.mask or_mask
             from f5, f 
               where f.hl=6 and bitand(f5.or_mask, f.pos) = 0),
     f7 as (select rownum rn, f1, f2, f3, f4, f5, f6, f.f f7, 
                   f6.or_mask - bitand(f6.or_mask, f.mask) + f.mask or_mask
             from f6, f 
               where f.hl = 7 and bitand(f6.or_mask, f.pos) = 0)     
     select f1, f2, f3, f4, f5, f6, f7, f.f f8
       from f7, f 
          where f.hl = 8 and bitand(f7.or_mask, f.pos) = 0


Потыкать бы еще всторону уменьшения самого запроса, как-то законнектбаить добавление ферзей.
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38499837
Кстати вру - не 0.4-0.5 а уже 0.14-0.15с )
В общем теперь точно это сопоставимо по времени с созадние таблички+запрос к этой табличке.
Осталось еще попробовать сам запрос переписать так, чтобы добавление ферзей в цикле сделать )
...
Рейтинг: 0 / 0
Задача о восьми ферзях
    #38627050
upsarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошая задачка.

У меня чуток побыстрее получилось ( менее 0.1 ):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
select c1.hc||c1.v f1, c2.hc||c2.v f2, c3.hc||c3.v f3, c4.hc||c4.v f4,
       c5.hc||c5.v f5, c6.hc||c6.v f6, c7.hc||c7.v f7, c8.hc||c8.v f8
from   (select level h,chr(96+level) hc, 1 v, 1+level d2, 1-level d1 from dual connect by level <=8) c1,
       (select level h,chr(96+level) hc, 2 v, 2+level d2, 2-level d1 from dual connect by level <=8) c2,
       (select level h,chr(96+level) hc, 3 v, 3+level d2, 3-level d1 from dual connect by level <=8) c3,
       (select level h,chr(96+level) hc, 4 v, 4+level d2, 4-level d1 from dual connect by level <=8) c4,
       (select level h,chr(96+level) hc, 5 v, 5+level d2, 5-level d1 from dual connect by level <=8) c5,
       (select level h,chr(96+level) hc, 6 v, 6+level d2, 6-level d1 from dual connect by level <=8) c6,
       (select level h,chr(96+level) hc, 7 v, 7+level d2, 7-level d1 from dual connect by level <=8) c7,
       (select level h,chr(96+level) hc, 8 v, 8+level d2, 8-level d1 from dual connect by level <=8) c8
where  c1.h not in (c2.h,c3.h,c4.h,c5.h,c6.h,c7.h,c8.h)
and    c2.h not in (c1.h,c3.h,c4.h,c5.h,c6.h,c7.h,c8.h)
and    c3.h not in (c1.h,c2.h,c4.h,c5.h,c6.h,c7.h,c8.h)
and    c4.h not in (c1.h,c2.h,c3.h,c5.h,c6.h,c7.h,c8.h)
and    c5.h not in (c1.h,c2.h,c3.h,c4.h,c6.h,c7.h,c8.h)
and    c6.h not in (c1.h,c2.h,c3.h,c4.h,c5.h,c7.h,c8.h)
and    c7.h not in (c1.h,c2.h,c3.h,c4.h,c5.h,c6.h,c8.h)
and    c8.h not in (c1.h,c2.h,c3.h,c4.h,c5.h,c6.h,c7.h)
and    c1.d1 not in (c2.d1,c3.d1,c4.d1,c5.d1,c6.d1,c7.d1,c8.d1)
and    c2.d1 not in (c1.d1,c3.d1,c4.d1,c5.d1,c6.d1,c7.d1,c8.d1)
and    c3.d1 not in (c1.d1,c2.d1,c4.d1,c5.d1,c6.d1,c7.d1,c8.d1)
and    c4.d1 not in (c1.d1,c2.d1,c3.d1,c5.d1,c6.d1,c7.d1,c8.d1)
and    c5.d1 not in (c1.d1,c2.d1,c3.d1,c4.d1,c6.d1,c7.d1,c8.d1)
and    c6.d1 not in (c1.d1,c2.d1,c3.d1,c4.d1,c5.d1,c7.d1,c8.d1)
and    c7.d1 not in (c1.d1,c2.d1,c3.d1,c4.d1,c5.d1,c6.d1,c8.d1)
and    c8.d1 not in (c1.d1,c2.d1,c3.d1,c4.d1,c5.d1,c6.d1,c7.d1)
and    c1.d2 not in (c2.d2,c3.d2,c4.d2,c5.d2,c6.d2,c7.d2,c8.d2)
and    c2.d2 not in (c1.d2,c3.d2,c4.d2,c5.d2,c6.d2,c7.d2,c8.d2)
and    c3.d2 not in (c1.d2,c2.d2,c4.d2,c5.d2,c6.d2,c7.d2,c8.d2)
and    c4.d2 not in (c1.d2,c2.d2,c3.d2,c5.d2,c6.d2,c7.d2,c8.d2)
and    c5.d2 not in (c1.d2,c2.d2,c3.d2,c4.d2,c6.d2,c7.d2,c8.d2)
and    c6.d2 not in (c1.d2,c2.d2,c3.d2,c4.d2,c5.d2,c7.d2,c8.d2)
and    c7.d2 not in (c1.d2,c2.d2,c3.d2,c4.d2,c5.d2,c6.d2,c8.d2)
and    c8.d2 not in (c1.d2,c2.d2,c3.d2,c4.d2,c5.d2,c6.d2,c7.d2)

...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Задача о восьми ферзях
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]