Utwórz język i implementację podobne do Muriela


9

Muriel to język, w którym jedynym sposobem na zapętlenie jest stworzenie quine i wykonanie go. Twoim zadaniem jest stworzenie własnego języka za pomocą tej właściwości i implementacja go w istniejącym języku.

Zdefiniujemy język podobny do Muriela w następujący sposób:

  1. Ma wbudowane polecenie do wykonywania kodu w swoim własnym języku, podobnym do @polecenia Muriela lub pytona exec.
  2. Jest ukończony.
  3. Jeśli usuniesz wbudowane polecenie wykonania, nie będzie ono już Turing zakończone.

Muriel jest podobny do Muriela z @wbudowanym poleceniem wykonania. Smurf jest również podobny do Muriela (jego wbudowane polecenie wykonania jest x). Python nie jest podobny do Muriela, ponieważ jeśli go usuniesz, nadal jest ukończony exec.

Twoim zadaniem jest stworzenie języka programowania podobnego do Muriela, a następnie zapewnienie jego implementacji w wybranym języku. Twój wynik to długość implementacji, którą próbujesz zminimalizować.

Uwagi:

  1. Twoje wbudowane wykonanie nie musi działać dokładnie tak jak Muriel. Od Ciebie zależy, jak poradzi sobie z zakończeniem programu potomnego, błędami, określaniem zakresu itp.
  2. Językiem piszesz wdrożenie nie może sam w sobie być Muriel-podobne. (Jest tak, że @nie jest to prawidłowy wpis.) Musiał także istnieć przed tym postem.

Czy Niedociążenie jest językiem podobnym do Muriel?
alephalpha

@JerryJeremiah Czy moja edycja czyni to jaśniejszym?
PyRulez

@alephalpha To wiki mówi „Bez ^ pozostały program zawsze będzie się zmniejszał, ostatecznie zatrzymując się”. Jeśli to prawda, to tak, Niedociążenie jest podobne do Muriela.
PyRulez

Co robisz, jeśli Twój język docelowy ma wiele evalpoleceń? (Np. Python execi eval) Wymagają usunięcia wszystkich z nich, aby stracić TCness?
CalculatorFeline

1
@PyRulez Myślę, że powinien to być konkurs popularności, a nie golfowy, ponieważ wybór języka implementacji sprawiłby, że byłoby to wyzwanie dla kameleona
Uriel

Odpowiedzi:


3

Python 3 i „Minimalny podzbiór TC niedociążenia, ale ze znakami zmienionymi na 2019, odwróconymi i 0na górze”, 156 bajtów

c=input()
n=1
t=c
s=[]
while c:
 *c,i=c
 if n:
  if"6">i:n+=int(i)-1
  if n:t=[i]+t
  else:s+=[t];t=[]
 elif"2"==i:n=1
 elif"2">i:s+=s[-1:]
 else:c+=s.pop()

Wypróbuj online!

Objaśnienia w nagłówku, kod komentarza w stopce.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.