Dada una cadena de entrada que contiene solo caracteres alfanuméricos ASCII y que comienza con una letra, intercambie cada letra con la secuencia de dígitos que sigue.
Una ejecución es una secuencia de letras o dígitos consecutivos. Tenga en cuenta que en el caso en que la cadena de entrada termina con una serie de letras, esta secuencia no se modifica.
Ejemplo de recorrido
Por ejemplo, dada la cadena de entrada uV5Pt3I0
:
- Tiradas separadas de letras y tiradas de dígitos:
uV 5 Pt 3 I 0
- Identificar pares de carreras:
(uV 5) (Pt 3) (I 0)
- Intercambiar pares de carreras:
(5 uV) (3 Pt) (0 I)
- Concatenar:
5uV3Pt0I
Ejemplos
uV5Pt3I0 -> 5uV3Pt0I
J0i0m8 -> 0J0i8m
abc256 -> 256abc
Hennebont56Fr -> 56HennebontFr
Em5sA55Ve777Rien -> 5Em55sA777VeRien
nOoP -> nOoP
Este es el código de golf por lo que gana la respuesta más corta en bytes. Se alientan las explicaciones.
(a,(b,y))<-span(<':')<$>span(>'9')s
.(a,(b,y):_)<-lex<$>span(>'9')s
: ¡ Pruébelo en línea!lex
funciona, así que me abstendré de incluir eso por ahora. En cualquier caso, es bueno saber que hay algo así en PreludeJavaScript (ES6), 34 bytes
Intentalo
fuente
Pyth , 15 bytes
Explicación
Banco de pruebas .
fuente
Python 2 , 49 bytes
Cada solución no regex que probé fue más larga. :PAG
Pruébalo en línea!
fuente
Japt (v2.0a0), 16 bytes
¡Pruébalo en línea!
Nota: este es un alfa inestable, por lo que si este enlace se rompe, puede usar una versión un poco más larga en v1.4.4: ¡Pruébelo en línea!
Explicación
fuente
ò
.CJam ,
323028 bytesCJam no tiene expresiones regulares ni "división en dígitos y letras" ni nada, así que esto fue un poco doloroso.
Pruébalo en línea!
Explicación
fuente
Gema , 11 personajes
Ejecución de muestra:
fuente
Java 8, 38 bytes
No hay mucho que explicar. Utiliza el mismo método que la respuesta Retina de @Okx , que no puede ser más corto en Java.
Pruébalo aquí.
fuente
Japt, 18 bytes
Pruébalo
fuente
Sed, 29 bytes
Corre con -r.
Utiliza grupos de captura y los reemplaza en el orden opuesto.
fuente
[A-Za-z]
a[^0-9]
. Sin embargo, debe contar la bandera como parte de su código.sed <command>
ysed -r <command>
, entonces, tres bytes.sed -f filename
ysed -rf filename
(o entresed -e 'command'
ysed -re 'command'
): un solo byte.s/([a-z]+)([0-9]+)|([0-9]+)([a-z]+)/\2\1\4\3/gi
48 bytes. De lo contrario, casi lo mismo.Jalea , 12 bytes
Pruébalo en línea!
Explicación:
fuente
PHP, sin expresiones regulares, 73 bytes
Ejecutar como tubería
-nR
o probarlo en línea .Descompostura
fuente
~
lugar dea&
PHP , 45 bytes
Pruébalo en línea!
fuente
C #, 71 bytes
Es una pena que las expresiones regulares sean tan largas en C #.
Pruébalo en línea!
Versión completa / formateada:
fuente
Clojure,
10488 bytesOh regex es realmente útil ... de todos modos ( TIO ):
partition-by
se divide en ejecuciones consecutivas basadas en el valor de retorno de esa función, separtition-all
divide en particiones de 2 (los pares que intercambiaremos), lasmap reverse
invierte,flatten
se deshace de la estructura de la lista anidada y finalmente generaremos una cadena. Sipartition
se utilizó en lugar departition-all
y tuviéramos un número impar de trozos, el último se descartaría.Original usado detallado pero divertido
(juxt second first)
y en(set"0123456789")
lugar dereverse
rangos enteros ASCII.fuente
QuadR , 15 bytes
Pruébalo en línea!
Explicación robada descaradamente de Okx :
Esto reemplaza la expresión regular
(\D+)(\d+)
con\2\1
. Analicemos eso si no sabes lo que eso significa.Los
\D
medios 'coinciden con cualquier cosa que no sea un número'.\d
significa "emparejar todo lo que es un número". El+
signo significa 'hacer coincidir esto al menos una vez, pero trate de hacerlo tantas veces como sea posible'. Los corchetes definen un grupo. El primer grupo es(\D+)
y el segundo es(\d+)
En la segunda línea decimos que queremos poner lo que coincida con el segundo grupo, seguido de lo que coincida con el primer grupo. Esto efectivamente intercambia las corridas de letras y dígitos.
fuente
PowerShell , 40 bytes
Pruébalo en línea!
PowerShell es bastante ideal para esto, ya que admite la búsqueda y sustitución de expresiones regulares de forma inmediata. Los accesorios van a @Okx para la solución regex.
fuente
Pip , 17 bytes
Toma datos como argumento de línea de comandos. Pruébalo en línea!
Explicación
Esto utiliza la estrategia estándar de reemplazo de expresiones regulares, algo golfizada.
La expresión regular es
-C+XL.C+XD
, que se evalúa como`(?i)([a-z]+)(\d+)`
:El reemplazo es
{c.b}
una función de devolución de llamada que concatena el segundo grupo (c
) y el primer grupo (b
). (El primer argumento de la funcióna
, contiene toda la coincidencia).Esto es tres bytes más corto que el ingenuo
aR`(\D+)(\d+)``\2\1`
.fuente
brainfuck , 98 bytes
Pruébalo en línea!
Explicación
Este programa mantiene una cola de letras que aún no se han emitido y las genera cuando corresponde.
La clave de este programa es
>>----[---->+<<<-[>]>]
. Las tres celdas a la derecha de la celda de entrada comienzan en cero. Si la entrada es un punto de código entre 1 y 63 inclusive, esto mueve el puntero un espacio a la derecha y coloca la entrada dos espacios a la derecha de esta nueva posición. De lo contrario, el puntero se mueve dos espacios a la derecha, la celda un espacio a la derecha de la nueva posición se convierte en 63, y el mismo 63 se resta de la celda de entrada. Esto divide claramente la entrada en letras (65-122) y dígitos (48-57).fuente
Ruby , 31 bytes
Pruébalo en línea!
fuente
Mathematica, 129 bytes
fuente