Ви вже всі повинні бути знайомі з послідовністю Конвей (також "послідовно виглядайте і скажіть") :
1
11
21
1211
111221
312211
etc
Ви також можете почати будь-яке довільне число як вихідну точку. Нехай f(s)
буде наступним елементом послідовності. Тепер для кожного даного s
ми можемо знайти f(s)
. Зворотний не такий тривіальний: не для кожного y
можливого знайти попередника s
таким f(s) = y
. Наприклад, y = 1
ми не можемо знайти попередника. Але якщо y
має рівну довжину, ви можете розділити її на пари цифр, які описують кожну частину попередника:
513211 divides in 51,32,11
so: 51 comes from 11111
32 comes from 222
11 comes from 1
put together: 111112221
Таким чином, ми можемо визначити унікального попередника для кожної y
рівної довжини.
Примітка : Попередник, s
визначений таким чином, зазвичай НЕ задовольняє f(s) = y
.
Мета
Напишіть фрагмент функції / програми, який приймає рядок цифр як вхідний текст
- обчислює наступний елемент послідовності Conway, якщо довжина вхідного рядка непарна
- обчислює попередника вхідного рядка, як визначено вище, якщо довжина вхідного рядка є парною .
Виграє найкоротший код у байтах.
Останні запитання, засновані на послідовності перегляду:
11111111111111
? За вашою специфікацією, це було б 1111111
. Ви повинні змінити свою специфікацію, щоб визначити розумну відповідь на це.
11111111111111
просто не має попередника. Це незаконне введення.
513111
ділиться на51
,32
і11
?