Сережу этой игре научил Чип и потому все время давал ему первый ход как новичку. И тем не менее каждый раз Сережа проигрывал, хотя он обычно хорошо играл в такие игры. Кое-какие секреты игры он понял: например, что невыгодно брать много спичек первым ходом, а если возьмешь больше 6, то противник берет монетку ответным ходом. Сережа брал по одной спичке, и в ответ Чип брал по одной, иногда по 2. Но выигрывал почему-то все время Чип!
— А знаешь, что делает в таком случае программист? — сказал Чип после 15-го выигрыша подряд. — Если он не может понять, как работает программа с большими числами, он проверяет ее на маленьких.
— Знаю, ты мне это уже говорил, — сердито буркнул Сережа. — Только при чем тут программа? Это же игра, а не алгоритм.
— Это алгоритмическая игра: существует алгоритм выигрыша независимо от хода противника. Но самое удивительное, что выигрывает не тот, кто первым начинает! Так что ты ни в чем не виноват: я заманил тебя в ловушку.
— Как это, начинающий обязательно проигрывает? Так не может быть, у него же лишний ход.
— Ты был бы прав, если бы этим лишним ходом он мог не взять ни одной спички. Тогда он поставил бы противника в свое положение. Но по правилам он обязан в каждый ход сколько-то спичек взять, и как только он это сделает, он уходит от спасительного числа Фибоначчи — 21. А до следующего числа Фибоначчи — тринадцати — ему не дотянуть, тогда противник возьмет монетку ответным ходом.
— Что это еще за числа Фибоначчи?
— О-о, это замечательные числа: 1, 1, 2, 3, 5, 8, 13, 21, 34... Они тянутся до бесконечности, причем каждое следующее получается сложением двух предыдущих. Они так хорошо служат программистам — хотя средневековый итальянский математик Фибоначчи вряд ли мог на это рассчитывать, — что один неизвестный компьютерный поэт прославил числа Фибоначчи в стихах.
— Интересно было бы послушать, — вежливо сказал Сережа, хорошо зная, что Чипа хлебом не корми, а дай почитать свои стихи, которые он обычно приписывал неизвестным авторам.
— Ты знаешь печальную историю о Карле и Кларе?
— Это что, «Карл у Клары украл кораллы, а Клара у Карла украла кларнет»?
— Да, это про них. Грустно, когда друзья ссорятся. Так вот, они решили помириться, и первый шаг сделала Клара.
Говорят, они стали добрыми друзьями и все время шлют друг другу подарки. И каждый из них, не желая уступить другому в щедрости, прибавляет к своему последнему числу подарков последнее число подарков, полученных от друга. Так и получаются числа Фибоначчи.
— Замечательное стихотворение, Чип, но я все-таки не понимаю, как ты меня обыгрывал с помощью этих чисел Фибоначчи.
— Предположим для начала, что у нас 2 спички и монетка. Тогда начинающий проигрывает, согласен? Он не может сразу взять монетку, и ему приходится брать 1 спичку, после чего противник одним ходом берет оставшуюся спичку вместе с монеткой. Вот мы и нашли первое спасительное число 3. Если ты оставил противнику это число, он проиграл.
— Ага, а если было 4 предмета — 3 спички и монетка, то можно убрать 1 спичку, и противник проиграет, — подхватил Сережа, — ведь он не сможет взять больше двух спичек.
— Правильно, значит, 4 не спасительное число, если я дам его противнику, он может выиграть. Идем дальше: если начинать с 5, то первым ходом можно взять только одну спичку, иначе противник сможет ответным ходом дотянуться до монетки. Но если ты возьмешь 1 спичку, то ты тоже проиграешь, потому что противник может, взяв 1, оставить тебе проигрышную позицию, которую мы только что разобрали.
— Значит, 5 — спасительное число. Действительно, получаются числа Фибоначчи, но пока я не уловил общего правила — как надо играть, чтобы всегда выигрывать, даже если ты дал противнику спасительное число Фибоначчи. Например, противник начинает с 8. Мне нужно сделать так, чтобы ему досталось число 5, верно?
— Да, но смотри, ты уже решал эту задачу раньше. От 8 до 5 как раз 3 шага. А для трех предметов ты уже все знаешь: если он берет 1, ты — 2, а если он — 2, ты — 1. Ведь числа Фибоначчи устроены так, что интервалы между соседними числами тоже являются числами Фибоначчи. Ты пытаешься посадить противника на ближайшее число Фибоначчи, а если не можешь, то прибавляешь к этому числу позапрошлое число Фибоначчи. Скажем, от 21 ты должен сажать противника на 13, но этого ты сделать не можешь, значит, прибавляешь к 13 позапрошлое число, то есть 5 (13 + 5 = 18), и стремишься дать противнику число 18. Это просто, так как от 18 до 21 как раз 3 шага — снова число Фибоначчи. Заставил его взять 18 — и тебе осталось 5 шагов до 13, а как проходить 5 шагов, ты тоже знаешь. Вот и все!
— Чип, и все равно это трудно, нужно все время считать и не ошибаться.
— Это трудно вам, людям, а нам нетрудно безошибочно считать. Зато в тех играх, где вариантов слишком много для расчета, например, в шахматах, люди пока обыгрывают компьютеры. Но мы быстро совершенствуемся, так что я не удивлюсь, если чемпионом мира по шахматам 2000 года будет компьютер.
— А чего же вам не хватает сейчас, если вы лучше нас считаете?
— Быстрее — еще не значит лучше. Нам не хватает вашей интуиции, умения без вычислений предвидеть последствия ходов. Интуиция основана на знаниях и опыте, а компьютеры пока не умеют копить знания и набирать опыт. Это будут уметь компьютеры следующего, пятого поколения, которые появятся в начале 90-х годов.
— Чип, а какое задание мы дадим ребятам на этот раз?
— Так как мы сегодня говорили об играх, пусть попробуют придумать сюжет электронной игры, в которую им было бы интересно играть. Не программу, а просто сюжет вроде мультфильма. Автора лучшей игры ждет сюрприз.
ОТ РЕДАКЦИИ.
Ребята, на конверте с этим заданием поставьте девиз: «Сюжет электронной игры».
Совет Чеширского кота
— Чип, что-то давно ты мне сказок не рассказывал, а они у тебя такие интересные получаются!
— О чем же тебе рассказать? Хочешь опять про Алису?
Сережа молча кивнул и приготовился слушать.
— Итак, я расскажу тебе про рыцарский турнир в стране чудес, — начал Чип и тут же сам себя перебил: — А ты знаешь, кстати, что автор «Алисы в стране чудес» и «В Зазеркалье» Льюис Кэрролл на самом деле был Чарлзом Доджсоном, профессиональным математиком, и всерьез занимался теорией турниров?