Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
SergSuper Member Откуда: SPb Сообщений: 5488 |
Тут мне прислали такую задачку: А. Эйнштейн придумал эту загадку в прошлом веке и полагал, что 98% жителей земли будут не в состоянии ее решить. 1. Есть 5 домов каждый разного цвета. 2. В каждом доме живет по одному человеку отличной друг от друга национальности. 3. Каждый жилец пьет только один определенный напиток, курит определенную марку сигарет и держит определенное животное. 4. Никто из 5 человек не пьет одинаковые с другими напитки, не курит одинаковые сигареты и не держит одинаковое животное. Вопрос: кому принадлежит рыба? Подсказки: 1. Англичанин живет в красном доме. 2. Швед держит собаку. 3. Датчанин пьет чай. 4. Зеленый дом стоит слева от белого. 5. Жилец зеленого дома пьет кофе. 6. Человек, который курит Pall Mall, держит птицу. 7. Жилец из среднего дома пьет молоко. 8. Жилец из желтого дома курит Dunhill. 9. Норвежец живет в первом доме. 10. Курильщик Marlboro живет около того, кто держит кошку. 11. Человек, который содержит лошадь, живет около того, кто курит Dunhill. 12. Курильщик сигарет Winfield пьет пиво. 13. Норвежец живет около голубого дома. 14. Немец курит Rothmans. 15. Курильщик Marlboro живет по соседству с человеком, который пьет воду. PS. Предваряя вопросы, скажу, что система условий полна и определяет единственное возможное решение. Так что отговорки не принимаются. Удачи! В принципе немного подумав можно отнести себя к тем 2% жителей Земли. Но я решил отнести себя к еще меньшему проценту ![]() Ну и заодно можно сравнить процессоры и SQLи. У меня это выполнялось 7 сек. set nocount on declare @sig table(sig varchar(10)) -- сигареты declare @color table(col varchar(10)) -- цвета домов declare @drink table(dri varchar(10)) -- напитки declare @anim table(ani varchar(10)) -- животные declare @nats table(nat varchar(10)) -- национальности insert @sig select 'Pall Mall' union select 'Dunhill' union select 'Marlboro' union select 'Winfield' union select 'Rothmans' insert @color select 'red' union select 'green' union select 'white' union select 'blue' union select 'yellow' insert @drink select 'tea' union select 'beer' union select 'cofe' union select 'milk' union select 'water' insert @anim select 'fish' union select 'dog' union select 'cat' union select 'horse' union select 'bird' insert @nats select 'eng' union select 'norv' union select 'shved' union select 'dat' union select 'nem' --собственно сам запрос select * from @sig s1 ,@color c1 , @drink d1 , @anim a1, @nats n1, @sig s2 ,@color c2 , @drink d2 , @anim a2, @nats n2, @sig s3 ,@color c3 , @drink d3 , @anim a3, @nats n3, @sig s4 ,@color c4 , @drink d4 , @anim a4, @nats n4, @sig s5 ,@color c5 , @drink d5 , @anim a5, @nats n5 where s1.sig<>s2.sig and s1.sig<>s3.sig and s1.sig<>s4.sig and s1.sig<>s5.sig and s2.sig<>s3.sig and s2.sig<>s4.sig and s2.sig<>s5.sig and s3.sig<>s4.sig and s3.sig<>s5.sig and s4.sig<>s5.sig and c1.col<>c2.col and c1.col<>c3.col and c1.col<>c4.col and c1.col<>c5.col and c2.col<>c3.col and c2.col<>c4.col and c2.col<>c5.col and c3.col<>c4.col and c3.col<>c5.col and c4.col<>c5.col and d1.dri<>d2.dri and d1.dri<>d3.dri and d1.dri<>d4.dri and d1.dri<>d5.dri and d2.dri<>d3.dri and d2.dri<>d4.dri and d2.dri<>d5.dri and d3.dri<>d4.dri and d3.dri<>d5.dri and d4.dri<>d5.dri and a1.ani<>a2.ani and a1.ani<>a3.ani and a1.ani<>a4.ani and a1.ani<>a5.ani and a2.ani<>a3.ani and a2.ani<>a4.ani and a2.ani<>a5.ani and a3.ani<>a4.ani and a3.ani<>a5.ani and a4.ani<>a5.ani and n1.nat<>n2.nat and n1.nat<>n3.nat and n1.nat<>n4.nat and n1.nat<>n5.nat and n2.nat<>n3.nat and n2.nat<>n4.nat and n2.nat<>n5.nat and n3.nat<>n4.nat and n3.nat<>n5.nat and n4.nat<>n5.nat and ( (n1.nat='eng' and c1.col='red') or (n2.nat='eng' and c2.col='red') or (n3.nat='eng' and c3.col='red') or (n4.nat='eng' and c4.col='red') or (n5.nat='eng' and c5.col='red') ) -- 1 and ( (n1.nat='shved' and a1.ani='dog') or (n2.nat='shved' and a2.ani='dog') or (n3.nat='shved' and a3.ani='dog') or (n4.nat='shved' and a4.ani='dog') or (n5.nat='shved' and a5.ani='dog') ) --2 and ( (n1.nat='dat' and d1.dri='tea') or (n2.nat='dat' and d2.dri='tea') or (n3.nat='dat' and d3.dri='tea') or (n4.nat='dat' and d4.dri='tea') or (n5.nat='dat' and d5.dri='tea') ) -- 3 and ( (c1.col='green' and c2.col='white') or (c2.col='green' and c3.col='white') or (c3.col='green' and c4.col='white') or (c4.col='green' and c5.col='white') ) -- 4 and ( (c1.col='green' and d1.dri='cofe') or (c2.col='green' and d2.dri='cofe') or (c3.col='green' and d3.dri='cofe') or (c4.col='green' and d4.dri='cofe') or (c5.col='green' and d5.dri='cofe') ) -- 5 and ( (s1.sig='Pall Mall' and a1.ani='bird') or (s2.sig='Pall Mall' and a2.ani='bird') or (s3.sig='Pall Mall' and a3.ani='bird') or (s4.sig='Pall Mall' and a4.ani='bird') or (s5.sig='Pall Mall' and a5.ani='bird') ) -- 6 and (d3.dri='milk') -- 7 and ( (s1.sig='Dunhill' and c1.col='yellow') or (s2.sig='Dunhill' and c2.col='yellow') or (s3.sig='Dunhill' and c3.col='yellow') or (s4.sig='Dunhill' and c4.col='yellow') or (s5.sig='Dunhill' and c5.col='yellow') ) -- 8 and (n1.nat='norv') -- 9 and ( (s1.sig='Marlboro' and 'cat'=a2.ani) or (s2.sig='Marlboro' and 'cat' in (a1.ani, a3.ani)) or (s3.sig='Marlboro' and 'cat' in (a2.ani, a4.ani)) or (s4.sig='Marlboro' and 'cat' in (a3.ani, a5.ani)) or (s5.sig='Marlboro' and 'cat'=a5.ani)) -- 10 and ( (s1.sig='Dunhill' and 'horse'=a2.ani) or (s2.sig='Dunhill' and 'horse' in (a1.ani, a3.ani)) or (s3.sig='Dunhill' and 'horse' in (a2.ani, a4.ani)) or (s4.sig='Dunhill' and 'horse' in (a3.ani, a5.ani)) or (s5.sig='Dunhill' and 'horse'=a5.ani)) -- 11 and ( (s1.sig='Winfield' and d1.dri='beer') or (s2.sig='Winfield' and d2.dri='beer') or (s3.sig='Winfield' and d3.dri='beer') or (s4.sig='Winfield' and d4.dri='beer') or (s5.sig='Winfield' and d5.dri='beer') ) -- 12 and ( (n1.nat='norv' and 'blue'=c2.col) or (n2.nat='norv' and 'blue' in (c1.col, c3.col)) or (n3.nat='norv' and 'blue' in (c2.col, c4.col)) or (n4.nat='norv' and 'blue' in (c3.col, c5.col)) or (n5.nat='norv' and 'blue'=c5.col)) -- 13 and ( (s1.sig='Rothmans' and n1.nat='nem') or (s2.sig='Rothmans' and n2.nat='nem') or (s3.sig='Rothmans' and n3.nat='nem') or (s4.sig='Rothmans' and n4.nat='nem') or (s5.sig='Rothmans' and n5.nat='nem')) -- 14 and ( (s1.sig='Marlboro' and 'water'=d2.dri) or (s2.sig='Marlboro' and 'water' in (d1.dri, d3.dri)) or (s3.sig='Marlboro' and 'water' in (d2.dri, d4.dri)) or (s4.sig='Marlboro' and 'water' in (d3.dri, d5.dri)) or (s5.sig='Marlboro' and 'water'=d5.dri)) -- 15 |
30 апр 02, 13:06 [26828] Ответить | Цитировать Сообщить модератору |
GreenSunrise
Guest |
Сдается мне, такие штучки оччччень элегантно решаются на Прологе, если кто такую штуковину помнит. |
30 апр 02, 13:22 [26829] Ответить | Цитировать Сообщить модератору |
pik_
Guest |
Такие штуки хорошо после пивка идут. После пятой-шестой... |
30 апр 02, 13:26 [26830] Ответить | Цитировать Сообщить модератору |
Дед Маздай
Guest |
Может, переименуем sql.ru в сайт матолимпиад? Я не настолько хорошо владею SQL, как SergSuper, поэтому пришлось думать. (Такое все еще иногда случается). Думал я в Excel, потому звиняйте, коли форматирование поедет. Из условий 1, 2, 3, 5, 6, 7, 8, 9, 12, 13, 14 имеем: Номер дома 1 2 3 4 5 Цвет ? Голубой Красн. Зеленый Желтый Нац. Норвежец Англ. Швед Датч. Немец Напиток ? Молоко Чай Кофе Пиво Сигареты ? Pall Mall Dunhill Winfield Rothmans Жив. ? Собака Птица Предполагаем, что дома не закольцованы Тогда дом норвежца не зеленый, т.к. Справа от него по условию (13) голубой, а не белый (4) 3-й дом не зеленый, т.к. Зеленый пьет кофе (5) Зеленый не м.б. 5-й, т.к. Д.б. Дом правее него (4) Значит, зеленый - 4-й, а белый - 5-й 1-й дом не м.б. Красный, т.к. В нем живет норвежец (9), а в красном - англичанин (1) Значит, дом норвежца - желтый, а красный с англичанином - 3-й. Номер дома 1 2 3 4 5 Цвет Желтый Голубой Красн. Зеленый Белый Нац. Норвежец Англ. Швед Датч. Немец Напиток Молоко Кофе Чай Пиво Сигареты Dunhill Pall Mall Winfield Rothmans Жив. ? Собака Птица 5-й не может курить Marlboro, т.к. Он живет по соседству с человеком, к-й пьет воду (15) Значит, Marlboro курит 2-й, а 1-й пьет воду Из (11) 2-й держит лошадь Номер дома 1 2 3 4 5 Цвет Желтый Голубой Красн. Зеленый Белый Нац. Норвежец Англ. Напиток Вода Молоко Кофе Сигареты Dunhill Marlboro Жив. ? Лошадь 2 не может быть шведом - тот держит собаку (2) и немцем - тот курит Rothmans (14). Значит, это датчанин Теперь у нас определены по местам 4 напитка, значит, связка пиво + Winsfield (12) - это 5-й дом. 3 дома у нас расставлены по национальностям. Немец не может жить в 5-м, т.к. Он курит Rothmans (14). Значит, он живет в 4-м А единственный оставшийся швед, соотв-но, в 5-м Номер дома 1 2 3 4 5 Цвет Желтый Голубой Красн. Зеленый Белый Нац. Норвежец Датч. Англ. Немец Швед Напиток Вода Чай Молоко Кофе Пиво Сигареты Dunhill Marlboro Rothmans Winfield Pall Mall Жив. ? Лошадь Собака Птица Ну и все. 3-й - это Pall Mall + Птица (6) Оставшаяся по соседству с Marlboro кошка (10) - это 1 Значит, рыба живет в 4-м доме у немца Номер дома 1 2 3 4 5 Цвет Желтый Голубой Красн. Зеленый Белый Нац. Норвежец Датч. Англ. Немец Швед Напиток Вода Чай Молоко Кофе Пиво Сигареты Dunhill Marlboro Pall Mall Rothmans Winfield Жив. Кошка Лошадь Птица Рыба Собака |
30 апр 02, 14:25 [26831] Ответить | Цитировать Сообщить модератору |
Владимир
Guest |
Подтверждаю слова GreenSunrise, это примерчик для языка Пролог.....Так что как говориться немного не по адресу... |
30 апр 02, 15:31 [26832] Ответить | Цитировать Сообщить модератору |
SergSuper Member Откуда: SPb Сообщений: 5488 |
2 Дед Маздай Допустим у нас есть два жэпега - на одном кошка, на другом собака. Кто на каком изображен определить можно легко. Заставить компьютер определить это - наверное невозможно, во всяком случае пока. Я что-то подобное имел ввиду. 2 GreenSunrise & Владимир На 99% уверен что Пролог вы только "проходили", но не работали профессионально на нем. Сам я тоже только читал про него, как-то баловался, даже ставил TurboProlog от Borland. На мой взгляд это язык чисто теоритический. А такие задачи (конечно не в таком извращенном виде) могут всплыть вполне реально. Да и зачем Пролог - это на Паскале можно в 30 строчек написать. Вопрос не в этом. |
30 апр 02, 15:43 [26833] Ответить | Цитировать Сообщить модератору |
mumu Member Откуда: Сообщений: 9 |
Звиняйте! Маненько выпил, зачитался... не туда попал.
Но ситуацию это не меняет... |
3 апр 03, 23:41 [164359] Ответить | Цитировать Сообщить модератору |
Александр Третьяков Member Откуда: Украина, г. Тернополь Сообщений: 549 |
класный топик SergSuper, никогда бы не додумался такого типа задачу решать с помощью SQL. |
20 июн 03, 13:00 [236170] Ответить | Цитировать Сообщить модератору |
boogier Member Откуда: Н.Новгород Сообщений: 220 |
Еще интересные задания для решения на SQL на тему координатной плоскости.
Задание 1. Имеется карта местности, на которую нанесены объекты (точки, линии, многоугольники). Задача: а) Спроектировать базу данных для хранения объектов карты б) Пользователь смотрит на часть карты через окно (квадрат, заданный координатами левого нижнего и правого верхнего углов). Написать запрос, возвращающий список объектов, попадающих в это окно. Задание 2. Имеется координатная плоскость и расположенные на ней прямоугольники, заданные координатами левого нижнего и правого верхнего углов. а) Спроектировать базу данных для хранения прямоугольников б) Написать запрос, подсчитывающий общую площадь, покрываемую прямоугольниками |
20 июн 03, 13:09 [236184] Ответить | Цитировать Сообщить модератору |
Pavel Member Откуда: Кемерово Сообщений: 2435 |
А у меня 3а 2 сек. пролетело. |
20 июн 03, 14:06 [236277] Ответить | Цитировать Сообщить модератору |
mahoune Member Откуда: Moscow Сообщений: 5653 |
Задание 2
б) Написать запрос, подсчитывающий общую площадь, покрываемую прямоугольниками А это с учетом того что прямоугольники могут перекрывать друг друга? |
20 июн 03, 15:30 [236423] Ответить | Цитировать Сообщить модератору |
boogier Member Откуда: Н.Новгород Сообщений: 220 |
2mahoune
Естессно, а ты думал, такие задачи в 3-м классе дают? :)) |
21 июн 03, 13:54 [237489] Ответить | Цитировать Сообщить модератору |
АлексейК Member Откуда: http://www.msdatabase.ru , Moscow Сообщений: 7683 |
2 boogier
а) Спроектировать базу данных для хранения объектов карты это несложно. таблица объектов связана с таблицей точек, которые дают полное представление о геометрической фигуре. б) Пользователь смотрит на часть карты через окно (квадрат, заданный координатами левого нижнего и правого верхнего углов). Написать запрос, возвращающий список объектов, попадающих в это окно. здесь сложнее ...нужна вышка которую уже порядком забыл .. в вышке была задачка про нахождение площади пересечения двух фигур заданных как набор координат. кто помнит? |
21 июн 03, 14:21 [237536] Ответить | Цитировать Сообщить модератору |
SergSuper Member Откуда: SPb Сообщений: 5488 |
2 mahoune
Не знаю что Вы нашли интересного, 1-я задача вообще очевидная, вторая не намного сложнее:
может если подумать можно как-то пооптимальней написать, но за 15 минут сойдёт и так |
||
21 июн 03, 14:27 [237545] Ответить | Цитировать Сообщить модератору |
АлексейК Member Откуда: http://www.msdatabase.ru , Moscow Сообщений: 7683 |
2 Sergsuper
![]() по моему неправильно посчитает |
21 июн 03, 14:44 [237572] Ответить | Цитировать Сообщить модератору |
SergSuper Member Откуда: SPb Сообщений: 5488 |
2 АлексейК
табличку @t пожалста заполните данными, чтоб такие прямоугольники рисовать :) Имеется координатная плоскость и расположенные на ней прямоугольники, заданные координатами левого нижнего и правого верхнего углов. |
21 июн 03, 15:05 [237617] Ответить | Цитировать Сообщить модератору |
АлексейК Member Откуда: http://www.msdatabase.ru , Moscow Сообщений: 7683 |
хитрый какой.
не считается - это упрощение задачи. но все равно при пересекающихся фигурах будет неправильно будет сумма фигур а не сумма занимаемой площади )) |
21 июн 03, 16:01 [237707] Ответить | Цитировать Сообщить модератору |
SergSuper Member Откуда: SPb Сообщений: 5488 |
2 АлексейК
Я не хитрый, я внимательный :) К тому же если задавать 4 угла - не факт что будет прямоугольник. Можно задавать 3 вершины треугольника, но по моему это уже задачи не для SQL, что-то подобное делается при обработке 3-х мерных изображений Ну а насчет того что мол если будет пересекающиеся фигуры, то будет неправильно - но это уж Вы меня совсем не уважаете. Если фигуры не пересекались бы площадь считалась бы совсем просто: select sum((x2-x1)*(y2-y1)) from @t И значения заданы у меня для пересекающихся прямоугольников (можете взять клетчатый листок и убедиться). Прежде чем чего-то написать я стараюсь проверить, чего и Вам желаю. |
21 июн 03, 16:56 [237751] Ответить | Цитировать Сообщить модератору |
mahoune Member Откуда: Moscow Сообщений: 5653 |
2SergSuper, а мне и первая задачка не очевидна!!! ![]() |
21 июн 03, 17:36 [237777] Ответить | Цитировать Сообщить модератору |
mzprog
Guest |
В условии задачи не понятно в каком порядке расположены дома... толи они в ряд: 1 2 3 4 5 и тогда понятно,
толи ... 3 4 1 2 5 тогда бардак... :) (вот скажи, докапался до Эйнштейна :) ) |
12 фев 04, 08:34 [532256] Ответить | Цитировать Сообщить модератору |
dishlo Member Откуда: Сообщений: 362 |
в рассуждениях Деда Маздая
нахождение цветов было логичным, вот сигареты были притянуты
курить мальборо не могли в 5-ом, но могли в 2, 3, 4. может он не описал ход своих мыслей до конца? Вот мои рассуждения: строим таблицу
из правил 9. Норвежец живет в первом доме. 13. Норвежец живет около голубого дома. 7. Жилец из среднего дома пьет молоко. строим таблицу
из правил 4. Зеленый дом стоит слева от белого. 5. Жилец зеленого дома пьет кофе.
из правил 1. Англичанин живет в красном доме. 8. Жилец из желтого дома курит Dunhill. 11. Человек, который содержит лошадь, живет около того, кто курит Dunhill.
А вот остальное не так очевидно из правил 3. Датчанин пьет чай. 12. Курильщик сигарет Winfield пьет пиво. рассуждаем что датчанин может быть только в 5 или 2 и пиво с Winfield может только в 5 или 2. Отсюда немцу из 14. Немец курит Rothmans. остается только в 4
из правил 15. Курильщик Marlboro живет по соседству с человеком, который пьет воду.
их правил 12. Курильщик сигарет Winfield пьет пиво. этой паре только в 5й дом 3. Датчанин пьет чай. и датчанин с чаем селится во 2 ом
ну дальше дело техники... мдя, пол дня убил на решение и нормальное оформление :-/ |
||||||||||||||||||||
12 фев 04, 14:16 [533065] Ответить | Цитировать Сообщить модератору |
x
Guest |
2 dishlo
мдя, пол дня убил на решение и нормальное оформление :-/ Сколько этот Эйтштейн времени у народа отнял (с помощью SergSuper) ... |
12 фев 04, 14:49 [533137] Ответить | Цитировать Сообщить модератору |
dishlo Member Откуда: Сообщений: 362 |
меня поймали на эту фразу:
98% жителей земли будут не в состоянии ее решить. хотелось приобщится к тем исключительным 2% |
12 фев 04, 15:04 [533178] Ответить | Цитировать Сообщить модератору |
alex_ll Member Откуда: tomsk Сообщений: 4565 |
To dishlo
У тебя в 3-м пункте рассуждений ошибка Зеленый Левее белого - Это значит, что белый не может быть 1-м, а зеленый 5-м и оба они не могут быть 2 (из п.2) То есть вполне допустимо, что зеленый 1 а белый 5, например... |
13 фев 04, 12:03 [534691] Ответить | Цитировать Сообщить модератору |
alex_ll Member Откуда: tomsk Сообщений: 4565 |
Или я туплю в воскресенье вечером или SergSuper чего то не договаривает
у меня получилось 6 решений и вроде ВСЕ удовлетворяют условиям задачи. Проверьте кому не лень. Прошу прощения за сокрашения и ошибки в названиях сигарет - лень переделывать :) Итак мои решения:
P.S. Если найдете ошибки укажите пожалуйста номер варианта и правила с которыми противоречия. |
||
15 фев 04, 21:41 [536631] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |