PDA

Просмотр полной версии : «Быки и коровы» в год Быка и Коровы


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

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

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

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

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

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

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

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

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

Опубликовано на Планете Школ http://www.planetashkol.ru/articles/19245/

Для учителей информатики - есть чем заняться с детьми :-)

Nadir Zaitov
02.02.2009, 16:36
ТАК программа должна загадывать или отгадывать? Если отгадывать, то есть смысл искать стратегию, если загадывать, то нет.

iDead
02.02.2009, 18:06
ТАК программа должна загадывать или отгадывать? Если отгадывать, то есть смысл искать стратегию, если загадывать, то нет.Программа загадывает, а ваша задача - отгадать цифры.
Уже поиграл - классно оформили игру. Правда неудобно было писать в строчку. Обычно, когда мы играли на военной кафедре, циферки писали в столбик, чтобы анализ был получше. Там ведь друг против друга играли. Вот и было важно быстрее отгадать, т.е. опередить соперника. Эта игра одна из тех, что вызывают эмоции и ностальгию у меня.
Спасибо за ссылку!

Nadir Zaitov
02.02.2009, 18:12
Программа загадывает, а ваша задача - отгадать цифры А зачем стратегию для программы выдумывать?

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

Evgeniy Sklyarevskiy
02.02.2009, 19:47
Кстати, в этой игре (в процессе угадывания) коровы попадаются чаще чем быки. Ничем иным чем дискриминацией мужской части крупного рогатого скота это нельзя было бы назвать, если бы только не цель этой игры - получить четырех быков в конце.

так это в сути игры заложено что коров больше - и это хорошо - пойдем медленно-медленно... ©

Nadir Zaitov
02.02.2009, 21:22
Кстати, в этой игре (в процессе угадывания) коровы попадаются чаще чем быки. Афоризм странный получился: "не без женской логики нужно быков угадывать" :) А стратегия наименьшего количества выстрелов есть?