Napisz dwa programy w kształcie trójkąta (piramidy).
Pierwszy powinien być skierowanym do góry trójkątem tekstowym o minimalnej szerokości podstawy wynoszącej trzy znaki. Więc miałby taką strukturę
X
XXX
lub
X
XXX
XXXXX
lub
X
XXX
XXXXX
XXXXXXX
lub większy. Każdy z nich X
ma zostać zastąpiony znakami twojego rzeczywistego kodu, którym może być cokolwiek oprócz terminatorów linii (więc X
mogą być spacjami). Wszystkie X
muszą zostać zastąpione, a spacje i znaki nowej linii, które pomagają utworzyć kształt trójkąta, muszą pozostać bez zmian.
Drugi program musi mieć taki sam rozmiar i kształt jak pierwszy, z wyjątkiem tego, że trójkąt będzie skierowany w dół.
Więc jeśli wygląda twój pierwszy program
X
XXX
XXXXX
wtedy wyglądałby twój drugi program
yyyyy
yyy
y
gdzie każdy y
jest znakiem, który musisz wypełnić swoim rzeczywistym kodem (prawdopodobnie innym niż X
kod). Spacje i znaki nowej linii również muszą pozostać takie same.
Twoim zadaniem jest napisanie tych programów w taki sposób, aby każdy z nich wypisał (w stdout lub najbliższą alternatywę) tytuł odrębnej piosenki Beatlesów , nie biorąc żadnego wkładu. Ten artykuł z Wikipedii posłuży jako nasza oficjalna lista piosenek dla The Beatles. Wyjście powinno być jednym z tytułów dokładnie takich, jak wymienione, np I Want You (She's So Heavy)
.
Jest to jednak dość łatwe, nawet w przypadku wymagań dotyczących dziwnego trójkąta. Więc stworzymy inny program z pierwszych dwóch, który musi wypisać kolejny tytuł piosenki.
Łącząc trzy kopie każdego z dwóch trójkątnych programów, możemy stworzyć trzeci program w kształcie sześciokąta.
Gdyby szerokość podstawowa pierwszego programu wynosiła trzy, wyglądałoby to tak:
XyyyX
XXXyXXX
yyyXyyy
yXXXy
Gdyby szerokość podstawy wynosiła pięć, wyglądałoby to tak:
XyyyyyX
XXXyyyXXX
XXXXXyXXXXX
yyyyyXyyyyy
yyyXXXyyy
yXXXXXy
Ten program (uruchamiany ze spacjami i znakami nowej linii, jak inne) musi generować kolejny tytuł piosenki Beatlesów, podobnie jak dwa pierwsze programy. Również:
- Twoje trzy programy muszą wyświetlać różne tytuły piosenek.
- Dozwolone są tylko tytuły piosenek o długości ośmiu znaków lub dłuższych.
- Możesz wybrać tylko jeden z nich
Revolution
,Revolution 1
aRevolution 9
ponieważ tytuły są bardzo podobne. - Musisz wybrać trzy ulubione piosenki Beatlesów. (Cóż, spróbuj .)
Pamiętaj, że wymagane są rzeczywiste programy. Funkcje nie są dozwolone. Odczytywanie własnego kodu źródłowego w dowolnym programie jest również niedozwolone.
Przykład
Jeśli twoim pierwszym programem był
A
AAA
AAAAA
może wyjść Across the Universe
.
Potem twój drugi program
bbbbb
bbb
b
może wyjść Revolution
.
Następnie połączone w program sześciokątny
AbbbbbA
AAAbbbAAA
AAAAAbAAAAA
bbbbbAbbbbb
bbbAAAbbb
bAAAAAb
wyjście może być Get Back
.
Punktacja
Wygrywa zgłoszenie o najmniejszej szerokości podstawy trójkąta. W prawdopodobnym przypadku więzi wygrywa zgłoszenie o największej zsumowanej długości trzech tytułów piosenek.
źródło
Odpowiedzi:
GolfScript, szerokość = 9 znaków, tytuły = 33 znaki
Sześciokąt
Prints Let It Be . (9 znaków)
Wypróbuj online.
Jak to działa
Token
"Let It Be"
w pierwszym wierszu popycha ciąg Let It Be na stosie.Drugi wiersz zaczyna się
}
od nieudokumentowanego „super komentarza”, który natychmiast przerywa wykonanie.Przed wyjściem GolfScript drukuje zawartość stosu.
Trójkąt X.
Drukuje Twist and Shout . (15 znaków)
Wypróbuj online.
Jak to działa
Pierwsze dwie linie wypychają ciąg
"\n }"
, który polecenie;
odrzuca ze stosu.Pozostałe linie zawierają znaki
"Twi"
,"st an"
i"d Shout"
, które spychają ciąg Twist i krzyczeć na trzy kawałki.Przed wyjściem GolfScript drukuje zawartość stosu.
Trójkąt Y.
Drukuje wczoraj . (9 znaków)
Wypróbuj online.
Jak to działa
Tokeny
Let
,It
aBe
na pierwszej linii są niezdefiniowane, więc nic nie robić.Poniższe trzy linie zawierają znaki
"Yeste"
,"rda"
i"y"
, które spychają ciąg Wczoraj w trzech kawałkach.}
Na ostatniej linii nic nie robi; program i tak by się skończył.Jeszcze raz GolfScript drukuje zawartość stosu przed wyjściem.
źródło
Befunge -93, szerokość = 13
15, tytuły = 3124znakówPrzerwa w zasilaniu zeszłej nocy uniemożliwiła mi zaktualizowanie tego, kiedy to rozgryzłem, ale udało mi się zmniejszyć szerokość trójkąta i zwiększyć długość utworu!
Program do wskazywania: „Dig a Pony”, 10 znaków:
Wyjaśnienie
NAPRAWDĘ skorzystałem z owijania Befunge i wybrałem „Dig a Pony” specjalnie, ponieważ miał miejsce na 6. pozycji. Pozwala to na przepływ programu w celu przejścia przez nazwę utworu. Wypróbuj go w tłumaczu online, aby zobaczyć, jak to działa.
Program skierowany w dół: „If I Fell”, 9 znaków:
(Okres jest obcy i uwzględniany jest tylko po to, aby pojawiały się inne linie).
Wyjaśnienie
Jedyne istotne wiersze tutaj to dwie pierwsze. Użyłem sztuczki polegającej na zawijaniu (wskaźnik instrukcji jest natychmiast wysyłany w lewo), aby ścisnąć jeszcze jedną postać. Drugi wiersz wypisuje nazwę utworu.
Łącznie: „Jedź moim samochodem”, 12 znaków:
Oto to samo, ale z dodanymi liniami pokazującymi sześciokąt i trójkąty.
Wyjaśnienie
Tutaj zaczynają działać trzecia i czwarta linia trójkąta skierowanego w dół. Na krawędzi obu trójkątów znajduje się kilka przekierowań, które służą do przesuwania wskaźnika instrukcji przez te dwie linie i popychania „Jedź moim samochodem” na stos. Następnie jest drukowany za pomocą
>:#,_@
bitu w trójkącie skierowanym w górę. Nawiasem mówiąc, używane są zarówno lewe, jak i prawe trójkąty skierowane w górę.Tam może być jakiś sposób, aby wykorzystać więcej pustej przestrzeni, ale myślę, że mój czas jest lepiej wydać na inne pytania. : P
źródło
Python 2, szerokość = 51
Tak, cóż ... Python.
Komentarze w Pythonie zaczynają się od
#
, więc większość wierszy to tylko komentarze. W przypadku trójkąta skierowanego w górę jedyne, co wykonuje, toktóry drukuje
Sgt. Pepper's Lonely Hearts Club Band
.Dla trójkąta skierowanego w dół wykonujemy
który drukuje
Yellow Submarine
, ponieważ funkcjaid
jest prawdziwa.Kiedy jednak połączymy programy, wszystko, co się stanie, to powyższe dwa wiersze w sekwencji. Ponieważ na końcu pierwszego zestawu linii
id=0
, który jest teraz falsy, końcowy wynik jest taki, że sczepiamy(Reprise)
go do końca, uzyskując wynik końcowySgt. Pepper's Lonely Hearts Club Band (Reprise)
(Calvin powiedział, że jest w porządku ).źródło
Bałwan 1.0.2 , szerokość = 13
Wreszcie! Wyzwanie, w którym Bałwan może się dobrze rozwijać! : D: D
Cięcia służą głównie do celów estetycznych, a większość z nich można zastąpić spacjami (ale to by wyglądało o wiele nudniej). W przypadku komentarzy konieczne są niektóre ukośniki.
Program A (wyjście:)
Birthday
:Ten jest dość prosty. Pierwszy znak (
}
) ustawia nasze aktywne zmienne, potem jest mnóstwo komentarzy / no-ops. Następnie zapisuje ciąg"Sun King\n "
i natychmiast go odrzuca (poprzez*
przechowywanie go w permavar, którego nigdy nie używamy). Następnie przechowuje"Birthday\n"
.]]
jest tutaj nieobecny, ponieważ[[ foo ]]
jest komentarzem blokowym w Snowman, ale ponieważ nie ma[[
wcześniejszego dopasowania]]
(w samym programie A), po prostu nic nie robi. Następnie8AaL
pobiera pierwsze 8 znaków ciągu,sP
drukuje go i[[
komentuje resztę programu (ponieważ znowu nie ma pasującego tekstu)]]
.Program B (wyjście:)
Get Back
:Ten jest również dość prosty.
?}
jest równoważne}
(?
po prostu ustawia wszystkie zmienne na nieaktywne, co nie jest tu opcją, ale znowu, ważne później). Następnie zapisuje ciąg"Get Back"
, wykonuje kilka operacji bez (//
do końca linii jest zawsze komentarzem) i drukuje za pośrednictwemsP
.Pełny program
Zgadłeś, że
Sun King
1 .Spójrzmy na tę linię po linii:
Linia 1
To ustawia nasze aktywne zmienne, podobnie jak poprzednie programy (widzimy teraz, że
?
jest to potrzebne, aby po prostu nie włączać ich, a następnie wycofywać za pomocą}}
). Reszta linii została skomentowana.Linie 2-4
Komentarze ...
Wiersz 5
Tutaj przechowujemy ciąg
"Sun King//"
, a następnie rozpoczynamy komentarz blokowy. To zasadniczo pomija wszystko do następnego]]
.Linia 6
Wciąż w komentarzu do bloku ...
Linia 7
Tutaj wybijamy komentarz blokowy na krótki czas, aby wykonać kod
8AaLsP
. Jest to faktycznie ponownie użyte z programu A. Ponieważ wybrałem wszystkie utwory o długości 8 liter, mogę po prostu użyć tego samego kodu dla połączonego programu.Potem staje się to trochę trudne. Następnym razem, gdy wyjdziemy z komentarza do bloku, zobaczymy
8AaLsP
ponownie. Tym razem jednak wszystkie zmienne są niezdefiniowane (wywołaliśmysp
, drukuj, w trybie konsumpcji, który pozbywa się zmiennych). Ponieważaal
wymaga dwóch argumentów, a tym razem ma tylko jeden (8
), błąd i pozostawia zmienne bez zmian.Podobnie,
sp
napotyka8
, zdaje sobie sprawę, że jest to niewłaściwy typ do wydrukowania i pozostawia zmienne bez zmian.Linie 8-13
Wciąż utknąłem w komentarzu blokowym ...
Linia 14
Na koniec próbujemy jeszcze raz wywołać tę samą sekwencję print-first-8-chars, a ona ponownie zawiedzie, powodując kolejne dwa błędy. (
8
Oznacza to, że zmienne są teraz8 8
, co jest na razie poprawną liczbą zmiennychaal
, ale nadal nie są poprawnymi typami.)1: jak również cztery błędy w środowisku wykonawczym
SnowmanException
do STDERR, ale według meta nie ma to znaczenia .źródło
The slashes are mostly for aesthetic purposes, and the majority of them can be replaced with spaces (but that would make it look a whole lot more boring)
Ale to sprawia, że trudniej jest zrozumieć, co się dzieje ...> <> , szerokość = 11
Języki 2D dobrze się bawią z tym wyzwaniem.
Strzałka w górę
Przebieg programu rozpoczyna się od lewego górnego rogu, przesuwając w prawo.
/
Odbija się, a od> <> to toroidalny my ponownie od dołu. Następnie uderzamy kolejnego/
i zastanawiamy się ponownie, i popychamy postacieklawstaC
jeden po drugim na stos w""
trybie strunowym . Na koniec odbijamy do góry i uderzamy w>l?!;o
pętlę, co jest idiomatycznym sposobem drukowania całego stosu w> <>.To drukuje
Catswalk
.Strzałka w dół
Zasadniczo to samo: wypychanie postaci od samego początku i używanie luster i strzałek do kierowania przebiegiem programu. To drukuje
Birthday
.Łączny
Odpowiednie części są powyżej (wyciąłem wiele linii na środku). Używając
/
strzałki w górę, odbijamy w górę i zawijamy, ale ponieważ mamy teraz strzałkę w dół pod spodem, zamiast tego wykonywana jest część tego kodu. Następnie wypychamy odpowiednie znaki na stos i ponownie używamy pętli wyjściowej od strzałki w dół.To drukuje
Hey Jude
.źródło
Python 2, rozmiar 21
Ten program wymaga terminala kompatybilnego z ANSI ( konkretnie DOS ANSI.SYS ), ponieważ używam
\x1b[2J
do czyszczenia konsoli ORAZ przesunięcia kursora w lewy górny róg . Aby było to kompatybilne z innymi terminalami ANSI, drukuj\x1b[1J\x1b[H
(nadal może zmieścić się w sześciokącie wielkości 21). Nie byłem w stanie przetestować tej części, ponieważ nie mam terminala, który drukuje kody specjalne ANSI.Myślę, że program wygląda całkiem fajnie, podobnie jak radioaktywny symbol (chociaż cieniowanie ASCII oznacza, że kolory są odwrócone) lub ikona broni snajperskiej od Metroid Prime: Hunters.
To nie zmieścić się w rozmiarze 17, ale zapomniałem
id=0
w strzałka w górę. Nie sądzę, żebym mógł to zmniejszyć, ponieważ to wszystko musi być na jednej linii ...Ponadto kredyt trafia do Sp3000 za pomysł użycia
id
.Strzałka w górę:
Strzałka w dół:
„Hey Jude” to jedna z moich ulubionych piosenek Beatlesów, ale tak naprawdę nie znam tak wielu. Nigdy nie słyszałem dwóch pozostałych piosenek, których używam. To nie jest gatunek, którego często słucham.
źródło
\x1b[2J
działa tylko z ANSI.SYS; nie powinien nic robić w innych terminalach. Ponadto,\x1b[;H
oczekuje się całkowitą po średnikiem. Aby ustawić domyślną wartość wiersza i kolumny na 1, użyj\x1b[H
. 2.\x1b[1J\x1b[H
i\x1b[H\x1b[J
powinien działać na wszystkich terminalach ANSI. 3. W terminalach Linux można po prostu użyć\x1bc
do zresetowania terminala. 4.\x1b
może zostać zastąpiony dosłownym bajtem ESC, w przypadku, gdy pomaga to poprawić wynik.C (gcc) , szerokość podstawy = 17
Top „Hej Jude”
Wypróbuj online!
Na dole „Matchbox”
Wypróbuj online!
Sześciokąt, „Michelle”
Wypróbuj online!
źródło
gawk, długość podstawy 15
Właśnie się dowiedziałem, że nie działa z mawk : /
Nie jest to zbyt trudne, ale dorastając w latach 70., gdy The Beatles wciąż byli wszechobecni na antenie, musiałem na to odpowiedzieć. Najpierw myślałem, że awk nie pasuje, ale potem przyszło mi do głowy.
Ponieważ skrypty te zawierają bloki BEGIN i / lub END, należy powiedzieć, że nie będzie danych wejściowych do wykonania bloku END. Można to osiągnąć, naciskając Ctrl-D po uruchomieniu lub uruchamiając je w następujący sposób:
co moim zdaniem jest wygodniejsze.
echo | awk -f script.awk
będzie również działać, ale gdybym użył pustej linii jako danych wejściowych, zrobiłbym to zupełnie inaczej.Wskazuje w górę, drukuje For No One (link na Youtube)
Podstawowym kodem bez komentarzy jest to. Ponieważ
n
nie jest zdefiniowany, drukuje „For No One”, jeśli jest wywoływany sam.Wskazując w dół, drukuje Blackbird
Podstawowym kodem jest to. Jeśli
n
został zdefiniowany wcześniej, nic nie drukuje. Wymusiłem ładne wyjście z nową linią po nazwie każdego utworu, ponieważ miałem na to miejsce i ładniej wygląda na konsoli.n
jest określony w procesie; potrzebne do Hexagon.Sześciokąt, odciski Jestem bardzo zmęczony
Niezbędny kod. Teraz wreszcie
n
wykorzystano to tajemnicze . Ponieważn
trójkąt wskazujący w górę jest zdefiniowany w pierwszym wierszu, wypisuje alternatywne wyjście, a trójkąt skierowany w dół drukuje pustkę.źródło