M → Tipp , 4 Bytes
Ṅ×ịß
Probieren Sie es online!
Der TIO-Link fügt eine Fußzeile hinzu, um die Funktion mit dem auf der Esolang-Seite gezeigten Beispiel-Tip-Programm aufzurufen (Ms "automatischer Wrapper" zum Aufrufen von Funktionen, als ob sie Programme wären, die keine rationalen oder Festkommazahlen oder zumindest I-Ports verarbeiten könnten) Ich habe nicht herausgefunden, wie ich es erklären soll, also muss ich die Funktion von Hand in ein vollständiges Programm umwandeln, um es ausführen zu können.)
Dies gibt tatsächlich eine nützliche Debug-Ausgabe aus. Das Programm kann nicht in 3 Bytes in M geschrieben werden, da ein Programm, das aus genau drei Dyaden besteht, einen Sonderfall im Parser auslöst. Daher musste ich einen zusätzlichen Befehl hinzufügen, um den Sonderfall zu vermeiden. Wenn Sie es Ṅ
erstellen (mit Zeilenumbruch drucken), hat es zumindest einen nützlichen Zweck.
ı
i=−1−−−√
Implementiert keine E / A (außer halt / no-halt). I / O ist eine Erweiterung von Tip (nicht Teil der Sprache selbst) und wird für die Vollständigkeit von Turing nicht benötigt.
Erklärung / Hintergrund
Ṅ×ịß
Ṅ Print {the left argument} and a newline; also resolves a parser ambiguity
ị {The left argument}th element of {the right argument}, wrapping on OoB
× Multiply {the left argument} by {the chosen element}
ß Recursive call; arguments: {the product} and {the same right argument}
[1,2,3]
[1,2,3,1,2,3,1,2,3,…]
rx+s, das ein Polynom ist, und die "Basisumwandlung", die in vielen Golfsprachen eingebaut ist, ist tatsächlich ein getarnter Allzweck-Polynom-Bewerter. Alles, was wir tun müssen, ist, eine Liste von Ziffernlisten zu indizieren, sie mit der Basis umzuwandeln, und wir sind fertig, oder?
xx
ḅ
x⊕(x⊗y)x⊗y⊕. Sicher, wir könnten das Verkettungsverhalten auf so ziemlich alles setzen, was wir wollen, aber das würde ein ganzes Byte kosten, und die Golfspracheneingaben zu dieser Frage werden so kurz, dass ein Byte viel ist.
Also habe ich zurückgeschaut und ein bisschen überarbeitet. Gibt es Operationen, die wir anstelle der Polynomauswertung verwenden könnten? Idealerweise kommutativ, damit wir uns keine Gedanken über die Reihenfolge der Argumente machen müssen? Bald darauf wurde mir klar, dass Collatz-Funktionen komplexer sind, als sie sein müssen.
s
Und natürlich anders als Basis - Konvertierung ( ḅ
), Multiplikation ( ×
) kommutativ ist, und so spielt es keine Rolle , was die Argumente der Reihenfolge platziert in. Also alles müssen wir schreiben wird ×ị
, und dann das Programm in eine unendliche Rekursion setzen mit ß
, und wir haben eine Turing-vollständige Sprache. Richtig?
(x⊙y)⊕(x⊗y)¹×ịß
¹
¹
Ṅ
ist eine gute Wahl, da es nützliche Debug-Ausgaben erzeugt.
Sind drei Bytes möglich? Es sei denn, ich vermisse etwas, nicht mit dieser speziellen Wahl der Implementierung und der implementierten Sprache, aber an diesem Punkt scheint es sicherlich irgendwie möglich zu sein, da es so viele Möglichkeiten gibt, dies in vier und so vielen Turing-vollständigen zu tun Sprachen, die Sie implementieren könnten.
eval
Lösungen zu vermeiden .