Вверх ↑
Этот топик читают: Гость
Ответов: 409
Рейтинг: 17
#1: 2009-11-27 22:21:03 ЛС | профиль | цитата
Есть тут любители логических задачек?
Вот задача:

Пять домов, нумерация слева направо:
* Англичанин живёт в красном доме.
* Швед держит собаку.
* Датчанин пьёт чай.
* Зелёный дом стоит слева от белого.
* Жилец зелёного дома пьёт кофе.
* Человек, курящий Пэл Мэл содержит птицу.
* Жилец из среднего дома пьёт молоко.
* Жилец жёлтого дома курит Данхел.
* Норвежец живёт в первом доме.
* Курильщик Мальборо живёт около того, кто держит кошку.
* Человек, который содержит лошадь, живёт около того,
кто курит Данхел.
* Курильщик сигарет Винфельд пьёт пиво.
* Норвежец живёт около голубого дома.
* Немец курит Ротманс.
* Курильщик Мальборо живёт по соседству с человеком,
который пьёт воду.
Каждый живёт только в одном доме, курит и пьёт что-то одно и
содержит только одно домашнее животное.
ВОПРОС: У кого живёт рыбка?

Можно решить её просто на листочке (или в памяти - если вы вундеркинд) или с помощью HiASM.
карма: 0

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#2: 2009-11-27 23:03:02 ЛС | профиль | цитата
Гы, а ты ее решил
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#3: 2009-11-28 00:56:28 ЛС | профиль | цитата
решал такие задачи в школе вместо домашнего задания. Весьма увлекательное занятие . Однако оказалось, что они идеально ложатся в рамки диалекта языка Prolog, где за 10 минут правильно составленных правил можно получить однозначный ответ на поставленный вопрос, после чего интерес к ним пропал...
карма: 27
0
Ответов: 294
Рейтинг: 64
#4: 2009-11-28 01:31:21 ЛС | профиль | цитата
Может это и для школьников в большей степени, но мои пенсионерские мозги аж заскрипели)

Насколько я понял - этот "нехороший рыбко" проживает у жирного бюргера из зеленого дома под номером 4...
Правильно? А то на второй год неохото))

карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#5: 2009-11-28 03:40:48 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2021-05-22 09:22:17
карма: 0

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#6: 2009-11-28 03:49:04 ЛС | профиль | цитата
Quest писал(а):
Правильно?

Правильно. Привожу полное решение задачи



92.39.105.26 писал(а):
И ответ тут может быть что рыбки нет

Не может. Решение -- сверху

P.S. Интересен тот факт, что подавляющее число представительниц слабого пола со светлыми волосами, в простонародье называемых "блондинками", решить эту задачу не смогли Кстати, эта задача называется задачей Эйнштейна
карма: 22

0
файлы: 1job_001.png [8KB] [910]
Ответов: 2125
Рейтинг: 159
#7: 2009-11-28 10:15:14 ЛС | профиль | цитата
nesco писал(а):
Привожу полное решение задачи

google рулит?
карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#8: 2009-11-28 12:25:13 ЛС | профиль | цитата
tsdima писал(а):
google рулит?

Мозги рулят, а не google, что ж ты меня таким тупым считаешь Между прочим, я ее сам решал, но давно и с другими названиями сигарет, а решение на компе осталось. Интерес был, именно самому решить, как-то, внутренне, не хотелось походить на "блондинко" К тому же, я не пользуюсь googl-ом, как основным поисковиком
карма: 22

0
Ответов: 2125
Рейтинг: 159
#9: 2009-11-28 13:52:18 ЛС | профиль | цитата
nesco писал(а):
Между прочим, я ее сам решал, но давно и с другими названиями сигарет

Схема где!!?
карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#10: 2009-11-28 13:56:58 ЛС | профиль | цитата
tsdima писал(а):
Схема где!!?

Щаз, так я и дал. Сами пусть думают
карма: 22

0
Ответов: 2125
Рейтинг: 159
#11: 2009-11-28 13:57:59 ЛС | профиль | цитата
Кстати, тупой перебор с проверкой всех условий - всего 24.8832 млрд. итераций
карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#12: 2009-11-28 14:12:08 ЛС | профиль | цитата
В этой задаче приличное количество однозначных решений, с них и надо начинать. Например: "Норвежец живёт в первом доме", "Норвежец живёт около голубого дома" и "Зелёный дом стоит слева от белого". Это дает однозначное решение, что красный дом стоит в середине при условии, что "Англичанин живёт в красном доме", почему, сами поймете
карма: 22

0
Ответов: 409
Рейтинг: 17
#13: 2009-11-28 15:06:40 ЛС | профиль | цитата
Dilma писал(а):
Однако оказалось, что они идеально ложатся в рамки диалекта языка Prolog

Действительно, это задача из examples Акторного Пролога. В нем эта задача решается в десяток строк кода (не считая задания).

Есть еще одна задачка:
Разместите 8 ферзей на шахматной доске так, чтобы ни один из ферзей не был под ударом других ферзей.

Решений будет несколько, поэтому хотелось бы увидеть все варианты.

карма: 0

0
Ответов: 1926
Рейтинг: 172
#14: 2009-11-28 22:22:44 ЛС | профиль | цитата
Знаю, что очень нерационально из-за edito'в, но, к сожалению, никогда не использовал функции рисования на картинке...
Надо просто нажимать кнопку, и будут перебираться варианты. Иногда это будет 7, иногда - заветные 8.


Add(Button,1048210,154,140)
{
Left=245
Top=20
link(onClick,15909764:GetFerz,[])
}
Add(InlineCode,15909764,224,140)
{
WorkPoints=#7:GetFerz|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|35: cells:array[1..8,1..8] of byte;|39: edits:array[1..8,1..8] of PControl;|30: function CheckArr:boolean;|9: public|17: //:THI_Event;|0:|23: constructor Create;|48: procedure GetFerz(var dt:TData; index:word);|0:|5: end;|0:|14:implementation|0:|31:constructor THiAsmClass.Create;|21:var i,i1,l,t:integer;|5:begin|18: inherited Create;|9: l := 20;|9: t := 20;|17: for i:=1 to 8 do|7: begin|20: for i1:=1 to 8 do|9: begin|54: edits[i,i1] := NewEditbox(Applet.Children[0],[]);|31: edits[i,i1].Ctl3D := true;|34: edits[i,i1].Color := clWhite;|39: edits[i,i1].Font.FontHeight := 18;|39: edits[i,i1].TextAlign := taCenter;|29: edits[i,i1].Width := 25;|30: edits[i,i1].Height := 25;|27: edits[i,i1].Left := l;|26: edits[i,i1].Top := t;|33: edits[i,i1].Visible := true;|17: t := t + 25;|8: end;|11: t := 20;|15: l := l + 25;|6: end;|4:end;|0:|30:procedure THiAsmClass.GetFerz;|25:var i,i1,n,xr,yr:integer;|5:begin|11: randomize;|8: //Сброс|35: for i:=1 to 8 do for i1:=1 to 8 do|7: begin|20: cells[i,i1] := 0;|32: edits[i,i1].Color := clWhite;|6: end;|16: //Поиск решения|7: repeat|8: repeat|27: xr := round(random*7+1);|27: yr := round(random*7+1);|25: until cells[xr,yr] = 0;|19: //Установка ферзя|20: cells[xr,yr] := 1;|19: //Установка угроз|60: for i:=1 to 8 do if cells[i,yr] = 0 then cells[i,yr] := 2;|60: for i:=1 to 8 do if cells[xr,i] = 0 then cells[xr,i] := 2;|9: n := 0;|21: for i:=yr+1 to 8 do|8: begin|11: inc(n);|59: if (xr+n <= 8) and (xr+n >= 1) then cells[xr+n,i] := 2;|59: if (xr-n <= 8) and (xr-n >= 1) then cells[xr-n,i] := 2;|7: end;|9: n := 0;|25: for i:=yr-1 downto 1 do|8: begin|11: inc(n);|59: if (xr+n <= 8) and (xr+n >= 1) then cells[xr+n,i] := 2;|59: if (xr-n <= 8) and (xr-n >= 1) then cells[xr-n,i] := 2;|7: end;|16: until CheckArr;|0:|35: for i:=1 to 8 do for i1:=1 to 8 do|21: case cells[i,i1] of|34: 1: edits[i,i1].Color := clBlack;|32: 2: edits[i,i1].Color := clRed;|6: end;|17: //_hi_OnEvent();|4:end;|0:|30:function THiAsmClass.CheckArr;|17:var i,i1:integer;|5:begin|16: Result := true;|76: for i:=1 to 8 do for i1:=1 to 8 do if cells[i,i1] = 0 then Result := false;|4:end;|0:|4:end.|
}
------------ Дoбавленo в 22.36:
А вот схема для тех, кому нужно получать только комбинации из 8 ферзей.


Add(Button,1048210,154,154)
{
Left=245
Top=20
link(onClick,15909764:GetFerz,[])
}
Add(InlineCode,15909764,224,154)
{
WorkPoints=#7:GetFerz|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|35: cells:array[1..8,1..8] of byte;|39: edits:array[1..8,1..8] of PControl;|30: function CheckArr:boolean;|30: function CheckAll:boolean;|9: public|17: //:THI_Event;|0:|23: constructor Create;|48: procedure GetFerz(var dt:TData; index:word);|0:|5: end;|0:|14:implementation|0:|31:constructor THiAsmClass.Create;|21:var i,i1,l,t:integer;|5:begin|18: inherited Create;|9: l := 20;|9: t := 20;|17: for i:=1 to 8 do|7: begin|20: for i1:=1 to 8 do|9: begin|54: edits[i,i1] := NewEditbox(Applet.Children[0],[]);|31: edits[i,i1].Ctl3D := true;|34: edits[i,i1].Color := clWhite;|39: edits[i,i1].Font.FontHeight := 18;|39: edits[i,i1].TextAlign := taCenter;|29: edits[i,i1].Width := 25;|30: edits[i,i1].Height := 25;|27: edits[i,i1].Left := l;|26: edits[i,i1].Top := t;|33: edits[i,i1].Visible := true;|17: t := t + 25;|8: end;|11: t := 20;|15: l := l + 25;|6: end;|4:end;|0:|30:procedure THiAsmClass.GetFerz;|25:var i,i1,n,xr,yr:integer;|5:begin|11: randomize;|6:repeat|8: //Сброс|35: for i:=1 to 8 do for i1:=1 to 8 do|7: begin|20: cells[i,i1] := 0;|32: edits[i,i1].Color := clWhite;|6: end;|16: //Поиск решения|7: repeat|8: repeat|27: xr := round(random*7+1);|27: yr := round(random*7+1);|25: until cells[xr,yr] = 0;|19: //Установка ферзя|20: cells[xr,yr] := 1;|19: //Установка угроз|60: for i:=1 to 8 do if cells[i,yr] = 0 then cells[i,yr] := 2;|60: for i:=1 to 8 do if cells[xr,i] = 0 then cells[xr,i] := 2;|9: n := 0;|21: for i:=yr+1 to 8 do|8: begin|11: inc(n);|59: if (xr+n <= 8) and (xr+n >= 1) then cells[xr+n,i] := 2;|59: if (xr-n <= 8) and (xr-n >= 1) then cells[xr-n,i] := 2;|7: end;|9: n := 0;|25: for i:=yr-1 downto 1 do|8: begin|11: inc(n);|59: if (xr+n <= 8) and (xr+n >= 1) then cells[xr+n,i] := 2;|59: if (xr-n <= 8) and (xr-n >= 1) then cells[xr-n,i] := 2;|7: end;|16: until CheckArr;|15:until CheckAll;|0:|35: for i:=1 to 8 do for i1:=1 to 8 do|21: case cells[i,i1] of|34: 1: edits[i,i1].Color := clBlack;|32: 2: edits[i,i1].Color := clRed;|6: end;|17: //_hi_OnEvent();|4:end;|0:|30:function THiAsmClass.CheckArr;|17:var i,i1:integer;|5:begin|16: Result := true;|76: for i:=1 to 8 do for i1:=1 to 8 do if cells[i,i1] = 0 then Result := false;|4:end;|0:|30:function THiAsmClass.CheckAll;|21:var i,i1,sum:integer;|5:begin|10: sum := 0;|17: Result := false;|69: for i:=1 to 8 do for i1:=1 to 8 do if cells[i,i1] = 1 then inc(sum);|32: if sum = 8 then Result := true;|4:end;|0:|0:|4:end.|
}

Я пробовал поискать комбинацию из 9 ферзей - виснет
карма: 9
3
Голосовали:filyaxxxcom, Pirr, Tad
Ответов: 409
Рейтинг: 17
#15: 2009-11-28 22:45:26 ЛС | профиль | цитата
3042, что можно сказать? - КРУТО!
Жаль только, что не на стандартных компонентах HiASM.
Надеюсь Гугль не помогал?

Вот еще тренажер для ума:
У некоторого султана было два мудреца: Али-ибн-Вали и Вали-ибн-Али. Желая убедиться в их мудрости, султан призвал мудрецов к себе и сказал: "Я задумал два числа. Оба они целые, каждое больше единицы, но меньше ста. Я перемножил эти числа и результат сообщу Али и при этом Вали я скажу сумму этих чисел. Если вы и вправду так мудры, как о вас говорят, то сможете узнать исходные числа".

Мудрецы задумались. Первым нарушил молчание Али.
- Я не знаю этих чисел, - сказал он, опуская голову.
- Я это знал, - подал голос Вали.
- Тогда я знаю эти числа, - обрадовался Али.
- Тогда и я знаю! - воскликнул Вали.
И мудрецы сообщили пораженному царю задуманные им числа.

Назовите эти числа.

карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)