Йо, меня зовут Наби. Заранее благодарю за чтение и желаю продуктивно провести время! Если после прочтения возникнут вопросы, пожелания или предложения, то буду рад ознакомиться со всем в комментариях!
Предисловие:
В предыдущей части мы решили задачу на определение квартала, в котором находится данный нам месяц, сравнивали регистры символов, научились определять результаты чемпионатов по истории игр, поработали с массивами с волками и овцами, а также поняли как определять ближайший лифт в здании. В этой части вас ждут еще более интересные алгоритмические задачи!
Перед началом чтения решения задачи, хочу призвать каждого к самостоятельному решению задачи, чтобы после вы могли сравнить своё решение с моим и обсудить это в комментариях. Буду рад послушать ваше мнение! Давайте, приступим!
Новое в конфигурации Algo1C (Последние 5 версий):
Актуальную версию конфигурации вы можете загрузить здесь (Нажмите на строку)
- 0.5 : Добавлена возможность выбирать контекст исполнения кода, например: НаСервере или НаКлиенте
- 0.4 : Исправлена ошибка при выводе содержимого исключения
- 0.3 : Добавлена возможность сохранять и загружать задачи; Внесены небольшие изменения в интерфейс
- 0.2 : Исправлена ошибка при выводе результата (Отдельная благодарность SAShikutkin)
Решение задач:
Задача 1
Платформа: CodeWars
Название задачи: Rock Paper Scissors Lizard Spock
Ссылка на задачу: https://www.codewars.com/kata/57d29ccda56edb4187000052 (Нажмите на строку)
Сложность: 7 kyu
Тэги: Фундаментальные, Логика
Оригинальное описание задачи:
In this kata, your task is to implement an extended version of the famous rock-paper-scissors game. The rules are as follows:
- Scissors cuts Paper
- Paper covers Rock
- Rock crushes Lizard
- Lizard poisons Spock
- Spock smashes Scissors
- Scissors decapitates Lizard
- Lizard eats Paper
- Paper disproves Spock
- Spock vaporizes Rock
- Rock crushes Scissors
Task:
Given two values from the above game, return the Player result as "Player 1 Won!"
, "Player 2 Won!"
, or "Draw!"
.
Inputs
Values will be given as one of "rock", "paper", "scissors", "lizard", "spock"
.
Пояснение:
Суть задачи заключается в том чтобы определить победителя в расширенной версии (я полагаю взято из ТБВ) игры "Камень - Ножницы - Бумага". В качестве входных данных нам будут давать 2 значения, по одному из элементов от каждого игрока и затем в качестве результата мы будем возвращать строку с результатом. Давайте придумаем решение!
Решение:
Для начала определим какую нибудь структуру данных со слабостями всех элементов игры по типу "Камень":["Бумага","Спок"] чтобы было удобно писать саму логику игры. Далее сравниваем не равны ли выборы игроков друг другу для того чтобы объявить ничью. Если не равны то просто берём любой из выборов и проверяем список его слабостей, передав выбор оппонента. Если что-то найдено, значит проигрыш, наоборот, выигрыш! Вот как это будет выглядеть в коде:
ЭлементыИгры = Новый Соответствие;
//
ЭлементыИгры.Вставить("Камень",Новый Массив);
ЭлементыИгры["Камень"].Добавить("Бумага");
ЭлементыИгры["Камень"].Добавить("Спок");
//
ЭлементыИгры.Вставить("Бумага",Новый Массив);
ЭлементыИгры["Бумага"].Добавить("Ножницы");
ЭлементыИгры["Бумага"].Добавить("Ящерица");
//
ЭлементыИгры.Вставить("Ножницы",Новый Массив);
ЭлементыИгры["Ножницы"].Добавить("Спок");
ЭлементыИгры["Ножницы"].Добавить("Камень");
//
ЭлементыИгры.Вставить("Ящерица",Новый Массив);
ЭлементыИгры["Ящерица"].Добавить("Камень");
ЭлементыИгры["Ящерица"].Добавить("Ножницы");
//
ЭлементыИгры.Вставить("Спок",Новый Массив);
ЭлементыИгры["Спок"].Добавить("Ящерица");
ЭлементыИгры["Спок"].Добавить("Бумага");
//
ВыборПервогоИгрока = "Спок";
ВыборВторогоИгрока = "Ящерица";
//
Если ВыборПервогоИгрока = ВыборВторогоИгрока Тогда
Вывод = "Ничья";
Иначе
Если ЭлементыИгры[ВыборПервогоИгрока].Найти(ВыборВторогоИгрока) <> Неопределено Тогда
Вывод = "Выиграл второй игрок!";
Иначе
Вывод = "Выиграл первый игрок!";
КонецЕсли;
КонецЕсли;
Заключение:
Решение получилось весьма простым, задача была была очень занимательной!
Задача 2
Задача 3
Задача 4
Задача 5
Заключение:
Платформа: CodeWars
Название задачи: Rock Paper Scissors Lizard Spock
Ссылка на задачу: https://www.codewars.com/kata/57d29ccda56edb4187000052 (Нажмите на строку)
Сложность: 7 kyu
Тэги: Фундаментальные, Логика
Оригинальное описание задачи:
In this kata, your task is to implement an extended version of the famous rock-paper-scissors game. The rules are as follows:
- Scissors cuts Paper
- Paper covers Rock
- Rock crushes Lizard
- Lizard poisons Spock
- Spock smashes Scissors
- Scissors decapitates Lizard
- Lizard eats Paper
- Paper disproves Spock
- Spock vaporizes Rock
- Rock crushes Scissors
Task:
Given two values from the above game, return the Player result as
"Player 1 Won!"
,"Player 2 Won!"
, or"Draw!"
.Inputs
Values will be given as one of
"rock", "paper", "scissors", "lizard", "spock"
.
Пояснение:
Суть задачи заключается в том чтобы определить победителя в расширенной версии (я полагаю взято из ТБВ) игры "Камень - Ножницы - Бумага". В качестве входных данных нам будут давать 2 значения, по одному из элементов от каждого игрока и затем в качестве результата мы будем возвращать строку с результатом. Давайте придумаем решение!
Решение:
Для начала определим какую нибудь структуру данных со слабостями всех элементов игры по типу "Камень":["Бумага","Спок"] чтобы было удобно писать саму логику игры. Далее сравниваем не равны ли выборы игроков друг другу для того чтобы объявить ничью. Если не равны то просто берём любой из выборов и проверяем список его слабостей, передав выбор оппонента. Если что-то найдено, значит проигрыш, наоборот, выигрыш! Вот как это будет выглядеть в коде:
ЭлементыИгры = Новый Соответствие;
//
ЭлементыИгры.Вставить("Камень",Новый Массив);
ЭлементыИгры["Камень"].Добавить("Бумага");
ЭлементыИгры["Камень"].Добавить("Спок");
//
ЭлементыИгры.Вставить("Бумага",Новый Массив);
ЭлементыИгры["Бумага"].Добавить("Ножницы");
ЭлементыИгры["Бумага"].Добавить("Ящерица");
//
ЭлементыИгры.Вставить("Ножницы",Новый Массив);
ЭлементыИгры["Ножницы"].Добавить("Спок");
ЭлементыИгры["Ножницы"].Добавить("Камень");
//
ЭлементыИгры.Вставить("Ящерица",Новый Массив);
ЭлементыИгры["Ящерица"].Добавить("Камень");
ЭлементыИгры["Ящерица"].Добавить("Ножницы");
//
ЭлементыИгры.Вставить("Спок",Новый Массив);
ЭлементыИгры["Спок"].Добавить("Ящерица");
ЭлементыИгры["Спок"].Добавить("Бумага");
//
ВыборПервогоИгрока = "Спок";
ВыборВторогоИгрока = "Ящерица";
//
Если ВыборПервогоИгрока = ВыборВторогоИгрока Тогда
Вывод = "Ничья";
Иначе
Если ЭлементыИгры[ВыборПервогоИгрока].Найти(ВыборВторогоИгрока) <> Неопределено Тогда
Вывод = "Выиграл второй игрок!";
Иначе
Вывод = "Выиграл первый игрок!";
КонецЕсли;
КонецЕсли;
Заключение:
Решение получилось весьма простым, задача была была очень занимательной!
Ну что ж, пока на этом всё, надеюсь статья была увлекательной для вас, благодарю за внимание. Подключайтесь к решению алгоритмических задач вместе со мной, делитесь вашим мнением и решениями в комментариях! Увидимся в новой статье!