Программирование игр и головоломок - [27]
«Как вы видите, игра состоит из круглой подставки с тремя стержнями. На стержни нанизаны диски различных диаметров. (Рис. 26 представляет конфигурацию игры с семью дисками.) На каждом стержне диски сложены, в стопку по возрастанию диаметра: никогда ни один диск не кладется на другой диск меньшего диаметра, В начале игры, это было много лет назад, даже много веков, все пятьдесят дисков находились на первом стержне. Монах перекладывает эти диски один за другим, следуя методу, который мы тщательно продумали. Когда все диски соберутся снова на одном стержне, отличающемся от исходного, игра кончится. Великий труд, который боги наложили на людей, будет завершен, и сможет наступить конец света…»
Я решил насмешливо добавить вполголоса: ну, это еще не завтра… Это стоило мне разгневанного взгляда гида, который продолжал:
«Как только что заметил один из вас, это занятие потребует еще многих столетий, несмотря на большую сноровку монахов, которые перекладывают каждый диск приблизительно за одну секунду». Я снова продемонстрировал свое раздражение, Разумеется, я предполагал, что из-за меня посещение будет сокращено. Но не для того же я сюда приехал, чтобы надо мной, как и над остальными путешественниками, насмехались? Мы хорошо знаем, что игра в ханойские башни была изобретена в конце прошлого века преподавателем математики в лицее Сент- Луи по имени Люка, который под этим соусом ее и пустил в свет, окружив легендой, согласно которой монахи где-то в Индии суетятся вокруг игры в 50 дисков, по окончании которой наступит конец света. Эта легенда делала естественной задачу о подсчете числа ходов, Необходимых для завершения игры. Что же касается того, что каждый диск перекладывается за секунду, то это элементарно, и мы знаем итеративную стратегию, которая позволяет нам просто играть, ни о чем не думая — вы ее нам сами давали в вашем курсе в институте…
Когда мы покидали монастырь, наш гид подошел ко мне и спросил меня, не хочу ли я оказать его настоятелю большую честь своим посещением. Обсуждение с руководителем группы. Назавтра мы не должны были уезжать рано, и поэтому я принял приглашение снова прийти туда до нашего отъезда. Настоятель принял меня очень любезно и предвосхитил мои упреки: «Несомненно, вы уже знакомы с башнями Брахмы. Мы знаем, что они были введены во Франции много лет назад М. Люка. Он никогда не говорил, что он сам придумал эту игру. Совсем наоборот, он очень добросовестно изложил то, что мы делаем. И разве мы виноваты в том, что вы вбили себе в голову, что с его стороны это была чистейшая уловка, чтобы придать больший блеск своему мнимому открытию? А это была и в самом деле чистейшая уловка, потому что ему приписали создание этой игры, в то время как он всего лишь пересказал то, что ему описал один путешественник… Нас тревожит то невероятное время, которое нужно для окончания игры. Мы очень терпеливы, однако мы ищем, как двигаться быстрее. Один наш посетитель, приехавший из американского университета, предложил нам сконструировать робота-манипулятора, управляемого компьютером. Мы со своей стороны финансировали это исследование. Но робот не мог двигаться быстрее, чем наши монахи, натренированные до совершенства и действовавшие безошибочно». Когда же я высказал замечание, что при таком решении проблемы игру будут вести уже не люди, а машина, настоятель решительно возразил мне, сказав: «Мы прекрасно пользуемся молитвенными мельницами. Во всяком случае, машина делается людьми и управляется программой, написанной людьми…»
Он также сказал мне, каким образом это исследование к тому же открывает новые перспективы. Были времена, когда монахи пытались присоединить к игре четвертый стержень. Правила оставались такими же: перемещать за один раз не более одного диска и никогда не класть диск на другой диск меньшего диаметра. Конечно, манипуляция игрой с 50 дисками до сих пор не удалась. Они вывели, что при этом требуется гораздо меньше ходов, но стратегия манипулирования становится много сложнее. Монахи терялись, часто оказывалось, что они ошибаются, они снова попадали в уже пройденные конфигурации, так что не было никакой уверенности в том, что удастся дойти до конца, если постоянно приходится начинать сначала… «Не могли бы вы взяться за решение проблемы башен Брамы с четырьмя стержнями, составить программу для соответствующего компьютера и использовать его для управления роботом, манипулирующим игрой? Ведь даже если каждый ход отнимет много секунд, конец должен будет наступить намного быстрее. А нам, таким образом, выпадет величайшая радость — стать теми, кто выполнил волю богов. Мы увидим, что мир достиг своего конца, и вступим в счастье, которое никогда не кончится…»
Это дело показалось мне выполнимым, Договорились, что я реализую информативную систему и передам ее им. Настоятель вручил мне в качестве оплаты авансом игру, сделанную из серебра. Это было настоящее богатство. Ну, как тут устоять?
Вернувшись во Францию, я взялся за работу. Больших трудностей она не представляла. Вначале я составил рекурсивную процедуру для решения игры с четырьмя стержнями. Поскольку я искал оптимальную стратегию, я сделал по ней итеративную версию. Для этой маленькой программы был достаточен микрокомпьютер. Я использовал ручной манипулятор, оснащенной электромагнитом в форме кольца. Я работал с деревянной игрой, каждый диск которой был снабжен маленьким кольцом из мягкого железа, позволявшим ручному манипулятору брать его, и притом не возникало необходимости чрезвычайно точно этот диск устанавливать.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.