Wprowadzenie
Napisz program, który wyświetli wychodzącą spiralę słynnego pangram zgodnie z podanymi zasadami.
Wyzwanie
Pangram to zdanie stosując każdą literę alfabetu danego przynajmniej raz. Jednym z najbardziej znanych pangramów jest ten, który jest szeroko stosowany w przeglądarce czcionek Windows, a mianowicie: „ Szybki brązowy lis przeskakuje nad leniwym psem ”. Wyzwanie polega na utworzeniu spirali na podstawie tego tekstu.
Twoim zadaniem jest wydrukowanie dokładnie tego tekstu:
heeeeellllllllllllazzzzzzzzzzz
hummmmmmmmmmmmmppppppppppppppy
hubrrrrrrrrrrrrrrrrrrooooooosy
hukyddddoooooooooooooooggggwsy
hukyveeeeerrrrrrrrrrrrrrrrtwsy
hukyvxjjjjjjjjjjuuuuuuuuuttwsy
hukyvxkbbrrrrrrrrrrrrrrrmttwsy
hukyvxkogggggggttttttttomttwsy
tukyvokoellllllllllllahomttwsy
tukyvokoeovvvvvvvvvvvzhomttwsy
tukyvocoeoummmmmmmmmezhomttwsy
tukyvocoeoufooooooopezhomttwsy
tukyvocohoufroooooxpezhomttwsy
tukyvoiohoufrquuuwxpezhomttwsy
tucyvoiohoufbqttiwxpezhomttwsy
tucyvoiohoufbeehiwxprzhomttwsy
tucyvoiohoufkccciwxprzeomttwsy
tjiyvoidhounnnnnnwxprzeomttwsy
tjiyvoidhojjjjjjjjxprzeomttwsy
tjiyvoidhssssssssssprzeopttwsy
tjiyvoidttttttttttttrzeopttwsy
tjiyvoiyyyyyyyyyyyyyyzqopttwoy
tjiyvouuuuuuuuuuuuuuuuqwpttwoy
tjiyvffffnnnnnnnnnnnnnnwpttwoy
tjiyossssssssssssssssssspthwoy
tjizzzzalllllllllllleeeeehhwoy
tjuuqqqqqqqqqqqqqqqqqeeeeehnod
txxxxxoooooooooooooooffffffnod
reeeeevvvvvvvvvvvvvvvvvvvvvvod
gggggggoooooooooooooood
Oto jak jest generowany,
- Był gorliwy lis, który lubił pangram „Szybki brązowy lis skacze nad leniwym psem”. Pewnego dnia znalazł się w centrum zewnętrznej spirali i postanowił wskoczyć w nią i malować dalej.
- Chciałby przejść przez pangram od początku do końca, a jeśli litera jest n-tą literą w alfabecie, chciałby ją pomalować n razy.
- Jednak lis nie był zbyt dobry w pokonywaniu zakrętów, więc po dotarciu do każdego rogu musiał się zatrzymać i przejść do następnej litery.
- On również postanowił powtórzyć trzykrotnie pangram podkreślić, że jest Szybki brązowy lis.
- Twoim zadaniem jest pokazanie, jak wyglądałaby spirala po tym, jak lis pomalował wszystkie te litery.
(Zwykła wersja bez opowiadania historii)
Słynny pangram „Szybki brązowy lis przeskakuje nad leniwym psem” powtarza się trzy razy, z usuniętymi spacjami i wszystkimi literami, aby wygenerować
thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog
Spirala zaczyna się od środka i zaczyna się na literę „t”, zaczyna się od prawej strony i wychodzi na zewnątrz zgodnie z ruchem wskazówek zegara. Jeśli bieżącym znakiem jest n-ta litera alfabetu, to za każdym razem przechodzi do następnego znaku
- spirala osiąga róg, lub
- bieżące litery są drukowane dokładnie n razy.
Aby lepiej to zilustrować, wyjaśnię, w jaki sposób generowana jest spirala związana z pierwszymi trzema słowami „szybki przegląd”.
rooooo
rquuuw
bqttiw
beehiw
kccciw
nnnnnnw
Lis zaczyna się od „t”, idzie w prawo, dociera do pierwszego rogu, maluje go za pomocą „t”, a następnie przechodzi do „h” i schodzi w dół, dociera do drugiego rogu, przełącza się na „e” i idzie w lewo, dociera do Trzeci róg, przełącza się na „q” i idzie w górę, osiąga 4. róg, przełącza się na „u” i idzie w prawo, osiąga róg i przełącza się na „i”, schodzi w dół, osiąga róg i przełącza na „c”, idzie w lewo, z powodzeniem maluje 3 „c” przed osiągnięciem następnego rogu , przełącza się na „k” i przechodzi w lewo , dociera do rogu od razu, przełącza się na „b” i idzie w górę, maluje 2 „b” s przed osiągnięciem następny róg przełącza na „r”i idzie w górę , dochodzi do rogu i przełącza się na „o”, idzie w prawo, a następnie „w”, w dół, „n”, w lewo.
Okular
Możesz wziąć opcjonalne dane wejściowe, które zawierają dowolną standardową postać ciągu
thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog
Dane wyjściowe muszą być sformatowane jako ciąg i muszą przejść do STDOUT zamiast plików lub STDERR, z nowymi wierszami umieszczonymi poprawnie. Nagłówek i końcowe puste linie nie mają znaczenia. Dozwolone są nagłówki i spacje w każdej linii, ale muszą być spójne. Więc jeśli dodasz 5 spacji przed jednym wierszem danego tekstu, musisz dodać dokładnie 5 spacji przed każdym wierszem, aby spirala wyglądała tak samo.
To jest golf golfowy , najniższa liczba bajtów wygrywa.
Jak zwykle obowiązują tutaj domyślne luki .
Wyjaśnienia są mile widziane, choć nie są konieczne.
Tytuł został zredagowany, by uczynić go pangramem dla komentarza Caira coinheringaahing.
Leniwy pies jest zbyt leniwy, aby pojawić się w historii.
Dążę do stworzenia wyzwania łańcuchowego, w którym litery do wyjścia nie można obliczyć za pomocą prostych funkcji współrzędnych.
źródło
Odpowiedzi:
Stax ,
35343332 bajtyUruchom i debuguj online
Stax to język, nad którym pracuję od około 6 miesięcy. To pierwszy publiczny golf z nim. Przejdźmy do interesów.
Stax jest zwykle zapisywany w drukowanym zestawie znaków ASCII. To 34-bajtowe przesyłanie jest pakowane w wariant zestawu znaków CP437. Odpowiednia reprezentacja ascii to
Stax jest językiem stosowym, ale ma dwa stosy danych: „główny” i „wejściowy”. Większość operacji używa głównego stosu, ale dane wejściowe zaczynają się na stosie wejściowym. Instrukcje stax to przeważnie jedna lub dwie znaki sekwencji ascii. Większość z nich jest przeciążona, co oznacza, że ich zachowanie zależy od kilku najwyższych wartości na stosie.
Na wysokim poziomie program ten tworzy siatkę, wielokrotnie dodając ciągi znaków do ostatniego wiersza. Gdy ostatni rząd zapełni się, obraca siatkę zgodnie z ruchem wskazówek zegara. Na koniec odzwierciedla siatkę poziomo. Bardziej szczegółowo, program działa w ten sposób.
źródło
Węgiel drzewny ,
664036 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 16 bajtów, przyjmując tekst jako dane wejściowe. Wyjaśnienie:
Zacznij z 2
t
s z jakiegoś powodu.Pętla nad wszystkimi literami w pangramie.
Dotarliśmy już do rogu?
Przejdź w dół (lub jakikolwiek następny kierunek) o jedną linię.
Obróć kierunek drukowania o 90 ° zgodnie z ruchem wskazówek zegara.
Oblicz długość następnej strony.
Zakończ ustalanie pozycji kursora. (Węgiel wolałby, aby strona kończyła się tuż przed rogiem, abyś obrócił się na samym rogu).
Zapętlaj tyle razy, ile zajmuje bieżąca litera w alfabecie.
Jeśli nie dotarliśmy do rogu,
Zmniejsz liczbę i wydrukuj bieżący list.
źródło
Rubinowy ,
217212209208 bajtówWypróbuj online!
Spędza sporo czasu na zarządzaniu wskaźnikami, więc może być miejsce na grę w golfa.
-5 bajtów: trzykrotnie pangram przed wprowadzeniem. Dzięki Weijun Zhou .
-3 bajty: Wypełnij łańcuch wejściowy i przytnij ostatni odcinek, zamiast generować ostatni odcinek od zera.
-1 bajtów: użyj
&&
zamiast operatora trójskładnikowego o wartości jednorazowej.Wyjaśnienie:
źródło
r
il
lambdas. Na podstawie aktualnych odpowiedzi ostatnia noga wydaje się być kłopotliwa, chociaż nie wtedy, gdy napisałem mój fragments*=3
w ogóle, a także pominięcie0
w?:
operatora. tio.run/…0
jednak, bo w przeciwnym razie Ruby wyciągniec+=1
kolejną linię i wykona ją tylko przez większość czasu. I miłe wyzwanie!