Напишите программу или функцию, которая, при n
наличии, будет печатать спиральные n
символы, состоящие из латинского алфавита, ABCDEFGHIJKLMNOPQRSTUVWXYZ
повторяемого по мере необходимости. Эта спираль должна проходить через алфавит только вперед.
Относится к Алфавитной Спирали , хотя спираль проходит через алфавит вперед и назад, и спираль постоянна.
Контрольные примеры
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
правила
- Ваш ввод будет неотрицательным целым числом
0 <= n <= 1000
, но теоретически ваш код должен обрабатывать любое неотрицательное целое число. - Ваш выходной формат может быть в любом нормальном формате, с разделителями, если это необходимо.
- Вращения и отражения эквивалентны.
- Ваш алфавит может быть в верхнем или нижнем регистре.
- Пустые пространства в вашей спирали могут быть заполнены любыми неалфавитными нулями, которые вы считаете нужными.
- Сама спираль может быть любой формы, которую вы считаете нужной. Прямоугольные спирали лучше всего работают с решениями ASCII, но графические решения могут быть короче с круглыми спиралями.
- Разрешены начальные и конечные пробелы и переводы строк.
- Это код гольф. Самый короткий ответ в байтах (или эквивалент) выигрывает.
Как всегда, если что-то неясно или неправильно, пожалуйста, дайте мне знать в комментариях. Удачи и хорошего гольфа!
Ответы:
Логотип,
12987 байтГрафическое решение, реализованное как функция
Это было построено на интерпретаторе логотипа Calormen.com .
S
Функция принимает число символов в качестве параметра и рисует их в виде спирали.В, Я решил, что это выглядело лучше (и вычеркнуло 42 байта ), чтобы не корректировать ориентацию букв. Я также увеличил интервал, который не изменил количество байтов. Если бы вы на самом деле свернули алфавит, это все равно было бы похоже на это.T
функция выводит буквы в вертикальном положении , чтобы предотвратить их от поворота спирали.Обновленная версия (буквы катятся)
мольба
Вызовите следующим образом:
S
итерацииОбразец вывода
Старая версия (буквы всегда в вертикальном положении)
Старый вывод удален для экономии места. Смотрите это здесь .
источник
95
изменит жесткость спирали, а изменение15
изменит линейный интервал букв.Javascript (ES6),
203201 байтдемонстрация
Демонстрация ниже должна быть запущена на полную страницу.
Показать фрагмент кода
источник
R, 46 или 51 байт, в зависимости от расстояния
(обновленная версия сюжета: серая спираль не построена по умолчанию, но я добавил ее после, чтобы показать, что буквы действительно лежат на спирали.)
Спираль не имеет постоянного промежутка, поэтому я надеюсь, что все в порядке. Если требуется постоянный интервал, начните с
s=(1:scan())^.5
него и добавьте 5 байтов к сумме. Тогда вывод будет таким, как показано ниже (n = 150):источник
Python 3.5,
180157152147141 байт-6 из-за Шерлока9
-5 из-за кап.
Пересмотренное решение, python 3.x:
Предыдущее решение:
объяснение
r
это список списков, который содержит спираль. Основная идея заключается в том, что новые буквы добавляются в нижний ряд спирали (r[-1].append(chr(x%26+65))
). Когда нижний ряд заполнен, спираль поворачивается на 90 по часовой стрелке, и новый нижний ряд добавляется к нижнему (r = list(zip(*r[::-1]))+[[]]
).Хитрость заключается в том, чтобы выяснить, когда вращать спираль. В первом решении генератор
(j<1for i in R(n)for j in R(i//2+1))
генерирует последовательность значений True / False, которые сообщают, когда вращать спираль. В пересмотренном решении я изменил способr
инициализации. Теперь, когда длина нижнего ряда равна длине верхнего ряда, спираль необходимо вращать.источник
if len(r[-1])==len(r[0]):r=list(zip(*r[::-1]))+[[]]
на,if len(r[-1])==len(r[0]):r=[*zip(*r[::-1]),[]]
чтобы сохранить 5 байтов.range
один раз, вы можете удалить,R
чтобы сохранить байты. Вы также можете сохранить байты, конвертировав свой ответ в полную программу, хотя, чтобы сохранить использование[*zip(*r[::-1]),[]]
, вам нужно будет использоватьrange(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)]
поскольку вы проверяете, когда последняя строка равна или больше первой строки.n
в этой версии. Либо вам нужно использоватьint(input())
или завернуть в резервную копию в функции.for
цикла: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 байтВход
0
завершается с ошибкой (которая разрешена по умолчанию ).Попробуйте онлайн!
объяснение
источник
Python 2,
8482 байтаЯ снова использую Черепаху. Это так весело! : D
Попробуйте онлайн
К сожалению, у Trinket.io ужасно маленький холст. Я изменил
9+i
к9+i/9
и отрегулировать начальную точку черепахи с целью экрана захвата изображения, так что больше продукции будет соответствовать:источник
from turtle import*
а другой от изменения отwhile
доfor i in range(input())
Pyth, 32 байта
Программа, которая печатает прямоугольную строчную ASCII спираль. В зависимости от ввода может присутствовать одна строка или столбец начального или конечного пробела.
Попробуйте онлайн
Как это работает
источник
TSQL,
386362358306 байтОбратите внимание, что TSQL не имеет возможности вращать текст. Этот скрипт начинается с буквы A и вычисляет, в каком направлении следует разместить следующую букву. (вправо, вниз, влево, влево, влево, вверх, вверх, вправо ...)
Скрипт может обрабатывать не более 7744 букв.
Golfed:
Ungolfed:
скрипка
источник
Python 2, 243 байта
Идео это!
источник
PHP , 219 байт
Попробуйте онлайн!
PHP, 260 байт
Старая версия
источник