Reto:
Dada una lista de cadenas de líneas múltiples, superpongalas (en la esquina superior izquierda) y muestre el resultado.
Ejemplo:
Entrada: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Salida:
cbaa
bbaa
bbaa
aaaa
Reglas de desafío:
- El formato de entrada es flexible. Se le permite obtener la entrada como una lista 2D de líneas (es decir
[["aaaa","aaaa","aaaa","aaaa"],["bb","bb","bb"],["c"]]
) o una lista 3D de caracteres (es decir[[["a","a","a","a"],["a","a","a","a"],["a","a","a","a"],["a","a","a","a"]],[["b","b"],["b","b"],["b","b"]],[["c"]]]
). Se le permite tomar todas las entradas una por una a través de STDIN. Etc. - El formato de salida es estricto. Puede elegir imprimir o devolver la cadena de varias líneas. (Si su idioma no tiene cadenas, la salida como una lista 2D de caracteres está permitida como alternativa. Pero solo si su idioma no tiene cadenas).
- El orden de la lista de entrada es, por supuesto, importante (pero se le permite tomar la entrada a la inversa si así lo desea).
- Las entradas solo contendrán ASCII imprimible en el rango unicode (
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
). - Las entradas solo serán rectángulos (por lo que no hay formas extrañas). Sin embargo, la salida no son rectángulos necesarios.
- Se permiten espacios finales y una nueva línea final. Espacios iniciales y / o líneas nuevas no.
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 código de golf lo desalienten de publicar respuestas con idiomas que no sean de 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 con las reglas de E / S predeterminadas , por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba:
Entrada: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Salida:
cbaa
bbaa
bbaa
aaaa
Entrada: ["12345\n54321","00\n00\n00\n00","001\n011\n012"]
Salida:
00145
01121
012
00
Entrada: ["sm\noo\nmr\nee\nt!\nh_\ni_\nn_\ng_","!@#$%^\n&*()_+\nqwerty\nuiopas","this\nis_a\ntest"]
Salida:
this%^
is_a_+
testty
uiopas
t!
h_
i_
n_
g_
Respuestas:
Jalea , 3 bytes
Pruébalo en línea!
No había usado a Jelly en mucho tiempo, pero pensé que el desafío en los comentarios era superable. Utiliza directamente y lógicamente (
a
) para realizar la operación de apilamiento entre cada elemento de la entrada (/
).Y
se utiliza para imprimir en el formato requerido.fuente
ḷ""/Y
con una lista de entrada invertida. Ni siquiera sabía sobrea
..JavaScript (Node.js) , 24 bytes
Guardado 2 bytes gracias a @Grimy
Se supone que la cadena devuelta se imprime en un terminal que admite códigos de escape ANSI . Contiene el carácter no imprimible ESC, que se escapa (sin juego de palabras) como se
\x1B
muestra a continuación.Esto no funciona en TIO, pero puedes probarlo en línea.para ver la salida sin formato en su lugar.
¿Cómo?
Las secuencias CSI utilizadas son:
ED (Borrar en pantalla):
ESC[2J
donde2 significa "borrar toda la pantalla"
CUP (Posición del cursor):
ESC[H
que significa "se mueve el cursor a la filan , columna m " donde ambos n y m se han omitido e implícitamente establecen en 1 (esquina superior izquierda de la pantalla).
Salida de ejemplo
fuente
;
. Además, creo que esto debería ser "JavaScript + terminal" o algo similar que no compita con JavaScript puro.if the last parameter sub-string(s) is empty, the separator preceding it may be omitted
. Como solo hay dos subcadenas, el separador que precede a la última subcadena es el único y se puede omitir.\x1B[H
+ necesario? ¿No está comenzando en la esquina superior izquierda de forma predeterminada, y solo necesita restablecerlo después de cada entrada (que es lo que hace la combinación)? ¿O inicialmente comienza en otro lugar de manera predeterminada, y debe dejarlo explícitamente en esa posición del cursor para que se restablezca con éxito a esa posición en la unión?f=a=>print(`\x1B[H`+a.join`\x1B[H`)
conf(input_here)
produciría la misma salida queprint(f(input_here))
? Así que no veo por qué no se le permitiría omitirprint
y simplemente devolver una cadena.R ,
120,111110107 bytesPruébalo en línea!
Una función que acepta una lista de matriz de caracteres (se acepta la entrada 3D).
(Como puede observar en el recuento de bytes, esto no es muy fácil de hacer en R ...)
fuente
array
lugar dematrix
!ncol
(puede transponer para obtenernrow
).Python 2 , 88 bytes
Pruébalo en línea!
Explicación (con ejemplo):
Toma una lista 2D como entrada.
Primero se comprime la lista de entrada, para obtener las filas de cada rectángulo de entrada (
map(None,l)
es el mismo zip más largo):Cada una de estas filas se filtra a
None
los correos electrónicos eliminados y se comprime de nuevo:Que es una lista de caracteres para cada posición del resultado deseado. Estas listas se vuelven a filtrar y se toma la última:
Por último, las listas resultantes se unen e imprimen:
fuente
R,
10797 bytesNo parece funcionar en TIO, lo que podría estar relacionado con el uso del
\r
carácter de retorno de carro. Funciona en mi instalación local de R.Toma la entrada como una lista que contiene un vector de filas:
Recorre las filas de cada rectángulo, imprime un retorno de carro después de cada uno y reinicia la línea.
Si estiramos un poco las reglas, podemos eliminar la verificación de la longitud de la entrada y simplemente hacer un bucle infinito, imprimiendo una gran cantidad de nuevas líneas:
R, 85 bytes
fuente
\r
, y bienvenido de nuevo! Solo una nota, creo que esto funciona solo en sesiones interactivas de R (cuandointeractive()
devuelve verdadero)rscript
desde la línea de comandos. Sospecho que es una cosa de Windows / Linux, ya que Windows usa\r\n
para líneas nuevas y Linux\n
.APL (Dyalog Unicode) , SBCS de 22 bytes
Función de prefijo tácito anónimo que toma la lista de matrices de caracteres 2D como argumento. Huellas dactilares.
Pruébalo en línea!
Esto funciona creando un lienzo, luego anexándolo a la lista de bloques y reduciendo (plegando) con una función que coloca los bloques en la esquina.
↑
Mezcle el bloque 2D para crear un bloque 3D ortogonal, rellenándolos con espacios según sea necesario1⌷
toma la primera capa⊂
adjunte eso y∘
luego⌽,
anteponga la lista de bloques invertida(
...)
aplique la siguiente función tácita:{
…}/
Reduzca utilizando la siguiente lambda anónima:⊢⍵
con el argumento correcto como lienzo ...⍺@(
…)
Enmendar con los elementos del argumento izquierdo, colocados en los siguientes índices:⍴⍺
la forma del argumento izquierdo⍳
el ɩ nices de una matriz de esa forma⊃
revelar (porque la reducción incluida para reducir el rango)fuente
Haskell, 66 bytes
Entrada se toma como una lista de lista de cadenas en el orden inverso, por ejemplo, para el primer caso de prueba:
[["c"],["bb","bb","bb"],["aaaa","aaaa","aaaa","aaaa"]]
.Pruébalo en línea!
fuente
05AB1E , 12 bytes
Puerto de la solución de Python de TFeld
2 bytes guardados gracias a Grimy
Pruébalo en línea!
Explicación
Versión alternativa de 14 bytes
Pruébalo en línea!
Explicación
fuente
--no-lazy
es la solución para seguir usando un mapa / filtro con impresión para lo implícitoy
, para guardar un byte en comparación convy...,
:) Sabía que funcionaba en la versión heredada, pero en la nueva versión también generaría el[...]
. No sabía que se debía a la falta de--no-lazy
. ;) En cuanto a la respuesta en sí, muy agradable! Sabía que era necesaria una reducción acumulativa, pero no pude resolverlo cuando lo intenté yo mismo. Lo haces parecer tan fácil ...õζεõK
puede serζεðK
,õζõδK
puede serζðδK
.Lienzo , 5 bytes.
Pruébalo aquí!
Si la superposición de
/
+\
→X
,-
+|
→+
, etc. estaría bien, funcionarían 2 bytes .fuente
Python 2 , 77 bytes
Pruébalo en línea!
fuente
PowerShell 6 , solo consola, 20 bytes
basado en la respuesta de Arnauld . Esto funciona solo con la consola y no funciona en TIO.
Pruébalo en línea!
PowerShell , 103 bytes
Pruébalo en línea!
Desenrollado:
fuente
C # (.NET Core) , 68 + 23 = 91 bytes
23 bytes son para la importación,
using C=System.Console;
No funciona en TIO, ya que no es una consola.
Pruébalo en línea!
fuente
Rubí , 67 bytes
La entrada es una lista de líneas. Crea una lista de líneas y sobrescribe a medida que avanza por las entradas, luego las une con una nueva línea (representada por la variable
$/
) al final para que coincida con la salida estricta.Pruébalo en línea!
fuente
C (GCC, MinGW) 138 bytes
Asume que CR coloca el cursor al comienzo de la línea actual.
Probado con:
fuente
Octava ,
7167 bytesFunción que toma una matriz de celdas verticales de matrices de caracteres y devuelve una matriz de caracteres.
Pruébalo en línea! O verificar todos los casos de prueba .
fuente
Javascript (navegador) ,
216208204 bytesMi intento de esto. No estoy contento con el tamaño, y ciertamente debe haber más para mejorar, pero no tengo tanta experiencia en el golf.
De todos modos, lo que hace primero es dividir todas las cadenas, luego revertir todas las cadenas, luego, mientras realiza un bucle en una plataforma de operación reducida todas las cadenas juntas. Luego invierta todas las cadenas nuevamente y luego únalas nuevamente con nuevas líneas.
Un agradecimiento especial a Kevin Cruijssen por recordarme que la última parte de un bucle for ocurre al final y un total de bytes de ahorro de 8 bytes.
fuente
('')
pueden ser dos `para guardar cuatro bytes :)for(i=0;i<b.length;i++){j=a[i];if(!j)j=b[i];a[i]=b[i].padStart(j.length,j)}
confor(i=0;i<b.length;a[i]=b[i++].padStart(j.length,j))if(!(j=a[i]))j=b[i];
.j
primero se asigna con(j=a[i])
, entonces la sentencia if se realiza conif(!...)j=b[i];
(donde...
es el(j=a[i])
, por lo que el valor actualizado dej
) y, a continuación, el;a[i]=b[i++].padStart(j.length,j))
se hace al final de la iteración de bucle .. No está seguro de dónde está el problema, y ¿parece funcionar?C (gcc) ,
5147 bytesPruébalo en línea!
-4 bytes gracias a ceilingcat.
Utiliza las secuencias CSI para guardar / restaurar la posición del cursor. Simplemente itera sobre el conjunto de cadenas pasado (en el mismo formato que
argv
) e imprime<save position>string<restore position>
para cada uno.Esto deja el cursor en la esquina superior izquierda, por lo tanto, cuando se ejecuta en la terminal, es importante dejar suficientes líneas nuevas después para que el indicador no bloquee la entrada.
fuente
Japt
-P
, 7 bytesToma la entrada como una matriz de cadenas de varias líneas, genera una sola cadena de varias líneas.
Intentalo
fuente
Consulta T-SQL,
297295 bytesUsando ¶ como separador y una variable de tabla como entrada.
Pruébalo en línea
fuente
Javascript (navegador),
129124bytesMi primer intento de golf de código. Leí los enlaces que figuran en las reglas (lagunas, reglas estándar ...), ¡así que espero haber hecho algo mal!
Mantuve las entradas como están en la primera publicación (forma de matriz plana).
Gracias a Kevin Cruijssen por guardar 5 bytes.
Pruebas:
Mostrar fragmento de código
fuente
for(a of o){for(l in a){b=a[l],r[l]=(r[l])?b+r[l].slice(b.length):b}}
pueden serfor(a of o)for(l in a)b=a[l],r[l]=r[l]?b+r[l].slice(b.length):b;
:)=(r[l])?
cual se puede eliminar para=r[l]?
:)r
. Sin él, se devolvería el resultado de la asignación.Pyth , 18 bytes
Pruébalo en línea! (nota: el código mismo evalúa solo un bloque, el modo de suite de prueba del intérprete ejecuta el programa una vez para cada línea de entrada)
Basado en la solución Python 2 de TFeld .
Explicación:
Para obtener una explicación de por qué funciona el algoritmo, consulte la respuesta de TFeld.
fuente
Carbón , 4 bytes
Pruébelo en línea (detallado) o pruébelo en línea (puro) .
Explicación:
Pase por la lista de entrada de cadenas de varias líneas:
E imprima la cadena de varias líneas sin mover el cursor:
fuente