APL, 36, 34, 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Ausgabe 1
wenn Keith, 0
sonst
GolfScript schlägt wieder zu !!
Bearbeiten
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Verwenden von Right-reduction ( ⊢/
) anstelle von Take minus 1 (¯1↑
) verwenden, wird 1 Zeichen direkt und 1 Zeichen indirekt aus Disclose ( ⊃
) gespeichert.
Erläuterung
⍎¨⍕x←⎕
Nimmt ausgewertete Eingaben (als Zahl behandelt) und weist sie zu x
. Konvertiert es in ein Zeichenfeld (in anderen Sprachen auch als "Zeichenfolge" bezeichnet) und durchläuft jedes Zeichen (Ziffer) in einer Schleife, um es in eine Zahl umzuwandeln. Dies ergibt also ein numerisches Array der Ziffern.
{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}
ist die "Schleifen" -Funktion:
+/⍵↑⍨-⍴⍕x
Nimmt die letzten ⍴⍕x
( x
Anzahl der Ziffern in ) Zahlen aus dem Array und summiert sie.
⍵,
verkettet es an das Ende des Arrays.
(x>⊢/⍵)
Überprüfen Sie, ob die letzte Nummer im Array (die noch nicht +/⍵↑⍨-⍴⍕x
verkettet ist) kleiner ist als x
und 1
oder zurückgibt0
∇⍣
diese Funktion auf dem neuen Array so oft ausführt. Wenn also die letzte Zahl kleiner als ist x
, wird diese Funktion wiederholt. Anderenfalls geben Sie einfach das neue Array zurück
Nach dem Ausführen der Funktion enthält das Array die Summen bis zu dem Punkt, an dem 2 der Zahlen größer oder gleich sind x
(z. B. 14
werden generiert 1 4 5 9 14 23
, 13
werden generiert 1 3 4 7 11 18 29
).
Überprüfen Sie schließlich, ob jede Zahl gleich ist, x
und geben Sie die Summe der resultierenden Binärzahl aus Array.
Bearbeiten
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Es wurden 2 Zeichen hinzugefügt :-(, um eine Ausgabe zu machen, 0
wenn die Eingabe eine Ziffer ist
Noch eine Änderung
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
Erläuterung
Die Funktion löscht nun die erste Zahl ( 1↓
) aus dem Array, anstatt die letzte ⍴⍕x
( ↑⍨-⍴⍕x
) zu nehmen.
Dieser Ansatz ist jedoch 1=
nicht ausreichend, um einstellige Zahlen zu verarbeiten. Daher löscht es jetzt die letzte Zahl aus dem Array, bevor es die Gleichheit mit überprüft x
und 1 Zeichen hinzufügt
Sie haben es erraten: BEARBEITEN
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Vergleicht x
mit dem neu hinzugefügten Element anstelle des alten letzten Elements. Löschen Sie daher das erste (anstelle des letzten) Element, bevor Sie die Gleichheit mit überprüfenx
löschen und ein Minuszeichen zu speichern. Speichert weitere 3 mit einer anderen Form des Power-Operators ( ⍣
)
Und es erscheint eine 25-stellige Antwort (Orz)
Letzte Bearbeitung
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Ich kann nicht glauben, dass ich das verpasst habe.
Kann es nicht mehr Golf spielen.