powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Тест для мозгов и компьютеров
25 сообщений из 62, страница 2 из 3
Тест для мозгов и компьютеров
    #32409986
dishlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_ll
У тебя в 3-м пункте рассуждений ошибка
Зеленый Левее белого -
Это значит, что белый не может быть 1-м, а зеленый 5-м и оба они не могут быть 2 (из п.2)

То есть вполне допустимо, что зеленый 1 а белый 5, например...

7. Жилец из среднего дома пьет молоко.
5. Жилец зеленого дома пьет кофе.

значит зеленый не может быть средним (третим), остается однозначаня комбинайция четвертый и пятый.
Сорри, в первой табличке не вписал молоко
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #32410131
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, меньше всего я ожидал что народ кинется решать эту тупую задачу в лоб :(
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #32410141
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати у меня есть большие сомнения что эту задачу действительно придумал Эйнштейн
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #32410537
Фотография alex_ll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 dishlo
Код: plaintext
1.
2.
 7 . Жилец из среднего дома пьет молоко. 
 5 . Жилец зеленого дома пьет кофе. 

Пропустил бывает:) Но все равно подключая эти пункты остаются пары 1-4, 1-5, 4-5, 1-3. У меня кстати в 3-х вариантах 1-3, а в 3-х 1-5 вывалилось

2 SergSuper.
Код: plaintext
Блин, меньше всего я ожидал что народ кинется решать эту тупую задачу в лоб :(

Дык с чего ты взял что в лоб. Я, например в QA решал :)
Домой прийду скрипт брошу

2 All Народ где ошибка у меня или SergSuper не все условия выложил?
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #32411093
Paul Chabinsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такие задачки мы решали в школе, не подумайте что я вы""" просто школа такая была, или учитель :)
Энштейн не учел что в 2004 году будет интернет, на решение данной задачи у меня ушло около 1-й минуты(время на выбор ссылки из предложенных яндексом по фразе "Англичанин живет в красном доме") :)
http://imfo.ru/issues/fish-2
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Тест для мозгов и компьютеров
    #33677115
MX -- ALEX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperТут мне прислали такую задачку:А. Эйнштейн придумал эту загадку в прошлом веке и полагал, что 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. Ведь в принципе это перебор вариантов, казалось бы как раз задача для SQL. Но составив 5 таблиц с 5-ю записями я задумался - а что же делать дальше? Задача оказалась не такая тривиальная, как ожидалось. В результате я нашел решение, но запрос (он ниже) оказался уж очень монстрообразным. Может кто-нибудь знает как по теории решаются такие задачи или хотя бы сталкивался с ними?Ну и заодно можно сравнить процессоры и SQLи. У меня это выполнялось 7 сек.set nocount ondeclare @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 @sigselect 'Pall Mall' union select 'Dunhill' union select 'Marlboro' union select 'Winfield' union select 'Rothmans'insert @colorselect 'red' union select 'green' union select 'white' union select 'blue' union select 'yellow'insert @drinkselect 'tea' union select 'beer' union select 'cofe' union select 'milk' union select 'water'insert @animselect 'fish' union select 'dog' union select 'cat' union select 'horse' union select 'bird'insert @natsselect '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 n5where 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.sigand 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.coland 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.driand 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.aniand 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.natand ( (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') ) -- 1and ( (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') ) --2and ( (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') ) -- 3and ( (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') ) -- 4and ( (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') ) -- 5and ( (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') ) -- 6and (d3.dri='milk') -- 7and ( (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') ) -- 8and (n1.nat='norv') -- 9and ( (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)) -- 10and ( (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)) -- 11and ( (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') ) -- 12and ( (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)) -- 13and ( (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')) -- 14and ( (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
на MX (cмесь EXCEL+MUMPS)
решение занимает 5 ячеек на excel-листе
(не считая отображения уже готовой таблицы )
время, к сожалению, почти 2 секунды -
может кто из М-программистов предложит более быстрый
вариант ?
прилагаю 2 листа - программный и результатный
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34039657
WarAn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperМожет кто-нибудь знает как по теории решаются такие задачи или хотя бы сталкивался с ними?
Как по мне, матрицой решать проще всего.
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34039917
guest00x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperТут мне прислали такую задачку:А. Эйнштейн придумал эту загадку в прошлом веке и полагал, что 98% жителей земли будут не в состоянии ее решить.
Угу, посля какога класса сто лет назад 98% жителей земли шли в поле с восхода и возвращались после заката дабы хлеб насущный добыть ?
Нынче 98% жителей нашей страны "бездельничают" аж до окончания института, стал быть, в состоянии ее решить :))

P.S. из всех моих многих знакомых, кто не отмахнулся от решения (им, видите ли, некогда на такую хрень время тратить!), 100% решили эту задачку, причем, буквально походя :))
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34642938
это действительно школьная задача по логике (правда не знаю, преподавали ли в обычных школах), и легче решатся не методами программирования, а методами формальной логики
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34946465
XAM_80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или я что то не допонял...., или поправте меня если я не прав...
Итак:
1. Согласно п.4 условий:"Зеленый дом налево от Белого и ..." почему никто не берет во внимание "..."?Из этого условия следует, что зел.дом через один на лево от"..."?! Житель которого,согласно п.5 пьет Кофе.
1ый дом Норвежца, 2ой-синий, следовательо как раз в правой части остаеться 3 дома(Зел.,Белый, и "..."), остаються не распраделенными 2 цвета(жел., и красный), ну 1й дом красным быть не может, т.к. в кр.доме живет Англичанин, а в 1ом Норвежец, соответственно 5й дом-красный, а первый желтый.
Получается: кр.,син.,зел.,бел.,жел. Разве не так???:)
2.Еще один момент, после всех дальнейших выкладок у меня получилось не учтеные "Кот" и "рыба"
И мне кажеться, что не хватает еще одного условия в задаче, позволяющего однозначно определить, кота, и рыбу куда надо..., я по логике кота отправил к Немцу, который у меня живет в 3-ем доме(Зеленом),Пьет молоко,Курит Ротманз.,а рыбу к Норвежцу(1й-дом-Желтый)курит Данхилл И пьет воду.
Я считаю логично Кота отправить к Молоку..., а рыбу к воде....:)
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34946525
немец.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рыба у меня

зы: 2 часа убил, рыбо моя!
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34946527
немец.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 alex_ll:
ну в задаче же дома последовательно упорядочены - типа 'зеленый слева от белого'. а у тебя что? фигня какая-то .. вобщем из 6-ти вариантов ни одного правильного
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34946528
немец.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторкота отправил к Немцу, который у меня живет в 3-ем доме(Зеленом),Пьет молоко,Курит Ротманз
да-да, живу я в зеленом доме, но, мля, молоко я ненавижу, пью тока кофе, хотя ротманс и правда ничего.. но вот кот ваш нафиг не вперся, всю рыбу ведь сожрет сцуко..
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34947177
drev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу предложить следующий вариант:


Для наглядности используется функция getPositionByValue. Её вызовы можно заменить соответствующим case.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
create function getPositionByValue
(
	@c1 varchar( 10 ),	
	@c2 varchar( 10 ),
	@c3 varchar( 10 ),
	@c4 varchar( 10 ),
	@c5 varchar( 10 ),
    @cValue varchar( 10 )
)
returns int
as
begin

return 
		case @cValue
			when @c1 then  1 
			when @c2 then  2 
			when @c3 then  3 
			when @c4 then  4 
			when @c5 then  5 
		end

end

Собственно код:

Код: plaintext
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.
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 )) -- национальности
declare @nums table(num int) -- numbers

declare @res table( sig varchar( 10 ), col varchar( 10 ), dri varchar( 10 ),ani varchar( 10 ), nat varchar( 10 ), num int)
declare @tmp table( sig varchar( 10 ), col varchar( 10 ), dri varchar( 10 ),ani varchar( 10 ), nat varchar( 10 ), num int)

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'
insert @nums
select  1  union select  2  union select  3  union select  4  union select  5 

insert @tmp
select sig, col, dri, ani, nat, num
from @sig,@color, @drink, @anim,  @nats, @nums

-- внутренние условия для дома:

insert @res
select sig, col, dri, ani, nat, num
from @tmp
where 
(
	nat = 'eng' and col='red'
	or
	nat != 'eng' and col!='red'
) -- #1 Англичанин живет в красном доме.

and
(
	nat = 'shved' and ani = 'dog'
	or
	nat != 'shved' and ani != 'dog'
) -- #2 Швед держит собаку
and
(
	nat = 'dat' and dri = 'tea'
	or
	nat != 'dat' and dri != 'tea'
) -- #3 Датчанин пьет чай
and
(
	col = 'green' and dri = 'cofe'
	or
	col != 'green' and dri != 'cofe'
) -- #5 Жилец зеленого дома пьет кофе.
and
(
	sig = 'Pall Mall' and ani = 'bird' 
	or
	sig != 'Pall Mall' and ani != 'bird' 
) -- #6 Человек, который курит Pall Mall, держит птицу
and
(
	num =  3  and dri = 'milk'
	or
	num !=  3  and dri != 'milk'
) -- #7 Жилец из среднего дома пьет молоко
and
(
	col = 'yellow' and sig = 'Dunhill'
	or
	col != 'yellow' and sig != 'Dunhill'
) -- #8 Жилец из желтого дома курит Dunhill
and
(
	num =  1  and nat = 'norv'
	or
	num !=  1  and nat != 'norv'
) -- #9 Норвежец живет в первом доме
and 
	not (sig = 'Marlboro' and ani = 'cat' )
-- #10 Курильщик Marlboro живет около того, кто держит кошку
and
	not (sig = 'Dunhill' and ani = 'horse' )
-- #11 Человек, который содержит лошадь, живет около того, кто курит Dunhill

and
(
	dri = 'beer' and sig = 'Winfield'
	or
	dri != 'beer' and sig != 'Winfield'
) -- #12 Курильщик сигарет Winfield пьет пиво.
and
(
	num =  2  and col = 'blue'
	or
	num !=  2  and col != 'blue'
) -- #13 Норвежец живет около голубого дома.
and
(
	nat = 'nem' and sig = 'Rothmans'
	or
	nat != 'nem' and sig != 'Rothmans'
) -- #14 Немец курит Rothmans
and
	not (sig = 'Marlboro' and dri = 'water' )
-- #15 Курильщик Marlboro живет по соседству с человеком, который пьет воду


select 
a.sig, a.col, a.dri, a.ani, a.nat, a.num,
b.sig, b.col, b.dri, b.ani, b.nat, b.num,
c.sig, c.col, c.dri, c.ani, c.nat, c.num,
d.sig, d.col, d.dri, d.ani, d.nat, d.num,
e.sig, e.col, e.dri, e.ani, e.nat, e.num
from
	(select * from @res where num =  1 ) a,
	(select * from @res where num =  2 ) b,
	(select * from @res where num =  3 ) c,
	(select * from @res where num =  4 ) d,
	(select * from @res where num =  5 ) e
where
	 5  = (
			select count(distinct sig) 
				from 
				(
					select a.sig union 
					select b.sig union 
					select c.sig union 
					select d.sig union
					select e.sig
				) b
		)
	and
	 5  = (
			select count(distinct col) 
				from 
				(
					select a.col union 
					select b.col union 
					select c.col union 
					select d.col union
					select e.col
				) b
		)
	and
	 5  = (
			select count(distinct dri) 
				from 
				(
					select a.dri union 
					select b.dri union 
					select c.dri union 
					select d.dri union
					select e.dri
				) b
		)
	and
	 5  = (
			select count(distinct ani) 
				from 
				(
					select a.ani union 
					select b.ani union 
					select c.ani union 
					select d.ani union
					select e.ani
				) b
		)
	and
	 5  = (
			select count(distinct nat) 
				from 
				(
					select a.nat union 
					select b.nat union 
					select c.nat union 
					select d.nat union
					select e.nat
				) b
		)
	and 
		(dbo.getPositionByValue(a.col, b.col, c.col, d.col, e.col, 'green')
		-
		dbo.getPositionByValue(a.col, b.col, c.col, d.col, e.col, 'white')) = - 1 
	-- #4 Зеленый дом стоит слева от белого.

	and 
		abs(
			dbo.getPositionByValue(a.sig, b.sig, c.sig, d.sig, e.sig, 'Marlboro')
			-
			dbo.getPositionByValue(a.ani, b.ani, c.ani, d.ani, e.ani, 'cat')) =  1 
	-- #10 Курильщик Marlboro живет около того, кто держит кошку
	and 
		abs(
			dbo.getPositionByValue(a.sig, b.sig, c.sig, d.sig, e.sig, 'Dunhill')
			-
			dbo.getPositionByValue(a.ani, b.ani, c.ani, d.ani, e.ani, 'horse')) =  1 
	-- #11 Человек, который содержит лошадь, живет около того, кто курит Dunhill
	and 
		abs(
			dbo.getPositionByValue(a.sig, b.sig, c.sig, d.sig, e.sig, 'Marlboro')
			-
			dbo.getPositionByValue(a.dri, b.dri, c.dri, d.dri, e.dri, 'water')) =  1 
	-- #15 Курильщик Marlboro живет по соседству с человеком, который пьет воду




Результат:

Код: plaintext
1.
2.
3.
4.
Dunhill	             yellow	water	cat	norv	1
Marlboro	             blue	tea	horse	dat	2
Pall Mall	             red	milk	bird	eng	3	
Rothmans             green	cofe	fish	nem	4	
Winfield	             white	beer	dog	shved	5
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34947473
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperPS. Предваряя вопросы, скажу, что система условий полна и определяет единственное возможное решение. Так что отговорки не принимаются...
А три разных правильных ответа принимаются?

Датчанин Немец Норвежец Зеленый Зеленый Зеленый Норвежец Норвежец Норвежец Кофе Кофе Кофе Pall Mall Pall Mall Marlboro Птица Птица Рыба Голубой Голубой Голубой Немец Немец Немец Вода Вода Вода Rothmans Rothmans Rothmans Кошка Рыба Кошка Белый Красный Желтый Швед АнгличанинШвед Молоко Молоко Молоко Marlboro Marlboro Dunhill Собака Лошадь Собака Желтый Желтый Красный Датчанин Датчанин АнгличанинЧай Чай Пиво Dunhill Dunhill Winfield Рыба Кошка Лошадь Красный Белый Белый АнгличанинШвед Датчанин Пиво Пиво Чай Winfield Winfield Pall Mall Лошадь Собака Птица

PS SergSuper - это не ты случайно тот Энштейн ?
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34947817
Фотография smoyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, задача беспонт, решил за час (начальник на работе еще отвлекал^_^) использованием логики. СергаСупера на мыло, не мог Эйнштейн про такой ацтой сказать, что его могут решить только 2%.

з.ы. Сомневаюсь кстати, что такую задачу мона решить в паскале за 30 строк. Очень уж лень проверять, башка сильно с похмелья болит, но сомневаюсь.
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34949290
Алексей Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Энштейн говорил, что 2 процента могут решить задачу в уме и за короткое время не знаю какое...
На бумаге почти каждый сможет решить. У меня ушло где-то пол часа....
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34953756
arhip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Право и лево понятия относительные
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34954164
drev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T SergSuperPS. Предваряя вопросы, скажу, что система условий полна и определяет единственное возможное решение. Так что отговорки не принимаются...
А три разных правильных ответа принимаются?

Датчанин Немец Норвежец Зеленый Зеленый Зеленый Норвежец Норвежец Норвежец Кофе Кофе Кофе Pall Mall Pall Mall Marlboro Птица Птица Рыба Голубой Голубой Голубой Немец Немец Немец Вода Вода Вода Rothmans Rothmans Rothmans Кошка Рыба Кошка Белый Красный Желтый Швед АнгличанинШвед Молоко Молоко Молоко Marlboro Marlboro Dunhill Собака Лошадь Собака Желтый Желтый Красный Датчанин Датчанин АнгличанинЧай Чай Пиво Dunhill Dunhill Winfield Рыба Кошка Лошадь Красный Белый Белый АнгличанинШвед Датчанин Пиво Пиво Чай Winfield Winfield Pall Mall Лошадь Собака Птица

PS SergSuper - это не ты случайно тот Энштейн ?


Всё зависит от того, как вы трактуете условие номер 4:)

Если слово "слева" рассматривать как "левее", то мы получим 7 вариантов:)

А если как "ближайший левый", то - один.
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #34954244
drev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, смысл исходного поста был не в том, чтоб все бросились решать задачу:)

Вопрос, как решать подобные задачи на SQL?

Ниже приведён оптимизированный вариант, который выполняется в среднем на моём лаптопе 0.3 секунды. Исходный - 0.9 секунды.

Изменения:

1. Предварительная фильтрация возможных комбинаций по ограничениям совместимости в одном доме
2. Упрощённая процедура проверки вхождения элемента один и только один раз.
3. Предварительное определение с помощью CASE, в каких домах в данном варианте находятся искомые элементы для проверки условия типа 15.

Код: plaintext
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.
set nocount on


declare @start datetime

set @start = getdate()

declare @res table( sig varchar( 10 ), col varchar( 10 ), dri varchar( 10 ),ani varchar( 10 ), nat varchar( 10 ), num int)


insert @res

	select sig, col, dri, ani, nat, num
	from 
	(
		select sig, col, dri, ani, nat, num
		from 
		( select 'Pall Mall' as sig union select 'Dunhill' union select 'Marlboro' union select 'Winfield' union select 'Rothmans') sigs,
		( select 'red'  as col union  select 'green' union select 'white' union select 'blue' union select 'yellow') cols,
		( select 'tea'  as dri union  select 'beer' union select 'cofe' union select 'milk' union select 'water') dris,
		( select 'fish'  as ani union  select 'dog' union select 'cat' union select 'horse' union select 'bird') anis,
		( select 'eng'  as nat union  select 'norv' union select 'shved' union select 'dat' union select 'nem') nats,
		( select  1   as num union  select  2  union select  3  union select  4  union select  5 ) nums
	) tmp

	where 
	(
		nat = 'eng' and col='red'
		or
		nat != 'eng' and col!='red'
	) -- #1 Англичанин живет в красном доме.

	and
	(
		nat = 'shved' and ani = 'dog'
		or
		nat != 'shved' and ani != 'dog'
	) -- #2 Швед держит собаку
	and
	(
		nat = 'dat' and dri = 'tea'
		or
		nat != 'dat' and dri != 'tea'
	) -- #3 Датчанин пьет чай
	and
	(
		col = 'green' and dri = 'cofe'
		or
		col != 'green' and dri != 'cofe'
	) -- #5 Жилец зеленого дома пьет кофе.
	and
	(
		sig = 'Pall Mall' and ani = 'bird' 
		or
		sig != 'Pall Mall' and ani != 'bird' 
	) -- #6 Человек, который курит Pall Mall, держит птицу
	and
	(
		num =  3  and dri = 'milk'
		or
		num !=  3  and dri != 'milk'
	) -- #7 Жилец из среднего дома пьет молоко
	and
	(
		col = 'yellow' and sig = 'Dunhill'
		or
		col != 'yellow' and sig != 'Dunhill'
	) -- #8 Жилец из желтого дома курит Dunhill
	and
	(
		num =  1  and nat = 'norv'
		or
		num !=  1  and nat != 'norv'
	) -- #9 Норвежец живет в первом доме
	and 
		not (sig = 'Marlboro' and ani = 'cat' )
	-- #10 Курильщик Marlboro живет около того, кто держит кошку
	and
		not (sig = 'Dunhill' and ani = 'horse' )
	-- #11 Человек, который содержит лошадь, живет около того, кто курит Dunhill

	and
	(
		dri = 'beer' and sig = 'Winfield'
		or
		dri != 'beer' and sig != 'Winfield'
	) -- #12 Курильщик сигарет Winfield пьет пиво.
	and
	(
		num =  2  and col = 'blue'
		or
		num !=  2  and col != 'blue'
	) -- #13 Норвежец живет около голубого дома.
	and
	(
		nat = 'nem' and sig = 'Rothmans'
		or
		nat != 'nem' and sig != 'Rothmans'
	) -- #14 Немец курит Rothmans
	and
		not (sig = 'Marlboro' and dri = 'water' )
	-- #15 Курильщик Marlboro живет по соседству с человеком, который пьет воду




select 
a.sig, a.col, a.dri, a.ani, a.nat, a.num,
b.sig, b.col, b.dri, b.ani, b.nat, b.num,
c.sig, c.col, c.dri, c.ani, c.nat, c.num,
d.sig, d.col, d.dri, d.ani, d.nat, d.num,
e.sig, e.col, e.dri, e.ani, e.nat, e.num
from
	(select * from @res where num =  1 ) a,
	(select * from @res where num =  2 ) b,
	(select * from @res where num =  3 ) c,
	(select * from @res where num =  4 ) d,
	(select * from @res where num =  5 ) e
where
	 25  = (
			select count(distinct sig) 
				from 
				(
					select a.sig union 
					select b.sig union 
					select c.sig union 
					select d.sig union
					select e.sig union
					select a.col union 
					select b.col union 
					select c.col union 
					select d.col union
					select e.col union
					select a.dri union 
					select b.dri union 
					select c.dri union 
					select d.dri union
					select e.dri union
					select a.ani union 
					select b.ani union 
					select c.ani union 
					select d.ani union
					select e.ani union
					select a.nat union 
					select b.nat union 
					select c.nat union 
					select d.nat union
					select e.nat

				) b
		)
	and 
		(
			case 'green'
				when a.col then  1 
				when b.col then  2 
				when c.col then  3 
				when d.col then  4 
				when e.col then  5 
			end
		-
			case 'white'
				when a.col then  1 
				when b.col then  2 
				when c.col then  3 
				when d.col then  4 
				when e.col then  5 
			end		
		) = -  1 
	-- #4 Зеленый дом стоит слева от белого.
	and 
		abs
		(
			case 'Marlboro'
				when a.sig then  1 
				when b.sig then  2 
				when c.sig then  3 
				when d.sig then  4 
				when e.sig then  5 
			end
		-
			case 'cat'
				when a.ani then  1 
				when b.ani then  2 
				when c.ani then  3 
				when d.ani then  4 
				when e.ani then  5 
			end		
		) =  1 
	-- #10 Курильщик Marlboro живет около того, кто держит кошку
	and 
		abs
		(
			case 'Dunhill'
				when a.sig then  1 
				when b.sig then  2 
				when c.sig then  3 
				when d.sig then  4 
				when e.sig then  5 
			end
		-
			case 'horse'
				when a.ani then  1 
				when b.ani then  2 
				when c.ani then  3 
				when d.ani then  4 
				when e.ani then  5 
			end		
		) =  1 
	-- #11 Человек, который содержит лошадь, живет около того, кто курит Dunhill
	and 
		abs
		(
			case 'Marlboro'
				when a.sig then  1 
				when b.sig then  2 
				when c.sig then  3 
				when d.sig then  4 
				when e.sig then  5 
			end
		-
			case 'water'
				when a.dri then  1 
				when b.dri then  2 
				when c.dri then  3 
				when d.dri then  4 
				when e.dri then  5 
			end		
		) =  1 		
	-- #15 Курильщик Marlboro живет по соседству с человеком, который пьет воду



select datediff(ms, @start, getdate())

...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Тест для мозгов и компьютеров
    #36844850
WebGuest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #36845296
alex_ll,
Код: plaintext
Select 'Немец' 
или че-то в этом духе...Задачка статическая... Значит и оптимизировать можно до самого ответа....
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #36845475
angel_zar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задание: 15 ($erges: 2008-06-21)
Дима и Миша пользуются продуктами от одного и того же производителя.
Тип Таниного принтера не такой, как у Вити, но признак "цветной или нет" - совпадает.
Размер экрана Диминого ноутбука на 3 дюйма больше Олиного.
Мишин ПК в 4 раза дороже Таниного принтера.
Номера моделей Витиного принтера и Олиного ноутбука отличаются только третьим символом.
У Костиного ПК скорость процессора, как у Мишиного ПК; объем жесткого диска, как у Диминого ноутбука; объем памяти, как у Олиного ноутбука, а цена - как у Витиного принтера.
Вывести все возможные номера моделей Костиного ПК.

Это задача с SQL-EX

Чем то тоже напоминает задачу Энштейна
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Тест для мозгов и компьютеров
    #38137252
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эйнштейновскую решали на Хабре

http://habrahabr.ru/post/122142/
...
Рейтинг: 0 / 0
Тест для мозгов и компьютеров
    #38141865
angel_zar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogierЕще интересные задания для решения на SQL на тему координатной плоскости.
Задание 2.
Имеется координатная плоскость и расположенные на ней прямоугольники, заданные координатами левого нижнего и правого верхнего углов.
а) Спроектировать базу данных для хранения прямоугольников
б) Написать запрос, подсчитывающий общую площадь, покрываемую прямоугольниками

Не возможно определить прямоугольник 2-я точками, по 2-м точкам только квадрат в одном экземпляре.
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 2 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Тест для мозгов и компьютеров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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