El reto
Su tarea es crear un programa que tome cualquier entrada de cadena dada y la envíe en formato cuadrado. Las cadenas vacías deberían devolver una cadena vacía.
Ejemplos
Dada la entrada:
golf
Su programa debería generar:
golf
o l
l o
flog
Entrada:
123
Salida:
123
2 2
321
Entrada:
a
Salida:
a
Entrada:
Hello, world!
Salida (observe el espacio entre, y w - la brecha no es solo una nueva línea):
Hello, world!
e d
l l
l r
o o
, w
w ,
o o
r l
l l
d e
!dlrow ,olleH
Tanteo
Este es el código de golf , por lo que gana la respuesta más corta en cada idioma.
code-golf
string
code-golf
number
sequence
combinatorics
code-golf
tips
javascript
code-golf
kolmogorov-complexity
fibonacci
restricted-time
code-golf
ascii-art
code-golf
string
text-processing
code-golf
sequence
set-partitions
code-golf
kolmogorov-complexity
natural-language
code-golf
string
code-golf
math
code-challenge
restricted-source
code-golf
code-golf
number
base-conversion
cops-and-robbers
encryption
code-challenge
quine
optimized-output
king-of-the-hill
python
SpookyGengar
fuente
fuente
Respuestas:
Carbón ,
75 bytesPruébalo en línea! El enlace es a la versión detallada del código. Editar: Guardado 2 bytes gracias a @CarlosAlejo. Explicación:
(Múltiples direcciones al comando Reflect se ejecutan consecutivamente en lugar de simultáneamente).
fuente
θ‖B↙↘
. Pruébalo en línea!ReflectOverlap
lugar deReflectButterfly
evitar voltear caracteres. :-)MATL ,
201611 bytesPruébalo en MATL en línea!
EDITAR: el código funciona en la versión 20.2.1, que es anterior al desafío. El enlace usa esa versión. (En 20.2.2 el código sería más corto, pero es posterior al desafío).
Explicación
fuente
Jalea ,
29 2217 bytesCarbón de leña
seráderrotar a + d esta partitura ...Un enlace monádico que toma y devuelve una lista de personajes; o un programa completo imprimiendo el resultado.
Pruébalo en línea!
¿Cómo?
fuente
'Hello'
"Spooky's""123"
, etc. (Python se usa para interpretar la entrada).C, 109 bytes
Pruébalo en línea!
Trucos notables:
En lugar de perder bytes
strlen
, simplemente tomamos la longitud de la cadena mientras imprimimos simultáneamente la primera línea:Esto funciona porque
printf
devuelve el número de bytes escritos.Para las líneas intermedias, necesitamos recorrer la cadena pero excluir tanto el primer como el último carácter. Esto se logra con la condición
(que es más corto que
(++s)[1]
), que omite el primer carácter debido a que++
está en la condición y omite el último deteniéndose cuando el personaje pasa el carácter actual'\0'
(en lugar de detenerse en'\0'
).En el cuerpo del primer bucle,
imprimimos el carácter actual, luego el carácter "reflejado" apropiado (haciendo un seguimiento
j
, que entra en los negativos, lo que resulta en una situación extraña de indexación en una cadena con un número negativo) acolchado a una longitud dei
espacios (dondei
está convenientementestrlen(s) - 1
).La impresión invertida en la última línea es bastante sencilla; El único truco es el
*s*~i--
, que es la forma más corta de obteneri+2
iteraciones del cuerpo del bucle (que no depende dei
; todo lo quei
se utiliza es contar). La*s*
parte funky se asegura de que el ciclo no se ejecute si*s
es así'\0'
, lo que sucede en la entrada de longitud 1.fuente
Octava, 40 bytes
Pruébalo en línea!
Es mi respuesta, pero publicado después de @Luis MATL answer
fuente
Haskell ,
8478 bytesPruébalo en línea! Uso:
f "test"
. Devuelve una lista de líneas.Editar: -6 bytes gracias a dianne!
fuente
reverse
;r=reverse;f s@(_:x)|_:y<-r x=s:[a:(y>>" ")++[b]|(a,b)<-zip x y]++[r s];f s=[s]
es de 78 bytes.Python 2 ,
89818886 bytesPruébalo en línea!
fuente
R , 113 bytes
Pruébalo en línea!
fuente
05AB1E ,
17161519 bytesPruébalo en línea!
Explicación
Ejemplo con
input = golf
La solución para la entrada de 1 letra era bastante costosa.
Siento que un enfoque diferente podría ser mejor ahora.
fuente
Python 2 ,
9988 bytes-4 bytes gracias a musicman523.
Pruébalo en línea!
Devuelve una lista de cadenas.
fuente
s
y entrandos[::-1]
en eljoin
Mathematica, 128 bytes
fuente
C, 96 bytes
Versión de bonificación (122 bytes):
fuente
Swift 3 ,
215199 bytesPruébalo en línea
fuente
Python 3, 88 bytes
fuente
l+1 and
podría reescribirsel+1and
para guardar un byte.0or
, donde python no se analiza porque0o
es un prefijo octal.JavaScript (ES8),
108112 bytesMenos golfo
Gracias a Justin Mariner por guardar muchos bytes, que luego se agotaron agregando la comprobación de caracteres cero o individual necesaria para cumplir con el desafío. Tu consigues eso :-(
fuente
`+s[i+1].padEnd(s.length-1)+v,s)+`
y usandor.join``
.String.prototype.padStart
y etiquetados literales de plantilla. Lo necesitaba para mantener la ayuda además de la verificación de longitud al mínimo :-)(n=s.length-1)?(r=<...>+r.join``:s
y usandopadEnd(n)
. Si la longitud es1
,length-1
es0
(falso).padEnd
es ES2017.PHP , 118 bytes
Pruébalo en línea!
fuente
APL , 58 bytes
Con
⎕IO←0
.Pruébalo en línea!
¿Cómo?
c←≢⍵
- longitud de la cuerdar←⍳
- distanciao←∘.⌈⍨
- producto exterior con mínimoo⌊⌽⊖
- minimizar con sí mismo cumplió 180 o×
- multiplicar conx←∘....⍨r
- producto exterior de la gama con((c-1)=⍺⌈⍵)∨0=⍺⌊⍵
- el marco de la matrizx+
- agregar el marco(' ',⍵)[...]
- obtener por índice de la cadena concatenada al espaciofuente
⍉⊖⍉⊖
ser⌽⊖
?JavaScript (ES2017), 87 bytes
Versión ES6: 93 bytes
Menos golf
fuente
padEnd
es ES2017.l+~i
, esto evita tener que restar 1 dos veces en lugar de restar 2 una vez.l-~-i
s=>[...s].reverse(l=s.length).map((c,i,z)=>i?l+~i?s[i]+' '.repeat(l-2)+c:z.join``:s).join`\n`
peros=>[...s].reverse(l=s.length-2).map((c,i,z)=>i?i+~l?s[i]+' '.repeat(l)+c:z.join``:s).join`\n`
también funciona.Java, 191 bytes
fuente
(s)
puede ser justos
. A los bucles con líneas individuales en el interior se les pueden quitar las llaves. Puede regresar en lugar de imprimir si eso le ahorrará bytes. Usasint i
en ambos bucles, no puedo decir si están en diferentes ámbitos, pero vale la pena señalar. Inicializar variables similares juntas generalmente ahorra bytes.for(int i=0;i<l;i++){o.print(s.charAt(l-1-i));}
->for(int i=0;i<l;){o.print(s.charAt(l-1-i++));}
. No necesitas el punto y coma final.C # (.NET Core) ,
179161bytes-18 bytes gracias a TheLethalCoder
Pruébalo en línea!
No estoy seguro de las reglas, si esto es necesario para contar los bytes o no:Alguien por favor corrígeme sobre esto.Sin golf:
fuente
using
en su recuento de bytes. Como está utilizando LinqToCharArray()
puede ser justoToArray()
, ¿realmente lo necesita antesReverse()
? A medida que lo useString
, debe calificarlo completamente o incluirlo, sin embargo, esto también se puede solucionar fácilmente cambiándolostring
. Elif
podría ser más corto como un ternarios+=l>1?if code:"";
. Puede eliminar eli++
del bucle y publicar incrementarlo end[i++]
.i
con mel
gustaint l=s.Length-1,i=1;
. ¡Y creo que podría ser eso!Retina , 106 bytes
Pruébalo en línea! Explicación:
Si hay al menos dos caracteres, duplique la entrada.
Invierta el duplicado.
Convierte las cuerdas en triángulos. El triángulo superior comienza con la entrada y elimina el primer carácter cada vez, mientras que el triángulo inferior comienza con la primera letra de la entrada invertida y agrega un carácter cada vez.
Une los triángulos juntos, superpuestos para que el último personaje forme la
/
diagonal.Cambia todos los personajes a espacios, si están al menos a un personaje del final en cada lado.
Elimine las líneas en blanco sobrantes.
fuente
Python 3, 85 bytes
Usando la entrada para la fila superior :)
fuente
Lua , 104 bytes
Pruébalo en línea!
fuente
p
una vez ...Python 3, 106 bytes
Una versión funcional ...
fuente
Python 2 , 100 bytes
Pruébalo en línea!
fuente
Mathematica,
13891 bytesPuede probarlo en línea pegando lo siguiente en Wolfram Cloud Sandbox y haciendo clic en "evaluar celda" o presionando Shift + Enter o Numpad Enter:
fuente