Dada una cuadrícula de texto rectangular, alinee las diagonales que van desde la esquina superior izquierda a la inferior derecha en columnas de modo que los caracteres más bajos y más a la derecha de todas las diagonales estén en un nivel. Use espacios para sangrar.
Por ejemplo, si la cuadrícula de entrada de texto es
abcd
1234
WXYZ
entonces lo que se alinean las diagonales W
, 1X
, a2Y
, b3z
, c4
, y d
en las columnas que dan este resultado:
ab
123c
WXYZ4d
Tenga en cuenta que los caracteres más bajos más a la derecha de todas las diagonales WXYZ4d
, están en el mismo nivel.
Detalles
La cuadrícula de entrada de texto tendrá un tamaño mínimo de 1 × 1 y todas las líneas tendrán la misma longitud.
Puede tomar la cuadrícula de entrada como una cadena de varias líneas o como una lista de cadenas de una sola línea.
La cuadrícula de entrada solo contendrá caracteres ASCII imprimibles (incluye espacio).
La salida puede tener opcionalmente una nueva línea final, pero no debe haber otras líneas vacías.
Las líneas de la salida pueden tener opcionalmente espacios finales pero no deben tener espacios iniciales innecesarios.
Otros ejemplos
Las líneas vacías separan ejemplos. Cada entrada es seguida directamente por su salida.
123
456
789
1
452
78963
123.?!
456??!
789!!!
123.
456???
789!!!!!
**@
@
**
@ @
/\/\
\/ /
/ /\
\/\/
/
\/\
/ / /
\/\/\/\
12
34
56
78
90
7531
908642
Code
Code
G
O
L
F
FLOG
~
~
Puntuación
El código más corto en bytes gana.
Respuestas:
J , 12 bytes
Define un verbo anónimo. Pruébalo en línea!
Explicación
En J,
u &. v
(léase:u
debajov
) significa "v, luego u, luego inverso de v". La inversión y la transposición son auto-inversas, por lo que el programa realmente significa "revertir, transponer, extraer anti-diagonales invertidas, transponer, revertir".Con entrada de ejemplo:
Marcha atrás:
Transponer:
Extraer antiagoniales invertidos (y almohadilla con espacios):
Transponer:
Marcha atrás:
fuente
Gelatina , 11 o 10 bytes
Pruébalo en línea!
Un algoritmo bastante diferente de mi otra solución; este usa un incorporado para llegar a las diagonales, en lugar de hacer las cosas manualmente.
Explicación:
Las diagonales salen posiblemente en la peor orientación posible (que requieren transposiciones, reversiones y rotaciones repetidas), y en el orden incorrecto (Jelly genera primero la diagonal principal, por lo que debemos mover algunas diagonales desde el final hasta el comienzo para obtenerlas en orden). Sin embargo, esto todavía sale más corto que mi otra solución Jelly.
fuente
CJam , 29 bytes
Pruébalo en línea!
Explicación
En lugar de extraer las diagonales, quitamos las capas del extremo, alternando izquierda y derecha. Considere la siguiente entrada:
Si escribimos las diagonales como lo requiere el desafío, obtenemos:
Tenga en cuenta que esto es simplemente (de abajo hacia arriba), la fila más inferior, concatenada con la columna más a la derecha. Esta definición también funciona si la entrada es rectangular.
fuente
]
envolverá toda la pila! Creo que las funciones deberían funcionar independientemente del contenido de la pila debajo de la entrada, y parece estar de acuerdo ^^]
cuando lo cambié a una función.[{)\z}h]
y mantener una función, para 27 bytes.JavaScript,
116101bytesSolo quería usar esta
/.$|\n?(?!.*\n)..+/gm
idea de patrón de expresiones regulares . ( https://regex101.com/r/mjMz9i/2 )El sabor de JavaScript regex es decepcionante, tuve que usarlo
(?!.*\n)
porque no se ha\Z
implementado, y de alguna manera no pude usarlo\0
.fuente
.
lugar de hacerlo,[^]
ya que solo necesita omitir caracteres que no sean de nueva línea para encontrar una nueva línea, lo que ahorra 2 bytes.^
sea necesario en la expresión regular final, porque de todos\n
modos ya está al comienzo de la cadena, por lo que se guarda otro byte.'$&'+' '.repeat(n)
. Básicamente, esa expresión es justa$&
pero con un espacio agregado a cada llamada, que es trivial de implementar de forma recursiva: reemplacen=0
conr='$&'
yf(z,n+1)
conf(z,r+' ')
y luegor
es la cadena de reemplazo deseada. Si he contado correctamente, eso ahorra 12 bytes.Gelatina , 15 o 14 bytes
Pruébalo en línea!
Este es un algoritmo que no utiliza el Jelly incorporado para diagonales. Hacer eso podría hacerlo más corto; Bien podría intentar eso a continuación.
Así es como funciona el algoritmo. Comencemos con esta entrada:
Comenzamos con
L’⁶x;\
.L’
nos da la longitud de la entrada menos 1 (en este caso, 2). Luego⁶x
nos da una cadena de espacios de esa longitud (" "
en este caso); y;\
nos da los resultados acumulativos al concatenarlo (un triángulo de espacios). Luego invertimos el triángulo y lo concatenamos al lado izquierdo del original (;"
concatena los elementos correspondientes de las listas,µ
provoca un corte forzado en el análisis y, por lo tanto, usa la entrada original como la segunda lista por defecto), dándonos esto:Esta es casi la solución que queremos, pero necesitamos mover los elementos hacia abajo para estar alineados con la última cadena. Se trata de transponer (
Z
), invertir dentro de cada línea (U
), transponer nuevamente (Z
) e invertir las líneas (Ṛ
):transponer
invertir dentro de filas
transponer
invertir las filas
Finalmente, se
Y
une a las nuevas líneas. No me queda claro si esto se requiere o no para cumplir con la especificación (que permite la entrada como una lista de cadenas, pero no dice lo mismo sobre la salida), por lo que el recuento de bytes exacto depende de si está incluido u omitido.fuente
Pyth, 16 bytes
Big Pyth :
Como la gente dice que los idiomas de golf son difíciles de leer, he diseñado Big Pyth, que es fácil de leer y traducir a Pyth. El archivo vinculado traduce una secuencia de entrada de Big Pyth a Pyth. Cada token Big Pyth separado por espacios en blanco corresponde a un token Pyth, ya sea un personaje o
.
seguido de un personaje. Las excepciones son losimplicit
tokens, que están implícitos en el código Pyth.Quiero ver qué tan bueno es el formato explicativo Big Pyth, así que no voy a dar ninguna otra explicación. Pregúntame si quieres que te expliquen algo, sin embargo.
fuente
JavaScript (ES6), 140 bytes
Toma entrada y salida como matrices de cadenas. También acepta una entrada de matriz de caracteres bidimensional y guarda 7 bytes si se acepta una salida de matriz de caracteres bidimensional. Explicación: La altura del resultado
m
es el mínimo de la alturah
y el anchow
de la matriz original, mientras que el ancho es simplemente uno menos que la suma de la altura y el ancho de la matriz original. La fila de origen para los caracteres en la parte principal del resultado proviene directamente de la fila apropiada de la matriz original, contando hacia arriba desde la parte inferior, mientras que en la parte adicional del resultado, la fila de origen se mueve una fila hacia arriba por cada columna adicional. La columna de origen para ambas mitades del resultado resulta ser igual a la columna de destino movida una columna a la izquierda para cada fila de origen sobre la parte inferior.fuente
Octava, 57 bytes
fuente
Python 3, 247 bytes
fuente
join(i) for
.Python 2, 150 bytes
Toma la entrada como una lista de cadenas.
fuente
Clojure, 194 bytes
Implementado de la manera difícil agrupando caracteres
G
y luego generando líneas.Toma entrada como una
vec
devec
s like[[\a \b \c \d] [\1 \2 \3 \4] [\W \X \Y \Z]]
. Ejemplo:fuente