Ihr Ziel ist es, ein Programm zu schreiben, das Eingaben entgegennimmt und bei Verkettung N
eine "sequentielle Multiplikation" durchführt. Was ist sequentielle Multiplikation? Es ist eine Sequenz mit einem Samen a
, der wie folgt definiert ist:
f(0) = a
f(n+1) = f(n)*(f(n)-1)
Also lass a = 5
. So f(0) = 5
, f(1) = f(0)*(f(0)-1) = 5*4 = 20
und f(2) = f(1)*(f(1)-1) = 20*19 = 380
.
Wenn dein Programm das war ABC
, dann ABC
sollte es Input a
und Output nehmen f(1)
. Das Programm ABCABC
sollte ausgegeben f(2)
werden usw. Ihre Programmreihe sollte nur einmal eingegeben und nur einmal ausgegeben werden.
Dies ist ein Code-Golf, so dass das kürzeste Programm in Bytes gewinnt. Standardlücken sind verboten.
quelle
if
und trifftelse
.CJam, 5 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
pl, 5 Bytes
Probieren Sie es online aus.
Wäre 4 Bytes, wenn ich nicht faul und nicht implementiert "_ zuweisen" gewesen wäre ...
Erläuterung
quelle
05AB1E , 3 Bytes
Code:
Erläuterung:
Probieren Sie es online!
quelle
GolfScript, 5 Bytes
Probieren Sie es online aus.
Entgolft und kommentiert:
Der GolfScript-Interpreter liest die Eingabe automatisch und platziert sie auf dem Stapel, jedoch als Zeichenfolge und nicht als Zahl. Daher müssen wir die Eingabe mit in eine Zahl
~
umwandeln und sie anschließend mit erneut verketten`
. Am Ende druckt der Interpreter automatisch die auf dem Stapel angegebene Zahl aus.(Wenn die Herausforderung darin bestanden hätte, es zu wiederholen
f(n+1) = f(n)*(-f(n)-1)
, hätte ich das in 4 Bytes erledigt~.~*
. Es ist eine Übung, herauszufinden, wie und warum das funktioniert. :)quelle
JavaScript REPL,
2520 BytesArbeitet daran, eine REPL zu eliminieren
quelle
Lua,
3518 BytesDas ist etwas, was Lua ausnahmsweise mal leicht machen kann!
Edit: Ich habe eine Menge Dinge in Lua entdeckt, seit ich das gemacht habe, also aktualisiere ich es :)
...
Enthält das Kommandozeilenargument entpackt, verwendet es in diesem Fall den ersten Wert, da es nicht ausgegeben werden darf, was nur zum Drucken führtn*(n-1)
.quelle
Y , 7 Bytes
Probieren Sie es hier aus!
So funktioniert es:
j
Nimmt numerische Eingaben an.z
Aktiviert das implizite Drucken.C
beginnt einen neuen Link.:
dupliziert den Wert auf dem Stapel,t
dekrementiert ihn und lässt uns dabei[a a-1]
. Dann kommen wir[a*a-a]
ab*
.!
überspringt den nächsten Befehl; Auf EOF macht es nichts. Wenn der Befehl verkettet ist, wird der Eingabebefehl übersprungen und der Vorgang beginnt von vorn.quelle
Jolf, 6 Bytes
Probieren Sie es hier aus!
Erläuterung
quelle
𝔼𝕊𝕄𝕚𝕟, 5 Zeichen / 7 Bytes
Try it here (Firefox only).
Muss ich das wirklich erklären? Na ja, hier geht ...
Erläuterung
Es wird im Grunde
input*=--input;
in JS ausgewertet .quelle
Perl, 23 Bytes
Alternative Version, 10 Bytes
Dies erfordert den
-p
Schalter. Ich bin mir nicht sicher, ob es sich bei einer Frage zum Quellenlayout um faires Spiel handelt .quelle
Haskell,
1411 BytesAnwendungsbeispiel
Vielleicht ist das keine richtige Funktion. Wenn Sie keine Lust haben, können Sie mitmachen
(*)=<<pred$id
(<- am Ende steht ein Leerzeichen) 14 Bytes .Edit: @Zgarb hat die Funktion mit der Funktion monad umgeschrieben und 3 Bytes gespeichert. Vielen Dank!
quelle
(*)=<<pred$
Spart 3 Bytes. Es sollte auch beachtet werden, dass dies keine Funktion definiert und der Eingabewert direkt danach platziert werden muss.id
macht es zu einer richtigen Funktion. Ich habe eine Notiz in meine Antwort eingefügt.Pure Bash (keine Dienstprogramme), 40
quelle
TI-Basic,
65 BytesLäuft auf TI-83/84-Rechnern
Dieses Programm funktioniert aufgrund der Tatsache, dass ein Ausdruck in der letzten Zeile eines Programms anstelle des normalen
Done
Texts gedruckt wird .quelle
:Ans²-Ans
Mathcad, 39 "Bytes"
Aus Benutzersicht ist Mathcad praktisch ein 2D-Whiteboard, dessen Ausdrücke von links nach rechts und von oben nach unten ausgewertet werden. Mathcad unterstützt keine herkömmliche Texteingabe, sondern verwendet stattdessen eine Kombination aus Text und Sondertasten / Symbolleisten / Menüelementen, um einen Ausdruck, einen Text, einen Plot oder eine Komponente einzufügen. Geben Sie beispielsweise ":" ein, um den Definitionsoperator (auf dem Bildschirm als ": =" angezeigt), "[", um einen Array-Index einzugeben, oder "ctl-]", um einen while-Schleifenoperator (einschließlich Platzhalter für die Kontrollbedingung und ein Körperausdruck). Was Sie im obigen Bild sehen, ist genau das, was auf der Benutzeroberfläche angezeigt und als "eingegeben" wird.
Für Golfzwecke ist die "Byte" -Zahl die äquivalente Anzahl von Tastaturoperationen, die zur Eingabe eines Ausdrucks erforderlich sind.
Eine Sache, bei der ich noch weniger sicher bin (aus der Sicht der "Byte" -Äquivalenz), ist, wie das Erstellen einer neuen Region gezählt wird (z. B. a: = 5 oder k: = 0..n-1). Ich habe jede Bewegung in eine neue Region als eine neue Zeile und damit als 1 Byte gleichgesetzt (in der Praxis verwende ich die Maus, um dort zu klicken, wo ich die Region haben möchte).
Ich habe nur die aktiven Anweisungen und nicht die Kommentare eingeschlossen und jeweils 2 Bytes für die Eingaben a und n, aber nicht die Werte selbst (5 und 7 im Beispiel).
quelle
Haskell, 72 Bytes
Diese Herausforderung ist für Haskell nicht freundlich. Das Folgende funktioniert jedoch, wenn die Eingabe unär ist und der Code in GHCI ausgeführt wird:
Erläuterung:
Unary ist immer ungerade, daher wird die erste Anwendung in eine Dezimalzahl konvertiert.
x*(x-1)
ist immer gerade, ansonsten wird zurückgegebenx*(x-1)
, wox
die Eingabe ist. Da Haskell stark typisiert ist und Sonderzeichen nicht so genannt werden können&1
, ist dies meines Erachtens der einzige Weg, dies in Haskell zu vervollständigen, es sei denn, man verwendet globale Variablen oder eine noch seltsamere Eingabeform.quelle
C ++ (gcc) , 173/176 Bytes
Beide Versionen haben am Ende einen entscheidenden Zeilenumbruch.
Makroversion, 173 Bytes
Probieren Sie es online!
Vorlagenversion, 176 Bytes
Etwas mehr C ++ ish:
Probieren Sie es online!
quelle
Burlesque - 5 Bytes
quelle