Podoba mi się koncepcja 0815 , z wyjątkiem tłumacza na stronie twórcy zwraca błąd 404. Postanowiłem więc poprosić was wszystkich o pomoc!
Podstawy
0815 opiera się na trzech (3) rejestrach i kolejce. Rejestry noszą nazwy X, Y i Z, przy czym X jest tylko do zapisu, Z jest tylko do odczytu, a Y jest rejestrem „pomocniczym”, do którego nie można uzyskać bezpośredniego dostępu. Wszystkie rejestry zaczynają się od zera. Wszystkie liczby są w systemie szesnastkowym.
Instrukcje
Uwaga: niektóre instrukcje pobierają parametry, które są sformatowane tak, jak }:hello:
gdzie :hello:
jest parametr. Inna uwaga: niektóre opisy instrukcji są niejasne, więc zabrałem ze sobą pewne swobody. (Oryginalne instrukcje tutaj )
~
oznacza, że parametr jest wymagany
----------|---|--------------------------------------------
~Move | < | <:8: will write 8 to X (parameter required)
----------|---|--------------------------------------------
Swap | x | Swap X and Y
----------|---|--------------------------------------------
~Label | } | }:hello: makes a label called 'hello'
----------|---|--------------------------------------------
Input | | | Set X to an integer from input in
Number | | hexadecimal greedily (regex: [0-9A-F]+)
----------|---|--------------------------------------------
Input | ! | Set X to the ASCII code of one ASCII
ASCII | | character in the input
----------|---|--------------------------------------------
Print | % | Prints an integer stored in Z
number | | (hexadecimal base)
----------|---|--------------------------------------------
Print | $ | Prints an ASCII char stored in Z
ASCII | |
----------|---|--------------------------------------------
Roll | | Rolls all registers to the left
Registers | ~ | X <- Y <- Z <- X
Left | | After roll: X = Y, Y = Z and Z = X
----------|---|--------------------------------------------
Roll | | Rolls all registers to the right
Registers | = | X -> Y -> Z -> X
Right | | After roll: Y = X, Z = Y and X = Z
----------|---|--------------------------------------------
~Jump if | ^ | ^:loop: Jumps to the label 'loop' if Z is
not zero | | not zero
----------|---|--------------------------------------------
~Jump if | # | #:loop: Jumps to the label 'loop' if Z is
zero | | zero
----------|---|--------------------------------------------
Instrukcje kolejki
----------|---|--------------------------------------------
Clear | ? | Clears the queue
----------|---|--------------------------------------------
Enqueue | > | Enqueue the number stored in Z
----------|---|--------------------------------------------
Dequeue | { | Dequeue a number into X
----------|---|--------------------------------------------
| | Rolls the queue to the left, wrapping as
Roll | | necessary. The first number becomes the
Queue | @ | last; second becomes first and so on. Can
Left | | take a parameter to roll a certain number
| | of times. @:b: rolls 11 times.
----------|---|--------------------------------------------
Roll | |
Queue | & | The opposite of @
Right | |
----------|---|--------------------------------------------
Instrukcje arytmetyczne
----------|---|--------------------------------------------
Add | + | Z = X + Y
----------|---|--------------------------------------------
Subtract | - | Z = X - Y
----------|---|--------------------------------------------
Multiply | * | Z = X * Y
----------|---|--------------------------------------------
Divide | / | Z = X / Y
| | Y = remainder
----------|---|--------------------------------------------
Przykładowe programy
Witaj, świecie: (lekko golfowy)
<:48:~$<:65:~$<:6C:~$$><:6F:~$>@<:2C:~$<:20:~$<:57:~${~$<:72:~${~$<:64:~$
Kot:
}:_t:!~$^:_t:
Maszyna Prawdy:
|~}:i:%^:i:
To jest golf golfowy , więc wygrywa zgłoszenie z najmniejszą liczbą bajtów!
źródło
~
i~
w swoim „roll rejestry” poleceń? Czy masz przykładowy program, którego ludzie mogą używać do testowania?Odpowiedzi:
Pypeć ,
321262248 bajtówZnacznie skrócone za pomocą eval i niektórych sztuczek złożoności Kołmogorowa.
Wypróbuj online!(Przykładem jest program Collatz / hailstone numbers z witryny autora języka).
Uwagi:
[0-9A-F]+
). Jeśli, zgodnie z|
instrukcją, kolejnym znakiem wejściowym nie jest0-9A-F
, odczyt kończy się niepowodzeniem i powoduje potencjalnie dziwne zachowanie. Oznacza to, że parzysty nieparzysty program autora nie działa tak, jak napisano ... Nie jestem pewien, jak oczekiwał odczytywania wielu odczytów liczb, ale po prostu zaimplementowałem zgodnie z tym, co podano w specyfikacji.Moja nie golfowa wersja z komentarzami:
źródło
haxe, 987 bajtów
lub z pewnymi odstępami:
Udało ci się zagrać w golfa z haxe? Łał.
źródło
Python 3, 1320 bajtów
Wersja bez golfa, a także analiza (i, w razie potrzeby, poprawionych wersji) programów testowych, można znaleźć w tej treści .
Decyzje projektowe:
Występują problemy z przykładowymi programami używającymi CR jako nowej linii (czasami), co powoduje, że moja powłoka zastępuje bieżącą linię, zamiast uruchamiać nową. Wpływa to na programy Sekwencji Fibonacciego i 99 Butelek Piwa. Ostatni wiersz 99 butelek piwa również nie jest drukowany poprawnie, a ja wciąż badam, dlaczego.
źródło
Scala,
3,1232.8442.6262,540 bajtówOprócz ograniczeń przedstawionych w pytaniu, ten tłumacz został napisany tak, aby w jak największym stopniu kierować się zasadami PR. Konkretnie:
Dokonano tego, z wyjątkiem czterech linii kodu, które sterują główną pętlą interpretera. Niezmienne struktury były tutaj bardzo trudne do wykorzystania, ponieważ stan rejestrów steruje przepływem sterowania pętli (konkretnie dwie instrukcje GOTO). Nadal zastanawiam się, jak przekonwertować go, aby używał czystych i niezmiennych struktur, ale nie ma to znaczenia dla wyzwania golfowego.
Zamieszczę wersję niegolfowaną na Github i podam link, kiedy to zrobię. Na razie opublikuję oryginalną wersję tutaj:
źródło
Flex / C ++,
848838 bajtówKompilowany z:
Może się również kompilować z innymi
lex
es, ale nie sprawdziłem. Działa w dwóch krokach, więc skoki do przodu są obsługiwane poprawnie. Nazwy etykiet mogą zaczynać się od cyfry, ponieważ zdarza się to więcej niż jeden raz w przypadkach testowych. Hex literały mogą być pisane tylko wielkimi literami, zgodnie ze specyfikacją.Przechodzi wszystkie przypadki testowe, w tym te znalezione na Wiki Esolangs i na stronie 0815. Obsługa błędów nie istnieje, a wyjście na nieznanej etykiecie nie jest taktowne, w końcu to jest golf golfowy.
Przygotowuję niefunkcjonalnego (i znacznie ładniejszego) interpretera do wydania, aby OP mógł ciągle majstrować przy 0815. Bądź na bieżąco :)
źródło
\r
zamiast\n
nowej linii (oldschoolowy Mac OS?), Więc jeśli chcesz zobaczyć coś wydrukowanego na ekranie, użyj./0815 99bb.0815 | tr "\r" "\n"
. To samo dotyczy Fibonacciego.Common Lisp, 1088 bajtów
Nie golfił
Z opcjonalnym śledzeniem w czasie wykonywania.
Fibonnaci
Makroekspansja
Wydajność
Może później więcej wyjaśnień
źródło
Python 3,
1573, 1499 bajtówUruchamia przykładowe programy na stronie http://paulo-jorente.de/poncho/esolang/0815/ i implementuje wszystkie instrukcje (nawet napisz te, zgodnie z oryginalną specyfikacją).
Wykonuje plik źródłowy przekazany w wierszu polecenia.
źródło
j=raw_input
naj=input
), ale nie działa dla mnie w programie „99 butelek piwa”. Próbka („//” dla nowego wiersza): „0x63 // 0x63t piwa na ścianie // 0x62 jeden w dół i podaj go wokół // 0x62tles piwa na ścianie // 0x62tles piwa na ścianie // 0x61 jeden i