Expandir taquigrafía aumentando las secuencias enteras

18

Dada una entrada de una lista de números en el formato de una secuencia de números enteros cada vez mayor, abre la secuencia completa.

El formato de secuencia de números enteros que aumenta la taquigrafía funciona al encontrar cada número n con menos dígitos que el número que lo precede, m . Con d como el número de dígitos en n , los últimos d dígitos de m se reemplazan con todos los dígitos de n . Aquí hay una entrada de ejemplo:

123 45 6 7 89 200

Aplicando la regla de reemplazo, primero convertimos 45 en 145 porque 45 <123:

123 145 6 7 89 200

Aplicando repetidamente la misma regla, esto se convierte en:

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

La secuencia ahora está ordenada (no hay números para los que se aplica la regla), por lo que este es el resultado final.

Puedes suponer que

  • La notación abreviada siempre se usa cuando es posible. Por ejemplo, la entrada será 12 3, nunca 12 13.

  • los números nunca disminuirán mientras se mantenga el mismo número de dígitos. Por ejemplo, la entrada nunca será 333 222.

  • aplicar la regla abreviada nunca dará como resultado un número que sea aún menor que el número anterior en la secuencia. Por ejemplo, la entrada nunca será 123 12.

  • los números siempre serán enteros positivos y nunca contendrán ceros a la izquierda (si se usa un formato de cadena).

  • la secuencia completa y expandida nunca contendrá números duplicados. (Sin embargo, la secuencia abreviada podría; ej. 10 1 20 1-> 10 11 20 21.)

  • Habrá al menos un número en la entrada.

La entrada y la salida pueden ser listas / matrices de números / cadenas o una sola cadena con elementos separados por cualquier no dígito.

Como se trata de , ganará el código más corto en bytes.

Casos de prueba, con entrada y salida en líneas alternas:

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
Pomo de la puerta
fuente
El desafío es bastante antiguo, pero a) ¿puede la entrada estar vacía? b) ¿puede la entrada contener solo un número?
Erik the Outgolfer
@EriktheOutgolfer Seguiré adelante y diré que habrá ≥1 números en la entrada.
Pomo de la puerta

Respuestas:

7

Jalea, 7 bytes

DUṛ"\UḌ

Pruébalo en línea! o verificar todos los casos de prueba .

Cómo funciona

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.
Dennis
fuente
5

Javascript, 45 42 bytes

3 bytes de descuento gracias @Neil .

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

La función anterior espera una serie de cadenas.

remoto
fuente
1
Ahorre 4 bytes usando z=z.slice(0,-x.length)+x,z=''(o el nombre de la variable que elija).
Neil
@Neil. ¡Buena esa! Sabía que debería haber una manera de hacerlo
eliminado
(Perdón por contar mal el ahorro). Además, la versión de cadena es innecesaria ya que resulta que s=>s.split` `.map(es de 2 bytes (esta vez verifiqué dos veces) más corta que s=>s.replace(/\d+/g,.
Neil
@Neil. Punto valido. Simplemente lo dejé allí porque era mi primer objetivo al responder ... pero tienes razón
eliminado
1

Retina, 45 bytes

+`(?=(?<1>\d)+)(?<=(\d)(?(1)x)(?<-1>\d)+ )
$1

Utiliza grupos de equilibrio para contar los dígitos que cuestan mucho. Todavía no he encontrado un mejor enfoque, pero estoy interesado en él.

Pruébelo en línea aquí.

randomra
fuente
0

Gema, 35 personajes

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

Entrada: cadena con números separados por cualquier cosa, cadena de salida.

Ejecución de muestra:

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

Ruby, 39 caracteres

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

Entrada: matriz de cadenas, salida: matriz de cadenas.

Ejecución de muestra:

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"] 
hombre trabajando
fuente