powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / пятничная задачка (про) коня
25 сообщений из 118, страница 4 из 5
пятничная задачка (про) коня
    #37739038
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish~2e9 решений полузадачиНе понял при чем здесь два миллиарда.
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37739053
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop, я же и говорю о ширине коридора.
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37739271
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshoporawish~2e9 решений полузадачиНе понял при чем здесь два миллиарда.
это бред (). очередное доказательство, что нефиг трендеть на основе домыслов, а надо запросы писать.
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741148
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обычным SQL за 0.2 сек на Оракл 9.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.
DROP TABLE TABLES;

CREATE TABLE TABLES AS
WITH
T AS
(SELECT ROWNUM i FROM dual connect BY ROWNUM < 9)
SELECT t1.i r, t2.i c,
       (t1.i-1)*8+t2.i ID
  FROM T t1, T t2
;

DROP TABLE s;

CREATE TABLE s
AS
WITH
s AS(
SELECT  1 r,  2 c FROM dual UNION ALL
SELECT  1 r, -2 c FROM dual UNION ALL
SELECT  2 r, -1 c FROM dual UNION ALL
SELECT  2 r,  1 c FROM dual UNION ALL
SELECT -1 r,  2 c FROM dual UNION ALL
SELECT -1 r, -2 c FROM dual UNION ALL
SELECT -2 r, -1 c FROM dual UNION ALL
SELECT -2 r,  1 c FROM dual
)
SELECT t_from.ID id_from,
       t_from.r r_from,
       t_from.c c_from,
       t_to.ID id_to,
       t_to.r  r_to,
       t_to.c  c_to
  FROM TABLES t_from,
       s,
       TABLES t_to
 WHERE t_from.r + s.r = t_to.r
   AND t_from.c + s.c = t_to.c
 ORDER BY id_from, id_to;


DROP TABLE ss;

CREATE TABLE ss AS
SELECT s1.id_from, s1.id_to id_to1, s2.id_to id_to2
  FROM s s1,
       s s2
 WHERE s2.id_from = s1.id_to;



запрос
Код: 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.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
WITH
t0 AS
(SELECT ',1,' ID, 1 id_new FROM dual),
t1 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T0 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t2 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T1 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t3 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T2 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t4 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T3 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t5 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T4 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t6 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T5 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t7 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T6 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t8 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T7 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t9 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T8 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t10 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T9 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t11 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T10 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t12 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T11 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t13 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T12 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t14 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T13 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t15 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T14 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t16 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T15 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t17 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T16 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t18 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T17 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t19 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T18 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t20 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T19 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t21 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T20 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t22 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T21 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t23 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T22 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t24 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T23 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t25 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T24 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t26 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T25 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t27 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T26 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t28 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T27 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t29 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T28 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t30 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T29 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t31 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T30 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t32 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T31 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t33 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T32 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t34 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T33 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t35 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T34 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t36 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T35 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t37 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T36 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t38 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T37 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t39 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T38 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t40 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T39 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t41 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T40 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t42 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T41 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t43 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T42 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t44 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T43 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t45 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T44 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t46 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T45 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t47 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T46 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t48 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T47 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t49 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T48 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t50 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T49 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t51 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T50 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t52 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T51 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t53 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T52 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t54 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T53 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t55 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T54 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t56 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T55 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t57 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T56 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t58 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T57 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t59 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T58 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t60 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T59 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t61 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T60 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t62 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T61 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
   AND T.ID NOT LIKE '%,'||ss.id_to2||',%' 
 GROUP BY ss.id_to1
)),

t63 AS
(SELECT ID||id_new||',' ID, id_new FROM(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, MAX(MAX(ID)) ID
  FROM T62 T,
       ss
 WHERE ss.id_from = T.id_new
   AND T.ID NOT LIKE '%,'||ss.id_to1||',%' 
 GROUP BY ss.id_to1
))
SELECT * FROM t63



результат:
,1,18,33,50,60,54,64,47,62,56,39,24,7,13,3,9,26,41,58,52,35,25,10,4,19,2,17,11,5,20,14,8,23,40,55,61,51,57,42,59,49,34,44,29,46,63,48,31,16,6,12,27,37,43,53,36,30,45,28,22,32,38,21,15,



11-ки у меня еще нету...
возможно, её WITH бы помог обойтись меньшим количеством кода?
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741156
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на всякий - я этот запрос вручную не набирал :)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WITH
T0 AS (SELECT ROWNUM-1 I0, ROWNUM I FROM dual connect BY ROWNUM < 64)
SELECT
't' || i || ' AS
(select id||id_new||'','' id, id_new from(
SELECT MAX(ss.id_to1) KEEP(DENSE_RANK FIRST ORDER BY COUNT(*)) ID_new, max(max(id)) id
  FROM T' || i0 || ' t,
       ss
 WHERE ss.id_from = t.id_new
   AND T.id not like ''%,''||ss.id_to1||'',%'' 
   AND T.id not like ''%,''||ss.id_to2||'',%'' 
 GROUP BY ss.id_to1
)),
' FROM t0 

...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741231
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оказывается, 11g не любит GROUP BY и аналитику в RECURSIVE WITH с UNION ALL
вываливается ORA-32486

а так бы всё красиво :)

Код: 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.
/* Formatted on 05.04.2012 23:21:38 (QP5 v5.163.1008.3004) */
WITH Z
     AS (SELECT     ROWNUM I
               FROM DUAL
         CONNECT BY ROWNUM < 9),
     TABLES
     AS (SELECT T1.I R, T2.I C, (T1.I - 1) * 8 + T2.I ID
           FROM Z T1, Z T2),
     Sint
     AS (SELECT 1 R, 2 C FROM DUAL
         UNION ALL
         SELECT 1 R, -2 C FROM DUAL
         UNION ALL
         SELECT 2 R, -1 C FROM DUAL
         UNION ALL
         SELECT 2 R, 1 C FROM DUAL
         UNION ALL
         SELECT -1 R, 2 C FROM DUAL
         UNION ALL
         SELECT -1 R, -2 C FROM DUAL
         UNION ALL
         SELECT -2 R, -1 C FROM DUAL
         UNION ALL
         SELECT -2 R, 1 C FROM DUAL),
     S
     AS (SELECT T_from.ID Id_from,
                T_from.R R_from,
                T_from.C C_from,
                T_to.ID Id_to,
                T_to.R R_to,
                T_to.C C_to
           FROM TABLES T_from, Sint S, TABLES T_to
          WHERE T_from.R + S.R = T_to.R AND T_from.C + S.C = T_to.C),
     Ss
     AS (SELECT S1.Id_from, S1.Id_to Id_to1, S2.Id_to Id_to2
           FROM S S1, S S2
          WHERE S2.Id_from = S1.Id_to),
     T0 AS (SELECT ',1,' ID, 1 Id_new, 1 L FROM DUAL),
     T(ID, Id_new, L)
     AS (
         SELECT ID, Id_new, L FROM T0
         UNION ALL
         --SELECT ID||id_new||',' ID, id_new, l+1 l FROM(
         SELECT      MAX(MAX(ID))
                  || MAX(Ss.Id_to1) KEEP (DENSE_RANK FIRST ORDER BY COUNT(*))
                  || ','
                     ID,
                  MAX(Ss.Id_to1) KEEP (DENSE_RANK FIRST ORDER BY COUNT(*))
                     Id_new,
                  MAX(MAX(L))+1 L
             FROM T, Ss
            WHERE Ss.Id_from = T.Id_new
              AND T.ID NOT LIKE '%,' || Ss.Id_to1 || ',%'
              AND T.ID NOT LIKE '%,' || Ss.Id_to2 || ',%'
              AND L < 63
         GROUP BY Ss.Id_to1--)
        )
SELECT *
  FROM T
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741243
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добил-таки
одним запросом
:)
Код: 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.
WITH Z AS
        (SELECT ROWNUM I
            FROM DUAL
         CONNECT BY ROWNUM < 9
        ),
     TABLES AS
        (SELECT T1.I R, T2.I C, (T1.I - 1) * 8 + T2.I ID
           FROM Z T1, Z T2
         ),
     Sint
     AS (SELECT  1 R,  2 C FROM DUAL UNION ALL
         SELECT  1 R, -2 C FROM DUAL UNION ALL
         SELECT  2 R, -1 C FROM DUAL UNION ALL
         SELECT  2 R,  1 C FROM DUAL UNION ALL
         SELECT -1 R,  2 C FROM DUAL UNION ALL
         SELECT -1 R, -2 C FROM DUAL UNION ALL
         SELECT -2 R, -1 C FROM DUAL UNION ALL
         SELECT -2 R,  1 C FROM DUAL
        ),
     S AS
        (SELECT T_from.ID Id_from,
                T_from.R R_from,
                T_from.C C_from,
                T_to.ID Id_to,
                T_to.R R_to,
                T_to.C C_to
           FROM TABLES T_from, Sint S, TABLES T_to
          WHERE T_from.R + S.R = T_to.R AND T_from.C + S.C = T_to.C
        ),
     Ss
     AS (SELECT S1.Id_from, S1.Id_to Id_to1, S2.Id_to Id_to2
           FROM S S1, S S2
          WHERE S2.Id_from = S1.Id_to
        ),
     T0 AS (SELECT cast(',' AS VARCHAR2(4000)) ID FROM DUAL),
     T (ID, Id_new, L)
     AS (
         SELECT ID, 1 Id_new, 1 L FROM T0
         UNION ALL
         SELECT   ID || Id_new || ',' ID,
                  (
                     SELECT      MAX(Ss.Id_to1) KEEP (DENSE_RANK FIRST ORDER BY COUNT(*))
                         FROM Ss
                        WHERE Ss.Id_from = T.Id_new
                          AND T.ID || Id_new || ',' NOT LIKE '%,' || Ss.Id_to1 || ',%'
                          AND (T.ID || Id_new || ',' NOT LIKE '%,' || Ss.Id_to2 || ',%' OR l = 63)
                     GROUP BY Ss.Id_to1
                  )   Id_new,
                  L+1 L
             FROM T
            WHERE L < 64
        )
SELECT ID || id_new
  FROM T
 WHERE l = 64
 




для ОРакл 11XE
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741253
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты и демон. Ладно завтра проверю.
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741737
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxДобил-таки
одним запросом
:)

..

для ОРакл 11XE

а на результат с какой стороны смотреть?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
,1 ,18,33,50,60,54,64,47
,62,56,39,24, 7,13, 3, 9
,26,41,58,52,35,25,10, 4
,19, 2,17,11, 5,20,14, 8
,23,40,55,61,51,57,42,59
,49,34,44,29,46,63,48,31
,16, 6,12,27,37,43,53,36
,30,45,28,22,32,38,21,15
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741748
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

номера полей при обходе12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741759
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxorawish,

номера полей при обходе1t2t3t4t5t6t7t89t10t11t12t13t14t15t1617t18t19t20t21t22t23t2425t26t27t28t29t30t31t3233t34t35t36t37t38t39t4041t42t43t44t45t46t47t4849t50t51t52t53t54t55t5657t58t59t60t61t62t63t64
ага! теперь понятно :)
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741768
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

чесслово - я не нарочно. это цитирование обалдело
:)
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37741772
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishandreymx,

чесслово - я не нарочно. это цитирование обалдело
:)та мы сами такие
:)
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37749198
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как оказалось, 11g вполне достаточно, чтобы таки решить задачу про все решения тупым перебором.

как то грустно даже
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37749200
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

Аудитория замерла в ожидании.
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37749208
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshoporawish,

Аудитория замерла в ожидании.

после 25-го хода количество вариантов позиции начинает уверенно падать.
пока - это всё, что могу сказать.
а полный расклад обязательно будет, но чуть позже. :)
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37749221
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эээ ... пора звать автора "Стебелька". Уж у него-то есть быстрое решение по этой задаче.
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37749229
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭээ ... пора звать автора "Стебелька". Уж у него-то есть быстрое решение по этой задаче.
не силён я в фольклоре. о чем вы?
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #37749455
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishmaytonЭээ ... пора звать автора "Стебелька". Уж у него-то есть быстрое решение по этой задаче.
не силён я в фольклоре. о чем вы?
А забудь, проехали.
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #38004537
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
быстро сказка сказывается, но как всегда дело делается
дотолкал я таки в гору этот паровоз. и .. получил, таки от оракла значение, которое и так знал -
http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%85%D0%BE%D0%B4%D0%B5_%D0%BA%D0%BE%D0%BD%D1%8F Количество всех замкнутых маршрутов коня (гамильтоновых циклов) без учёта направления обхода равно 13 267 364 410 532
(спасибочки предыдущим сетевым и прочим исследователям, а также википедии)

четыре картинки (маслом) чего это стоило на (сугубо одной ноде от x2:2 1/4)
1) спейса - чтобы хранить все результаты (причем с учетом, что использовалась compress for query high) надо ~4.9 Tb.
но, поскольку всё хранить не надо, а достаточно хранить лишь два шага (из энного считается еэплюспервый), то
,в пике (35 ход) это "всего" 825 Gb
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #38004542
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2) времени (тут мы понимаем, что один шаг состоит из 64/2 = 32 полей)
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #38004548
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3)
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #38004549
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4) ну и, собственно, результат
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #38005155
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%85%D0%BE%D0%B4%D0%B5_%D0%BA%D0%BE%D0%BD%D1%8F Количество всех замкнутых маршрутов коня (гамильтоновых циклов) без учёта направления обхода равно 13 267 364 410 532dbms_photoshopТри минуты гугления привели к: 33,439,123,484,294 .Как же все-таки банально описание того, что процитированная мной цифра неправильная. http://en.wikipedia.org/wiki/Talk%3AKnight%27s_tour Yes, that's the entry, and I agree it's not completely clear. It claims "Loebbing and Wegener give 33,439,123,484,294 for the 8 X 8 board. The value given here is due to B. McKay and agrees with that given by Wegener in his book.". Reading Loebbing and Wegener gives the figure 33,439,123,484,294 (closed, undirected), but it also claims that it's wrong, because 33,439,123,484,294 is not divisible by 4 . It seems to me that the Sloane page is saying that 13,267,364,410,532 is the corrected figure for 33,439,123,484,294, and is therefore the correct number of closed, undirected 8x8 knight's tours. Wolfram's Mathworld agrees with the 13,267,364,410,532 figure, and they cite [Wegener, I. Branching Programs and Binary Decision Diagrams. Philadelphia, PA: SIAM, 2000] which is a book [ISBN 0-898-71458-3]. I don't have the book, but at this point I think we've got enough verifiability, so I'm going ahead. Until a wiki-author reads that book, I think we don't know the number of non-closed tours. Mathworld simply quotes the figure from the paper which gives the wrong figure for the number of closed tours, which must be highly suspect. Adam1729 07:23, 12 April 2007 (UTC) 13,267,364,410,532
...
Рейтинг: 0 / 0
пятничная задачка (про) коня
    #38005166
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

да, симметрия - существенна для этой задачи.
так, очевидно, что решение для количества всех нециклических траекторий может быть получено как сумма 10 расчетов -
(например) с начальных полей a1,b1,b2,c1-c3,d1-d4, разумеется, с учетом соответствующего симметрии каждого поля веса.
также, для полей большой диагонали (a1,b2,c3,d4) симметрия позволяет вдвое (т.е. диагонально) ограничить и позиции второго хода.
...
Рейтинг: 0 / 0
25 сообщений из 118, страница 4 из 5
Форумы / Oracle [игнор отключен] [закрыт для гостей] / пятничная задачка (про) коня
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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