vak: (Улыбка)
[personal profile] vak
Задачка из математического кружка:

Три фермера продавали куриц на местном рынке. У одного было 10 куриц, у второго — 16, у третьего — 26. Чтобы не конкурировать между собой, они договорились продавать куриц по одной цене. К обеду они решили, что продажи идут не так уж хорошо, поэтому они все одинаково понизили цену. К концу дня они продали всех куриц. Оказалось, что каждый из фермеров за этот день выручил 35 долларов. Какова была цена за курицу до обеда и после обеда?

Програмка на SQL от Vladimir Begun:
SQL> WITH
2 c$ AS (SELECT /*+ MATERIALIZE */ ROWNUM v FROM dual CONNECT BY LEVEL <= 3500)
3 , c1 AS (SELECT /*+ MATERIALIZE */ v - 1 v FROM c$ WHERE v <= 11)
4 , c2 AS (SELECT /*+ MATERIALIZE */ v - 1 v FROM c$ WHERE v <= 17)
5 , c3 AS (SELECT /*+ MATERIALIZE */ v - 1 v FROM c$ WHERE v <= 27)
6 , cr1 AS (
7 SELECT c.v f, (10 - c.v) s, c$1.v x, c$2.v y
8 FROM c$ c$1, c$ c$2, c1 c
9 WHERE c.v * c$1.v + (10 - c.v) * c$2.v = 3500 AND c$1.v >= c$2.v
10 )
11 , cr2 AS (
12 SELECT c.v f, (16 - c.v) s, c$1.v x, c$2.v y
13 FROM c$ c$1, c$ c$2, c2 c
14 WHERE c.v * c$1.v + (16 - c.v) * c$2.v = 3500 AND c$1.v >= c$2.v
15 )
16 , cr3 AS (
17 SELECT c.v f, (26 - c.v) s, c$1.v x, c$2.v y
18 FROM c$ c$1, c$ c$2, c3 c
19 WHERE c.v * c$1.v + (26 - c.v) * c$2.v = 3500 AND c$1.v >= c$2.v
20 )
21 SELECT /*+ USE_HASH(cr1 cr2 cr3) LEADING(cr1 cr2 cr3) */
22 cr1.f c1_f, cr1.s c1_s, cr2.f c2_f, cr2.s c2_s
23 , cr3.f c3_f, cr3.s c3_s, cr1.x / 100 x$, cr1.y / 100 y$
24 FROM cr1, cr2, cr3
25 WHERE cr1.x = cr2.x AND cr1.y = cr2.y AND cr2.x = cr3.x AND cr2.y = cr3.y
26 /
Находит решение за 34 секунды на процессоре 2.7 ГГц.

Есть также варианты на Паскале и Go. Да, я знаю что программу можно лёгким движение ускорить на пару порядков, но тогда она не будет годиться для измерения скорости разных языков и компиляторов.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org