Doskonałość / niedoskonałość
Uff, było fajnie.
Doskonałość / niedoskonałość jest kompletna tylko wtedy, gdy istnieje nieskończona liczba idealna. Jeśli tak, nazywa się to Doskonałością, a jeśli nie, to nazywa się Niedoskonałością. Dopóki ta tajemnica nie zostanie rozwiązana, zawiera ona oba imiona.
Liczba idealna to liczba, której dzielniki sumują się do liczby, więc sześć to liczba idealna, ponieważ 1+2+3=6
.
Perfekcja / Niedoskonałość ma następujące funkcje:
Perfekcja / niedoskonałość opiera się na stosie, a stos jest indeksowany od zera.
Polecenia:
p(x, y)
: wypycha x na stosie w pozycji y.
z(x, y)
: wypycha x na stos w pozycji y, pozbywa się tego, co poprzednio znajdowało się w pozycji y
r(x)
: usuwa xty element ze stosu
k(x)
: zwraca x pozycję na stosie
a(x, y)
: dodaje xiy. W połączeniu ze stringami łączy je w kolejności xy.
s(x, y)
: odejmuje y od x. z ciągami usuwa ostatnią długość (y) z x
m(x, y)
: mnoży xiy. W przypadku użycia z łańcuchami mnoży x razy długość y.
d(x, y)
: dzieli x przez y
o(x)
: drukuje x
i(x, y)
: jeśli x ma wartość true, wówczas wykonuje funkcję y
n()
: zwraca licznik, w którym blok kodu jest wywoływany.
q()
: zwraca długość stosu
t()
: dane wejściowe użytkownika
e(x, y)
: Jeśli x jest liczbą całkowitą, jeśli xiy mają tę samą wartość, to zwraca 1. jeśli y jest łańcuchem, wówczas przyjmuje długość y. jeśli x jest łańcuchem, to konwertuje y na łańcuch i sprawdza, czy są takie same, a jeśli tak, zwraca 1. W przeciwnym razie zwraca 0.
l(x, y)
: jeśli x jest większy niż y, to zwraca 1. Jeśli jest łańcuch, to używa jego długości.
b()
: zatrzymuje program.
c(x, y)
: uruchamia x, a następnie y.
Aby uzyskać ekwiwalent języka Python and
, pomnóż obie wartości razem. Dla or
dodaj wartości, a dla not
odejmij wartość od 1. Działa to tylko wtedy, gdy wartość wynosi 1 lub 0, co można osiągnąć, dzieląc liczbę samodzielnie.
Typy danych: liczby całkowite i ciągi. Ciągi są oznaczone symbolem ''
, a wszystkie liczby niecałkowite są zaokrąglane.
Składnia:
Kod składa się z zagnieżdżonych funkcji w ciągu dziesięciu {}
sekund. Na przykład, program, który dostanie się do wejścia i wydrukować je dodany będzie: {o(a(t(), t()))}
. W tle programu znajduje się licznik, który zaczyna się od 0 i przesuwa się o 1 za każdym razem, gdy wykonuje blok kodu. Pierwszy blok kodu działa w 0
i tak dalej. Po wykonaniu dziesięciu bloków kodu szósty jest wykonywany za każdym razem, gdy licznik osiągnie idealną liczbę. Nie musisz mieć wszystkich dziesięciu bloków kodu, aby program działał, ale potrzebujesz 7, jeśli chcesz utworzyć pętlę. Aby lepiej zrozumieć, jak działa ten język, uruchom następujący program, który drukuje licznik za każdym razem licznik osiągnie doskonały numer: {}{}{}{}{}{}{o(n())}
.
Tłumacz można znaleźć tutaj: repl.it/GL7S/37 . Wybierz 1 i wpisz swój kod w terminalu lub wklej kod na code.perfect
karcie i wybierz 2 po uruchomieniu. Będzie to miało sens, gdy spróbujesz.
Dowód kompletności Turinga / brak kompletności Turinga.
Zgodnie z tym artykułem dotyczącym wymiany stosów inżynierii oprogramowania , kompletny Turing musi mieć możliwość warunkowego powtarzania skoku oraz mieć możliwość odczytu lub zapisu pamięci. Może odczytywać / zapisywać pamięć w postaci stosu i może zapętlać się, ponieważ szósty blok kodu jest wykonywany za każdym razem, gdy licznik osiągnie idealną liczbę. Jeśli istnieje nieskończona liczba liczb doskonałych, może zapętlać się w nieskończoność i Turing jest kompletny, a poza tym nie jest.
Interaktywny interpreter znaczników cyklicznych, który pobiera 5 znaków, 1 lub 0, jako dane wejściowe:
{p(t(),0)}{(p(t(),0)}{p(t(),0)}{p(t(),0)}{p(t(),0)}{p(0,0)}{c(i(e(k(s(q(),k(0))),0),c(r(q()),i(l(k(0),0),z(s(k(0),1),0)))),i(e(k(s(q(),k(0))),1),c(z(a(k(0),1),0),i(e(k(q()),1),p(k(s(q(),k(0))),1)))))}
Można go rozszerzyć, aby pobierał dowolną liczbę znaków jako dane wejściowe. Może to wymagać nieskończonych danych wejściowych, ale tylko wtedy, gdy istnieją nieskończone liczby idealne!