Napisz program lub funkcję, która, jeśli n
zostanie podana , wydrukuje spiralne n
znaki złożone z alfabetu łacińskiego, ABCDEFGHIJKLMNOPQRSTUVWXYZ
powtarzane w razie potrzeby. Ta spirala powinna przebiegać przez alfabet tylko do przodu.
Powiązane ze spiralą alfabetu , chociaż spirala biegnie przez alfabet do przodu i do tyłu, a spirala jest stała.
Przypadki testowe
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
Zasady
- Dane wejściowe będą liczbami całkowitymi nieujemnymi
0 <= n <= 1000
, ale teoretycznie kod powinien obsługiwać każdą liczbę całkowitą nieujemną. - Twój format wyjściowy może być w dowolnym rozsądnym formacie, w razie potrzeby z ogranicznikami.
- Obroty i odbicia są równoważne.
- Twój alfabet może być pisany wielkimi lub małymi literami.
- Puste miejsca w twojej spirali mogą być wypełnione dowolnymi niealfabetycznymi zerami, które uznasz za stosowne.
- Sama spirala może mieć dowolny kształt, który uznasz za odpowiedni. Spirale prostokątne najlepiej działają z rozwiązaniami ASCII, ale rozwiązania graficzne mogą być krótsze z spiralami okrągłymi.
- Dozwolone są wiodące i końcowe spacje oraz znaki nowej linii.
- To jest kod golfowy. Najkrótsza odpowiedź w bajtach (lub równoważnych) wygrywa.
Jak zawsze, jeśli coś jest niejasne lub nieprawidłowe, daj mi znać w komentarzach. Powodzenia i dobrej gry w golfa!
Odpowiedzi:
Logo,
12987 bajtówRozwiązanie graficzne, zaimplementowane jako funkcja
Zostało to zbudowane na interpretatorze Logo Calormen.com .
S
Funkcja przyjmuje liczbę znaków jako parametr i zwraca je w spiralę.Na. Uznałem, że ładniej (i grał w golfa 42 bajty ) pominięcie poprawiania orientacji liter. Zaostrzyłem również odstępy, które nie zmieniły liczby bajtów. Jeśli miałbyś rzucić alfabet, i tak wyglądałoby to bardziej.T
litery Blok funkcyjny w pozycji pionowej, aby zapobiec ich obracaniu się spirali.Zaktualizowana wersja (rolki listów)
Wezwanie
Wywołaj w następujący sposób:
S
iteracjePróbka wyjściowa
Stara wersja (litery zawsze pionowo)
Usunięto stare dane wyjściowe, aby zaoszczędzić miejsce. Zobacz tutaj .
źródło
95
spowoduje zmianę szczelności spirali, a zmiana15
spowoduje dostosowanie liniowego odstępu między literami.JavaScript (ES6),
203201 bajtówPróbny
Poniższą wersję demonstracyjną najlepiej uruchomić na całej stronie.
Pokaż fragment kodu
źródło
R, 46 lub 51 bajtów, w zależności od odstępów
(zaktualizowana wersja fabuły: szara spirala nie jest domyślnie drukowana, ale dodałem ją później, aby pokazać, że litery rzeczywiście leżą na spirali).
Spirala nie ma stałych odstępów, więc mam nadzieję, że jest w porządku. Jeśli wymagane są stałe odstępy, zacznij od
s=(1:scan())^.5
i dodaj 5 bajtów do całości. Następnie wynik jest jak poniżej (n = 150):źródło
Python 3.5,
180157152147141 bajtów-6 z powodu Sherlock9
-5 z powodu Kap.
Poprawione rozwiązanie, python 3.x:
Poprzednie rozwiązanie:
Wyjaśnienie
r
jest listą zawierającą spiralę. Podstawową ideą jest dodawanie nowych liter do dolnego rzędu spirali (r[-1].append(chr(x%26+65))
). Gdy dolny rząd jest wypełniony, spirala jest obracana o 90 zgodnie z ruchem wskazówek zegara, a nowy pusty rząd jest dodawany do dolnej (r = list(zip(*r[::-1]))+[[]]
).Sztuką jest dowiedzieć się, kiedy obrócić spiralę. W pierwszym rozwiązaniu generator
(j<1for i in R(n)for j in R(i//2+1))
generuje sekwencję wartości True / False, które mówią, kiedy obrócić spiralę. W zmienionym rozwiązaniu zmieniłem sposóbr
inicjowania. Teraz, gdy długość dolnego rzędu jest równa długości górnego rzędu, spirala musi zostać obrócona.źródło
if len(r[-1])==len(r[0]):r=list(zip(*r[::-1]))+[[]]
zeif len(r[-1])==len(r[0]):r=[*zip(*r[::-1]),[]]
aby zaoszczędzić 5 bajtów.range
raz, możesz usunąć,R
aby zapisać bajty. Możesz także zapisać bajty, konwertując swoją odpowiedź do pełnego programu, jednak aby zachować użycie[*zip(*r[::-1]),[]]
, musisz użyć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)]
ponieważ sprawdzasz, kiedy ostatni wiersz jest równy lub większy od pierwszego wiersza.n
w tej wersji. Musisz użyćint(input())
lub zawrzeć kopię zapasową w funkcji.for
pętli: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 bajtówWejście
0
kończy się z błędem (który jest domyślnie dozwolony ).Wypróbuj online!
Wyjaśnienie
źródło
Python 2,
8482 bajtówZnowu używam Turtle. To takie zabawne! :RE
Wypróbuj online
Niestety, Trinket.io ma strasznie małe płótno. Zmieniłem
9+i
się9+i/9
i doprowadza punkt wyjścia żółwia w celu przechwytywania ekranu obraz, tak że bardziej pasowałby na wyjściu:źródło
from turtle import*
a drugi ze zmiany zwhile
nafor i in range(input())
Pyth, 32 bajty
Program drukujący prostokątną spiralę ASCII z małymi literami. W zależności od danych wejściowych może występować jeden wiersz lub kolumna początkowych lub końcowych białych znaków.
Wypróbuj online
Jak to działa
źródło
TSQL,
386362358306 bajtówPamiętaj, że TSQL nie ma możliwości obracania tekstu. Ten skrypt zaczyna się od A i oblicza kierunek, w którym powinna zostać umieszczona następna litera. (prawo, dół, lewo, lewo, lewo, góra, góra, prawo ...)
Skrypt może obsłużyć maksymalnie 7744 litery.
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
Python 2, 243 bajty
Ideone to!
źródło
PHP , 219 bajtów
Wypróbuj online!
PHP, 260 bajtów
Stara wersja
źródło