Текущий архив: 2003.11.17;
Скачать: CL | DM;
ВнизГоловоломка. Найти похожие ветки
← →
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;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.01 c