Использование модуля для упрощения ввода
Это может быть слишком простой подсказкой, поэтому, если это так, я просто заменю или удалю ее.
Допустим, вы хотите взять ввод из двух символов, «a» и «b», и вернуть 1 и 2 для каждого соответственно. Вы, вероятно, использовали бы для этого условные выражения, поскольку это имеет смысл, и я буду использовать более сжатую форму для этого конкретного примера.
i:"a")+1+n
Это проверяет, является ли входное значение больше, чем «a», и добавляет 1. Так как «a» вернет 0 и «b» 1, это даст 1 и 2. Это делает работу довольно хорошо, но в случае нашего входы, мы могли бы пойти еще дальше.
i:3%n
В моде 3 97, который является числовым эквивалентом "a", становится 1, а 98, который является "b" s, становится 2. Для двух разных чисел гарантирован мод, который дает уникальные результаты для обоих. Для более чем двух существует мод, который дает уникальные результаты, но у меня нет математического мастерства, чтобы найти самый маленький из них простым способом (например, если у вас есть набор {100,101,102,103}, мод 104 выдаст уникальные результаты для каждое значение в нем, но не очень полезно). Однако в большинстве случаев, когда ввод ограничен парой букв алфавита, вы часто можете найти мод, который работает.
Чтобы найти наименьший модуль, который дает уникальные результаты для двух чисел a и b, вы должны сделать следующее. Возьмите абсолютное значение разности a и b ( |a - b|
) и найдите наименьшее число n, которое не делит его. например, для 97 и 98, |98 - 97| = 1
и поэтому 2 будет самым маленьким модом (но для нашей тестовой программы это дает 1 для 97 и 0 для 98, поэтому мод 3 лучше).