Relacionado: desafío bastante similar (pero mucho más fácil) horizontalmente: allí lo arreglé (con cinta)
Desafío:
Dada una cadena que solo contiene letras mayúsculas y / o minúsculas (lo que prefiera) y nuevas líneas, coloque rope
verticalmente para arreglarlo. Hacemos esto mediante la comprobación de la diferencia de dos letras adyacentes en el alfabeto (ignorando envolvente y sólo va a la baja), y llenando el espacio con tanto ROPE
/ rope
como sería necesario.
NOTA: Otra diferencia clave entre este desafío y el desafío Allí lo arreglé (con cinta) es que no estamos perdiendo rope
esta vez como lo hicimos con el tape
(sugerido por @JonathanAllan en la primera parte del desafío).
Ejemplo:
Entrada:
abc
bcd
ddd
eex
gfz
hka
imh
Salida:
abc
bcd
Rdd
deE
efR
OPO
gEP
hRE
iOR
kO
PP
mE
R
O
P
E
R
O
P
E
R
O
x
P
z
a
E
R
O
P
E
R
h
¿Por qué?
- Entre
b
yd
en la columna 1 debe serc
(longitud 1), por lo que llenamos esto conR
; - Entre
e
yg
en la columna 1 debe serf
(longitud 1), por lo que llenamos esto conO
; - Entre
f
yk
en la columna 2 debe serghij
(longitud 4), por lo que llenamos esto conPERO
; - Entre
k
ym
en la columna 2 debe serl
(longitud 1), por lo que llenamos esto conP
; - Entre
d
yc
en la columna 3 debe serefghijklmnopqrstuvw
(longitud 19), por lo que llenamos esto conEROPEROPEROPEROPERO
; - Entre
x
yz
en la columna 3 debe sery
(longitud 1), por lo que llenamos esto conP
; - Entre
a
yh
en la columna 3 debe serbcdefg
(longitud 6), por lo que llenamos esto conEROPER
.
Reglas de desafío:
- La diferencia solo se aplica hacia abajo, por lo que no hay cuerda entre
za
(columna 3 en el ejemplo anterior). - Es posible tener múltiples de las mismas letras adyacentes como
dd
(columna 3 en el ejemplo anterior). - Continuará usando
ROPE
una columna a la vez para no desperdiciar partes (sugerido por @JonathanAllan en la parte 1 del desafío). - Se le permite tomar la entrada en cualquier formato razonable. Puede ser una sola cadena, una matriz / lista de cadenas, una matriz de caracteres, etc. La salida tiene la misma flexibilidad.
- Puede usar minúsculas y / o mayúsculas de la forma que desee. Esto se aplica tanto a la entrada, salida y
ROPE
. - Los espacios finales son opcionales (tenga en cuenta que la cantidad correcta de espacios iniciales es obligatoria por lo que las columnas son correctas).
Cualquier cantidad de nuevas líneas finales y / o iniciales también son opcionales. - Puede suponer que todos los casos de prueba tendrán la misma longitud en todas las filas, por lo que
a\naa
/[[a][a,a]]
no sería una entrada válida. - Es posible que no
ROPE
sea necesario, en cuyo caso la entrada permanece sin cambios.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
As string:
Input: "abc\nbcd\nddd\neex\ngfz\nhka\nimh"
Output: "abc\nbcd\nRdd\ndeE\nefR\nOPO\ngEP\nhRE\niOR\n kO\n PP\n mE\n R\n O\n P\n E\n R\n O\n P\n E\n R\n O\n x\n P\n z\n a\n E\n R\n O\n P\n E\n R\n h"
As array-matrix:
Input: [[a,b,c],[b,c,d],[d,d,d],[e,e,x],[g,f,z],[h,k,a],[i,m,h]]
Output: [[a,b,c],[b,c,d],[R,d,d],[d,e,E],[e,f,R],[O,P,O],[g,E,P],[h,R,E],[i,O,R],[ ,k,O],[ ,P,P],[ ,m,E],[ , ,R],[ , ,O],[ , ,P],[ , ,E],[ , ,R],[ , ,O],[ , ,P],[ , ,E],[ , ,R],[ , ,O],[ , ,x],[ , ,P],[ , ,z],[ , ,a],[ , ,E],[ , ,R],[ , ,O],[ , ,P],[ , ,E],[ , ,R],[ , ,h]]
As string:
Input: "a\nz\na"
Output: "a\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nz\na"
As array-matrix:
Input: [[a],[z],[a]]
Output: [[a],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[z],[a]]
As string:
Input: "zz\nyy\nxx\nxx\ncc\ncc\nbb\nad"
Output: "zz\nyy\nxx\nxx\ncc\ncc\nbb\naR\n d"
As array-matrix:
Input: [[z,z],[y,y],[x,x],[x,x],[c,c],[c,c],[b,b],[a,d]]
Output: [[z,z],[y,y],[x,x],[x,x],[c,c],[c,c],[b,b],[a,R],[ ,d]]
As string:
Input: "a\nb\nc\nc\nx\nx\ny\nz"
Output: "a\nb\nc\nc\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nx\nx\ny\nz"
As array-matrix:
Input: [[a],[b],[c],[c],[x],[x],[y],[z]]
Output: [[a],[b],[c],[c],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[x],[x],[y],[z]]
As string:
Input: "zai\nybj\nxcq\nxcu\ncxw\ncxw\nbyr\nazw"
Output: "zai\nybj\nxcR\nxcO\ncRP\ncOE\nbPR\naEO\n Rq\n OP\n PE\n ER\n Ru\n OO\n Pw\n Ew\n Rr\n OP\n PE\n ER\n RO\n Ow\n P \n E \n x \n x \n y \n z "
As array-matrix:
Input: [[z,a,i],[y,b,j],[x,c,q],[x,c,u],[c,x,w],[c,x,w],[b,y,r],[a,z,w]]
Output: [[z,a,i],[y,b,j],[x,c,R],[x,c,O],[c,R,P],[c,O,E],[b,P,R],[a,E,O],[ ,R,q],[ ,O,P],[ ,P,E],[ ,E,R],[ ,R,u],[ ,O,O],[ ,P,w],[ ,E,w],[ ,R,r],[ ,O,P],[ ,P,E],[ ,E,R],[ ,R,O],[ ,O,w],[ ,P, ],[ ,E, ],[ ,x, ],[ ,x, ],[ ,y, ],[ ,z, ]]
As string:
Input: "asdljasdjk"
Output: "asdljasdjk"
As array-matrix:
Input: [[a,s,d,l,j,a,s,d,j,k]]
Output: [[a,s,d,l,j,a,s,d,j,k]]
As string:
Input: "asdljasdjk\nlkawdasuhq\nasjdhajksd"
Output: "asdljasdjk\nRkaOdasPhR\nOPOPEajEPO\nPEPER REP\nERERO ORE\nROROh POR\nOPOP EPq\nPEPE ROd\nERER OR \nRsRO PO \nO jP EP \nl w RE \na d Os \n P \n E \n R \n O \n u \n k "
As array-matrix:
Input: [[a,s,d,l,j,a,s,d,j,k],[l,k,a,w,d,a,s,u,h,q],[a,s,j,d,h,a,j,k,s,d]]
Output: [[a,s,d,l,j,a,s,d,j,k],[R,k,a,O,d,a,s,P,h,R],[O,P,O,P,E,a,j,E,P,O],[P,E,P,E,R, , ,R,E,P],[E,R,E,R,O, , ,O,R,E],[R,O,R,O,h, , ,P,O,R],[O,P,O,P, , , ,E,P,q],[P,E,P,E, , , ,R,O,d],[E,R,E,R, , , ,O,R, ],[R,s,R,O, , , ,P,O, ],[O, ,j,P, , , ,E,P, ],[l, , ,w, , , ,R,E, ],[a, , ,d, , , ,O,s, ],[ , , , , , , ,P, , ],[ , , , , , , ,E, , ],[ , , , , , , ,R, , ],[ , , , , , , ,O, , ],[ , , , , , , ,u, , ],[ , , , , , , ,k, , ]]
As string:
Input: "re\nop\npo\ner"
Output: "re\noR\npO\neP\n E\n R\n O\n P\n E\n R\n O\n p\n o\n P\n E\n r"
As array-matrix:
Input: [[r,e],[o,p],[p,o],[e,r]]
Output: [[r,e],[o,R],[p,O],[e,P],[ ,E],[ ,R],[ ,O],[ ,P],[ ,E],[ ,R],[ ,O],[ ,p],[ ,o],[ ,P],[ ,E],[ ,r]]
hope
lugar? La esperanza es más fuerte que la cuerda. (Este es un intento pobre de humor, no una pregunta real)tape
desafío es mucho más fácil (en mi humilde opinión). Y sí, puede generar una matriz de columna.Respuestas:
Jalea , 21 bytes
Pruébalo en línea!
Explicación
-1 byte gracias al Sr. Xcoder
-2 bytes gracias a Erik the Outgolfer
fuente
rope
each
haciendo auto-cada cosa: P05AB1E ,
383725 bytesGuardado 10 bytes con sugerencias de Magic Octopus Urn y otro byte que cambia el formato de salida.
Emite una lista de cadenas.
Pie de página bonitas impresiones.
Pruébalo en línea!
Explicación
fuente
Tape
empezamos de nuevo cada vez que debemos insertarlo,aTAdTAg
. Ahora con cuerda continuamos donde lo dejamos en la cuerda, entoncesaROdPEg
.pop a,b,c | push c[b..a]
type dealio?Python 2 ,
197194 bytesPruébalo en línea!
fuente
Ruby , 119 bytes
Pruébalo en línea!
Sí, esto es mucho más difícil que el desafío "TAPE". Traté de desarrollar mi solución para esa tarea, pero esto tiene algunos giros adicionales.
Toma la entrada como una matriz de caracteres en columnas, devuelve una matriz de cadenas, también en formato de columnas. El código en el pie de página del enlace TIO realiza el procesamiento previo y posterior de los datos de E / S para que podamos proporcionar una cadena más manejable y luego imprimir el resultado muy bien.
Explicación
El código hace dos pases a través de la matriz de entrada.
En la primera pasada, aplicamos la
reduce
operación que llena el espacio entre los caracteres con la cantidad requerida de CUERDA (y.ord-x[-1].ord-1
caracteres, si es positivo). También debemos realizar un seguimiento de la longitud de la cuerda utilizada (l
).A diferencia del caso TAPE, no podemos simplemente usarlo
rjust
para llenar, ya que siempre comenzaría con el carácter R. En cambio, tomar una porción adecuada de una larga cadena "ROPEROPE ..." parece más ligera en el recuento de bytes, especialmente porque también necesitamos actualizarl
sobre la marcha.En la segunda pasada, justificamos a la izquierda las cadenas resultantes con espacios para que coincidan con la longitud de la más larga. Como necesitamos los resultados completos de la iteración anterior aquí, el primer paso modifica la matriz en su lugar (por lo tanto
map!
, nomap
).fuente
-1 bytes gracias a Kevin Cruijssen
-70 bytes gracias a Jonathan Frech , wow .......
Python 3 , 203 bytes
Pruébalo en línea!
fuente
ord(t)-ord(p)-1
puede serord(t)+~ord(p)
guardar un byte nuevamente. ;) Aquí está el consejo relevante.+=[o]
->+=o,
.p!=' '
también es equivalente ap>' '
.Python 3 , 182 bytes
Pruébalo en línea!
La función toma su entrada como una lista (o iterable) de cadenas y también devuelve un generador para una secuencia de cadenas, que es casi tan buena como una lista.
Sin golf
... para una mejor legibilidad de los generadores anidados.
Explicación
La función utiliza
zip
para transponer la lista entrante de líneas en un generador de columnas.El generador más interno mira pares de caracteres adyacentes y ...
… Corta la cantidad requerida de CUERDA continua de un
cycle
generador (infinito) .Después de copiosas cantidades de cadenas que se unen desde los generadores, la función vuelve a transponer la lista de columnas a un generador o líneas y llena las entradas que faltan
zip_longest
.fuente
Stax , 25 bytes
¡Ejecute y depure en línea!
La entrada y la salida se dan como listas separadas por espacios. La entrada es la lista de filas según sea necesario, la salida es la lista de columnas según lo permitido.
Explicación
Utiliza la versión desempaquetada para explicar.
fuente