Darbe.ru

Быт техника Дарби
9 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Быки и Коровы

Быки и Коровы

Originally posted by MishaSoft
Помогите студенту.

Виноват я, гулял много. А в пятницу сдавать надо , и времени, блин, нету (работа).
Может кто-то когда-то делал эту игрушку. Подкинте алгоритм плиииииииииз.X)

Что значит алгоритм?

Тебе надо правила игры?
Или чтоб ты отгадывал числа, а комп тебе говорил «2 быка 2 коровы»?
Или чтоб комп отгадывал числа, а ты ему говорил «2 быка 2 коровы»?
Или создать игровой сервер с миничатом, чтобы чуваки из разных стран друг с другом играли?

Что значит алгоритм?

Тебе надо правила игры?

Да НЕТ! Алгоритм — Чтобы человек загадал число, а компьютер отгадывал. Человек возвращает число быков и коров, а программа методом. любым методом, кроме перебора, пытается отгадать.

Алгоритм можно в любом виде включая Basic, C, Pascal, или любая другая форма.:<

Попахивает искусственным интелектом. 🙄

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

Originally posted by SergeySV
Попахивает искусственным интелектом. 🙄

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

Да, делай топориком.

1. Выбираем случайное 4-хзначное число.
2. Получаем ответ пользователя.
3. Выбрасываем из рассмотрения те числа, которые не удовлетворяют условию.
4. Переходим к п.1

Этот метод не будет оптимальным в плане отгадывания за наименьшее число ходов. Зато его писать несложно.

Серж абсолютно прав. Это и есть самый что ни есть настоящий искусственный интелект (Artificial Intellect), курс так и называется.

Надумал вот алгоритм отгадывающий за 10 ходов при условии что говорится о 4-х значном числе, каждая цифра от 0 до 9, и нет повторяющихся цифор. Прога сначала запрашивает 7 вариантов — от 0123,01234. 0129. По изменению ответов человека за первые 7 интеграций определяет все 4 чифры, причем одна из них точно Бык (ну и остальные коровы). Потом еще максимум за 3 интеграции находит ответ. Профессор забраковал — говорит что первые 7 ин-ций это перебор. С рекурсией советует делать. Голова пухнет. ПОМОГИТЕ. X)-

Originally posted by MishaSoft
Серж абсолютно прав. Это и есть самый что ни есть настоящий искусственный интелект (Artificial Intellect), курс так и называется.

Надумал вот алгоритм отгадывающий за 10 ходов при условии что говорится о 4-х значном числе, каждая цифра от 0 до 9, и нет повторяющихся цифор. Прога сначала запрашивает 7 вариантов — от 0123,01234. 0129. По изменению ответов человека за первые 7 интеграций определяет все 4 чифры, причем одна из них точно Бык (ну и остальные коровы). Потом еще максимум за 3 интеграции находит ответ. Профессор забраковал — говорит что первые 7 ин-ций это перебор. С рекурсией советует делать. Голова пухнет. ПОМОГИТЕ. X)-

Ну я ж тебе описал алгоритм. Повторяю подробнее.
Создаешь массив всех возможных вариантов.
В начале у тебя их будет 10*9*8*7 = 5040 штук

Дальше повторяешь в цикле (рекурсией или не рекурсией — это уже не важно) следующие операции:
1. Выбираешь случайное число из массива.
2. Задаешь пользователю, получаешь ответ.
3. Выбрасываешь из массива те числа, которые не удовлетворяют ответу пользователя.

И так до тех пор, пока в массиве не останется одно число (если останется 0 — значит где-то пользователь ошибся).

Пример:
Первый запрос: 1234 Ответ: 2 быка 2 коровы.
После первого запроса из 5040 вариантов останется только шесть:
2134
3214
4231
1324
1432
1243

Допустим следующий ход: 4231 Ответ 1б 3к
Остаются:
2134
3214
1432
1243

игра быки и коровы — алгоритм программирования(python)

Я пытаюсь получить число коров и быков между двумя числами. Один из которых генерируется компьютером, а другой угадывается пользователем. Я проанализировал два числа, которые у меня есть, так что теперь у меня есть два списка с тремя элементами каждый, и каждый элемент является одной из цифр в этом числе. Так:

237 даст список [2,3,7] . И я удостоверяюсь, что относительные индексы составляют maintained.the общая картина такова: (hundreds, tens, units) .

И эти два списка хранятся в двух списках: machine и person .

ALGORITHM 1

Итак, я написал следующий код, самый интуитивно понятный алгоритм:

cows и bulls инициализируются в 0 перед началом этого цикла.

И я начал проверять это с помощью различных типов чисел, угаданных компьютером.

Совершенно случайно я остановил свой выбор на 277-м. И я угадал 447. Здесь я получил первую подсказку, что этот алгоритм может не работать. У меня 1 корова, 0 быков и. В то время как я должен был получить 1 быка и 1 корову.

Это таблица выходов с первым алгоритмом:

Таким образом, очевидно, что этот алгоритм не работал, когда есть повторяющиеся цифры в числе, случайно выбранном компьютером.

Я попытался понять, почему происходят эти ошибки, но не смог. Я много пробовал, но просто не видел никакой ошибки в алгоритме(наверное, потому, что я его написал!)

ALGORITHM 2

Подумав об этом в течение нескольких дней я попробовал это сделать:

cows и bulls инициализируются в 0 перед началом этого цикла.

На этот раз я был более оптимистичен. Но когда я проверил это, вот что я получил:

Читайте так же:
Игра с карточками на лбу название

Ошибка, которую я совершаю, здесь совершенно ясна, я понимал, что цифры пересчитываются снова и снова.

то есть: 277 против 477

Когда вы рассчитываете на быков, то появляются 2 быка, и все в порядке. Но когда ты считаешь за коров:

  1. 7 в 277 на месте единиц сопоставляется с 7 в 477 на месте десятков, и таким образом создается корова.
  2. 7 в 277 на месте десятков сопоставляется с 7 в 477 на месте единиц, и таким образом создается корова.’

Здесь соответствие совершенно правильное, так как я написал код в соответствии с этим. Но это не то, чего я хочу. И я понятия не имею, что делать после этого.

Кроме того.

Я хотел бы подчеркнуть, что оба алгоритма работают отлично, если в выбранном компьютером числе нет повторяющихся цифр.

6 ответов

  • Коровы и быки повторение

Последние несколько часов я пытался написать программу коровы и быки. У коров и быков. Предполагается, что программа генерирует 4 неповторяющихся целых числа от 0 до 9, чтобы пользователь мог угадать, но моя программа выводит группу целых чисел с некоторыми повторяющимися значениями примерно 1 в.

В игру быков и коров играют два игрока. Один из них думает о 4-значном шифре (цифры от 0 до 9), а затем другой игрок приходит с предложением. Первый игрок отвечает количеством правильно расставленных чисел (быки) и количеством правильных, но в неправильном месте чисел (коровы). Я хочу написать.

Обратите внимание, что bulls_and_cows(277, 447) вернет 1 быка и 0 коров. Это то, что я лично ожидал бы: почему первые 7 из 277 считаются коровой, если для 7 из 447 уже есть бык?

.index() возвращает индекс первого вхождения заданных входных данных:

Вместо этого вы должны использовать enumerate() , чтобы получить все возможные индексы:

Однако, похоже , это можно сделать с zip() , если я не ошибаюсь:

С player = [4, 4, 7] :

С player = [4, 7, 7] :

  • Коровы и быки ПК гадание

Поэтому я сделал небольшую игру в Python под названием коровы и быки. Для тех, кто не знает, это очень просто. 1 игрок генерирует число, которое другой пытается угадать. Если догадка имеет число на правильной позиции, это дает вам корову. Если у него есть число, но на неправильной позиции, он дает.

Я должен закодировать игру коровы и быки , в которой я должен сгенерировать 4 случайных числа и попросить пользователей угадать его. Последние несколько часов я пытался закодировать его, но, похоже, не могу найти решение. Я в выходной хочу: Welcome to cows and Bulls game. Enter a number: >>.

Эй, лучший способ сделать программу cow bull-это играть с символами и строками, а не с числами. Тогда вам не придется беспокоиться о сотнях или десяти местах. Вы можете следить за моим учебником по 4-значной игре «корова-бык» в python: http://funpythonprojects.blogspot.in/2013/07/корова-бык-игра-ака-угадай-число-в-python.html

быки и коровы(код вроде как начинающий, только начал учиться у youtube)

Похожие вопросы:

Я почти закончил свой проект быки и коровы, однако если я введу слово или последовательность чисел с повторяющимся алфавитом или числом, то часть кода ‘cow’ испортится. В качестве примера рассмотрим.

Я пытаюсь создать очень простую игру быки и коровы ( https://en.wikipedia.org/wiki/ Bulls_and_Cows ). игра предназначена для моего школьного проекта. Мои знания ограничены, поэтому мне нужно сделать.

Вопрос-реализуйте игру в угадайку под названием коровы и быки. Коровы представляют собой количество правильных догадок. Быки представляют собой количество правильных догадок в правильной позиции.

Последние несколько часов я пытался написать программу коровы и быки. У коров и быков. Предполагается, что программа генерирует 4 неповторяющихся целых числа от 0 до 9, чтобы пользователь мог.

В игру быков и коров играют два игрока. Один из них думает о 4-значном шифре (цифры от 0 до 9), а затем другой игрок приходит с предложением. Первый игрок отвечает количеством правильно.

Поэтому я сделал небольшую игру в Python под названием коровы и быки. Для тех, кто не знает, это очень просто. 1 игрок генерирует число, которое другой пытается угадать. Если догадка имеет число на.

Я должен закодировать игру коровы и быки , в которой я должен сгенерировать 4 случайных числа и попросить пользователей угадать его. Последние несколько часов я пытался закодировать его, но, похоже.

Я делаю игру коровы и быки, где вы должны угадать четырехзначное число. Компьютер продолжает говорить 0 коров, 0 быков, когда я запускаю программу, и я не знаю, почему и как это исправить import.

Я пишу код для игры, которая случайным образом генерирует 4-значное число. Попросите пользователя угадать 4-значное число. Для каждой цифры, которую пользователь правильно угадал в нужном месте, у.

Это мой первый пост на StackOverflow, так что если я сделаю что-нибудь не так, пожалуйста, дайте мне знать. Эта игра, называемая коровы и быки, похожа на игру под названием Mastermind.

Коровы и быки

Целью данной курсовой работы является разработка популярной развлекательной игры Коровы и быки. Программа предоставляет возможность играть с компьютером, который играет согласно созданному алгоритму. В процессе разработки должны быть усвоены некоторые новые возможности языка С++ и среды Borland C++ Builder.

Читайте так же:
Джойстик ps3 подключить к пк bluetooth
Прикрепленные файлы: 1 файл

КУРСОВАЯ РАБОТА 1.doc

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Тверской государственный технический университет»

(ФГБОУ ВПО “ТвГТУ”)

Кафедра информационных систем

по дисциплине «Технология программирования»

на тему: «Коровы и быки»

Выполнил: студент 3 курса

Введение

Актуальность избранной темы объясняется существом и значимостью затрагиваемого материала. Стремительное развитие компьютерной техники в последние годы, появление мощных графических ускорителей и процессоров способствовало не менее бурному развитию компьютерных игр. Выдающиеся разработки этой отрасли – это сложнейшие программы, как правило, с очень высокими требованиями к аппаратной части компьютера. Однако для возможности отдохнуть пользователю компьютера не всегда требуется новейшая компьютерная игра. Именно этой цели – отдыху служит разработанная в рамках данного курсового проекта программа.

Объектом курсовой работы является компьютерные игры.

Целью данной курсовой работы является разработка популярной развлекательной игры Коровы и быки. Программа предоставляет возможность играть с компьютером, который играет согласно созданному алгоритму. В процессе разработки должны быть усвоены некоторые новые возможности языка С++ и среды Borland C++ Builder. В программе должны быть учтены моменты, позволяющие пользователю легко освоить программу, для этого необходимо создать удобный интерфейс.

«Коровы и быки». Программа выбирает с помощью датчика
случайных чисел четырехзначное число с разными цифрами.
Угадать это число. На каждом шаге играющий называет четырехзначное число, а программа сообщает, сколько цифр числа угадано («быки») и сколько цифр угадано и стоит на нужном месте («коровы»). Например, если программой задано число 1294, а играющий назвал 1423, он получит ответ «1 'корова, 3 быка».

Сформулированная проблема, выбор предмета исследования обусловили необходимость решения следующих задач:

  • изучение и анализ литературы по программированию компьютерных игр;
  • изучение программной среды программирования С++ Builder для создания игровой программы;
  • разработка алгоритма и программы для реализации игры «Коровы и быки».

Аналитическая часть

Язык программирования

Язык программирования С был разработан в начале 70–х годов. К настоящему времени он претерпел несколько этапов своего развития. Язык программирования С++ объединил в себе достоинства языка С и возможностей объектно–ориентированного программирования. К основным достоинствам языков С и С++ следует отнести гибкость и надежность, переносимость программ с одной платформы на другую и с одной операционной системы на другую. Языки С и С++ являются языками высокого уровня. Но вместе с тем обладают богатыми возможностями низкоуровневого программирования. Это делает их очень гибкими и пригодными как для начинающих пользователей, так и для профессиональных программистов.

Система программирования Borland C++ Builder объединила в себе идеи интегрированной среды разработки, реализованные компанией в системах программирования Turbo Pascal и Borland Delphi с возможностями языка программирования C++. История этой системы программирования начинается с интегрированной среды разработки Borland Turbo C.

Среда Turbo C представляла собой реализацию идей, заложенных компанией–разработчиком в системе программирования Turbo Pascal для языка программирования C. Компания Borland стремилась перенести удачную реализацию идей интегрированной среды разработки на новую основу. Компилятор Turbo C не был однопроходным, и потому время компиляции исходной программы превышало время компиляции аналогичной программы в Turbo Pascal. Кроме того, в системе программирования использовался стандартный компоновщик исполняемых файлов MS DOS.

Преимущество Turbo C заключалось в том, что эта система программирования строилась на базе стандартного языка программирования C. Данный язык получил широкое распространение среди разработчиков в качестве языка системного программирования, для него существовали компиляторы под многие типы целевых архитектур. В этом было главное отличие системы программирования Turbo C от схожей по организации системы программирования Turbo Pascal, которая строилась на основе поддержки нестандартного расширения языка Pascal.

С развитием системы программирования на базе Turbo Pascal развивались и системы программирования на основе Turbo C.

Современная реализация Borland C++ Builder ориентирована на разработку результирующих программ, выполняющихся под управлением ОС Microsoft Windows всех типов. Сама система программирования Borland C++ Builder, как и Borland Delphi, также функционирует под управлением ОС типа Microsoft Windows. Она полностью поддерживает стандарт языка C, что делает возможным создание с помощью данной системы программирования модулей и библиотек, используемых в других средствах разработки (чего очень сложно достигнуть с помощью Borland Delphi).

По возможностям, внешнему виду и технологиям система программирования Borland C++ Builder схожа с системой программирования Borland Delphi. В ее основу положены те же основные идеи и технологии. Структура классов языка C++ в системе программирования Borland C++ Builder построена в той же библиотеке VCL (visual control library), в которой строится структура классов Object Pascal в системе программирования Borland Delphi. Правда, разработчик, создающий программы на C++, может не пользоваться классами VCL и взять за основу любую другую библиотеку, чего нельзя сказать о разработчике, использующем Object Pascal, – набор доступных библиотек для последнего языка сильно ограничен.

Успешное распространение систем программирования Turbo Pascal и Borland Delphi способствовало и внедрению на рынок системы программирования Borland C++ Builder от той же компании–разработчика. Эта система программирования занимает прочную позицию на рынке средств разработки для языка C++, где существует довольно жесткая конкуренция.

Читайте так же:
Игра клевер в чем развод отзывы

C++ Builder – мощная система визуального объектно – ориентированного проектирования, позволяющая решать множество задач, в частности:

а) Создавать законченные приложения для Windows самой различной направленности, от чисто вычислительных и логических до графических и мультимедиа.

б) Быстро создавать (даже начинающим программистам) профессионально выглядящий оконный интерфейс для любых приложений, написанных на любом языке; интерфейс удовлетворяет всем требованиям Windows и автоматически настраивается на ту систему, которая установлена на компьютере пользователя, поскольку использует многие функции, процедуры, библиотеки Windows.

в) Создавать свои динамически присоединяемые библиотеки (DLL) компонентов, форм, функций, которые затем можно использовать из других языков программирования.

г) Создавать мощные системы работы с локальными и удаленными базами данных любых типов; при этом имеются средства автономной отладки приложений с последующим выходом в сеть.

д) Формировать и печатать сложные отчеты, включающие таблицы, графики.

е) Создавать справочные системы как для своих приложений, так и для любых других, с которыми можно работать не только из приложений, но и просто через Windows.

ж) Создавать профессиональные программы установки для приложений Windows, учитывающие всю специфику и все требования Windows.

Исходя из всего вышесказанного и было принято решение производить разработку программы в среде визуального программирования C++ Builder.

Этапы разработки программных систем

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

Этапы разработки программы

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

Программирование – это процесс создания (разработки) программы, который может быть представлен последовательностью следующих шагов:

1. Спецификация (определение, формулирование требований к программе).

2. Разработка алгоритма.

3. Кодирование (запись алгоритма на языке программирования).

6. Создание справочной системы.

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

На этапе разработки алгоритма необходимо определить последовательность действий, которые надо выполнить для получения результата. Если задача может быть решена несколькими способами и, следовательно, возможны различные варианты алгоритма решения, то программист, используя некоторый критерий, например, скорость решения алгоритма, выбирает наиболее подходящее решение. Результатом этапа разработки алгоритма является подробное словесное описание алгоритма или его блок–схема.

После того как определены требования к программе и составлен алгоритм решения, алгоритм записывается на выбранном языке программирования. В результате получается исходная программа.

Программа представляет собой последовательность операторов языка программирования, записанных в соответствии со схемой алгоритма.

Разработка программы начинается с выбора языка программирования, который определяет типы и структуры обрабатываемых данных, набор функциональных операторов и структуру программы. Трудность перехода от алгоритма к программе заключается в том, что алгоритм может представляться с разными степенями детализации. Отдельный шаг алгоритма может потребовать записи нескольких операторов или подпрограммы. Приступая к разработке программы, необходимо определить имена и типы переменных, размеры массивов, количество и виды подпрограмм.

Запись программы осуществляется в соответствии с синтаксисом языка. Для наглядности следует записывать по одному оператору на строке, вложенные операторы (особенно в условном операторе или операторе цикла) сдвигать на 2–3 позиции вправо. На 5–10 строк текста программы желательно записывать комментарий, что делает программу самодокументируемой; при этом можно обойтись без дополнительного описания.

Качество разрабатываемых программ определяется рядом характеристик, описывающих требуемые свойства. В зависимости от назначения программы требования, предъявляемые к характеристикам ее, могут меняться. К наиболее важным характеристикам, определяющим свойства программ, относятся надежность программ, простота пользования, мобильность, удобство эксплуатации, эффективность, совместимость, испытуемость, стоимость, полная документируемость.

Отладка – это процесс поиска и устранения ошибок. Ошибки в программе разделяют на две группы: синтаксические (ошибки в тексте) и алгоритмические. Синтаксические ошибки – наиболее легко устраняемые. Алгоритмические ошибки обнаружить труднее. Этап отладки можно считать законченным, если программа правильно работает на одном–двух наборах входных данных.

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

Если разработчик предполагает, что программой будут пользоваться другие, то он обязательно должен создать справочную систему и обеспечить пользователю удобный доступ к справочной информации во время работы с программой.

Установочный диск или CD–ROM создаются для того, чтобы пользователь мог самостоятельно, без помощи разработчика, установить программу на свой компьютер. Обычно помимо самой программы на установочном диске находятся файлы справочной информации и инструкция по установке программы (Readme–файл).

Читайте так же:
Заработок на мини играх

Игра быки и коровы алгоритм решения

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

В Этюдах предлагали решить задачу Быки-Коровы в конкретном варианте. А мне хотелось бы несколько расширить вопрос, не ограничивая его конкретным вариантом игры, и даже не решить задачу как таковую (я приведу конкретную базовую идею алгоритма), а поговорить об алгоритме решения как таковом, какие могут быть идеи по оптимизации алгоритма.

Начну с правил.
1) Загадывается число длины L, каждая цифра которого — это одна из D цифр: 0..D-1. D>L>1. Цифры повторяться не могут. Алгоритм должен угадать это число.
2) Два варианта игры: (ZR) загадываемое число может начинаться с 0, (NZ) загадываемое число не может начинаться с 0.
3) На каждом шагу алгоритм рассчитывает и предлагает число-попытку, причем это число должно удовлетворять 1) и 2), т.е. быть таким числом, которое в принципе могло было бы быть загаданным. Например, если загаданное число не может начинаться с 0, то и число-попытка не может начинаться с нуля.
4) Каждая цифра числа-попытки проверяется, есть ли она в загаданном числе. Если есть, то ей приписывается ранг «бык», если она при этом стоит на том же месте, что и в загаданном числе, если же есть но на другом месте, то — «корова».
5) В ответ на число-попытку выдается подсказка. Два варианта игры: в «классическом» варианте («1B2C») сообщается только количество быков (B) и коров (C), в «облегченном» варианте («BC-C») сообщается также, какая цифра бык, а какая — корова. Например, загадано: 5860, попытка: 5678, быки: 5, коровы: 6,8, в классическом варианте выдается подсказка «1Б2К», в облегченном варианте — «БК-К», т.е. первая цифра числа-попытки — бык, а вторая и третья — коровы.
6) Алгоритм продолжает вводить числа-попытки. Два варианта игры: (ANY) очередные числа-попытки могут быть любыми, разрешенными правилами 1) и 2), (FIT) числа-попытки должны удовлетворять 1), 2) и всем полученным подсказкам.
7) Алгоритм завершается когда полученная подсказка — это либо «4Б0К», либо «ББББ». Т.е. последнее названное число совпадает с загаданным. Число шагов, которые потребовались алгоритму, чтобы угадать — это число введенных чисел- попыток, включая загаданное число.

Правила будем записывать в формате D/L/(ZR,NZ)/(«1B2C»,»BC-C»)/(ANY,FIT).

Пример игры. «Классический школьный» вариант: 10/4/ZR/»1B2C»/ANY, что означает, что используются все 10 цифр, длина загадываемого числа 4, первый ноль разрешен, подсказки сообщают только число быков и коров, и каждая число-попытка может быть любым (не обязательно удовлетворять предыдущим подсказкам, может начинаться с нуля, главное, чтобы цифры были различными). 1) 1234 «1Б3К» 2) 1023 (заметьте, не удовлетворяет первой подсказке) «0Б3К» 3) 1032 «1Б2К» (в этот момент уже известен ответ: 2431, но его еще надо назвать) 4) 2431 «4Б0К». Итого потребовалось 4 хода.

Задача алгоритма: решить как можно быстрее. Будем минимизировать гарантированное число ходов, за которое он может угадать любое число, т.е. число ходов, которое ему точно хватит, чтобы угадать любое загаданное число.

Основная идея алгоритма: состоит в том, чтобы на каждом шагу оставлять как можно меньше вариантов ответа в худшем случае на следующем шагу. Каждая подсказка оставляет только те варианты ответа, которые дают эту подсказку на введенное число. Таким образом надо перебрать все возможные вводимые числа (какие числа можно вводить ограничено правилом 6: ANY или FIT), а затем найти то, которое даст на следующем ходу меньше вариантов в худшем случае.

Возьмем эту идею как базовую для алгоритма. Нам нужна статистика. Т.е. программа должна перебрать все варианты загаданного числа, и для каждого из них алгоритм должен найти его, а статистика включает максимальное число шагов, которое потребовалось алгоритму, среднее число шагов и время работы.

Итак, главный вопрос состоит в том, как бы оптимизировать программу по скорости и памяти.
Скорость. Во-первых, надо ускорить работу просчета очередной попытки на каждом шагу. Во-вторых, очень уж много встречается ситуаций, когда просчет одного варианта может помочь в остальных. Ну например, ситуации 1234 «БК—» и 1234 «Б-К-» выглядят очень похожими.
Память. Здесь вообще при увеличении длины загадываемого числа все растет катастрофически. Соответственно, нужны идеи. Кроме того, уменьшение требуемой памяти приводит к увеличению скорости, как это не парадоксально звучит.
Требования. Программа должна работать при 3<=D<=10, 2<=L<=6, L<D, т.е. самый плохой вариант D=10, L=6. При этом максимум памяти, ну, скажем, 2ГБ.

У меня есть пара идей на этот счет, которые существенно помогли при расчете статистики. Пример выше взят из работы алгоритма, при этом всю статистику для данного случая программа получает за 2.8 секунд. Однако, если увеличить L до 5, то уже 2.5 минуты, а если увеличить L до 6, то уже требуется 1,5 часа!

Читайте так же:
Игра наборщик из букв данных

У кого какие идеи?

А вот зайца кому, зайца-выбегайца?!
http://files.rsdn.org/53829/avotzaitsakomu_sale.png

Разработка игры «быки и коровы»

В рамках научно-исследовательской работы было разработано программное приложение, реализующее игру «Быки и коровы». Целью создания программы является демонстрация умений и навыков, полученных в результате научно-исследовательской работы, заключающейся в изучении теории программирования и технологии разработки программных приложений, а также применении современных информационных технологий для решения практических задач обработки данных и математического моделирования.

Разработке программы предшествовало изучение основ языка программирования: основных типов данных, базовых конструкции языка программирования (следования, условий и циклов), структур данных и методов их обработки и реализации, изучение алгоритмов поиска, обработки и сортировки данных, методов и технологии программирования. А также приобретение навыков работы в выбранной среде программирования (Delphi), разработки и реализации алгоритмов на языке программирования высокого уровня, применение изученных метолов и технологий для решения прикладных задач.
Формулировка задачи
В рамках данной работы была поставлена цель ‒ написать программу, реализующую игру «Быки и коровы». Данная игра является логической игрой для двух игроков. В нашем случае в игре участвуют пользователь и компьютерный игрок. Компьютерный игрок загадывает число, состоящее из четырех неповторяющихся цифр (оно генерируется в начале игры). Игрок должен угадать число за меньшее количество попыток.

Игрок вводит число из четырех неповторяющихся цифр. Противник сообщает в ответ, сколько цифр угадано в заданном числе. Результат отгадывания выражается в условных единицах – Быках и Коровах.

Бык ‒ цифра входит в число и стоит на своем месте.

Корова — цифра входит в число, но находится не на своем месте.

Пример 1. Пусть компьютер задумал число 5123. Игрок ввел число 1234. Результат: 3 коровы и 0 быков (так как цифры 1,2,3 входят в число, но ни одна из них не стоит на своем месте).

Пример 2. Пусть компьютер задумал число 3219. Игрок ввел число 2310. Результат: 2 коровы и 1 бык (так цифры 2,3 входят в число, но ни одна из них не стоит на своем месте, а 1 – стоит на своём месте).

В процессе игры необходимо вести статистику – сколько попыток сделал отгадывающий игрок (в нашем случае это человек). Игра заканчивается, когда число отгадано. В этом случае выводится загаданное число и количество попыток, за которое оно было угадано.

  • загадывается число из 5 (или больше) цифр,
  • загадывается последовательность из 4 цветных фишек, причём цвета могут повторяться (игра Mastermind – «Гениальный отгадчик»),
  • усложненный вариант Mastermind, когда используется последовательность из 5, 6 или большего количества цветных фишек,
  • загадывается слово, обычно из 5 букв (в именительном падеже единственном числе по правилам игры «Балда»), и задача противника — угадать его, используя в качестве попыток такие же корректные слова из словаря русского языка.

В нашей программе мы реализуем описанный выше классический вариант игры «Быки и коровы».

Приведем алгоритм нашей программы, выполняющей действия компьютерного игрока и проверку результатов отгадывания, выполненного человеческим игроком. Алгоритм выглядит следующим образом:

1. Генерируется случайное число с помощью генератора псевдослучайных чисел. Так как по правилам игры цифры в нём не должны повторяться, то мы генерируем четыре числа в пределах от 0 до 9 (включительно), соответственно для тысяч, сотен, десятков и единиц. Обязательно выполняется проверка на совпадение с предыдущими сгенерированными цифрами. (Кроме того, цифра для тысяч не должна быть равна 0). В переменную n, хранящую число попыток, задаем значение равное нулю.

2. Выводим для игрока сообщение на экран о том, что число загадано.

3. Просим ввести пользователя свой вариант.

4. Считываем число пользователя. Увеличиваем значение переменной с числом попыток на 1 (n=n+1).

5. Выполняем сравнение числа пользователя с загаданным числом. Для этого разбиваем его на цифры для тысяч, сотен, десятков и единиц.

6. Ищем быков. Попарно цифры для тысяч, сотен, десятков и единиц из числа пользователя сравниваем с соответствующими разрядами загаданного числа. Количество совпадений заносим в переменную b – число быков.

7. Ищем коров. Причем это делаем для тех цифр из числа пользователя, которые не являются быками. Берем цифру и сравниваем по очереди со всеми цифрами загаданного числа. Количество совпадений заносим в переменную c – число быков. Повторяем эту процедуру для всех цифр, не являющихся быками.

8. Выводим на экран значения переменных b (число быков) и c (число быков).

9. Если b=4, то выводим сообщение – «Вы отгадали число с n попыток. Это -» и печатаем загаданное число. В противном случае, игра продолжается, и выполняется переход на пункт 3 алгоритма.

В дальнейшем предполагается реализовать данную игру для ситуации отгадывания числа компьютерным игроком (когда число загадывает человек, а компьютерный игрок пытается его угадать).

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector