Задача: игра «Гениальный отгадчик»
Напишите метод, который возвращает число «хитов» и «псевдохитов».
5К открытий5К показов
В игру «Гениальный отгадчик» играют следующим образом:
У компьютера есть четыре слота, в каждом слоте находится шар красного (R), жёлтого (Y), зелёного (G) или синего (B) цвета. Последовательность RGGB означает, что в слоте 1 — красный шар, в слотах 2 и 3 — зелёный, 4 — синий.
Пользователь должен угадать цвета шаров — например, предположить, что там YRGB. Если вы угадали правильный цвет, вы получаете «хит». Если вы назвали цвет, который присутствует в раскладе, но находится в другом слоте, вы получаете «псевдохит». Слот с «хитом» не может быть назван «псевдохитом». Например, если фактический расклад RGBY, а ваше предположение GGRR, то ответ должен быть: один «хит» и один «псевдохит».
Напишите метод, который возвращает число «хитов» и «псевдохитов».
Решение
Задача довольно лёгкая, но даже в ней можно допустить несколько ошибок. Проверьте свой код, учитывая все граничные случаи.
Давайте создадим массив, который будет хранить информацию о том, сколько раз каждый символ появлялся в переменной solution
(решении), исключая случаи, когда слот был «хитом». Затем мы просто просматриваем переменную guess
для подсчёта количества псевдохитов.
Приведённый ниже код реализует этот алгоритм:
Обратите внимание, что чем проще алгоритм, тем важнее написать чистый и правильный код. В этом примере мы выделили code(char c)
в отдельный метод, а также создали класс Result
для хранения результата вместо обычного его вывода на консоль.
5К открытий5К показов