Вы все должны быть знакомы с последовательностью Конвея (она же «смотрите и говорите») :
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
.
Цель
Напишите фрагмент функции / программы, который принимает в качестве входных данных строку цифр,
- вычисляет следующий элемент последовательности Конвея, если длина входной строки нечетна
- вычисляет предшественник входной строки, как определено выше, если длина входной строки четная .
Самый короткий код в байтах побеждает.
Последние вопросы, основанные на последовательности взглядов и высказываний:
11111111111111
? Согласно вашей спецификации, так и будет 1111111
. Вы должны изменить свою спецификацию, чтобы определить разумный ответ для этого.
11111111111111
просто нет предшественника. Это незаконный ввод.
513111
делится на51
,32
и11
?