Fondo
Celebrando el lanzamiento de Dyalog APL 16.0 , donde la solución a este problema es la {⊢⌺(≢⍵)⊢⍵}
explicación
Tarea
Dada una cadena ASCII imprimible de longitud impar n , haga un cuadrado n × n con la cadena centrada horizontalmente, duplicada para centrarse verticalmente, y con acrósticos de la misma cadena en cada fila y columna. Tenga en cuenta que todas las cadenas excepto las centradas se cortarán para mantener el tamaño del cuadrado n × n .
La explicación de su código será muy apreciada.
Reglas
- Puede tener espacios en blanco al final y nuevas líneas (esto incluye el triángulo inferior derecho)
- Puede devolver una lista de cadenas.
Ejemplo usando la cadena ABXCD
:
n es 5. Primero dibujamos las dos cadenas centradas, una horizontal y otra vertical:
┌─────┐ │ A │ │ B │ │ABXCD│ │ C │ │ D │ └─────┘
(Se agregó un cuadro delimitador 5 × 5 para mayor claridad)
Luego colocamos todos los acrósticos posibles, horizontal y verticalmente:
UNA AB ┌─────┐ │ ABX│CD │ ABXC│D │ABXCD│ A│BXCD │ AB│XCD │ └─────┘ discos compactos re
Finalmente, devolvemos solo lo que está dentro del cuadro delimitador:
ABX ABXC ABXCD BXCD XCD
Casos de prueba
World
:
Wor
Worl
World
orld
rld
mississippi
:
missis
mississ
mississi
mississip
mississipp
mississippi
ississippi
ssissippi
sissippi
issippi
ssippi
Pneumonoultramicroscopicsilicovolcanoconiosis
:
Pneumonoultramicroscopi
Pneumonoultramicroscopic
Pneumonoultramicroscopics
Pneumonoultramicroscopicsi
Pneumonoultramicroscopicsil
Pneumonoultramicroscopicsili
Pneumonoultramicroscopicsilic
Pneumonoultramicroscopicsilico
Pneumonoultramicroscopicsilicov
Pneumonoultramicroscopicsilicovo
Pneumonoultramicroscopicsilicovol
Pneumonoultramicroscopicsilicovolc
Pneumonoultramicroscopicsilicovolca
Pneumonoultramicroscopicsilicovolcan
Pneumonoultramicroscopicsilicovolcano
Pneumonoultramicroscopicsilicovolcanoc
Pneumonoultramicroscopicsilicovolcanoco
Pneumonoultramicroscopicsilicovolcanocon
Pneumonoultramicroscopicsilicovolcanoconi
Pneumonoultramicroscopicsilicovolcanoconio
Pneumonoultramicroscopicsilicovolcanoconios
Pneumonoultramicroscopicsilicovolcanoconiosi
Pneumonoultramicroscopicsilicovolcanoconiosis
neumonoultramicroscopicsilicovolcanoconiosis
eumonoultramicroscopicsilicovolcanoconiosis
umonoultramicroscopicsilicovolcanoconiosis
monoultramicroscopicsilicovolcanoconiosis
onoultramicroscopicsilicovolcanoconiosis
noultramicroscopicsilicovolcanoconiosis
oultramicroscopicsilicovolcanoconiosis
ultramicroscopicsilicovolcanoconiosis
ltramicroscopicsilicovolcanoconiosis
tramicroscopicsilicovolcanoconiosis
ramicroscopicsilicovolcanoconiosis
amicroscopicsilicovolcanoconiosis
microscopicsilicovolcanoconiosis
icroscopicsilicovolcanoconiosis
croscopicsilicovolcanoconiosis
roscopicsilicovolcanoconiosis
oscopicsilicovolcanoconiosis
scopicsilicovolcanoconiosis
copicsilicovolcanoconiosis
opicsilicovolcanoconiosis
picsilicovolcanoconiosis
icsilicovolcanoconiosis
Expresiones de gratitud
Gracias a dzaima , Leaky Nun , Mr. Xcoder por todo menos la idea de este desafío.
Respuestas:
Python 2 , 60 bytes
Pruébalo en línea!
fuente
MATL , 8 bytes
Pruébalo en línea!
Explicación
fuente
Retina ,
7059 bytesPruébalo en línea! Editar: guardado 11 bytes con ayuda de @MartinEnder. Explicación: La primera etapa repite la entrada una vez para cada carácter, rellenándola adecuadamente en cada línea para obtener el corte. La última etapa luego elimina el 25% de cada lado para producir el resultado deseado.
fuente
n/2
espacios a la izquierda y a la derecha (usando algo como(..)+.
->$#1$* $&$#1$*
con un espacio final) y luego hice un lugar!&`...
donde...
coinciden
exactamente con losn
caracteres.$*sp
?Java 8,
120103 bytes-17 bytes gracias a @ OlivierGrégoire .
Explicación:
Pruébalo aquí
fuente
i=l/2+1
yi-->1
yfor(;i<l
guardar un byte.s->{int l=s.length(),i=l/2;while(i-->0)s=" "+s+" ";while(++i<l)System.out.println(s.substring(i,l+i));}
(103 bytes). El único cambio significativo es que la cadena con espacios se genera de una vez por todas en lugar de "sobre la marcha" (y, por supuesto, la impresión en lugar de volver).Haskell,
6462 bytesPruébalo en línea! Cómo funciona:
fuente
SWI Prolog, 234 bytes
Tal vez intente en línea aquí: http://swish.swi-prolog.org/p/hEKigfEl.pl
NÓTESE BIEN.
_
aquí, ya que demuestra que funciona y no afecta el recuento de bytes.Ejemplos que se ejecutan en Swish:
Enfoque, básicamente lo primero que podría hacer que funcione, y sin duda un usuario experto de Prolog podría acortarlo mucho:
Código explicado y comentado (podría no ejecutarse), leer desde
superacrostic()
abajo, luego elhelper()
cuerpo principal, luego elhelper()
caso base:fuente
05AB1E , 11 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript (ES6), 75 bytes
fuente
APL (Dyalog Unicode) , 10 caracteres = 22 bytes
Pruébalo en línea!
{
...}
función anónima donde el argumento está representado por ⍵⊢
proporcionar el área cubierta cuando⌺(
...)
deslizando una plantilla de tamaño≢
longitud de⍵
el argumento⊢
en⍵
el argumentoLa forma en que esto funciona es dejando que cada carácter forme el centro de una cadena con la misma longitud que la entrada, rellenando a la izquierda o derecha según sea necesario. Tomar eg
ABXCD
:La cadena tiene cinco caracteres, por lo que la plantilla tendrá una "apertura" de cinco caracteres de ancho.
┌──↓──┐
abertura de la plantilla con marcador medio│ ABX│CD
permitenA
estar en el medio│ ABXC│D
a continuación,B
│ABXCD|
etc.A|BXCD |
AB|XCD |
└──↑──┘
posición final stencilfuente
PHP , 98 bytes
Pruébalo en línea!
fuente
JavaScript (ES8),
666362 bytesDevuelve una matriz.
Intentalo
Explicación
Función anónima que toma la cadena como argumento a través de un parámetro
s
.Divida la cadena en una matriz de caracteres individuales.
Obtenga la longitud de la cadena y asígnela a la variable
l
.Asigne sobre la matriz, pasando cada elemento a través de una función, donde
x
está el índice del elemento actual.Para cada elemento, devuelva la cadena original con espacios antepuestos hasta que su longitud sea 1.5 veces mayor que su longitud original.
Obtenga la subcadena de longitud a
l
partir del índice del elemento actual.fuente
V ,
14, 11 bytesPruébalo en línea!
¡3 bytes guardados gracias a @nmjmcman!
Hexdump:
Enfoque original (18 bytes):
Explicación:
fuente
ê
. Gracias :)PowerShell Core , 68 bytes
Pruébalo en línea!
Explicación sin golf
fuente
[($_..($_+$L))]
?(
no va con la unión, está haciendo-join ($Padding + $Text)[0,1,2,3,4]
seleccionar varios caracteres de una cadena acolchada para una línea de salida, y unirlos en una cadena para ser una forma más corta de hacerlo.SubString()
. y está generando el relleno en el lugar y el rango de caracteres en el lugar. Explicación completa de ungolf agregada a mi respuesta.Japt ,
191714 bytesGuardado 5 bytes gracias a @ETHproductions y @Shaggy
¡Pruébelo en línea!
-R
Se agregó una bandera para unirse a las nuevas líneas (con fines de visibilidad)Explicación
fuente
Sp½*Ul
, pero no creo que haya unsXX+Y
tXY
s == .slice
t == .substr
Carbón , 26 bytes
Pruébalo en línea! El enlace es a la versión detallada del código.
fuente
Jalea , 11 bytes
Pruébalo en línea!
Cómo funciona
fuente
QBIC , 32 bytes
Hombre, es hora de que agregue
space$
a QBIC ...Explicación
Ejecución de la muestra
fuente
Mathematica, 88 bytes
fuente
Haskell ,
8670 bytesEsto es (todavía) demasiado largo, pero gracias @bartavelle por recordarme que también es aceptable generar una lista de cadenas.
Pruébalo en línea!
fuente
Python 3 , 68 bytes
Pruébalo en línea!
fuente
PowerShell ,
133119 bytesPruébalo en línea!
Sin golf
fuente
Python 2 ,
76 7473 bytes-1 gracias a @FelipeNardiBatista
Por supuesto, no es tan corto como la otra respuesta de Python, pero vale la pena probar un método completamente diferente:
Pruébalo en línea! (con la versión de 74 bytes)
Esto genera primero la cadena completa y luego la corta para que se ajuste al cuadrado.
Explicación
fuente
(2*x+~i)
para salvar un byteJ , 19 bytes
Pruébalo en línea!
Explicación
fuente
''
el reemplazo.C # (.NET Core) , 101 bytes
Básicamente la respuesta de @ KevinCruijssen. Guarda 2 bytes porque
string.Length
no necesita () y otros 2 bytes porque el segundo argumento destring.Substring()
es length en lugar de end Index, pero luego pierde 2 bytes porqueConsole.WriteLine()
es más largo. Tuve una implementación más ingenua, pero fue aproximadamente el doble de tiempo, así que ...fuente
Excel VBA, 68 bytes
Golfed
Función de ventana inmediata anónima de VBE que toma entrada de la celda
[A1]
y salidas a la ventana inmediata de VBESin golf
fuente
Perl 5 , 53 + 1 (
-n
) = 54 bytesPruébalo en línea!
fuente