Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Тест для мозгов и компьютеров  [new]
dishlo
Member

Откуда:
Сообщений: 362
alex_ll

У тебя в 3-м пункте рассуждений ошибка
Зеленый Левее белого -
Это значит, что белый не может быть 1-м, а зеленый 5-м и оба они не могут быть 2 (из п.2)

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


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

значит зеленый не может быть средним (третим), остается однозначаня комбинайция четвертый и пятый.
Сорри, в первой табличке не вписал молоко
16 фев 04, 09:08    [536780]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Блин, меньше всего я ожидал что народ кинется решать эту тупую задачу в лоб :(
16 фев 04, 10:57    [536952]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Кстати у меня есть большие сомнения что эту задачу действительно придумал Эйнштейн
16 фев 04, 11:01    [536962]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
alex_ll
Member

Откуда: tomsk
Сообщений: 4193
2 dishlo
7. Жилец из среднего дома пьет молоко. 

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

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

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

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

2 All Народ где ошибка у меня или SergSuper не все условия выложил?
16 фев 04, 14:40    [537444]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
Paul Chabinsky
Member

Откуда:
Сообщений: 329
Такие задачки мы решали в школе, не подумайте что я вы""" просто школа такая была, или учитель :)
Энштейн не учел что в 2004 году будет интернет, на решение данной задачи у меня ушло около 1-й минуты(время на выбор ссылки из предложенных яндексом по фразе "Англичанин живет в красном доме") :)
http://imfo.ru/issues/fish-2
16 фев 04, 21:48    [538209]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Тест для мозгов и компьютеров  [new]
MX -- ALEX
Guest
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 листа - программный и результатный

К сообщению приложен файл (EINSHTEIN.xls - 26Kb) cкачать
19 апр 06, 16:34    [2580980]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
WarAn
Guest
SergSuper
Может кто-нибудь знает как по теории решаются такие задачи или хотя бы сталкивался с ними?

Как по мне, матрицой решать проще всего.
7 окт 06, 18:09    [3233366]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
guest00x
Guest
SergSuper
Тут мне прислали такую задачку:А. Эйнштейн придумал эту загадку в прошлом веке и полагал, что 98% жителей земли будут не в состоянии ее решить.

Угу, посля какога класса сто лет назад 98% жителей земли шли в поле с восхода и возвращались после заката дабы хлеб насущный добыть ?
Нынче 98% жителей нашей страны "бездельничают" аж до окончания института, стал быть, в состоянии ее решить :))

P.S. из всех моих многих знакомых, кто не отмахнулся от решения (им, видите ли, некогда на такую хрень время тратить!), 100% решили эту задачку, причем, буквально походя :))
8 окт 06, 00:51    [3233811]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
просто_зритель
Guest
это действительно школьная задача по логике (правда не знаю, преподавали ли в обычных школах), и легче решатся не методами программирования, а методами формальной логики
6 июл 07, 09:57    [4358764]     Ответить | Цитировать Сообщить модератору
 Re: RE:Тест для мозгов и компьютеров  [new]
XAM_80
Member

Откуда:
Сообщений: 1
Или я что то не допонял...., или поправте меня если я не прав...
Итак:
1. Согласно п.4 условий:"Зеленый дом налево от Белого и ..." почему никто не берет во внимание "..."?Из этого условия следует, что зел.дом через один на лево от"..."?! Житель которого,согласно п.5 пьет Кофе.
1ый дом Норвежца, 2ой-синий, следовательо как раз в правой части остаеться 3 дома(Зел.,Белый, и "..."), остаються не распраделенными 2 цвета(жел., и красный), ну 1й дом красным быть не может, т.к. в кр.доме живет Англичанин, а в 1ом Норвежец, соответственно 5й дом-красный, а первый желтый.
Получается: кр.,син.,зел.,бел.,жел. Разве не так???:)
2.Еще один момент, после всех дальнейших выкладок у меня получилось не учтеные "Кот" и "рыба"
И мне кажеться, что не хватает еще одного условия в задаче, позволяющего однозначно определить, кота, и рыбу куда надо..., я по логике кота отправил к Немцу, который у меня живет в 3-ем доме(Зеленом),Пьет молоко,Курит Ротманз.,а рыбу к Норвежцу(1й-дом-Желтый)курит Данхилл И пьет воду.
Я считаю логично Кота отправить к Молоку..., а рыбу к воде....:)
17 ноя 07, 00:22    [4928729]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
немец.
Guest
рыба у меня

зы: 2 часа убил, рыбо моя!
17 ноя 07, 03:39    [4928866]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
немец.
Guest
2 alex_ll:
ну в задаче же дома последовательно упорядочены - типа 'зеленый слева от белого'. а у тебя что? фигня какая-то .. вобщем из 6-ти вариантов ни одного правильного
17 ноя 07, 03:49    [4928871]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
немец.
Guest
автор
кота отправил к Немцу, который у меня живет в 3-ем доме(Зеленом),Пьет молоко,Курит Ротманз

да-да, живу я в зеленом доме, но, мля, молоко я ненавижу, пью тока кофе, хотя ротманс и правда ничего.. но вот кот ваш нафиг не вперся, всю рыбу ведь сожрет сцуко..
17 ноя 07, 03:56    [4928873]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
Могу предложить следующий вариант:


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

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

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


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 живет по соседству с человеком, который пьет воду




Результат:


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
18 ноя 07, 03:19    [4930224]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
Dima T
Member

Откуда:
Сообщений: 14599
SergSuper
PS. Предваряя вопросы, скажу, что система условий полна и определяет единственное возможное решение. Так что отговорки не принимаются...

А три разных правильных ответа принимаются?

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


PS SergSuper - это не ты случайно тот Энштейн ?
18 ноя 07, 16:49    [4930746]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1055
Да, задача беспонт, решил за час (начальник на работе еще отвлекал^_^) использованием логики. СергаСупера на мыло, не мог Эйнштейн про такой ацтой сказать, что его могут решить только 2%.

з.ы. Сомневаюсь кстати, что такую задачу мона решить в паскале за 30 строк. Очень уж лень проверять, башка сильно с похмелья болит, но сомневаюсь.
19 ноя 07, 06:41    [4931526]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
Алексей Р.
Member

Откуда:
Сообщений: 304
Энштейн говорил, что 2 процента могут решить задачу в уме и за короткое время не знаю какое...
На бумаге почти каждый сможет решить. У меня ушло где-то пол часа....
19 ноя 07, 15:45    [4934381]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
Arhip
Guest
Право и лево понятия относительные
21 ноя 07, 01:58    [4942428]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
Dima T
SergSuper
PS. Предваряя вопросы, скажу, что система условий полна и определяет единственное возможное решение. Так что отговорки не принимаются...

А три разных правильных ответа принимаются?

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


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



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

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

А если как "ближайший левый", то - один.
21 ноя 07, 10:08    [4943005]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
Мне кажется, смысл исходного поста был не в том, чтоб все бросились решать задачу:)

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

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

Изменения:

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

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())

21 ноя 07, 10:23    [4943115]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Тест для мозгов и компьютеров  [new]
WebGuest
Guest
Проще решать в табличном виде
14 сен 10, 10:12    [9433772]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
Евгений дДД
Guest
alex_ll,
Select 'Немец' 
или че-то в этом духе...Задачка статическая... Значит и оптимизировать можно до самого ответа....
14 сен 10, 13:02    [9435248]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 897
Задание: 15 ($erges: 2008-06-21)
Дима и Миша пользуются продуктами от одного и того же производителя.
Тип Таниного принтера не такой, как у Вити, но признак "цветной или нет" - совпадает.
Размер экрана Диминого ноутбука на 3 дюйма больше Олиного.
Мишин ПК в 4 раза дороже Таниного принтера.
Номера моделей Витиного принтера и Олиного ноутбука отличаются только третьим символом.
У Костиного ПК скорость процессора, как у Мишиного ПК; объем жесткого диска, как у Диминого ноутбука; объем памяти, как у Олиного ноутбука, а цена - как у Витиного принтера.
Вывести все возможные номера моделей Костиного ПК.

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

Чем то тоже напоминает задачу Энштейна
14 сен 10, 14:11    [9435861]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Тест для мозгов и компьютеров  [new]
mayton
Member

Откуда: loopback
Сообщений: 45429
Эйнштейновскую решали на Хабре

http://habrahabr.ru/post/122142/
5 фев 13, 03:20    [13875377]     Ответить | Цитировать Сообщить модератору
 Re: Тест для мозгов и компьютеров  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 897
boogier
Еще интересные задания для решения на SQL на тему координатной плоскости.
Задание 2.
Имеется координатная плоскость и расположенные на ней прямоугольники, заданные координатами левого нижнего и правого верхнего углов.
а) Спроектировать базу данных для хранения прямоугольников
б) Написать запрос, подсчитывающий общую площадь, покрываемую прямоугольниками


Не возможно определить прямоугольник 2-я точками, по 2-м точкам только квадрат в одном экземпляре.
7 фев 13, 15:00    [13891382]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить