Esto es lo que llamaremos un tazón de sopa de letras, una forma de arte ascii más o menos circular con las 26 letras en inglés mayúsculas (AZ) dispuestas en sentido horario para formar el perímetro:
XYZABC
VW DE
U F
T G
S H
RQ JI
PONMLK
Escriba un programa que tome un solo carácter de letra, AZ, y muestre el mismo tazón de sopa de letras "rotado", por así decirlo, de modo que la letra de entrada aparezca donde aparece A
en el ejemplo anterior y el resto del alfabeto se desplaza por completo agujas del reloj.
Entonces, la salida para la entrada A
sería el mismo tazón original de sopa de letras.
Y la salida para la entrada B
sería esta:
YZABCD
WX EF
V G
U H
T I
SR KJ
QPONML
Del mismo modo, la salida para H
sería:
EFGHIJ
CD KL
B M
A N
Z O
YX QP
WVUTSR
O para Z
:
WXYZAB
UV CD
T E
S F
R G
QP IH
ONMLKJ
Esto debe funcionar para las 26 letras, de la A a la Z.
Detalles:
- Puede suponer que la única entrada será una sola letra, de la A a la Z.
- Si es conveniente, puede usar minúsculas az para la entrada y / o salida, incluso puede mezclar y combinar minúsculas y mayúsculas.
- El orden alfabético debe circular en sentido horario, no en sentido antihorario.
- Debes usar espacios, no otra cosa, para sangrar y llenar el tazón de sopa.
- Puede haber nuevas líneas o espacios iniciales o finales en la salida, siempre que el tazón de sopa esté dispuesto correctamente.
- Tenga en cuenta que la forma del cuenco tiene 12 caracteres de ancho por 7 de alto para que parezca más o menos circular como texto. Tus cuencos deben tener la misma forma.
Este es el código de golf, por lo que gana el código más corto.
Respuestas:
05AB1E , 21 bytes
Define un programaF: AlphabeticChar → Cadena
Código:
Pruébalo en línea!
Descompostura:
Explicación:
El lienzo (
Λ
) en este contexto particular funciona como una función con la siguiente firma:El es en esta situación un número que define las direcciones. En el código, este número se representa como , que es una versión comprimida del número grande . Las indicaciones se indican de la siguiente manera:modelo 22323445656666676700121222232344565666667670012122
•1못*Ć,ãiDΣ•
Esto significa que el número grande representa el siguiente patrón de direcciones:
Con este contexto de firma, el lienzo itera a través de la lista y escribe caracteres desde el en la dirección actual.modelo relleno de longitud patrónrelleno
El se especifica en el código como (al comienzo del código). Para el , necesitamos una versión rotada del alfabeto de manera que comience con la entrada dada. Eso se hace con el siguiente código ( pruébalo aquí ):longitud 2 relleno
En pseudocódigo, esto sería ejecutado por la función de lienzo:
Por último, puede ver que el argumento de relleno está 'girado' veces a la derecha, lo que significa que el lienzo iteraría a través de la siguiente lista (ciclada y, por lo tanto, infinita):length−1
Lo que da como resultado la forma de arte ascii de la sopa de letras deseada.
fuente
AA¹k._
puede ser alternativamenteA¹¡RJ«
, pero es el mismo número de bytes.•1못*Ć,ãiDΣ•
puede ser alternativamente•õÕ₆qηµñ–†f•·
, pero es el mismo número de bytes. Ah bueno. ¡Buena respuesta!Perl 6 , 100 bytes
Pruébalo en línea!
Reemplaza todas las letras en la cadena con sus contrapartidas desplazadas, mientras reemplaza los dígitos con el número de espacios que representan más uno.
Explicación
fuente
Ruby , 107 bytes
Pruébalo en línea!
Sintaxis mejorada
"i".to_c
->1i
(Sugerido por Jordan)Se cambió el sistema de coordenadas para que 0 grados estén a la derecha en lugar de arriba. Esto permite
0.5
->6
Multiplicadores ajustados de
j
yk
para acortarEn lugar de imprimir la salida
puts a
, concatene los elementos de la matriz y devuelva una cadenaa*$/
Ruby , 119 bytes
Utiliza un número complejo elevado a una potencia para mapear a una elipse. Un turno completo es 26, por lo que cada cuadrante es 6.5.
Este enfoque se basa en la salida requerida que se asemeja a una elipse lo suficiente como para lograr una asignación válida.
Pruébalo en línea!
fuente
Carbón , 33 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Traza un camino.
Esboza el tazón. Cada uno se
7
expande a↙←
.Mueva un carácter a la vez (esta API se superpone a los extremos de cada línea con la siguiente).
Dibuje usando el alfabeto duplicado, pero comenzando en la posición del carácter de entrada.
fuente
MATL , 49 bytes
Que desastre. Pero fue divertido escribir. Incluso hay un arcotangente involucrado.
Pruébalo en línea!
Explicación
El código
crea una matriz de números y los convierte a binarios. Esto le da a la matriz cero uno
que es el cuadrante superior izquierdo de una matriz que especifica las posiciones de las letras.
refleja ese cuadrante verticalmente sin repetir la última fila y horizontalmente la última columna para producir la matriz completa:
Ahora tenemos una máscara con las posiciones. El código
convierte esto a char, porque el resultado final será una matriz char. El carácter 0 se muestra como espacio, y las entradas distintas de cero se escribirán con las letras apropiadas.
empuja la cuerda
'abc···xyz'
, que contiene las 26 letras. Esta cadena debe desplazarse circularmente según la entrada. Para hacer eso,lee la letra de entrada, agrega 7 a su código ASCII y niega el resultado. Para la entrada,
'a'
esto da −104, que es un múltiplo de 26, por lo que el desplazamiento circular por esta cantidad no hará nada. Si la entrada esb
esto da −105, que desplaza la cadena 1 paso hacia la izquierda para producir'bcd···yza'
; etc.El siguiente paso es definir el orden en que la cadena desplazada se escribirá en las entradas distintas de cero de la matriz. Para tal fin,
crea una copia de la matriz y empuja dos vectores que contienen las posiciones de fila y columna basadas en 1 de los nonzeros. Entonces
resta 7 de este último, lleva el primero a la parte superior, resta 4 de él y lo niega. Los puntos 7 y 4 especifican un origen de coordenadas, de modo que los ángulos de los vectores de posición de las entradas distintas de cero con respecto a ese origen definen el orden deseado.
calcula el módulo arcotangente de dos argumentos 2 * pi para producir esos ángulos. Ahora el ángulo más pequeño, que es 0, corresponde a la entrada donde debe ir la primera letra, y el resto avanza en sentido antihorario.
reorganiza las letras en la cadena de acuerdo con esos ángulos, de modo que cuando las letras se escriben en las entradas distintas de cero de la matriz en orden de columna mayor (abajo, luego a través) el resultado será correcto. Esto se hace por
Por ejemplo, si la entrada es
'a'
la cadena no se desplazó circularmente:La reorganización según los ángulos transforma esto en
así que
'u'
irá correctamente a la primera entrada (en orden de columna) diferente de cero, que es (3,1) en notación matricial;'t'
irá a (4,1),'s'
a (5,1);'v'
a (2,2) etc.fuente
Python 2 , 129 bytes
Pruébalo en línea!
fuente
R ,
139122 bytes-17 bytes gracias a Giuseppe
Explicación:
Construye una caja vacía de espacios.
es un conjunto de índices para posiciones de letras correspondientes a:
TIO
fuente
intToUtf8
por lo que son bytes extraños, pero si lo usa*
en lugar derep
, puede guardar 2 bytes y llegar a 125 bytes-32
, por 122 bytes . Puede generarlos usted mismo utilizandocat(intToUtf8(bytes))
.intToUtf8
demasiadas versiones de la función abiertas a la vez, supongo. Nice guarda todas las rondas, graciasJavaScript (Node.js) ,
121119 bytesGuardado 2 bytes gracias a @tsh
Pruébalo en línea!
¿Cómo?
Buffer
"H"
"B"
fuente
APL + WIN, 72 bytes
Indicaciones para el personaje
Pruébalo en línea Coutesy of Dyalog Classic
fuente
R ,
218197 bytes-21 bytes gracias a Giuseppe
Pruébalo en línea!
Sin golf:
Se creó un vector de letra girada y se usa
cat
para llenar el borde del tazón con ese vector.fuente
which
y usarl>=t
como índice directamente, lo que valía 12 bytes.[
con~
. Esta es una respuesta genial; Estaba gastando alrededor de 250 bytes en mis primeros intentos con un enfoque mucho más complejo.Java 11, 134 bytes
Pruébalo en línea.
¿Versión de 136 bytes con potencial para jugar al golf?
Pruébalo en línea.
Explicación (de la primera respuesta)
fuente
i-47
\n
). Entonces, ya sea que use no imprimibles y 3x\n
coni
o digitos-1 coni-47
, ambos son el mismo recuento de 134 bytes. Y desafortunadamente no puedo tener una no imprimible0
, de lo contrario podría haber usado 2,0,5,9 en su lugar, y usari+1
para guardar 1 byte en total.Wolfram Language (Mathematica) , 258 bytes
Pruébalo en línea!
fuente
Haskell, 127 bytes
Pruébalo en línea!
Cada carácter en la cadena codificada se decodifica por función
?
en una cadena:fuente
Kotlin ,
148146145 bytesSe eliminaron paréntesis adicionales para -2
Cadena sin procesar reemplazada para -1
Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) ,
126118 bytesGuardado 8 bytes gracias a @someone. Sí, ese es en realidad su nombre de usuario.
Pruébalo en línea!
fuente
Consulta TSQL, 238 bytes
El enlace de prueba para esta respuesta rompió los saltos de línea y excluyó los espacios. He reemplazado los espacios con punto y he reemplazado char (13) con char (13) + char (10) para mostrar un resultado legible.
Pruébalo en línea
Sin golf:
fuente
PHP ,
236229226 bytesPruébalo en línea!
Pre-golf:
Explicación:
Usando
ord
, convertimos a un número entero entre 0 y 255. A es 65 y Z es 90.Usando este conocimiento, tomamos la entrada y la reducimos en 65 para tener un valor de ajuste.
Luego iteramos sobre todos los caracteres, los llamamos
ord
, los reducimos en 65, los incrementamos en nuestro valor de ajuste. Usando el módulo volvemos a 0 si exceden 26.Luego los incrementamos en 65 nuevamente y los convertimos nuevamente en letras con
chr
.Lamentablemente, php: // stdin solo se puede interogar una vez, por lo que debemos pasar la entrada a la función en nuestro bucle, evitando que guardemos bytes
use($a)
y tener que declarar una variable fuera de la función nos impide usar limpiamente el<?=
método echo - Tenemos que envolver todo en un ternario gigante.fuente
C (GCC) 286 bytes
No es exactamente el golf más corto, pero funciona
Pruébalo en línea
fuente
Rojo , 139 bytes
Pruébalo en línea!
Una solución realmente ingenua.
fuente
Perl 5
-p
, 110 bytesPruébalo en línea!
fuente
Javascript (V8), 316 bytes
Pruébalo en línea
Primera vez probando el código de golf. Agradezco cualquier sugerencia / comentario.
Código original antes de minificar:
fuente
APL (Dyalog Classic) , 50 bytes
Pruébalo en línea!
fuente
C (gcc) ,
200198197 bytes-3 bytes gracias a ceilingcat.
Pruébalo en línea!
fuente
PHP , 131 bytes
Pruébalo en línea!
fuente