Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Вниз

Головоломка.   Найти похожие ветки 

 
Alexey Lipatov   (2003-10-26 00:05) [0]

Альберт Энштейн придумал эту загадку в начале прошлого столетия. Он полагал, что 98% людей не смогут решит ее.
1. Есть пять домов разного цвета: красный, зеленый, белый, желтый, и синий.
2. Каждый населен человеком разной национальности: немец, швед, датчанин, норвежец, и англичанин.
3. Каждый из них пьет один вид напитков, курит одну марку сигарет и держит одно домашнеее животное.
4. Каждый из них уникален в пределах группы (напиток, сигареты и животное не повторяются)

Ключи:
1. Англичанин живет в красном доме.
2. Швед держит собаку.
3. Датчанин пьет чай.
4. Зеленый дом налево от белого и его жилец пьет кофе.
5. Курильщик PallMall держит птичку.
6. Жилец дома, находящегося в середине пьет молоко.
7. Жилец желтого дома курит Dunhill
8. Норвежец живет в первом доме.
9. Курильщик Marlboro живет рядом с владельцем кота.
10. Курильщик Wienfield пьет пиво.
11. Дом норвежца - рядом с синим домом.
12. Немец курит Rothmans.
13. Владелец лошади живет рядом с курильщиком Dunhill.
14. Курильщик Marlboro живет рядом с тем, кто пьет воду.

Вопрос: Кто держит рыбу?

Нашел на одном из форумов. Вообще-то я сильно сомневаюсь что 98% людей не смогут решить. ИМХО все зависит от терпения.
Я решил, а вы?


 
Ломброзо   (2003-10-26 00:58) [1]

"Вот еврей! Давно помер, а гоим до сих пор себе головы ломают!" (ц)


 
Dionys   (2003-10-26 09:22) [2]

может быть во времена Эйнштейна так и было... но по-моему это очень простая задача... особенно для тех, кто играл когда-то в игрушки типа Sherlock...


 
Sergey_Masloff   (2003-10-26 09:53) [3]

у нас на работе в 15 минут уложились все. Действительно, для решения таких задач есть методика, решив несколько остальные решаются сходу.


 
Nikolay M.   (2003-10-26 12:25) [4]

На softforum.ru эта тема обсуждалась год назад:
http://www.softforum.ru/news.exe?cmd=article&group=cps.nontechnical&item=2624&utag=


 
ghg   (2003-10-26 16:00) [5]

да и здесь полгода назад было


 
SergP   (2003-10-26 17:22) [6]

За последний месяц уже третий раз эту задачу вижу. :)
Странно только почему Энштейн был такого плохого мнения про умственные способности людей?
Ведь в задачке нет ничего такого, над чем действительно нужно было бы хорошо подумать. Решается очень просто.


 
Nikolay M.   (2003-10-26 17:27) [7]


> почему Энштейн был такого плохого мнения про умственные
> способности людей?

Если посмотришь мою ссылку в [4], то увидишь, что народ нашел несколько решений. Может, АЭ это и имел ввиду - увидеть более одного ответа?


 
nikkie   (2003-10-26 17:39) [8]

имхо, если убрать некоторые неопределенности
1. "зеленый дом налево от белого" - означает, что эти дома соседние
2. нумерация идет слева направо
то задача имеет единственное решение. а решается действительно просто.


 
Rouse_   (2003-10-26 17:41) [9]

Старо, повторяется раз в три - четыре месяца...


 
default   (2003-10-26 17:47) [10]

немец что-ли?


 
SergP   (2003-10-26 18:16) [11]


> Nikolay M. © (26.10.03 17:27) [7]
>
> Если посмотришь мою ссылку в [4], то увидишь, что народ
> нашел несколько решений. Может, АЭ это и имел ввиду - увидеть
> более одного ответа?


Ну не знаю. Я при решении считал что дома нумеруются слева направо (8. Норвежец живет в первом доме. ). А (4. Зеленый дом налево от белого) понимал так что первый дом из тех что слева от белого - зеленый.

Решение получилось единственное.

Конечно можно учесть кажущуюся неоднозначность этих двух подсказок. (хотя одновременно обе они не могут быть неоднозначными, иначе вторая из них в этом случае теряет смысл).
Не знаю что получится в этом случае. Не пробовал.


 
default   (2003-10-26 18:26) [12]

при разной нумерации у меня получился "немец"
если ещё учесть относительность высказываения
"зеленый дом налево от белого" может что и другое получится, хотя вряд ли
так какой ответ-то?


 
SergP   (2003-10-26 18:36) [13]

У меня тоже немец. Хотелось бы увидеть решение того, у кого их несколько получилось. А то там (на том форуме) [4] только одни разговоры идут, а сами решения (оба варианта) я не нашел.


 
default   (2003-10-26 18:52) [14]

SergP © (26.10.03 18:36) [13]
это точно


 
icWasya   (2003-10-27 14:32) [15]

прошло сто лет ---

///////////////////
//
// Enshten.dpr
//
///////////////////
program Enshten;

uses
Forms,
Unit1 in "Unit1.pas" {Form1},
Unit2 in "Unit2.pas";

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

/////////////////////////
//
// Unit1.dfm
//
////////////////////////
object Form1: TForm1
Left = 296
Top = 147
Width = 378
Height = 480
Caption = "Form1"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Gauge1: TGauge
Left = 2
Top = 32
Width = 359
Height = 33
MinValue = 1
MaxValue = 120
Progress = 1
end
object Gauge2: TGauge
Left = 104
Top = 0
Width = 30
Height = 30
Kind = gkPie
MinValue = 1
MaxValue = 120
Progress = 1
ShowText = False
end
object Gauge3: TGauge
Left = 208
Top = 0
Width = 30
Height = 30
Kind = gkPie
MinValue = 1
MaxValue = 120
Progress = 1
ShowText = False
Visible = False
end
object Button1: TButton
Left = 8
Top = 0
Width = 75
Height = 25
Caption = "Go"
TabOrder = 0
OnClick = Button1Click
end
object Memo1: TMemo
Left = 1
Top = 72
Width = 361
Height = 369
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Pitch = fpFixed
Font.Style = []
Lines.Strings = (
"-")
ParentFont = False
ScrollBars = ssVertical
TabOrder = 1
end
end

///////////////////////////
//
// Unit1.pas
//
//////////////////////////
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Gauges;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Gauge1: TGauge;
Gauge2: TGauge;
Gauge3: TGauge;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2,UGenNN;

{$R *.DFM}

Var RR:TNN;
I,J:Integer;
begin
Button1.Visible:=False;
Button1.Enabled:=False;

RR:=TNN.Create(5);
for I:=1 to 120 do begin
for J:=1 to 5 do C55[I][J]:=RR.FN[J-1];
RR.Next;
end;
RR.Free;
Button1.Visible:=True;

Application.ProcessMessages;

Loop(Memo1.Lines);
Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0))+"Result.Txt");
Close;
end;
end.

//////////////////////////////////////////
// UGenNN; Генератор Перестановок
/////////////////////////////////////////
unit UGenNN;

interface
type
TNN=Class
LN:Integer;
FCount:Integer;
private
function GetValue(I: Integer): Integer;
procedure Swap(I, J: Integer);
public
constructor Create(N:Byte);
function Next: Boolean;
public FN:Array Of Byte;
end;
implementation

{ TNN }

constructor TNN.Create(N: Byte);
var I:Integer;
begin
SetLength(FN,N);
LN:=N;
FCount:=1;
for I:=1 to N do begin
FN[I-1]:=I;
FCount:=FCount*I;
end;
end;

function TNN.GetValue(I: Integer): Integer;
begin
Result:=FN[I-1];
end;

procedure TNN.Swap(I,J:Integer); {обмен переменных}
var Tmp:byte;
begin
Tmp:=FN[I];
FN[I]:=FN[J];
FN[J]:=Tmp;
end;

Function TNN.Next:Boolean;
var
i,j:byte;
begin
i:=LN-1;
{поиск i}
while (i>0)and(FN[i]>FN[i+1]) do dec(i);
if i>0 then begin
j:=i+1;
{поиск j}
while (j<LN)and(FN[j+1]>FN[i]) do inc(j);
Swap(i,j);
for j:=i+1 to (LN+i) div 2 do Swap(j,LN-j+i+1);
Result:=true
end
else
Result:=false
end;

end.
///////////////////////////////////////////////////////////////////////////////


будет продолжение


 
icWasya   (2003-10-27 14:34) [16]

продолжение

///////////////////////////
//
// Unit2.pas
//
//////////////////////////

unit Unit2;

interface
uses Classes, Gauges, Forms;
Type CNK=1..120;
TA8=array[1..8] of Byte; PA8=^TA8;
var C55:array[CNK]of TA8;
const
Norw=1; Engl=2; Swed=3; Dath=4; Doit=5;
Nations:Array[1..5]Of String=(
"Норвежец","Англичанин","Швед","Датчанин","Немец");

Red=1; Green=2; White=3; Blue=4; Yellow=5;
Colors:Array[1..5]Of String=(
"Красный","Зелёный","Белый","Голубой","Жёлтый");

Pall_Mall=1; Dunhill=2; Winfield=3; Rothmans=4; Marlboro=5;
Smokes:Array[1..5]Of String=(
"Pall Mall","Dunhill","Winfield","Rothmans","Marlboro");

Dog=1; Bird=2; Cat=3; Horse=4; Fish=5;
Pets:Array[1..5]Of String=(
"Cобака","Птица","Кошка","Лошадь","Рыба");

Milk=1; Tee=2; Coffe=3; Water=4; Beer=5;
Drinks:Array[1..5]Of String=(
"Молоко","Чай","Кофе","Вода","Пиво");

Var
DNations :PA8;
DColors :PA8;
DSmokes :PA8;
DPets :PA8;
DDrinks :PA8;

Function GlobalResult:String;
Function Test:Boolean;
procedure Loop(ST:TStrings);

implementation
Uses SysUtils,Unit1;
Function LocalResult(Home:Byte):String;
var i:Integer;
begin
Result:=IntToStr(Home);
for I:=1 to 5 do if DColors [I]=Home Then Result:=Format("%s %8s" ,[Result,Colors [I]]);
for I:=1 to 5 do if DNations[I]=Home Then Result:=Format("%s %12s",[Result,Nations[I]]);
for I:=1 to 5 do if DSmokes [I]=Home Then Result:=Format("%s %12s",[Result,Smokes [I]]);
for I:=1 to 5 do if DPets [I]=Home Then Result:=Format("%s %6s",[Result,Pets [I]]);
for I:=1 to 5 do if DDrinks [I]=Home Then Result:=Format("%s %6s",[Result,Drinks [I]]);

end;
Function GlobalResult:String;
begin
Result:=
LocalResult(1)+#13#10+
LocalResult(2)+#13#10+
LocalResult(3)+#13#10+
LocalResult(4)+#13#10+
LocalResult(5)+#13#10+
"---------------------";
end;

Function Test:Boolean;
begin
Result:=False;

// 1. Англичанин живет в красном доме
if not (DNations[Engl] = DColors[Red]) then exit;

// 2. Швед держит собаку

if not (DNations[Swed] = DPets[Dog]) then exit;

// 3. Датчанин пьет чай
if not (DNations[Dath] = DDrinks[Tee]) then exit;

// 4. Зеленый дом стоит слева от белого
if not ((DColors[Green]+1) = DColors[White]) then exit;

// 5. Жилец зеленого дома пьет кофе
if not (DColors[Green] = DDrinks[Coffe]) then exit;

// 6. Человек, который курит Pall Mall, держит птицу
if not (DSmokes[Pall_Mall] = DPets[Bird]) then exit;

// 7. Жилец из среднего дома пьет молоко
if not (DDrinks[Milk] = 3) then exit;

// 8. Жилец из желтого дома курит Dunhill
if not (DColors[Yellow] = DSmokes[Dunhill]) then exit;

// 9. Норвежец живет в первом доме
if not (DNations[Norw] = 1) then exit;

// 10. Курильщик Marlboro живет около того, кто держит кошку
if not( ( (DSmokes[Marlboro]+1) = DPets[Cat])
Or ( (DSmokes[Marlboro]-1) = DPets[Cat])) then exit;

// 11. Человек, который содержит лошадь, живет около того, кто курит Dunhill
if not( ( (DSmokes[Dunhill]+1) = DPets[Horse])
Or ( (DSmokes[Dunhill]-1) = DPets[Horse])) then exit;

// 12. Курильщик сигарет Winfield пьет пиво
if not (DSmokes[Winfield] = DDrinks[Beer]) then exit;

// 13. Норвежец живет около голубого дома
if not( ( (DNations[Norw]+1) = DColors[Blue])
Or ( (DNations[Norw]-1) = DColors[Blue])) then exit;

// 14. Немец курит Rothmans
if not (DNations[Doit] = DSmokes[Rothmans]) then exit;

// 15. Курильщик Marlboro живет по соседству с человеком, который пьет воду
if not (( (DSmokes[Marlboro]+1) = DDrinks[Water])
Or ( (DSmokes[Marlboro]-1) = DDrinks[Water])) then exit;

Result:=True;
end;

procedure Loop(ST:TStrings);
Var
iNations :Byte;
iColors :Byte;
iSmokes :Byte;
iPets :Byte;
iDrinks :Byte;

begin
with Form1 do
for iNations:=1 to 120 do begin
DNations:=@C55[iNations];
if Gauge1.Visible then begin
Gauge1.Progress:=iNations;
Application.ProcessMessages;
end;
for iDrinks :=1 to 120 do begin
DDrinks:=@C55[iDrinks];
if Gauge2.Visible then begin
Gauge2.Progress:=iDrinks;
Application.ProcessMessages;
end;
for iSmokes :=1 to 120 do begin
DSmokes:=@C55[iSmokes];
if Gauge3.Visible then begin
Gauge3.Progress:=iSmokes;
Application.ProcessMessages;
end;
for iPets :=1 to 120 do begin
DPets:=@C55[iPets];
for iColors :=1 to 120 do begin
DColors:=@C55[iColors];
if Test then begin
ST.Add(GlobalResult);
Application.ProcessMessages;
end;
end;
end;
end;
end;
end;
end;

end.


три минуты на P-III 800


 
MeF88   (2003-10-27 14:37) [17]


> три минуты на P-III 800

И полчаса написания...


 
Sha   (2003-10-27 15:29) [18]

icWasya © (27.10.03 14:34) [16]

Моя считала гораздо быстрее :)


 
icWasya   (2003-10-27 16:05) [19]

код в студию


 
DiamondShark   (2003-10-27 16:48) [20]

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

Что-то там с Энштейном не то...
То-ли не Энштейн, то-ли не считал...
А может быть формулировка должна быть " никто из людей не сможет решить задачу в уме" ?
Это уже похоже на правду -- я решал выписав факты на прозрачные карточки и совмещая их друг с другом (карточки, естественно, виртуальные ;-), в paint"е ).


 
default   (2003-10-27 17:04) [21]

DiamondShark © (27.10.03 16:48) [20]
"А может быть формулировка должна быть "никто из людей не сможет решить задачу в уме" ?"
это вряд ли, потому что если ты решаешь задачу в уме, это не значит, что ты шибко умный - просто у тебя хорошая память
много оперативки хе



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.011 c
1-56759
xGhost
2003-11-06 14:09
2003.11.17
Помогите разобраться со свойством сервиса


1-56610
MaG
2003-11-05 17:05
2003.11.17
Регистрация


14-56864
Layner
2003-10-27 09:00
2003.11.17
Очень нужен совет по модему+коннект ...


1-56731
able
2003-11-06 20:13
2003.11.17
Хинт


4-56966
kkostik
2003-09-23 10:40
2003.11.17
Перехват WinAPI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский