Digamos que tengo un texto como este (cada palabra en una línea, sin espacios)
Programming
Puzzles
&
Code
Golf
¡Eso no tiene sentido! Desafía totalmente las leyes de la física.
Su desafío es remediar esta situación imposible y colapsar el texto así:
P
Prog
&uzz
Coderam
Golflesming
Para que no haya espacio vacío debajo de ningún carácter, pero los caracteres conservan su orden vertical.
El objetivo es satisfacer los requisitos pero utilizar la menor cantidad de bytes de código fuente posible.
Respuestas:
Pyth, 10 bytes
Pruébelo en línea en Pyth Compiler / Executor .
Idea
Podemos lograr el resultado deseado aplicando cuatro transformaciones simples:
Invierta el orden de las líneas:
Transponer filas y columnas:
Esta parte superior justifica, contrayendo las columnas originales.
Transponer filas y columnas:
Invierta el orden de las líneas:
Código
fuente
Haskell, 62 bytes
Soy muy maduro
fuente
Python 2, 104 bytes
Un algoritmo iterativo de un paso. Pasamos por cada línea en orden, actualizando la lista
l
de líneas a la salida. La nueva palabra efectivamente empuja desde la parte inferior, desplazando todas las letras por encima de un espacio. Por ejemplo, en el caso de pruebadespués de haber terminado
Code
, tenemosy luego agregando
Golf
resultados enque podemos ver como la combinación de dos piezas
donde se desplazó la primera pieza
golf
. Realizamos este desplazamiento con unazip
de la lista de salida con el elemento al final (lado izquierdo) y la precedencia de la lista de salida con una línea en blanco (lado derecho), cortando cada parte a la longitud del nuevo elemento.Puede parecer más natural iterar hacia atrás, dejando caer nuevas letras desde la parte superior, pero mi intento fue más largo.
A modo de comparación, aquí hay un enfoque
zip
/filter
, conmap(None,*x)
utilizado paraiziplongest
(109 bytes):fuente
CJam, 11 bytes
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
La idea en la misma que en mi respuesta Pyth .
fuente
JavaScript (ES6), 146
(Las 2 nuevas líneas dentro de las cadenas de plantilla son significativas y cuentan)
La idea de @Dennis implementada en JavaScript. La larga función S realiza la transposición línea por línea y char por char, dejando el resultado en la
t
matriz.Menos golf dentro del fragmento (prueba en Firefox)
fuente
S(t.reverse()),t.reverse().join
conS(R=t.reverse()),R.join
.R, 223 bytes
Esta es una manera absurdamente larga e ingenua de hacerlo.
Sin golf:
Puedes probarlo en línea .
fuente
Matlab / Octave, 99 bytes
Ejemplo :
Definir una cadena de entrada en una variable, por ejemplo
s
.10
es el carácter de avance de línea:Función de llamada
f
con entradas
:O pruébelo en línea (gracias a @beaker por su ayuda con el intérprete en línea de Octave)
fuente
JavaScript ES6, 119 bytes
Aquí no tiene golf y en ES5 con comentarios que explican cómo funciona:
fuente
APL (Dyalog Extended) ,
13SBCSde11 bytes-2 con mis extensiones a Dyalog APL.
Función tácita anónima, tomar y devolver una matriz de caracteres.
Pruébalo en línea!
~
eliminar∘
los' '
espacios⍤
de las1
filas (literalmente, sub-matrices 1D)⍢
mientras se⍉
transponen⍢
mientras se⊖
volteafuente
R,
190178175 BytesProbablemente todavía hay espacio para jugar al golf en esto. Probablemente un par de operaciones innecesarias allí
Desengañado y explicado
Prueba de funcionamiento. Es interesante observar que, debido a la forma en que funciona el escaneo, toda la oración se puede ingresar con espacios y aún así dar la salida como se especifica.
fuente
STATA, 323 bytes
Toma entrada en un archivo llamado ab Solo funciona para hasta 24 caracteres ahora. Se actualizará más tarde para que funcione con más. Además, no funciona en el compilador en línea. Requiere el compilador no libre.
Editar: movió silenciosamente (para suprimir la salida) al propio bucle desde cada instrucción en el bucle, ahorrando 8 bytes.
fuente
R, 171 bytes
Con nuevas líneas y sangría:
Uso:
fuente
Gelatina , 6 bytes (no competitiva)
Pruébalo en línea!
Cómo funciona
La idea en la misma que en mi respuesta Pyth .
fuente
Turtlèd , 72 bytes, sin competencia
Bastante seguro de que podría cambiar el enfoque para guardar bytes, pero más tarde.
: p Esolang que no es de golf supera las langs regulares: p
Lo extraño de Turtlèd es que se hizo originalmente después de una discusión sobre el arte ascii langs, pero en realidad parece ser el mejor en este tipo de desafíos
Turtlèd no puede tomar entradas de nueva línea, sino para entradas múltiples, y esto solo requiere una entrada: terminar cada palabra con un espacio, incluida la última.
Pruébalo en línea!
Explicación:
fuente
Perl, 133 bytes
Este fue uno de esos desafíos que cambió en mi cabeza de ser demasiado difícil, a ser fácil, a ser mucho más código de lo que esperaba ... No estoy particularmente contento con el enfoque, estoy seguro de que hay un una forma mucho mejor de reducir el
print pop@F...
bit tal vez usando-n
o simplemente regex puro, pero no puedo llegar allí en este momento ... Originalmente estaba usandosay
, pero creo que tendría que anotar eso más alto (use 5.01
) debido a$'
.Uso
Guardar como
vertically-collapse-text.pl
.fuente
SmileBASIC, 90 bytes
Aplica gravedad a todo el texto en la consola. No estoy seguro de si esto es válido o si tengo que usar una matriz de cadenas.
fuente
Ruby,
9982 bytesLlegar allí...
Un intento de explicación:
Ejecútelo así:
fuente
K, 30
.
Explicación
x@\:!|/#:'x
extiende cada cadena para crear una matriz cuadrada de caracteres.+
lo transpone{(-#x)$x@&~^x}
eliminará los espacios de una cadena y luego rellenará la cadena por su longitud originalAplique esa función a cada una de las cadenas transpuestas, luego voltee la salida para obtener el resultado
fuente
{+{(-#x)$x@&~^x}'+(|/#:'x)$x}
para el 29.pb - 310 bytes
Qué desastre. Apenas recuerdo nada de cómo funciona.
Debido a la forma en que funciona la entrada de pb (una sola línea de una vez), debe usar espacios en lugar de nuevas líneas en la entrada. Si el intérprete no era basura y podría incluir nuevas líneas en la entrada, el único cambio sería
[B=32]
al principio[B=10]
.Estoy trabajando en una actualización de pbi (el intérprete) que limpiará las imágenes si desea ver el programa en ejecución. Todavía necesita mucho trabajo, pero mientras tanto, puedes ver este programa en YouTube .
fuente
J, 17 bytes
Solución bastante agradable.
Explicación:
Caso de prueba explicado
Casos de prueba
fuente
;@;:&.(|:@|.)
para el 13Realmente , 13 bytes
Esto utiliza el algoritmo descrito en la respuesta de Dennis 'Jelly . La entrada y la salida son listas de cadenas. Desafortunadamente, la función de transposición incorporada no funciona muy bien si las listas internas o las cadenas no tienen la misma longitud, lo que podría derrotar el punto de colapso vertical en primer lugar. Sugerencias de golf bienvenidas. Pruébalo en línea!
No golfista
fuente
Raqueta 312 bytes
Sin golf:
Pruebas:
Salida:
fuente
JavaScript (ES6), 103 bytes
Dividido en CR, el mapa externo asegura que hagamos bucles suficientes veces para permitir que la "gravedad" deje caer las letras tanto como sea necesario.
El mapa interno primero verifica si hay una línea siguiente, si es así, y es más corta, suelte el desbordamiento a la línea siguiente. es decir, si la primera línea tiene "ABCD" y la segunda línea tiene "FG", suelte el "CD" de la primera línea a la segunda para que la primera línea se convierta en "AB" y la segunda se convierta en "FGCD".
A medida que hacemos esto tantas veces como haya líneas, las letras caen tanto como deberían, dejándonos con el resultado deseado.
fuente
Japt , 8 bytes
Pruébalo en línea!
Cómo funciona
También hay
z
que gira la cadena 2D en un múltiplo de 90 grados, pero de alguna manera trunca la cadena cuandoheight > length
.fuente
05AB1E ,
109 bytesPruébalo en línea.
o con inicio alternativo:
Pruébalo en línea.
Enfoque similar a @ Dennis ♦ 'Respuesta de Pyth .
-1 byte gracias a @Emigna reemplazando
ðõ:
porðм
.Explicación:
Explicación alternativa:
fuente
R,
s8152 bytesMe tomé un poco de libertad para interpretar la pregunta y supuse que el texto está representado en una matriz con un carácter por celda, por lo tanto:
Entonces x se convierte en:
Ahora uso
order
y[
para ordenar las columnas de modo que las NA sean primero y luego todos los demás valores:Se hace más largo si se requiere que la salida sea palabras:
fuente
function(x)
que deben incluirse en el recuento de bytes.R,
196189170 bytesUna versión legible para humanos:
Cómo funciona:
(O, en otras palabras, las partes "superfluas" se caen hasta que todo lo que puede caer se ha caído).
Entrada: un vector de caracteres.
fuente
Julia 0.6 , 141 bytes
Pruébalo en línea!
La transmisión con
g.([w], [d d])
me permite deshacerme de cualquier declaración de mapa y me ahorra alrededor de 7 bytes.fuente