Da Fibonacci-Zahlen und -Sequenzen ein beliebtes Thema für Codegolf zu sein scheinen, dachte ich, dass es eine unterhaltsame Herausforderung sein könnte, Golf mit Keith-Zahlen zu codieren .
Also schlage ich eine Herausforderung vor, die darin besteht, eine Funktion zu erstellen, die eine Ganzzahl annimmt und je nachdem, ob es sich bei der Zahl um eine Keith-Zahl handelt oder nicht, ein Wahr oder Falsch zurückgibt.
Mehr über Keith-Zahlen
In der Freizeitmathematik ist eine Keith-Zahl oder eine Nachkommazahl (kurz für repetitive Fibonacci-ähnliche Ziffer) eine Zahl in der folgenden ganzzahligen Folge: 14, 19, 28, 47, 61, 75, 197, 742, 1104, 1537, 2208. 2580,…
Numberphile hat ein Video, in dem erklärt wird, wie eine Keith-Zahl berechnet wird. Aber im Grunde genommen nimmst du die Ziffern einer Zahl. Addiere sie und nimm dann die letzten Ziffern der ursprünglichen Zahl und addiere sie zur Summe der Berechnung, spüle und wiederhole. Und zum Beispiel um es klar zu machen.
14
1 + 4 = 5
4 + 5 = 9
5 + 9 = 14
Eingang
Eine ganze Zahl.
Ausgabe
True, wenn die Nummer eine Keith-Nummer ist. Falsch, wenn es nicht ist ..
true
/false
oder kann es etwas Wahres / Falsches sein ?Antworten:
GolfScript (
3125 Zeichen)Eingabe als Ganzzahl über dem Stapel. Die Ausgabe ist 0 (falsch) oder 1 (wahr). Online-Demo, die die Keith-Nummern bis zu 100 auflistet.
quelle
0>
. Leider kann ich nur einmal +1 geben.Python (
7875)n=n[1:]+[sum(n)]
macht die ganze Magie. Es nimmt jedes Element außer dem ersten Element vonn
, setzt die Summe vonn
(mit dem ersten Element) auf und setzt diese dann aufn
.Ich wünschte, Sie könnten
list
eine Ganzzahl aufrufen und die Ziffern trennen lassen.Gibt
False
bei allen Eingaben unter 10 zurück. Kann bei Rückgabe 8 Zeichen kürzer seinTrue
.quelle
n[0]
anstelle von vergleichenn[-1]
.print 9<a==n[0]
.n=n[1:]+[sum(n)]
werden kannn=n[1:]+sum(n),
GolfScript,
3229 ZeichenEine GolfScript-Implementierung, die getestet werden kann online werden kann . Die Eingabe wird als oberstes Element im Stapel angegeben und gibt 0 (dh false) bzw. 1 zurück.
quelle
APL,
36,34,3936332927Ausgabe
1
wenn Keith,0
sonstGolfScript schlägt wieder zu !!
Bearbeiten
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 zux
. 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 alsx
und1
oder zurückgibt0
∇⍣
diese Funktion auf dem neuen Array so oft ausführt. Wenn also die letzte Zahl kleiner als istx
, wird diese Funktion wiederholt. Anderenfalls geben Sie einfach das neue Array zurückNach 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 generiert1 4 5 9 14 23
,13
werden generiert1 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
Es wurden 2 Zeichen hinzugefügt :-(, um eine Ausgabe zu machen,
0
wenn die Eingabe eine Ziffer istNoch eine Änderung
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üftx
und 1 Zeichen hinzufügtSie haben es erraten: BEARBEITEN
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
Ich kann nicht glauben, dass ich das verpasst habe.
Kann es nicht mehr Golf spielen.
quelle
x∊{1↓⍵,+/⍵}⍣{x≤⊃⍺}⍎¨⍕x←⎕
. In der Power-Funktion⍺
steht der "After" -Wert.Common Lisp, 134
CL kann manchmal ziemlich unlesbar sein.
Einige Formatierungen, um horizontales Scrollen zu vermeiden:
Prüfung:
quelle
F # - 184 Zeichen
Ich hoffe, dass es in Ordnung ist, an meiner eigenen Herausforderung teilzunehmen.
Bearbeiten Es wurde ein Fehler in Bezug auf kleine Zahlen behoben.
quelle
K, 55
.
quelle
PowerShell:
12012812311111097$i=read-host
Nimmt Eingaben vom Benutzer entgegen und speichert sie in $ i.$j=(
...)-split''|?{$_}
zerlegt die Ziffern von $ i in ein Array und speichert sie in $ j.While($x-lt$i)
Legt fest, dass die folgende Fibonnaci-ähnliche Schleife ausgeführt wird, bis die Summenvariable $ x $ i erreicht oder überschreitet.$x=0
setzt $ x auf Null, damit es für die Summierung verwendet werden kann (erforderlich, wenn die Schleife zurückkehrt).$j|%{$x+=$_}
verwendet eine ForEach-Object-Schleife, um die Werte von $ j zu $ x zu addieren.$null,$j=$j+$x
verschiebt die Werte in $ j nach links und verwirft die erste, während $ x angehängt wird.$x-eq$i
Nach Abschluss der while-Schleife wird geprüft, ob der Summenwert $ x gleich dem Anfangswert $ i ist - im Allgemeinen ein Hinweis auf eine Keith-Zahl.-and$x-gt9
macht einstellige Zahlen, Nullen und negative Zahlen ungültig, bei denen es sich nicht um Keith-Zahlen handeln kann.Dieses Skript ist ein bisschen "chaotisch". $ I und $ j, die übrig bleiben, können problemlos verarbeitet werden, aber Sie müssen $ x zwischen den Läufen löschen.
quelle
-ne''
so entfernen , dass es gerade ist?{$_}
.$i=read-host;$j=$i-split''|?{$_}'
mit$j=($i=read-host)-split''|?{$_}
.Rubin, 82
Verdächtige, dass Python ein besseres Werkzeug für dieses ist.
quelle
C 123
Test über Kabelbaum:
gibt:
quelle
i=(i+n-1)%n;t=g[i];g[i]=s;s=s*2-t;
miti+=n-1;t=g[i%n];g[i%n]=s;s+=s-t;
und speichern zwei Zeichen.R 116
Python-Abzocke:
quelle
Perl, 90
Eine lustige Übung! Ich weiß, dass es ein alter Beitrag ist, aber ich habe gemerkt, dass Perl fehlt!
Ich bin mir sicher, dass ich die Art und Weise, wie ich das aufbaue, verbessern kann, indem ich die anderen Antworten gründlicher verdaue, also werde ich das wahrscheinlich noch einmal wiederholen!
quelle
Smalltalk - 136 Zeichen
Senden Sie diesen Block
value:
quelle
Java - 1437
quelle
Python3 104
Und es ist eine Funktion;)
quelle
Python - 116 Zeichen
Ich bin kein wirklicher Codegolf-Experte, also haben Sie es - meinen ersten Versuch.
Nehmen Sie zwei Änderungen für eine Funktion vor:
print
zureturn
x
zu, der Parameter zu seinPS Ich zweite @ beary605-Add ein eingebautes, um die Ziffern / Zeichen / was auch immer zu trennen.
quelle
Ruby (mit OOP)
quelle