El reto
Dada una cadena, genera el texto en forma de cuadrado.
Puede suponer que el texto siempre encajará en un cuadrado y que nunca será una cadena vacía.
También puede suponer que nunca tendrá nuevas líneas.
Ejemplo
Input:
Hi, world
Output:
Hi,
wo
rld
Casos de prueba
Input:
Hi, world! Hello
Output:
Hi,
worl
d! H
ello
Input:
Lorem ipsum dolor sit amt
Output:
Lorem
ipsu
m dol
or si
t amt
Input:
H
Output:
H
Reglas
- Este es el código de golf , ¡así que la respuesta más corta en bytes gana! Tiebreaker es la respuesta más votada.
- Las lagunas estándar están prohibidas.
Respuestas:
Vim,
59, 57, 48 bytes / pulsaciones de teclasComo V es compatible con versiones anteriores, ¡puede probarlo en línea!
Recibí un voto al azar sobre esta respuesta, así que volví a revisarla. Mis habilidades de vim-golf han aumentado mucho en los últimos 7 meses, por lo que vi que esta respuesta fue muy pobre. Éste es mucho mejor.
fuente
Brainfuck ,
116112 bytesPruébalo en línea!
Seguro en sabores de BF que no enmascara las celdas
256
, no admite bytes nulos.Elimine las flechas iniciales hacia la derecha si el sabor admite memoria negativa para 4 bytes guardados.
Explicación
El programa se divide en 3 etapas:
Nivel 1
En esta etapa, colocamos todos los caracteres en la cinta, mientras contamos la cantidad de caracteres.
Esta es la cinta para la entrada
abcdefghi
después de esta cinta:El
009
es el conde.Para cada personaje, movemos el primer cero a la izquierda
[<]
y luego agregamos uno al conteo<<+>>>
, y luego nos movemos al cero más a la derecha[>]
para prepararnos para el siguiente personaje.Etapa 2
Esta etapa hace la raíz cuadrada de la longitud almacenada en la segunda celda.
Sigue restando
1, 3, 5, 7, ...
hasta que el número llega a cero, mientras se mantiene el control del número de iteraciones.Funciona porque los números cuadrados se pueden expresar como
1 + 3 + 5 + ...
.Etapa 3
Denote la raíz cuadrada de la longitud que se encuentra arriba como
n
.Esta etapa genera
n
caracteres a la vez y luego genera una nueva línea, hasta que se borra la cinta.fuente
Python 2, 55 bytes
fuente
05AB1E , 5 bytes
Pruébalo en línea!
fuente
»
están las nuevas líneas ahora.MATL , 6 bytes
Pruébalo en línea!
Explicación
fuente
Jalea,
87 bytesSalvó un byte gracias a @ Dennis .
Pruébalo en línea.
Explicación
fuente
œs
ys
haz lo mismo aquí.½
no funciona en lugar deƽ
?s
yœs
por lo tanto lanzan a int.JavaScript (ES7), 49 bytes
44 bytes solo en Firefox Nightly 43-46 (
**
se introdujo en algún momento entre Firefox Nightly 42 y 43 yg
como un parámetro separado se eliminó en algún momento entre Firefox Nightly 46 y 47):fuente
+
ins.length*+.5
*+
sintaxis antes. ¿Podría alguien por favor explicarlo?**
.J, 9 bytes
Este es un enlace monádico sobre la cadena de entrada:
El diente correcto es una serie de composiciones:
El izquierdo es un verbo de configuración, cambiado de manera que funcione en el formato de gancho.
Aquí hay algunos resultados intermedios:
En palabras:
fuente
$~,~@
asemeja a algún tipo de emoticón, pero@
parece extraño para un oído pero se&
adapta mejor, o$~,~&
$~2#%:@#
es 8. La parte izquierda de una bifurcación puede ser una constante.C, 64 bytes
Llama
f()
con la cuerda al cuadrado.Pruébalo con ideone .
fuente
int
argumentos implícitos en lugar dechar*
?int*
dado que se escalaría mal al agregar.s+=write(puts(""),s,m));
lugar des+=m)printf("%.*s\n",m,s);
Perl, 23 + 4 (
-pF
banderas) = 27 bytes-2 bytes gracias a @DomHastings
-1 bytes gracias a @DomHastings
Pruébalo en línea!
Expansiones : calcula la raíz cuadrada (llamemos
S
para la explicación) del tamaño de la entrada (siempre será un número entero) (@F
se usa en contexto escalar, devolviendo así su tamaño), luego agrega una nueva línea después de cada bloque deS
caracteres.fuente
$@
;;) Puede guardar un byte usando eny///c
lugar de la longitud y creo que también puede usar una nueva línea literal. Estaba tratando de hacer algo con la configuración$,
y la coincidencia, ¡pero creo que esto es mucho más corto!$@
! Gracias por ely///c
, tiendo a olvidar que existe.$=
lugar de$@
, lo que permite no usar la-l
bandera.-pF
zsh, 36 bytes
Toma la entrada como un argumento de línea de comando, sale a STDOUT.
fuente
05AB1E ,
86 bytesGracias a @quartata por informarme sobre la función de raíz cuadrada
Pruébalo en línea!
Explicación
fuente
«
es la abreviatura de unirse a las nuevas líneas :).«
Python,
9475716563 bytesVersión antigua:
fuente
input()
de forma predeterminada para recibir entradas entre comillas, a menos que desee eliminar específicamente esa opción.CJam , 8 bytes
Pruébalo en línea!
Explicación
fuente
Pyth, 8 bytes
Pruébalo en línea
Cómo funciona
fuente
Dyalog APL, 10 bytes
Explicación:
Pruebas:
fuente
Cheddar, 27 bytes (no competidor)
.chunk
Agregué la función hace un tiempo, pero la eliminé en la transición al nuevo formato stdlib y olvidé volver a agregarla. Cheddar tiene unsqrt
operador dedicado pero**.5
es más cortoPruébalo en línea!
Explicación
fuente
Bash + GNU utilidades, 25
No es tan diferente a la respuesta de @ Doorknob , pero
dc
es una forma más corta de obtener la raíz cuadrada.fuente
𝔼𝕊𝕄𝕚𝕟, 11 caracteres / 14 bytes
Try it here (ES6 browsers only).
Generado usando este código (ejecutado en la consola del navegador del intérprete):
fuente
Brainfuck, 83 bytes
Pruébalo en línea!
Utiliza la misma idea que la respuesta de Leaky Nun . Pidió ayuda para jugar golf en el chat, luego sugirió que agregue esto como una nueva respuesta. (En realidad, lo que escribí en el chat fue una solución de 84 bytes muy similar a esta).
En aras de la comparación, un extra
>
se necesita al principio para las implementaciones de brainfuck que no permiten direcciones de memoria negativas.Como se esperaba, esto encuentra la longitud de la entrada, luego toma la raíz cuadrada, luego imprime las líneas en consecuencia. Aprovecha que los cuadrados perfectos son sumas parciales de
1 + 3 + 5 ...
.fuente
Brain-Flak ,
11096 bytesPruébalo en línea!
Segunda solución, 96 bytes
Pruébalo en línea!
Explicación
Aquí explico la primera solución, ambas tienen la misma longitud, pero me gusta la primera porque es más fresca y emplea algunos buenos trucos.
La parte más importante del código es una función de raíz cuadrada modificada que escribí hace algún tiempo. La versión original era
Y esto funciona, pero en realidad queremos dos copias de la raíz cuadrada negativa. ¿Por qué? Necesitamos dos copias porque estamos recorriendo la cadena en dos niveles, uno para hacer las líneas y otro para contar el número de líneas. Queremos que sea negativo porque el bucle con negativos es más barato.
Para hacer esto negativo, nos movemos
[...]
para que se vea asíPara hacer dos copias, cambiamos cuando aparecen pops
Ahora que tenemos ese bit podemos juntarlo con una altura de pila para obtener el primer fragmento de código que necesitamos.
Nos movemos a la pila porque nuestra función de raíz cuadrada necesita dos ceros libres para el cálculo, y porque hace que las cosas sean un poco más baratas en el futuro en términos de cambio de pila.
Ahora construimos el bucle principal
Esto es bastante sencillo, hacemos un bucle n veces cada vez que movemos n elementos y lo limitamos con una nueva línea (ASCII 10).
Una vez que se realiza el bucle, necesitamos invertir el orden de nuestra salida, por lo que simplemente añadimos una construcción inversa estándar.
fuente
PHP, 51 bytes
fuente
Perl 6 , 38 bytes
Explicación:
fuente
Cheddar, 57 bytes
Como las variables están rotas, tendría que pasar variables a través de la aplicación lambda.
Además, resulta que incluso si las variables funcionaran, aún sería más corto usar la aplicación lambda.
Uso
fuente
Pyke, 5 bytes
Pruébalo aquí!
fuente
Java 1.7, 110 bytes
¡Intentalo! (Ideona)
Intenté otro enfoque con una función que devuelve el resultado como una cadena, pero solo tener que declarar la cadena y la declaración de devolución ya es más costosa (byte-count-wise) que la declaración de impresión.
Tengo que amar la verbosidad de Java ... :)
fuente
i=0
,i<k
ys.substring(i*k,i++*k+k)
en lugar dei=-1
,++i<k
,s.substring(i*k,i*k+k)
. Además, generalmente usamos solo enJava 7
lugar deJava 1.7
, pero es bueno que lo hayas agregado, mucha gente se olvida de hacerlo.R ,
5954 bytesPruébalo en línea!
Imprime con una nueva línea final. Sorprendentemente corto, considerando lo mal que R maneja las cuerdas.
fuente
PowerShell, 56
5861bytesfuente
Ruby
-p
,403330 bytes-7 bytes de @Jordan.
Pruébalo en línea!
fuente
Convexo , 7 bytes
Pruébalo en línea!
Hecho de la diversión:
_,mQ/\*
También funciona en TIO debido a cómo funciona.¿Cómo he olvidado hacer una operación de raíz cuadrada de 1 carácter?
fuente