Celem tego kodu golfowego jest stworzenie interpretera dla języka programowania HQ9 +
W tym języku programowania dostępne są 4 polecenia:
- H - drukuje „Witaj, świecie!”
- Q - drukuje kod źródłowy programu
- 9 - drukuje tekst piosenki „99 butelek piwa”
- + - zwiększa akumulator
Zasady:
- Ponieważ akumulator nie jest zdefiniowany, możesz zignorować polecenie +
- Twój program powinien poprosić o podanie danych wejściowych (będzie to kod źródłowy) lub kod źródłowy zostanie odczytany z pliku
- Nie wolno umieszczać tekstu „99 butelek piwa” w pliku ani czytać tekstu z pliku
- Nie możesz używać algorytmu kompresji, takiego jak GZip lub BZip do kompresji tekstu piosenki: musisz stworzyć swój własny algorytm kompresji. Nie musi to być skomplikowany algorytm, ale spróbuj skompresować tekst tak bardzo, jak to możliwe (pamiętaj: to jest golf-golf, kod z najmniejszą liczbą bajtów wygrywa)
- Jeśli kod źródłowy zawiera znak inny niż H , Q , 9 lub + , wówczas przed uruchomieniem jakichkolwiek poleceń wypisz „Kod źródłowy zawiera nieprawidłowe znaki” ! Oznacza to, że jeśli
H1
na przykład jest kod źródłowy , nie należy generować danych wyjściowychHello, world!
przed wypisaniemSource code contains invalid characters
. Nie, natychmiast wyjścieSource code contains invalid characters
- Jeśli twój tłumacz akceptuje zarówno wielkie, jak i małe litery, to dostajesz -8 do liczby znaków
Powodzenia!
code-golf
interpreter
hq9+
ProgramFOX
źródło
źródło
Odpowiedzi:
APL (Dyalog) (326–8 = 318)
Wklej go w oknie edytora i zadzwoń
H
. Dane pobierane są z klawiatury.źródło
Mathematica,
349 346341 znakówźródło
If[StringMatchQ[3, "a"], x, y]
C,
599587487481467 znakówJestem pewien, że można to pokonać. W końcu używam C. Jest powód, dla którego nie widzisz zbyt wielu zwycięskich wpisów do golfa napisanych w C. To teraz 467 znaków dzięki przestępstwu
#define
.Podaj plik źródłowy HQ9 + jako argument wiersza poleceń.EDYCJA: Teraz akceptuje źródło ze standardowego wejścia, a nie plik. Uruchom program, zacznij pisać kod, CTRL- Cpo zakończeniu, aby go uruchomić.
Kompiluje przynajmniej w MinGW / GCC z:
gcc -o hq9+.exe hq9+.c
Powinien działać w MSVC, ale nie miałem ochoty tworzyć całego rozwiązania tylko do tego. :)
Lub:
źródło
C
i kilka wcześniejR;
. Można również zgolić 8 znakówp[s++]=0;
po pętli wejściowej, aby uprościć drukowaniep
.Python 2 -
452453443 bajtówBleh To było już ponure, ale potem odkryłem błąd, który kosztował mnie bajt do naprawienia. Bleh
(Kiedyś nie włączałem
+
do wyjściaQ
. Na przykład dane wejścioweQ+++
dawały dane wyjścioweQ
.)Zapisano niektóre znaki, nie wychodząc z nieprawidłowego wejścia, jak myślałem, że powinieneś.
Wersja wyjaśniona już wkrótce.Poddałem się. Ledwo rozumiem, jak działa ta potworność. Jeśli będzie zapotrzebowanie, spróbuję jeszcze raz, ale do tego czasu tak się nie dzieje.źródło
exit
używasz nieprawidłowego znaku, po prostu wyświetl wiadomość, aby zapisać tam 7 znaków.99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *99* bottles of beer on the wall.
Powinno to brzmieć:99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *98* bottles of beer on the wall.
+
. Powinieneś to zignorować+
, nie dać błęduHQHH
, powinienem powiedziećHello World!HQHHHelloWorld!Hello World!
Perl, 325–8 = 317
Rozszerzony:
źródło
Rubin,
364360 - 8 = 352Wciąż jest dużo miejsca na ulepszenia. Skradziono stąd kod 99 butelek .
źródło
No more bottles of beer on the wall
po1 bottle
sekcji. to jestGo to the store...
1 bottle of beer on the wall, 1 bottle of beer on the wall, take one down, pass it around, no more bottles of beer on the wall. No more bottles of beer on the wall, no more bottles of beer, go to the store, buy some more, 99 bottles of beer on the wall.
Haskell, 298
jest to dość proste.
%
zwraca wynik polecenia (podany kod źródłowy do użycia naQ
).d
zwraca piosenkę 99 butelek z linią śmieci na początku z powodów golfowych. wszystko jest zawinięte w interakcję (możesz chcieć użyćg
zamiastmain
podczas testowania)źródło
<interactive>:8:5: parse error on input ‘=’
.let
aby wstawić definicje (powoduje to przerwanie przy wstawianiu wielu definicji niepoddzielonych przez;
) lub uruchomić kod z pliku.main
, mówi, że kod źródłowy zawiera nieprawidłowe znaki, gdy próbuję wykonaćH
. Gdy próbuję uruchomićg
zamiastmain
, natychmiast powoduje błąd.main
nie działa, ponieważ dołączony nowy wiersz nie jest poleceniem prawnym. Dlatego zaleciłem użycieg
zamiast tego. Jeśli chodzi og
,putStrLn $ g "H"
nie działa poprawnie?J - 444 bajty
Podobał mi się numer, więc przestałem grać w golfa. Proszę bardzo, funkcja pojedynczego wyrażenia!
Przykłady:
źródło
Fortran 528
470481Wymaga skompilowania z-fpp
flagą (+3, aby zdobyć) 1, aby użyć dyrektyw przetwarzania wstępnego (co pozwala zaoszczędzić znacznie więcej niż 3 znaki, więc nie mam nic przeciwko). Rozróżnia także małe i duże litery, więc jest -8: D. Zapisano 5 znaków, nie przetwarzając wstępnieendif
tak, jak i tak jest używane raz .Wymaga, aby plik miał
.F90
rozszerzenie (warto go nazwaćhq9+.F90
), aby kompilator wymusił wstępne przetwarzanie. W kodzie rozróżniana jest wielkość liter; sprawia, że rozróżnia małe i duże litery dodaje około 16 znaków, więc nie warto zapisywać 8 znaków. Moja poprzednia odpowiedź nie uwzględniała zmiany liczby mnogiejbottles
na9
; ta wersja to poprawia (i niestety dodaje o wiele więcej znaków).Wygląda o wiele lepiej nieprzetworzony i nieprzetworzony (prawdopodobnie dlatego, że widać, co się dzieje):
źródło
.cc
aby uniknąć konieczności używania-lstdc++
flagi.Python 2, 340 - 8 = 332
źródło
Lua 443 - 8 = 435
464 - 8 = 456Udało mi się zapisać 21 znaków, używając wielu
if-end
s zamiastif-elseif-end
. Miałem też dodatkowe białe przestrzenie pływające po kilku)
.Jestem dość zadowolony z tego, chociaż nie jest on znacznie krótszy niż moja odpowiedź w Fortranie . Kod 99 butelek piwa został zmodyfikowany z tej odpowiedzi przez Alessandro . Nie mamy golfa, mamy
źródło
if s in'Hh'
in
służy do iteratorów pętli for, a nie porównań; dostaniesz błąd, jeśli go tam włożysz. Istnieją tutaj trzy opcje: (1) użyjmatch
w każdej linii, (2) użytkowniks=='h'or s=='H'
w każdej linii, (3) zrób to tak, jak to zrobiłem. Wyraźnie (3) jest krótszy niż (1) i (2).Julia, 362
źródło
Tcl, 515
Tylko trochę golfa, wciąż mniejszy niż C i poprawne 99 butelek końca piwa.
źródło
regexp
. Możesz zagrać wJavaScript (ES6), 385
Nie zdecydowałem się na rozróżnianie wielkości liter, kosztowałoby zbyt wiele znaków. Nawet nie blisko niektórych innych wpisów, ale mimo to było fajnie!
JavaScript, 344
Stworzyłem wersję z mniej kompletną wersją piosenki:
ale po obejrzeniu innych wpisów (i po tekstach, kto wiedział!), pomyślałem, że to trochę głupiec!
źródło
Go to the store, buy some more, *99* bottles of beer on the wall
, nie*No more* bottles of beer on the wall
Q
nie działa dla mnie.Q
miałem to zrobić, i podałem kod źródłowy funkcji zamiast danych wejściowych ... To był pierwotnie mój powód, aby to zrobić w JS ta część byłaby łatwa, ale teraz wiem, że wcale nie jest to wymagane!C, 562 bajtów
Jako pełny program. Pierwszym argumentem jest program HQ9 +. Z rzeczywistym akumulatorem. Postanowiłem nie używać definicji.
Wersja bez golfa:
źródło
Java, 546 bajtów
To jest mój pierwszy kod golfowy. Jestem pewien, że moglibyśmy z tym zrobić więcej. Odczytuje dane wejściowe jako argument wiersza poleceń. Kod piwa „pożyczony” z „99 butelek piwa” odpowiedź java (twórcze elementy wspólne)
Daj mi znać, jeśli argumenty wiersza poleceń są niedopuszczalne. To była świetna zabawa!
źródło
Excel VBA, 489 bajtów
Unindented:
(z naciskiem na czytelność)
Zmień nazwę domyślnego wywołania Modułu 1 na M za
pomocą
h "+++++++++Your Code"
To będzie działać również w innych aplikacjach biurowych, zmieniając ActiveWorkbook na odpowiedni typ dokumentu
źródło
For n=1 To
naFor n=1To
(wcześniej usuwając spacjęTo
) i 4 bajty, konwertując wszystkie instancjeDebug.? 2;
naDebug.?2;
(usuwając białe spacje po?
słowie kluczowym)