Расширить число
Ваша задача - расширить целое число больше 0 следующим образом:
Разделите число на десятичные цифры и для каждой цифры создайте список в соответствии с этими правилами:
- если цифра нечетная, список начинается с цифры и уменьшается до 1;
- если цифра четная, список начинается с цифры и увеличивается до 9.
- если цифра 0, список пуст.
Запишите списки для нечетных чисел ниже цифр и выше для четных. Затем выровняйте столбцы сверху и соберите цифры в каждой строке, чтобы получить целые числа. В качестве последнего шага сложите числа, чтобы найти расширение числа.
Вот пример вышеуказанных правил, применяемых к 34607:
9
8
79
68
57
346 7 -> 399 7 -> 3997 -> 9418
2 6 288 6 2886
1 5 177 5 1775
4 66 4 664
3 5 3 53
2 4 2 42
1 1 1
Вот тестовые случаи:
1: 1
2: 44
3: 6
44: 429
217: 1270
911: 947
2345: 26114
20067: 3450
34875632: 70664504
9348765347634763: 18406119382875401
Это код-гольф , поэтому выигрывают самые короткие ответы в байтах на каждом языке.
Ответы:
Желе , 13 байт
Монадическая ссылка, берущая и возвращающая положительные целые числа.
Попробуйте онлайн! или посмотрите набор тестов .
Как?
источник
Perl 6 ,
6866 байтПопробуй
Попробуй
Expanded:
источник
APL (Дьялог) , 39 байт
Полное тело программы. Запрашивает ввод из STDIN. Печать результатов в STDOUT.
Попробуйте онлайн!
Чтобы правильно отобразить последний тестовый пример,
⎕FR
( F точка позиционирования R epresentation) было установлено на 128-битное десятичное число, а⎕PP
( P rint P recision) было установлено на 34 цифры.⍞
запрос на ввод текста из STDIN⍎¨
выполнить каждый (получает каждую цифру как число){
…}¨
Для каждого элемента примените следующую функцию, где аргумент представлен⍵
:2|⍵:
если нечетный (освещенный остаток «если» при делении на 2), то:⌽
обратный⍳
в ɩ ntegers от 1 до⍵
Аргумент⋄
еще×⍵:
если аргумент положительный (горит "if" signum), то:⌽
обратный⍵
Аргумент,
с последующим⍵
аргумент↓
элементы выпали из⍳9
не то , что ɩ ntegers от 1 до 9⋄
еще⍬
пустой список↑
смешать (объединить) этот список списков в одну матрицу, дополнив нулями справа⍉
транспонирования↓
разбить эту матрицу на список списков0~⍨¨
удалить все нули из каждого списка10⊥¨
преобразовать каждое из базовых 10 в нормальные числа (это собирает цифры)+/
суммировать числаисточник
JavaScript (ES6),
888382 байтаЗапись
9 - k < x || 9
сохраняет байт,9 - k >= x && 9
но генерирует1
вместо,0
если неравенство проверено. Было бы проблемой, если бы это1 > k
привело к неправильному пути во внешней троице. Но это будет означать этоk = 0
и, следовательно9 - k = 9
, поэтому мы не можем иметь9 - k < x
в то же время.Контрольные примеры
NB: удален последний контрольный пример, который превышает точность числа JS.
Показать фрагмент кода
источник
Japt , 18 байт
Попробуйте онлайн!
источник
Java 11,
210209191181 байтХорошо, это заняло довольно много времени (главным образом потому, что я сначала допустил ошибку, поэтому мне приходилось записывать каждый шаг, чтобы лучше понять, что я сделал неправильно). Скорее всего, можно играть в гольф еще.
-18 байт благодаря @ceilingcat .
Объяснение:
Попробуй это здесь.
источник
Пип , 28 байт
Попробуйте онлайн!
объяснение
Как шаги продолжаются
34607
в качестве аргумента:источник
Pyth - 23 байта
Тестовый пакет .
источник
Haskell ,
106104 байтаПопробуйте онлайн!
источник
R ,
153146 байтПопробуйте онлайн!
Иногда я не могу сказать, если я просто мусор в гольф, или если R ...Это определенно я, сэкономил 7 байтов благодаря user2390246, который напомнил мне о другом способе извлечения цифр (который я предложил себе) ,Вы можете заменить
strtoi
с ,as.double
чтобы получить18406718084351604
последний тест случае (что неправильно); R имеет только 32-битные целые числа.источник
character->int
когда я звонил,:
а затемstrtoi
все равно использовал !Perl 5 , 120 + 1 (
-a
) = 121 байтПопробуйте онлайн!
источник
Python 2 , 131 байт
Попробуйте онлайн!
источник
05AB1E , 16 байтов
Попробуйте онлайн или проверьте все тесты .
Или в качестве альтернативы:
Объяснение:
источник
Бурлеск , 39 байт
Попробуйте онлайн!
источник