Ви вже всі повинні бути знайомі з послідовністю Конвей (також "послідовно виглядайте і скажіть") :
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?