En el lugar de enterramiento del Rey Silo de Asturias hay una inscripción que dice SILCI PRINCEPS FECIT (el Rey Silo hizo esto ).
La primera letra se encuentra en el medio, y desde allí se lee yendo en cualquier dirección no diagonal que se irradia hacia afuera. La letra final se encuentra en las cuatro esquinas. En este desafío, generalizarás el proceso para hacerlos.
Entrada
Una cadena ( o equivalente ) y un número entero. Puede hacer los siguientes supuestos sobre la entrada:
- La cadena tendrá una longitud impar.
- El número entero será un número impar entre 1 y uno menos del doble de la longitud de la cadena.
Salida
Una inscriptio labyrinthica para la cadena, usando el número entero para la altura o el ancho (ver modelos para ejemplos de altura). La salida debe ser cada letra sin espacios, salto de línea como predeterminado para su sistema / idioma.
Casos de prueba
Tenga en cuenta que una entrada de 1 o (longitud * 2 - 1) dará como resultado un palíndromo horizontal o vertical.
Input: FOO, 3 Input: BAR, 1 Input: BAR, 3 Input: BAR, 5
Output: OOO Output: RABAR Output: RAR Output: R
OFO ABA A
OOO RAR B
A
R
Input: ABCDE, 5 Input: ABCDE, 3 Input: *<>v^, 5
Output: EDCDE Output: EDCBCDE ^v>v^
DCBCD DCBABCD v><>v
CBABC EDCBCDE ><*<>
DCBCD v><>v
EDCDE ^v>v^
Tanteo
Este es el código de golf, por lo que la respuesta más corta en bytes gana. Lagunas estándar prohibidas.
Respuestas:
J , 27 bytes
Pruébalo en línea!
Un ejemplo aclarará el enfoque de alto nivel.
Considerar
'ABCDE' f 3
Notamos que lo que buscamos es simplemente la tabla de "suma cruzada" de
1 0 1
y3 2 1 0 1 2 3
, que se ve así:A continuación, tire de los índices de la cadena original:
[{~
.Todo el resto del código es aritmética aburrida y el uso de
i:
para construir los argumentos1 0 1
y3 2 1 0 1 2 3
.fuente
Jalea , 12 bytes
Pruébalo en línea!
Un enlace diádico que toma la cadena como su izquierda y la altura como su argumento derecho. Devuelve una cadena con saltos de línea. Si una lista de cadenas fuera aceptable para la salida, puedo eliminar el
Y
guardado final de un byte. Curiosamente, el original "SILO PRINCEPS FECIT" me parece el arte ASCII de un diamante 3D cuando lo miro en TIO.Explicación
fuente
R ,
939187 bytes-2 bytes gracias a Giuseppe. -4 bytes ingresando el ancho en lugar de la altura, según lo permitido por OP.
Pruébalo en línea!
Toma la entrada como un vector de caracteres. La parte clave es
s[1+outer(abs(-w:w),abs(-h:h),'+')]
.abs(-w:w)
abs(-h:h)
abs(-h:h)
outer(abs(-2:2), abs(-1:1), '+')
(entonces necesitamos agregar 1 porque R está indexado en 1). El 0 en el centro es donde debe ir la primera letra de la entrada.
El resto es formateo.
fuente
Carbón ,
2519 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Dibuja una cuarta parte de la inscripción.
Reflexiona para completar la inscripción.
fuente
Japt
-R
,1916 bytesIntentalo
fuente
Wolfram Language (Mathematica) ,
5754 bytesPruébalo en línea!
Toma el ancho como entrada.
fuente
g
no se evalúa la primera vez que se llama a la función. Pruébalo en línea!Print/@f[...]
->Print/@Transpose[g[...]]
->Transpose[Print@g[...]]
, por el cualg
se define el tiempo .Japt
-R
, 10 bytesToma ancho en lugar de altura.
Intentalo
Pseudocódigo (U es una cadena, V es un entero):
fuente
Perl 6 ,
6867 bytesPruébalo en línea!
fuente
Python 3, 104 bytes
No he jugado al golf en mucho tiempo ... Estoy seguro de que esto podría ser más corto.
Detalles
Este código define una función que toma dos argumentos (la cadena y la altura) y da el resultado en la salida estándar.
El índice en la cadena es la distancia de Manhattan desde el centro de la cuadrícula. Para una cuadrícula de ancho
w
y altoh
, la distancia para la celda(x, y)
esabs(x - (w - 1) / 2) + abs(v - (h - 1) / 2)
.El ancho de la cuadrícula debe ser tal que la distancia de Manhattan de las esquinas (por ejemplo,
(0, 0)
) sea uno menos que la longitud de la cadena. Sustituyendo(0, 0)
en lo anterior y simplificando, encontramos que el ancho es simple2 * len(s) - h
.Código
Pruébalo en línea!
fuente
05AB1E , 10 bytes
Pruébalo en línea!
fuente
Pyth , 19 bytes
Pruébalo en línea!
fuente
Python 2 , 95 bytes
Pruébalo en línea!
fuente
Stax ,
119 bytesEjecutar y depurarlo
Toma el ancho y la cadena original, en ese orden.
fuente
C # (.NET Core) , 146 bytes
Pruébalo en línea!
La respuesta más larga hasta ahora. :-) Utiliza la distancia de Manhattan al centro de la plaza. Sin embargo, debe haber un camino más corto.
fuente
Tcl ,
188170162 bytesPruébalo en línea!
Parece que hay un millón de malas formas de jugar golf a este problema en TCL. Este no es el peor de ellos.
Se guardó un mínimo de 18 bytes al convertir a lambda (puede guardar hasta 13 más si el valor de retorno de una lista de líneas es aceptable)
Guardado un 8 adicional ya que el iterador lmap sirvió como una constante adicional
fuente
Lienzo , 18 bytes.
Pruébalo aquí!
Canvas no hace subcadenas, por lo que debo tratarlo como un objeto de arte y obtener una subsección de esa manera. Siento que esto me cuesta 2 bytes, pero oye, ¿qué puedes hacer?Parece que esto en realidad no funciona como pensé: las funciones palindromize de Canvas reflejan ciertos caracteres (por ejemplo, V reflejado verticalmente se convierte en ^), y no puedo deshabilitar exactamente eso ... oh bueno, supongo
fuente
Ruby , 65 bytes
Pruébalo en línea!
fuente