«Быки и коровы» в год Быка и Коровы
2 Фев 2009
«Быки и коровы» в год Быка и Коровы

Как вы уже догадались, уважаемые читатели, речь в данном случае идет о «быках» и «коровах» особых — связанных с программированием.

С процесса программирования, пожалуй, мы и начнем. И не потому лишь, что создание программ было первичной и основной функцией компьютеров, а нынче хлынувшая к клавиатурам толпа использует эти удивительные машины как угодно, но только не для программирования. И не потому, что общение с компьютером, тем более на языке программирования, — это общение с умным, остроумным, язвительным и одновременно дружелюбным собеседником. И даже не потому, что работа на компьютере вызывает положительные эмоции (психологи подметили, что пользователь получает удовольствие даже просто нажимая на клавиши, не говоря уже о тыканье «мышкой» в яркие кнопки.) Наконец, не потому, что любые манипуляции с компьютером — пусть даже это всего лишь набор текста или укладывание цветных шариков, — возможно, спасают нас от шизофрении и разряжают агрессию.

Так вот, с программирования мы решили сейчас начать потому, что написание программ с головоломками и математическими картинками — это волшебное, интереснейшее времяпровождение, сулящее прикосновение к тайнам устройства мира. Даже еще круче — это настоящая, захватывающая, полноценная жизнь! А все, что вне ее, — блеклое и неказистое ожидание старости...

И неважно, с чего начинать. Найдите и установите какой-нибудь Бейсик (можно Turbo Basic, можно Qbasic, — есть русифицированная версия; можно, для экзотики, древний GWBasic, но лучше, конечно, Visual Basic или даже Visual Basic.NET). Можно вместо Бейсика Borland Pascal, или Delphi, или С++, или даже C#. Главное — начните, сделайте хоть что-нибудь.

Для начала подойдет программирование простых игрушек, — их можно показать друзьям и близким. И сам процесс приятен, — не только нахождение алгоритма, но даже просто его обдумывание.

Сегодня, в первой статье из планируемого цикла, мы рассмотрим классику логических игр — старинную забаву «Быки и коровы». Напомню, что это игра для двух участников. Цель ее — отгадать четырехзначное число. Один из участников загадывает число. Цифры в нем повторяться не должны. Второй называет четырехзначные числа, цифры в которых также не повторяются, стремясь угадать число первого участника. Результат отгадывания выражается в условных единицах — «быках» и «коровах». «Бык» означает, что цифра входит в задуманное число и стоит на своем месте. «Корова» — цифра входит в число, но находится на неправильном месте. Эта игра — идеальная модель для начинающих программистов, которая позволит освоить работу со строковыми переменными и удивить друзей «умной» программой. Для придания «спортивности» можно ограничить количество ходов, например, десятью, добавить остроумные комментарии, засчитывать очки за удачные ответы и т.д.

БыкПорассуждайте: как бы вы организовали ввод исходного числа? Как вводить варианты ответов, как проверять посимвольное совпадение их двух строковых переменных? Как организовать выбор случайных четырехзначных чисел так, чтобы цифры в нем не повторялись? (Вообще-то, загадывать число должен компьютер.) А, кстати, сколько существует чисел с не повторяющимися цифрами? Зависит ли их доля от разряда числа?.. Можно заодно решить и эти попутные задачи.

Собственно, классический вариант игры подразумевает, что отгадывать нужно не число, а слово. О количестве букв в загадываемых словах (как правило, пять или шесть) и о том, могут ли они повторяться, участники договариваются заранее. Играть с разрешенными повторами сложнее. Правила такие же, как и с числами. Один из участников загадывает слово. Отгадывающий называет любое слово. Количество букв и повторов букв в этом слове не ограничено. Загадывающий сообщает о результате, который выражается в «быках» и «коровах». «Бык» — буква стоит на своем месте, «корова» — буква в загаданном слове есть, но стоит не там, где должна. При подсчете результата каждая буква считается столько раз, сколько она встречается в задуманном слове. В случае, если в нем есть повторяющиеся буквы, каждая из них засчитывается отдельно. (Так, если в загаданном слове есть две буквы «а», а отгадывающий назвал слово с тремя «а», причем ни одна другая буква не была названа правильно, результат будет — 6 «коров». Если обе буквы стоят на своем месте — 4 «коровы» и 2 «быка».)

При разработке программы придется повозиться с загадываемым словом: в отличие от чисел, не все комбинации букв образуют слова (точнее, общеизвестные слова нашего языка), поэтому придется брать слова случайным образом из подготовленной заранее базы. Интересная тонкость: предлагаемые для разгадки слова тоже имеют не произвольный набор букв. «Живой» загадывающий отбирал бы и принимал для тестирования только «правильные», т.е. реально существующие слова. Программа же вряд ли сможет провести такой анализ. И сразу вопрос для размышления: существует ли оптимальная стратегия разгадывания? Существуют ли исходные комбинации цифр или слов, затрудняющие отгадывание?.. Когда напишете и отладите свою программу, — подумайте хорошенько: наверняка ее можно оптимизировать. А после оптимизации — подумайте еще раз... :-)

Сопутствующие ссылки:

  1. «Быки и коровы» в Википедии.
  2. Здесь и  здесь можно поиграть в онлайне.
  3. Текст программы на Паскале с комментариями и пояснениями.
  4. А здесь можно скачать игру и играть на компьютере.

Материалы по теме

Статьи по теме

3 комментария


		
Как здорово, что вы напомнили нам о этой игре! Буду "мучить" племяника :-)

	

		
Точно - для игры с детьми самая подходящая штучка. Еще надо Бейсик ему показать...

	

		
Ну! Я не о программировании - я об этой игре! :-)
Спасибо, что напомнили о такой!

	

			

Написать комментарий


Вместе с вашим комментарием мы подарим вам отличный персональный профиль на «Планете школ» со всеми остальными её сервисами.
Если вы уже зарегистрированы на нашем сайте, то просто авторизуйтесь.

		
IV Всероссийская Интернет-олимпиада по нанотехнологиям
Целью Олимпиады является поиск и поощрение энтузиастов, желающих участвовать в развитии нанотехнологий в Российской Федерации. Попробовать в ней свои силы может каждый. Участие в Олимпиаде бесплатное.
 
XII открытый конкурс для старшеклассников «Издательская деятельность в школе»
Ежегодный конкурс, который позволяет раскрыть творческий потенциал молодежи, используя разнообразные формы подачи информации.
Институт психоанализа объявляет об открытии стипендиальной программы
Впервые в России частный ВУЗ объявляет  стипендиальную программу, позволяющую лучшим студентам учиться бесплатно.
 
Фонд имени В.И. Вернадского
Стипендия им. В.И. Вернадского учреждена с целью поощрения учебной и научной деятельности студентов очного обучения высших учебных заведений. Стипендии назначаются на конкурсной основе как студентам российских вузов, так и зарубежным студентам. Конкурс среди иностранных студентов проводит московская конкурсная комиссия.