Algo1C: Решение алгоритмических задач на базе 1С:Предприятие [Часть #8]

25.09.24

Разработка - Математика и алгоритмы

Решаем новые задачи из LeetCode и CodeWars!

Йо, меня зовут Наби. Заранее благодарю за чтение и желаю продуктивно провести время! Если после прочтения возникнут вопросы, пожелания или предложения, то буду рад ознакомиться со всем в комментариях!


Предисловие:

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

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


Новое в конфигурации 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

Заключение:

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

Алгоритмы Математика Оптимизация кода LeetCode CodeWars

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    2742    stopa85    12    

36

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    6663    user1959478    50    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    2675    maksa2005    8    

25

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    10212    7    SpaceOfMyHead    18    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    3946    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

23.11.2022    3063    gzharkoj    14    

24

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    8881    7    kalyaka    11    

44
Оставьте свое сообщение