- 15, Oct 2024
- #1
Часть Появление Кодекса Гольфа 2021 событие. Подробности смотрите в связанном мета-сообщении.
Связано с AoC2017, день 16. Я использую формулировку из моя головоломка Puzzling SE, основанная на той же задаче AoC вместо исходного AoC для ясности.
\$n\$ человек с номерами \$1, 2, \cdots, n\$ стоят в очереди в порядке соответствующего им номера. Они «танцуют» или меняются местами по каким-то заранее заданным инструкциям. Существует два типа инструкций, называемых Exchange и Partner:
- Эxchange(m,n): два человека, стоящие на m-й и n-й позициях, меняются местами.
- Пartner(x,y): два человека с номерами x и y меняются местами.
Например, если всего пять человек.
and they are given instructions E(2,3) and P(3,5) in order, the following happens:1, 2 2, 3 3, 4 6, 35 6, 60 8, 16 16, 17
- E(2,3): 2-й и 3-й люди меняются местами, поэтому линия становится
n, m 1, 1 2, 2 3, 6 3, 3 8, 15 8, 120 16, 28 16, 5460
. - P(3,5): Люди с номерами 3 и 5 меняются местами, поэтому линия становится
E(2,3) P(3,5) E(3,4) 1. 12345 -> 13245 -> 15243 -> 15423 2. 15423 -> 14523 -> 14325 -> 14235 3. 14235 -> 12435 -> 12453 -> 12543 4. 12543 -> 15243 -> 13245 -> 13425 5. 13425 -> 14325 -> 14523 -> 14253 6. 14253 -> 12453 -> 12435 -> 12345
.
Давайте определим программа как фиксированная последовательность таких инструкций. Вы можете поместить в программу столько инструкций, сколько захотите.
Независимо от длины вашей программы, если вся программа повторяется достаточное количество раз, очередь людей в конечном итоге вернется в исходное состояние \$1,2,3,\cdots,n\$. Давайте определим программу период как наименьшее такое число (т.е. наименьшее положительное целое число \$m\$, при котором запуск программы \$m\$ раз сбрасывает линию людей в исходное положение). Состояния в середине программы не учитываются.
Например, программа E(2,3); P(3,5); E(3,4)
has the period of 6:
15243
Теперь вы хотите написать программу для \$n\$ людей, чтобы ее период имел ровно \$m\$. Является ли это возможным?
Вход: Количество людей \$n\$ и целевой период \$m\$
Выход: Значение, указывающее, можно ли написать такую программу или нет. Вы можете выбрать
- выводите истину/ложь, используя соглашение вашего языка (обмен разрешен), или
- используйте два различных фиксированных значения для обозначения истинного (утвердительного) или ложного (отрицательного) соответственно.
Применяются стандартные правила. Выигрывает самый короткий код в байтах.
Тестовые случаи
Правда:
13245
Ложь:
12345
#код-гольф #код-гольф #математика #задача принятия решения #теория чисел #целочисленные разбиения