Здравствуйте, vralch, Вы писали:
V>Друг ходил на собеседование по Oracle. Задали такую логическую задачу.
V>Есть 8 шаров, причем один из них с дефектом (легче, тяжелее — неизвестно). Нужно за 3 взвешивания выявить его.
V>Он решил за 4 взвешивания.
V>Кто знает, как это сделать за 3?
Для Oracle :
SQL> create table balls (b1 number,
2
SQL> ed
Записано файл afiedt.buf
1 create table balls (
2 b1 number,
3 b2 number,
4 b3 number,
5 b4 number,
6 b5 number,
7 b6 number,
8 b7 number,
9 b8 number);
Таблица создана.
SQL> create or replace procedure set_balls
2 as
3 str varchar2(2000);
4 n number;
5 begin
6 update balls
7 set
8 b1 = 1,
9 b2 = 1,
10 b3 = 1,
11 b4 = 1,
12 b5 = 1,
13 b6 = 1,
14 b7 = 1,
15 b8 = 1;
16 n := round(dbms_random.value, 1);
17 --dbms_output.put_line('n='||n);
18 str := 'update balls set b'||round(dbms_random.value(1,8))||' = '||
19 to_char(n, 'fm0.0');
20 --dbms_output.put_line('str='||str);
21 execute immediate str;
22* end;
SQL> /
Процедура создана.
SQL> exec set_balls;
Процедура PL/SQL успешно завершена.
SQL> select
2 case when (b1+b2 = b3+b4)
3 then (case when (b1+b2=b5+b6)
4 then (case when (b1=b7) then 8
5 else 7
6 end)
7 else (case when (b1=b5) then 6
8 else 5
9 end)
10 end)
11 else
12 (case when (b1=b2)
13 then (case when (b1=b3) then 4
14 else 3
15 end)
16 else
17 (case when (b1=b3) then 2
18 else 1
19 end)
20 end)
21 end invalid_ball
22 from balls;
INVALID_BALL
------------
5
SQL> select * from balls;
B1 B2 B3 B4 B5 B6 B7 B8
--------- --------- --------- --------- --------- --------- --------- ---------
1 1 1 1 ,8 1 1 1
SQL>
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.