Игра «Быки и коровы» · Шаг 5 из 5
Отсев
Компьютер назвал 1234, вы ответили «0 быков, 2 коровы». Что это даёт? Загаданное — одно из тех чисел, которые на месте вашего дали бы ровно такой же ответ. Все остальные можно вычеркнуть — и так после каждого хода, пока не останется одно.
Что сделать
Вычеркните из списка компьютера числа, которые не могли дать такой ответ на его ход.
Что приходит
kandidaty— список чисел, которые ещё могут быть загаданы; менять его нельзяhod— число, которое назвал компьютерotvet— ваш ответ на него, пара(быки, коровы)byki_korovy— ваш шаг 1, приходит аргументом
Что вернуть
Новый список тех кандидатов, для которых byki_korovy(кандидат, hod) равно otvet, в том же порядке.
Допишите функцию otsev в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Так компьютер отгадывает ваше число: после каждого ответа он зовёт otsev и печатает, сколько подходящих чисел осталось. Решите шаг — и он будет угадывать за пять-шесть ходов, а не за сотни.
Без этого шага: компьютер не делает выводов из ответов — просто вычёркивает то, что уже спрашивал.
Кандидаты — ["1234", "5678", "9012"], компьютер назвал "1234" и услышал «0 быков, 0 коров». Число 1234 на месте загаданного дало бы четыре быка — его вычёркиваем. Функция возвращает ["5678", "9012"].
В проверке вместо настоящего подсчёта стоит простая подмена: она говорит «4 быка», если числа равны, и «ничего» иначе.
Функция принимает список кандидатов, ход компьютера (строку), ответ на него — пару (быки, коровы) — и функцию byki_korovy из первого шага: она приходит аргументом, вызывайте её как обычную.
Возвращает новый список: те кандидаты, для которых byki_korovy(кандидат, ход) равно ответу, — в том же порядке. Список, пришедший аргументом, не меняется.
Образцовый тест целиком
sravnit = lambda a, b: (4, 0) if a == b else (0, 0)
otsev(["1234", "5678", "9012"], "1234", (0, 0), sravnit)
['5678', '9012']
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.