powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Пятничная задачка - про привидения
5 сообщений из 5, страница 1 из 1
Пятничная задачка - про привидения
    #39298287
DelphiUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Как-то на работе, коллега Федя рассказал про нововведения в 11-й версии Оракла.
Надо было на чем-то опробовать, вот вспомнил про задачу, которую и вам предлагаю решить, если конечно она не покажется слишком легкой или неинтересной.

Требуется написать SQL запрос, решающий следующую задачу.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
В небольшом шотландском городке стояла школа, в которой учились ровно 1000 школьников. 
У каждого из них был шкаф для одежды – всего 1000 шкафов, причём шкафы были пронумерованы числами о 1 до 1000. 
А ещё в этой школе жили привидения – ровно 1000 привидений. Каждый школьник, уходя из школы, запирал свой шкаф,
а ночью привидения начинали играть со шкафами, то отпирая, то запирая их. Однажды вечером школьники, как обычно, 
оставили запертыми все шкафы. Ровно в полночь появились привидения. Сначала первое привидение открыло все шкафы;
 потом второе привидение закрыло те шкафы, номер которых делился на 2; затем третье привидение поменяло позиции 
(то есть открыло шкаф, если он был закрыт, и закрыло – если он был открыт) тех шкафов, номер которых делился на 3;
 следом за ним четвёртое привидение поменяло позиции тех шкафов, номер которых делился на 4 и т.д. Как только 
тысячное привидение поменяло позицию тысячного шкафа, пропел петух, и все привидения срочно убрались восвояси.

 Не скажете ли вы, сколько осталось открытых шкафов после посещения привидений?



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

Код: plsql
1.
2.
3.
with t as (select level n from dual connect by level <=1000)
select t.n from t, t g where mod(t.n,g.n)=0 group by t.n
having mod(count(*),2)=1



Код: plsql
1.
2.
3.
select n from(select * from dual model dimension by(1 n)measures(0 s)
rules iterate(1000)(s[for n from 1 to 1000 increment 1]=nvl(s[cv()],0)+1-sign(mod(cv(n),iteration_number+1)))
)where mod(s,2)=1 
...
Рейтинг: 0 / 0
Пятничная задачка - про привидения
    #39298292
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот решение без "нововведений в 11-й версии Оракла", зато реально короткое :)
Код: plsql
1.
select level*level n from dual connect by level*level <=1000
...
Рейтинг: 0 / 0
Пятничная задачка - про привидения
    #39298345
DelphiUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
Хорошо, особенно последний вариант - совсем короткий :)
...
Рейтинг: 0 / 0
Пятничная задачка - про привидения
    #39298348
DelphiUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
Твое решение правильное, короткое, в-общем, зачет!
У меня решение, так сказать "в лоб", без математического анализа, с с открытием-закрытием дверей каждым привидением :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Пятничная задачка - про привидения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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