Interpretuj DOGO
DOGO to mniej znany język programowania. Chociaż oryginalny DOGO (język żartów z postu Usenet) nigdy nie został zaimplementowany, utworzono język podobny do niego. Polecenia dla tego języka to:
+===========+================================================================+
| Command | Description |
+===========+================================================================+
| SIT | If the value of the current memory cell is 0, jump to STAY. |
+-----------+----------------------------------------------------------------+
| STAY | If the value of the current memory cell is not 0, jump to SIT. |
+-----------+----------------------------------------------------------------+
| ROLL-OVER | Select the next operation from the operation list. |
+-----------+----------------------------------------------------------------+
| HEEL | Execute the currently selected operation. |
+-----------+----------------------------------------------------------------+
Operacje to:
+========+=======================================================+====+
| Number | Description | BF |
+========+=======================================================+====+
| 0 | Increment current memory cell. | + |
+--------+-------------------------------------------------------+----+
| 1 | Decrement current memory cell. | - |
+--------+-------------------------------------------------------+----+
| 2 | Move to next memory cell. | > |
+--------+-------------------------------------------------------+----+
| 3 | Move to previous memory cell. | < |
+--------+-------------------------------------------------------+----+
| 4 | Input a byte and store it in the current memory cell. | , |
+--------+-------------------------------------------------------+----+
| 5 | Output the current memory cell as ASCII. | . |
+--------+-------------------------------------------------------+----+
Przykłady
Witaj świecie:
roll-over roll-over heel roll-over roll-over roll-over roll-over heel heel heel
heel heel heel heel heel heel sit roll-over roll-over roll-over heel roll-over
roll-over roll-over heel heel heel heel heel heel heel heel roll-over roll-over
heel roll-over roll-over roll-over roll-over roll-over heel roll-over roll-over
roll-over roll-over roll-over stay roll-over roll-over roll-over heel roll-over
roll-over heel roll-over roll-over roll-over heel roll-over roll-over roll-over
roll-over heel heel heel heel heel heel heel sit roll-over roll-over roll-over
heel roll-over roll-over roll-over heel heel heel heel roll-over roll-over heel
roll-over roll-over roll-over roll-over roll-over heel roll-over roll-over
roll-over roll-over roll-over stay roll-over roll-over roll-over heel roll-over
roll-over roll-over heel roll-over roll-over roll-over roll-over roll-over heel
roll-over heel heel heel heel heel heel heel roll-over roll-over roll-over
roll-over roll-over heel heel roll-over heel heel heel roll-over roll-over
roll-over roll-over roll-over heel roll-over roll-over roll-over heel heel heel
roll-over roll-over roll-over roll-over heel heel heel heel heel heel heel heel
sit roll-over roll-over roll-over heel roll-over roll-over roll-over heel heel
heel heel roll-over roll-over heel roll-over roll-over roll-over roll-over
roll-over heel roll-over roll-over roll-over roll-over roll-over stay roll-over
roll-over roll-over heel roll-over roll-over heel roll-over roll-over roll-over
heel heel heel roll-over roll-over roll-over roll-over heel heel heel heel heel
heel heel heel heel heel sit roll-over roll-over roll-over heel roll-over
roll-over roll-over heel heel heel heel heel heel heel heel heel roll-over
roll-over heel roll-over roll-over roll-over roll-over roll-over heel roll-over
roll-over roll-over roll-over roll-over stay roll-over roll-over roll-over heel
roll-over roll-over roll-over roll-over heel heel heel roll-over roll-over
roll-over roll-over heel roll-over roll-over roll-over roll-over heel heel heel
heel roll-over roll-over heel roll-over heel heel heel roll-over roll-over
roll-over roll-over roll-over heel roll-over roll-over heel heel heel heel heel
heel roll-over roll-over roll-over roll-over heel roll-over roll-over heel heel
heel heel heel heel heel heel roll-over roll-over roll-over roll-over heel
roll-over roll-over roll-over heel heel roll-over roll-over roll-over roll-over
heel roll-over roll-over roll-over roll-over roll-over heel
Zasady
- Każde zgłoszenie powinno być pełnym programem lub funkcją. Jeśli jest to funkcja, musi być uruchomiona, wystarczy dodać wywołanie funkcji na dole programu. Wszystko inne (np. Nagłówki w C) musi zostać uwzględnione.
- Jeśli to możliwe, proszę podać link do strony internetowej, na której można przetestować kod.
- Twój program nie może napisać niczego
STDERR
(lub czegoś podobnego). - Możesz wziąć dane wejściowe z
STDIN
(lub najbliższej alternatywy w twoim języku) lub jako argument. - Standardowe luki są zabronione.
Punktacja
Programy są oceniane według bajtów . Domyślny zestaw znaków to UTF-8, jeśli używasz innego, proszę podać.
Poza tym tak jest golf-golf, a najniższa liczba bajtów zostanie uznana za zwycięzcę!
Zgłoszenia
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Tabela liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aktualizacja:
Niestety nie dla wyjaśnienia sit
i stay
polecenia bardzo dobrze. Są, jak powiedział @ user6245072, jak [
i ]
w BF.
Aktualizacja 2:
Aby wyjaśnić pytania @ KennyLau:
- Domyślna operacja to
0
. - Pamięć składa się z 8-bitowych komórek.
- Komórki zawijają się przy przepełnieniu / niedopełnieniu.
- Dane wejściowe są wymagane do operacji 4.
źródło
sit lie-down roll-over play-dead heel
1
mówi „zwiększ kolejną komórkę”, ale odpowiedni kod BF to „zmniejsz bieżącą komórkę”. Które z nich jest prawidłowe zachowanie?Odpowiedzi:
Rubinowy, 287 bajtów
Działa na nieskończonej taśmie w obu kierunkach. Dane wejściowe DOGO to plik w wierszu poleceń. Jeśli nie ma argumentu wiersza poleceń, program DOGO nadal będzie działał, jeśli zostanie przekazany jako STDIN, chyba że użyje operacji
3
(pobierz bajt ze STDIN), w którym to przypadku nie mam pojęcia. W każdym razie najlepsze jest wprowadzanie plików.Zakłada, że w pliku programu nie ma innego tekstu oprócz czterech poleceń i białych znaków.
Hello World Demonstration
źródło
Python 3,
388398373371 bajtówZakłada 256 komórek pamięci. Po prostu prosta implementacja, łatwa do pokonania, prawdopodobnie może być bardziej golfa. Wypróbuj repl.it .
Dzięki @EasterlyIrk za uświadomienie mi, że Python 3 jest znacznie krótszy niż Python 2.
EDYCJA: Uświadomiłem sobie, że podczas drukowania uwzględniłem tylko przepełnienie / niedopełnienie, a nie rzeczywistą wartość.
Dzięki @ KevinLau-notKenney za zaoszczędzenie 25 (!) Bajtów z mnożeniem list i operacjami odwracania operatora
EDYCJA: -3 bajty przez wstawienie 256 do zmiennej, -4 bałagan z operatorami, +8 upewnienie się, że to małe litery
źródło
sys.stdout.write
? Dlaczego nieprint
?print(...,end='')