Escriba un programa o función que, cuando se proporcione n
, imprima n
caracteres en espiral formados por el alfabeto latino que se ABCDEFGHIJKLMNOPQRSTUVWXYZ
repite según sea necesario. Esta espiral debe pasar por el alfabeto solo hacia adelante.
Relacionado con Alphabet Spiral , aunque la espiral atraviesa el alfabeto hacia adelante y hacia atrás, y la espiral es constante.
Casos de prueba
4 AB
DC
40 UVWXYZ
TGHIJA
NSFABKB
MREDCLC
LQPONMD
KJIHGFE
0
10 GHIJ
FAB
EDC
1000 UVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
TGHIJKLMNOPQRSTUVWXYZABCDEFGHIJA
SFABCDEFGHIJKLMNOPQRSTUVWXYZABKB
REZCDEFGHIJKLMNOPQRSTUVWXYZABCLC
QDYBMNOPQRSTUVWXYZABCDEFGHIJCDMD
PCXALEFGHIJKLMNOPQRSTUVWXYZKDENE
OBWZKDEFGHIJKLMNOPQRSTUVWXALEFOF
NAVYJCDMNOPQRSTUVWXYZABCDYBMFGPG
MZUXIBCLCDEFGHIJKLMNOPQREZCNGHQH
LYTWHABKBABCDEFGHIJKLMNSFADOHIRI
KXSVGZAJAZGHIJKLMNOPQROTGBEPIJSJ
JWRUFYZIZYFUVWXYZABCDSPUHCFQJKTK
IVQTEXYHYXETQRSTUVWXETQVIDGRKLUL
HUPSDWXGXWDSPUVWXYZYFURWJEHSLMVM
GTORCVWFWVCROTGHIJAZGVSXKFITMNWN
FSNQBUVEVUBQNSFABKBAHWTYLGJUNOXO
ERMPATUDUTAPMREDCLCBIXUZMHKVOPYP
DQLOZSTCTSZOLQPONMDCJYVANILWPQZQ
CPKNYRSBSRYNKJIHGFEDKZWBOJMXQRAR
BOJMXQRARQXMLKJIHGFELAXCPKNYRSBS
ANILWPQZQPWVUTSRQPONMBYDQLOZSTCT
ZMHKVOPYPONMLKJIHGFEDCZERMPATUDU
YLGJUNOXONMLKJIHGFEDCBAFSNQBUVEV
XKFITMNWVUTSRQPONMLKJIHGTORCVWFW
WJEHSLMLKJIHGFEDCBAZYXWVUPSDWXGX
VIDGRKJIHGFEDCBAZYXWVUTSRQTEXYHY
UHCFQPONMLKJIHGFEDCBAZYXWVUFYZIZ
TGBEDCBAZYXWVUTSRQPONMLKJIHGZAJA
SFAZYXWVUTSRQPONMLKJIHGFEDCBABKB
REDCBAZYXWVUTSRQPONMLKJIHGFEDCLC
QPONMLKJIHGFEDCBAZYXWVUTSRQPONMD
LKJIHGFE
Reglas
- Su entrada será un número entero no negativo
0 <= n <= 1000
, pero su código debería manejar teóricamente cualquier número entero no negativo. - Su formato de salida puede estar en cualquier formato correcto, con delimitadores si es necesario.
- Las rotaciones y los reflejos son equivalentes.
- Su alfabeto puede ser mayúscula o minúscula.
- Los espacios vacíos en su espiral pueden llenarse con cualquier nulo no alfabético que considere adecuado.
- La espiral en sí misma puede tener cualquier forma que le parezca adecuada. Las espirales rectangulares funcionan mejor con soluciones ASCII, pero las soluciones gráficas pueden ser más cortas con espirales circulares.
- Se permiten espacios iniciales y finales y líneas nuevas.
- Este es el código de golf. La respuesta más corta en bytes (o equivalente) gana.
Como siempre, si algo no está claro o es incorrecto, hágamelo saber en los comentarios. ¡Buena suerte y buen golf!
Respuestas:
Logotipo,
12987 bytesSolución gráfica, implementada como función
Esto fue construido sobre el intérprete de Logo de Calormen.com . La
S
función toma el número de caracteres como parámetro y los dibuja en espiral.La. Decidí que se veía mejor (y jugué 42 bytes ) para omitir la corrección de la orientación de la letra. También apreté el espacio que no cambió el recuento de bytes. Si realmente enrollas un alfabeto, de todos modos se vería más así.T
función genera letras en posición vertical para evitar que giren con la espiral.Versión actualizada (rollo de letras)
Invocación
Invoque de la siguiente manera:
S
iteracionesSalida de muestra
Versión anterior (letras siempre en posición vertical)
Salida anterior eliminada para ahorrar espacio. Véalo aquí .
fuente
95
cambiará la rigidez de la espiral y el cambio15
ajustará el espaciado lineal de las letras.Javascript (ES6),
203201 bytesManifestación
La demostración a continuación debe ejecutarse preferiblemente en página completa.
Mostrar fragmento de código
fuente
R, 46 o 51 bytes, dependiendo del espaciado
(versión actualizada de la trama: la espiral gris no se traza de manera predeterminada, pero la agregué después para mostrar que las letras realmente se encuentran en una espiral).
La espiral no tiene un espaciado constante, así que espero que esté bien. Si se requiere un espaciado constante, comience con
s=(1:scan())^.5
y agregue 5 bytes al total. Entonces la salida es la siguiente (n = 150):fuente
Python 3.5,
180157152147141 bytes-6 debido a Sherlock9
-5 debido a Kap.
Solución revisada, python 3.x:
Solución anterior:
Explicación
r
es una lista de listas que contiene la espiral. La idea básica es que se agregan nuevas letras a la fila inferior de la espiral (r[-1].append(chr(x%26+65))
). Cuando se llena la fila inferior, la espiral se gira 90 en sentido horario y se agrega una nueva fila vacía al fondo (r = list(zip(*r[::-1]))+[[]]
).El truco es descubrir cuándo rotar la espiral. En la primera solución, el generador
(j<1for i in R(n)for j in R(i//2+1))
produce una secuencia de valores Verdadero / Falso que indica cuándo rotar la espiral. En la solución revisada, cambié la forma en quer
se inicializa. Ahora, cuando la longitud de la fila inferior es igual a la longitud de la fila superior, la espiral debe rotarse.fuente
if len(r[-1])==len(r[0]):r=list(zip(*r[::-1]))+[[]]
conif len(r[-1])==len(r[0]):r=[*zip(*r[::-1]),[]]
para guardar 5 bytes.range
una vez, puede eliminarloR
para guardar bytes. También puede guardar bytes convirtiendo su respuesta a un programa completo, aunque para preservar el uso[*zip(*r[::-1]),[]]
, deberá usarlorange(int(input()))
.for x in range(int(input())):r=len(r[-1])<len(r[0])and r or[*zip(*r[::-1]),[]];r[-1]+=[chr(x%26+65)]
ya que está verificando cuándo la última línea es igual o mayor a la primera línea.n
en esta versión. O necesita usarint(input())
o envolver una copia de seguridad en una función.for
bucle:for x in range(int(input())):r=len(r[-1])<len(r[0])and r or[*zip(*r[::-1]),[]];r[-1]+=[chr(x%26+65)]
MATL ,
2118 bytesLa entrada
0
sale con un error (que está permitido por defecto ).Pruébalo en línea!
Explicación
fuente
Python 2,
8482 bytesEstoy usando Turtle nuevamente. ¡Es tan divertido! :RE
Pruébalo en línea
Desafortunadamente, Trinket.io tiene un lienzo horriblemente pequeño. He cambiado
9+i
a9+i/9
y se ajustó el punto de partida de la tortuga con el propósito de pantalla de captura esta imagen, de modo que más de la salida encajaría:fuente
from turtle import*
y otro de cambiar dewhile
afor i in range(input())
Pyth, 32 bytes
Un programa que imprime una espiral ASCII rectangular en minúsculas. Dependiendo de la entrada, puede estar presente una fila o columna de espacios en blanco iniciales o finales.
Pruébalo en línea
Cómo funciona
fuente
TSQL,
386362358306 bytesTenga en cuenta que TSQL no tiene una forma de rotar texto. Este script comienza desde A y calcula en qué dirección se debe colocar la siguiente letra. (derecha, abajo, izquierda, izquierda, izquierda, arriba, arriba, derecha ...)
El script puede manejar un máximo de 7744 letras.
Golfizado:
Sin golf:
Violín
fuente
Python 2, 243 bytes
Ideone it!
fuente
PHP , 219 bytes
Pruébalo en línea!
PHP, 260 bytes
Versión antigua
fuente