Perfektion / Unvollkommenheit
Puh, das hat Spaß gemacht.
Perfektion / Unvollkommenheit ist nur dann vollständig, wenn es unendlich perfekte Zahlen gibt. Wenn es welche gibt, nennt man sie Perfektion, und wenn es keine gibt, nennt man sie Imperfektion. Bis dieses Rätsel gelöst ist, enthält es beide Namen.
Eine perfekte Zahl ist eine Zahl, deren Teiler sich zur Zahl addieren, also ist sechs eine perfekte Zahl, weil 1+2+3=6
.
Perfektion / Unvollkommenheit hat folgende Funktionen:
Perfektion / Unvollkommenheit ist stapelbasiert, mit einem Null-Index-Stapel.
Befehle:
p(x, y)
: schiebt x in die y-te Position zum Stapel.
z(x, y)
: drückt x in der y-ten Position auf den Stapel, entfernt das, was vorher in der y-ten Position war
r(x)
: Entfernt den x-ten Gegenstand vom Stapel
k(x)
: Gibt das x-te Element auf dem Stapel zurück
a(x, y)
: fügt x und y hinzu. Bei Verwendung mit Zeichenfolgen werden diese in der Reihenfolge xy zusammengefasst.
s(x, y)
: subtrahiert y von x. Entfernt mit Strings das letzte len (y) von x
m(x, y)
: multipliziert x und y. Bei Verwendung mit Zeichenfolgen wird x mal len y multipliziert.
d(x, y)
: dividiert x durch y
o(x)
: druckt x
i(x, y)
: Wenn x true ergibt, führt es die Funktion y aus
n()
: gibt den Zähler zurück, auf den der Codeblock aufgerufen wird.
q()
: gibt die Länge des Stapels zurück
t()
: Benutzereingabe
e(x, y)
: Wenn x eine Ganzzahl ist und x und y denselben Wert haben, wird 1 zurückgegeben. Wenn y eine Zeichenfolge ist, wird die Länge von y abgerufen. Wenn x eine Zeichenfolge ist, konvertiert es y in eine Zeichenfolge und überprüft, ob sie identisch sind. Wenn dies der Fall ist, wird 1 zurückgegeben. Andernfalls wird 0 zurückgegeben.
l(x, y)
: Wenn x größer als y ist, wird 1 zurückgegeben. Wenn eine Zeichenfolge vorhanden ist, wird die Länge der Zeichenfolge verwendet.
b()
: stoppt das Programm.
c(x, y)
: Läuft x, dann y.
Um das Äquivalent zu einem Python zu erhalten and
, multiplizieren Sie die beiden Werte. Für or
, fügen Sie die Werte und für not
subtrahieren Sie den Wert von 1. Das funktioniert nur , wenn der Wert 1 oder 0 ist, die durch Teilen der Zahl von selbst erreicht werden kann.
Datentypen: Ganzzahlen und Zeichenfolgen. Zeichenfolgen werden mit gekennzeichnet ''
, und alle nicht ganzzahligen Zahlen werden gerundet.
Syntax:
Code besteht aus verschachtelten Funktionen innerhalb von zehn {}
Sekunden. Zum Beispiel kann ein Programm , das würde sich mit den Eingängen und ausdrucken würde hinzugefügt: {o(a(t(), t()))}
. Im Hintergrund des Programms befindet sich ein Zähler, der bei 0 beginnt und bei jeder Ausführung eines Codeblocks um 1 fortschreitet. Der erste Codeblock läuft um 0
und so weiter. Sobald die zehn Codeblöcke ausgeführt sind, wird der sechste jedes Mal ausgeführt, wenn der Zähler eine perfekte Zahl erreicht. Sie müssen nicht alle zehn Codeblöcke haben, damit das Programm funktioniert, aber Sie benötigen 7, wenn Sie eine Schleife erstellen möchten. Um besser zu verstehen , wie diese Sprache funktioniert, führen Sie das folgende Programm, das den Zähler druckt jedes Mal , wenn der Zähler eine perfekte Zahl erreicht: {}{}{}{}{}{}{o(n())}
.
Den Interpreter finden Sie hier: repl.it/GL7S/37 . Wählen Sie entweder 1 aus, und geben Sie Ihren Code im Terminal ein, oder fügen Sie Ihren Code in die code.perfect
Registerkarte ein und wählen Sie 2, wenn Sie ausgeführt werden. Es macht Sinn, wenn Sie es versuchen.
Nachweis der Turing-Vollständigkeit / Mangel an Turing-Vollständigkeit.
Gemäß diesem Artikel über den Austausch von Software-Engineering-Stapeln muss ein Turing-Abschluß in der Lage sein, eine Form der bedingten Wiederholung des Sprungs zu haben und einen Weg zum Lesen oder Schreiben des Speichers zu haben. Es kann Speicher in Form des Stapels lesen / schreiben und es kann eine Schleife ausführen, da der sechste Codeblock jedes Mal ausgeführt wird, wenn der Zähler eine perfekte Zahl erreicht. Wenn es unendlich viele perfekte Zahlen gibt, kann es eine Endlosschleife geben, und Turing ist abgeschlossen. Andernfalls ist dies nicht der Fall.
Self Bitwise Cyclic Tag-Interpreter, der 5 Zeichen (1 oder 0) als Eingabe akzeptiert:
{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)))))}
Es kann erweitert werden, um eine beliebige Anzahl von Zeichen als Eingabe zu verwenden. Es könnte unendlich viele Eingaben erfordern, aber nur, wenn es unendlich perfekte Zahlen gibt!