Розгорніть скорочення, збільшуючи цілі послідовності


18

З огляду на введення списку чисел у форматі скорочуючої цілочисельної послідовності, виводять послідовність у повному обсязі.

Скорочення збільшення цілого формату послідовностей працює, знаходячи кожне число n з меншою кількістю цифр, ніж число, що передує йому, m . З d як кількість цифр у n , останні d цифри m замінюються всіма цифрами n . Ось приклад введення:

123 45 6 7 89 200

Застосовуючи правило заміни, ми спочатку перетворюємо 45 на 145, оскільки 45 <123:

123 145 6 7 89 200

Неодноразово застосовуючи те саме правило, це стає:

123 145 146 7 89 200
123 145 146 147 89 200
123 145 146 147 189 200

Тепер послідовність сортується (немає чисел, щодо яких застосовується правило), тому це кінцевий результат.

Ви можете припустити, що

  • стенографічне позначення завжди використовується, коли це можливо. Наприклад, введення буде 12 3ніколи 12 13.

  • цифри ніколи не зменшаться, залишаючись однаковою кількістю цифр. Наприклад, введення ніколи не буде 333 222.

  • застосування правила скорочення ніколи не призведе до числа, яке все ще менше попереднього числа в послідовності. Наприклад, введення ніколи не буде 123 12.

  • числа завжди будуть натуральними цілими числами і ніколи не містять провідних 0 (якщо використовується формат рядка).

  • повна розширена послідовність ніколи не буде містити повторюваних чисел. (Однак послідовність скорочень може бути; напр. 10 1 20 1-> 10 11 20 21.)

  • на вході буде хоча б одне число.

Введення та вихід можуть бути або списками / масивами чисел / рядків, або окремим рядком з елементами, розділеними будь-якими нецифровими.

Оскільки це , найкоротший код у байтах виграє.

Тестові приклади, із введенням та виведенням на змінних лініях:

1 2 3 10 1 2 20 5 100 200 10 3 5 26 9 99 999 9999
1 2 3 10 11 12 20 25 100 200 210 213 215 226 229 299 999 9999
223 1184 334 441 5 927 2073 589 3022 82 390 5 9
223 1184 1334 1441 1445 1927 2073 2589 3022 3082 3390 3395 3399
5 10 5 20 5 30 5 40 5 50 5
5 10 15 20 25 30 35 40 45 50 55
7 8 9 70 80 90 700 800 900 7000 8000 9000
7 8 9 70 80 90 700 800 900 7000 8000 9000
42
42

Виклик досить старий, але а) чи може вхід бути порожнім? б) чи може вхід містити лише одне число?
Ерік Аутгольфер

@EriktheOutgolfer Я піду заздалегідь і скажу, що у введенні буде число ≥1.
Дверна ручка

Відповіді:


7

Желе, 7 байт

DUṛ"\UḌ

Спробуйте в Інтернеті! або перевірити всі тестові випадки .

Як це працює

DUṛ"\UḌ  Main link. Input: A (list of integers)

D        Convert each integer to a list of its base 10 digits.
 U       Reverse each digit list.
    \    Do a cumulative reduce, applying the dyadic link to the left:
   "       For each pair of corresponding digits:
  ṛ          Select the right one.
           Vectorization leaves digits that do not have a counterpart untouched.
     U   Reverse the resulting digit arrays.
      Ḍ  Convert from base 10 to integer.

5

Javascript, 45 42 байт

3 байти від спасибі @Neil .

a=>a.map(x=>z=z.slice(0,-x.length)+x,z='')

Вищенаведена функція очікує масив рядків.


1
Збережіть 4 байти, використовуючи z=z.slice(0,-x.length)+x,z=''(або назву змінної на ваш вибір).
Ніл

@Neil. Хороший! Я знав, що має бути спосіб зробити це
знято

(Вибачте за те, що збитки накопичилися.) Крім того, версія рядка є непотрібною, оскільки виявляється, що s=>s.split` `.map(на 2 байти (я це двічі перевірив) коротше, ніж s=>s.replace(/\d+/g,.
Ніл

@Neil. Дійсна точка. Я просто залишив його там, тому що це було моєю першою метою, коли відповідав ... але ти маєш рацію
знято


0

Гема, 35 символів

<D>=@set{p;@fill-right{${p;};$0}}$p

Введення: рядок з числами, розділеними будь-чим, вихідний рядок.

Проба зразка:

bash-4.3$ gema '<D>=@set{p;@fill-right{${p;};$0}}$p' <<< '123 45 6 7 89 200'
123 145 146 147 189 200

0

Рубі, 39 символів

->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}

Вхід: масив рядків, вихід: масив рядків.

Проба зразка:

2.1.5 :001 > ->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}[%w{123 45 6 7 89 200}]
 => ["123", "145", "146", "147", "189", "200"] 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.