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 ropeverticalmente 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/ ropecomo 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 ropeesta 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 
byden la columna 1 debe serc(longitud 1), por lo que llenamos esto conR; - Entre 
eygen la columna 1 debe serf(longitud 1), por lo que llenamos esto conO; - Entre 
fyken la columna 2 debe serghij(longitud 4), por lo que llenamos esto conPERO; - Entre 
kymen la columna 2 debe serl(longitud 1), por lo que llenamos esto conP; - Entre 
dycen la columna 3 debe serefghijklmnopqrstuvw(longitud 19), por lo que llenamos esto conEROPEROPEROPEROPERO; - Entre 
xyzen la columna 3 debe sery(longitud 1), por lo que llenamos esto conP; - Entre 
ayhen 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 
ROPEuna 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 
ROPEsea 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]]
                
hopelugar? La esperanza es más fuerte que la cuerda. (Este es un intento pobre de humor, no una pregunta real)tapedesafí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
ropeeachhaciendo 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
Tapeempezamos 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
reduceoperación que llena el espacio entre los caracteres con la cantidad requerida de CUERDA (y.ord-x[-1].ord-1caracteres, 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
rjustpara 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 actualizarlsobre 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)-1puede 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
zippara 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
cyclegenerador (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