Последний релиз логической задачи см. здесь.
Задание. Тест от Эйнштейна. Не желаете ли определить, принадлежите вы к 2% интеллектуальных людей или нет? Постарайтесь решить эту задачу. Без фокусов, только логика. Альберт Эйнштейн составил ее в начале 20-го века. Он утверждал, что 98% населения не сумеют ее решить. Прав ли великий ученый?
Итак, на одной улице стоят 5 домов, окрашенных в 5 разных цветов. В каждом доме
живет гражданин другой страны. Каждый из них пьет свой напиток, курит свои сигареты
и содержит свое домашнее животное. Определите, кто из них содержит рыб?
1. Британец живет в красном доме.
2. У шведа есть собака.
3. Датчанин пьет чай.
4. Зеленый дом стоит слева от белого и вплотную к нему.
5. Хозяин зеленого дома пьет кофе.
6. У того, кто курит Pall Mall, есть птицы.
7. Хозяин желтого дома курит Dunhill.
8. Хозяин среднего дома пьет молоко.
9. Норвежец живет в первом доме.
10. Человек, который курит Blends, живет рядом с хозяином котов.
11. Тот, кто содержит лошадей, живет рядом с тем, кто курит Dunhill.
12. Тот, кто курит Blue Master, пьет пиво.
13. Немец курит Prince.
14. Норвежец живет рядом с синим домом.
15. У того, кто курит Blends, есть сосед, который пьет воду.
Задача-минимум. Написать программу, в которой на экране было бы нечто вида
Prince |
|
|
Blue Master |
|
|
Pall Mall |
|
|
Dunhill |
|
|
Blends |
аквариумные рыбки |
|
|
собака |
|
|
птицы |
|
|
коты |
|
|
лошади |
вода |
|
|
кофе |
|
|
чай |
|
|
молоко |
|
|
пиво |
британец |
|
|
швед |
|
|
датчанин |
|
|
норвежец |
|
|
немец |
красный |
|
|
зелёный |
|
|
белый |
|
|
жёлтый |
|
|
синий |
После этого нужно дать возможность пользователю вызывать меню.
В меню для начала пусть будут два пункта:
Разберём условия задачи:
Массив 1
j=1
|
j=2
|
j=3
|
j=4
|
j=5
|
||
i=1 | Способ испортить воздух | Prince | Blue Master | Pall Mall | Dunhill | Blends |
i=2 | Живое существо, страдающее от вредной привычки хозяина | аквариумные рыбки | собака | птицы | коты | лошади |
i=3 | Любимый напиток | вода | кофе | чай | молоко | пиво |
i=4 | Нация домовладельца | британец | швед | датчанин | норвежец | немец |
i=5 | Цвет дома | красный | зелёный | белый | жёлтый | синий |
Очевидно, что приведен элемент двумерного строчного массива.
401 - Программа умеет только лишь заполнять первую строку массива и выдавать всё содержимое массива на экран, причём при выводе на экран элементы отделяются друг от друга двумя пробелами. Чтобы быстрее (и без опечаток заполнить массив, я скопировал всё содержимое таблицы Массив 1 в буфер, перешёл в Word, вставил содержимое буфера, выбрал "Файл-> Сохранить как.. и в типе файла указал 'Текст MS-DOS с форматированием'", получился следующий файл).
402 - Программа умеет только лишь заполнять первую строку массива при этом готовы инструкции по заполнению всех прочих строк (я выверял, что по столбцам идут цифры 2,3,4,5).
403 - Программа умеет заполнять массив целиком.
404 - Программа умеет выдавать массив на экран в табличном виде.
Вид экрана 1 с массивом в естественном виде.
На протяжении решения всей задачи оригинальный массив меняться не должен. Поэтому введём соответствующий ему массив, который будет управлять первым, указывая местоположение элементов:
Массив 2
Способ испортить воздух | 1 | 2 | 3 | 4 | 5 |
Живое существо, страдающее от вредной привычки хозяина | 1 | 2 | 3 | 4 | 5 |
Любимый напиток | 1 | 3 | 2 | 5 | 4 |
Нация домовладельца | 1 | 2 | 3 | 4 | 5 |
Цвет дома | 5 | 4 | 3 | 2 | 1 |
Я намеренно указал обратную нумерацию (цвет дома) и изменённую нумерацию (любимый напиток), чтобы это проверить.
Чтобы его не набирать заново, я сохранил эту таблицу вышеописанным образом в следующий файл.
С первой группой десятое занятие закончилось.
Вплоть до данного момента программа лишь стремиласть догнать по своим возможностям листочек бумаги, поделённый на 25 равных частей, на которых были написаны ключевые слова.
С первой группой одиннадцатое занятие закончилось.
Аудиозапись 12_01, 12_02, 12_03 и 12_04.
Необходимо вводить увязку элементов массива (в языках СУБД - SET RELATION TO). Можно бы сделать и интерфейс заполнения этого массива, но это я оставлю на будущее.
Массив 3
Элемент из строки i | и столбца j | Связан с элементом из строки i | и столбца j | Например |
4
|
1
|
5
|
1
|
1. Британец живет в красном доме |
4
|
2
|
2
|
2
|
2. У шведа есть собака |
4
|
3
|
3
|
3
|
3. Датчанин пьет чай |
5
|
2
|
3
|
2
|
5. Хозяин зеленого дома пьет кофе |
1
|
3
|
2
|
3
|
6. У того, кто курит Pall Mall, есть птицы |
5
|
4
|
1
|
4
|
7. Хозяин желтого дома курит Dunhill |
1
|
2
|
3
|
5
|
12. Тот, кто курит Blue Master, пьет пиво. |
4
|
5
|
1
|
1
|
13. Немец курит Prince. |
С первой группой двенадцатое занятие закончилось.
Всё дальнейшее - на самостоятельное изучение.
В Массиве 3 остались необработанными условия:
4. Зеленый дом стоит слева от белого и вплотную к нему.
8. Хозяин среднего дома пьет молоко.
9. Норвежец живет в первом доме.
10. Человек, который курит Blends, живет рядом с хозяином котов.
11. Тот, кто содержит лошадей, живет рядом с тем, кто курит Dunhill.
14. Норвежец живет рядом с синим домом.
15. У того, кто курит Blends, есть сосед, который пьет воду.
Эти условия можно дитализировать:
15. У того, кто курит Blends, есть сосед, который пьет воду.
Слабо доделать задачу до приличного вида без моих подсказок?
Предыдущее решение является visual-решением (пользователь на экране видит, что у него получается).
Prince | Blue Master | Pall Mall | Dunhill | Blends |
аквариумные рыбки | собака | птицы | коты | лошади |
вода | кофе | чай | молоко | пиво |
британец | швед | датчанин | норвежец | немец |
красный | зелёный | белый | жёлтый | синий |
Это решение можно преобразовать в систему связей:
СВЯЗИ ЭЛЕМЕНТОВ ДРУГ С ДРУГОМ:
красный | зелёный | белый | жёлтый | синий | |
британец | не определено | не определено | не определено | не определено | не определено |
швед | не определено | не определено | не определено | не определено | не определено |
датчанин | не определено | не определено | не определено | не определено | не определено |
норвежец | не определено | не определено | не определено | не определено | не определено |
немец | не определено | не определено | не определено | не определено | не определено |
красный | зелёный | белый | жёлтый | синий | |
вода | не определено | не определено | не определено | не определено | не определено |
кофе | не определено | не определено | не определено | не определено | не определено |
чай | не определено | не определено | не определено | не определено | не определено |
молоко | не определено | не определено | не определено | не определено | не определено |
пиво | не определено | не определено | не определено | не определено | не определено |
Возможные замены значения "не определено": в той же колонке, не связан, в левой от меня и т.д.
СВЯЗИ ЭЛЕМЕНТОВ С КОНКРЕТНЫМ МЕСТОМ
С точки зрения приведенных методов каждое из 15 условий задачи заменяет неопределенное значение для одного элемента (или взаимосвязанных элементов). Например: "1. Британец живет в красном доме.", Следовательно
красный | зелёный | белый | жёлтый | синий | |
британец | в той же колоке | не в той же колонке | не в той же колонке | не в той же колонке | не в той же колонке |
швед | не в той же колонке | не определено | не определено | не определено | не определено |
датчанин | не в той же колонке | не определено | не определено | не определено | не определено |
норвежец | не в той же колонке | не определено | не определено | не определено | не определено |
немец | не в той же колонке | не определено | не определено | не определено | не определено |
Курсивом я выделил все ячейки, в которых поменялись значения при применении первого условия.
Кто-нибудь сумеет доделать задачу без моих подсказок так, чтобы компьютер при применении условий её мог решить автоматически?