Как вы уже догадались, уважаемые читатели, речь в данном случае идет о «быках» и «коровах» особых — связанных с программированием.
С процесса программирования, пожалуй, мы и начнем. И не потому лишь, что создание программ было первичной и основной функцией компьютеров, а нынче хлынувшая к клавиатурам толпа использует эти удивительные машины как угодно, но только не для программирования. И не потому, что общение с компьютером, тем более на языке программирования, — это общение с умным, остроумным, язвительным и одновременно дружелюбным собеседником. И даже не потому, что работа на компьютере вызывает положительные эмоции (психологи подметили, что пользователь получает удовольствие даже просто нажимая на клавиши, не говоря уже о тыканье «мышкой» в яркие кнопки.) Наконец, не потому, что любые манипуляции с компьютером — пусть даже это всего лишь набор текста или укладывание цветных шариков, — возможно, спасают нас от шизофрении и разряжают агрессию.
Так вот, с программирования мы решили сейчас начать потому, что написание программ с головоломками и математическими картинками — это волшебное, интереснейшее времяпровождение, сулящее прикосновение к тайнам устройства мира. Даже еще круче — это настоящая, захватывающая, полноценная жизнь! А все, что вне ее, — блеклое и неказистое ожидание старости...
И неважно, с чего начинать. Найдите и установите какой-нибудь Бейсик (можно Turbo Basic, можно Qbasic, — есть русифицированная версия; можно, для экзотики, древний GWBasic, но лучше, конечно, Visual Basic или даже Visual Basic.NET). Можно вместо Бейсика Borland Pascal, или Delphi, или С++, или даже C#. Главное — начните, сделайте хоть что-нибудь.
Для начала подойдет программирование простых игрушек, — их можно показать друзьям и близким. И сам процесс приятен, — не только нахождение алгоритма, но даже просто его обдумывание.
Сегодня, в первой статье из планируемого цикла, мы рассмотрим классику логических игр — старинную забаву «Быки и коровы». Напомню, что это игра для двух участников. Цель ее — отгадать четырехзначное число. Один из участников загадывает число. Цифры в нем повторяться не должны. Второй называет четырехзначные числа, цифры в которых также не повторяются, стремясь угадать число первого участника. Результат отгадывания выражается в условных единицах — «быках» и «коровах». «Бык» означает, что цифра входит в задуманное число и стоит на своем месте. «Корова» — цифра входит в число, но находится на неправильном месте. Эта игра — идеальная модель для начинающих программистов, которая позволит освоить работу со строковыми переменными и удивить друзей «умной» программой. Для придания «спортивности» можно ограничить количество ходов, например, десятью, добавить остроумные комментарии, засчитывать очки за удачные ответы и т.д.
Порассуждайте: как бы вы организовали ввод исходного числа? Как вводить варианты ответов, как проверять посимвольное совпадение их двух строковых переменных? Как организовать выбор случайных четырехзначных чисел так, чтобы цифры в нем не повторялись? (Вообще-то, загадывать число должен компьютер.) А, кстати, сколько существует чисел с не повторяющимися цифрами? Зависит ли их доля от разряда числа?.. Можно заодно решить и эти попутные задачи.
Собственно, классический вариант игры подразумевает, что отгадывать нужно не число, а слово. О количестве букв в загадываемых словах (как правило, пять или шесть) и о том, могут ли они повторяться, участники договариваются заранее. Играть с разрешенными повторами сложнее. Правила такие же, как и с числами. Один из участников загадывает слово. Отгадывающий называет любое слово. Количество букв и повторов букв в этом слове не ограничено. Загадывающий сообщает о результате, который выражается в «быках» и «коровах». «Бык» — буква стоит на своем месте, «корова» — буква в загаданном слове есть, но стоит не там, где должна. При подсчете результата каждая буква считается столько раз, сколько она встречается в задуманном слове. В случае, если в нем есть повторяющиеся буквы, каждая из них засчитывается отдельно. (Так, если в загаданном слове есть две буквы «а», а отгадывающий назвал слово с тремя «а», причем ни одна другая буква не была названа правильно, результат будет — 6 «коров». Если обе буквы стоят на своем месте — 4 «коровы» и 2 «быка».)
При разработке программы придется повозиться с загадываемым словом: в отличие от чисел, не все комбинации букв образуют слова (точнее, общеизвестные слова нашего языка), поэтому придется брать слова случайным образом из подготовленной заранее базы. Интересная тонкость: предлагаемые для разгадки слова тоже имеют не произвольный набор букв. «Живой» загадывающий отбирал бы и принимал для тестирования только «правильные», т.е. реально существующие слова. Программа же вряд ли сможет провести такой анализ. И сразу вопрос для размышления: существует ли оптимальная стратегия разгадывания? Существуют ли исходные комбинации цифр или слов, затрудняющие отгадывание?.. Когда напишете и отладите свою программу, — подумайте хорошенько: наверняка ее можно оптимизировать. А после оптимизации — подумайте еще раз... :-)
Сопутствующие ссылки:
- «Быки и коровы» в Википедии.
- Здесь и здесь можно поиграть в онлайне.
- Текст программы на Паскале с комментариями и пояснениями.
- А здесь можно скачать игру и играть на компьютере.
Екатерина Маслакова
03.02.2009 08:50:19 #