CAPL 1.5+; 6 ohne Eingabe; 10 - 10 = 0 bei Eingabe
Nebenbemerkung
Ich habe irgendwo gelesen, dass benutzerdefinierte Sprachen in Golffragen nicht zulässig sind, da sie integrierte Funktionen enthalten können, die genau das tun, was die Frage stellt. Ich habe jedoch CAPL entwickelt, um das Golfspiel im Allgemeinen zu vereinfachen . Wenn Sie denken, dass dies hier nicht erlaubt ist, lassen Sie es mich wissen!
Ich habe einige Ideen von > <> und Befunge (Sie können zwischen den Zeilen wechseln und hexadezimale Zeichen verwenden, um Zahlen zu drücken), einige von Ruby und einige von mir, um das Golfen zu vereinfachen.
CAPL liest von links nach rechts und geht am Ende der Zeile eine Zeile nach unten. Wenn es sich um die letzte Zeile handelt, wird das Programm beendet.
Da diese Sprache noch niemand kennt, werde ich versuchen, so viel wie möglich zu erklären.
Y ausgeben. 6 Bytes
bb*.n<
bb*
b
ist hexadezimal für 11
, also bb*
ist 11*11
= 121
, was das UTF-8-Äquivalent von ist y
. Dieser Wert wird in den Stack verschoben.
.
Öffnet den obersten Wert des Stapels und gibt ihn als UTF-8 aus. Wie 121
oben auf dem Stapel wird der Index hier ignoriert.
n
Ausgabe einer neuen Zeile
<
Sendet den Zeiger an den Zeilenanfang und wiederholt diese Zeile. Da wir keine Eingabe erwarten, können wir dies sicher tun, ohne erneut nach der Eingabe zu fragen.
Ausgabe von der Eingabe. 10 Bytes, 0 nach Bonus
i~a&{X:.)}
i
Nimmt Eingaben vom Benutzer entgegen, drückt als UTF-8 oben auf den Stapel und drückt die Länge danach. Das heißt, es wird [72,101,108,108,111,5]
~
eine Zahl aus dem Stapel entfernt und dann die Anzahl der Bytes umgekehrt. Das heißt, [111,108,108,101,72]
a
hexadezimal für 10
das Newline-Zeichen.
&{...}
Erstellt eine Endlosschleife. Wir haben Eingaben, daher können wir den Zeiger nicht zurück in die Zeile senden. Ich könnte die Funktion in der Zeile darunter platzieren, was mir ein Byte ersparen würde, aber Zeilenumbrüche sind in dieser Herausforderung nicht zulässig.
X
Entfernt den obersten Wert vom Stapel (Der Index aus der Schleife).
:.
Dupliziert den obersten Wert und gibt ihn als UTF-8 aus.
)
Dreht den Stapel nach rechts. ( [1,2,3,4,5]
-> [5,1,2,3,4]
)
Dies bedeutet jedoch, dass wir mit einer neuen Zeile beginnen und dann die Eingabe, dann eine neue Zeile, dann die Eingabe usw. ausgeben. Wenn wir nicht mit einer neuen Zeile beginnen dürfen, verwenden Sie nach dem Subtrahieren den folgenden Code mit 12 Bytes oder 2 der Bonus.
iXa#~&{X:.)}
Der einzige neue Befehl hier ist #
, der die Anzahl der Elemente auf dem Stapel auf den Stapel schiebt.
Ich habe die Länge von entfernt i
, da das Hinzufügen von 1 und das Austauschen mit der neuen Zeile länger ist als das Entfernen und erneute Abrufen der Länge.
Nur zum Spaß gibt es hier ein "Hello World" -Programm
"Hello World"#~
#?!;.<
Die ?!
Bedienung ist die gleiche wie bei> <>
y
oder\n
innerhalb eines Zeichenfolgenliterals“?