Die Jongleursequenz wird wie folgt beschrieben. Beginnend mit einer Eingabe a 1 wird der nächste Term durch die Wiederholungsrelation definiert
Die Sequenz endet, wenn sie 1 erreicht, da alle nachfolgenden Terme dann 1 wären.
Aufgabe
n
Schreiben Sie bei einer Eingabe größer oder gleich 2 ein Programm / eine Funktion / einen Generator / usw. das gibt die jeweilige Jongleur-Sequenz aus / gibt sie zurück. Die Ausgabe kann in jeder vernünftigen Form erfolgen. Sie dürfen kein eingebautes Programm verwenden, das die Jongleursequenz berechnet, oder ein eingebautes Programm, das direkt das Ergebnis liefert. Sie können davon ausgehen, dass die Sequenz in endet 1
.
Testfälle
Input: output
2: 2, 1
3: 3, 5, 11, 36, 6, 2, 1
4: 4, 2, 1
5: 5, 11, 36, 6, 2, 1
Dies ist ein Code Golf. Kürzester Code in Bytes gewinnt.
~5.6*10^7
Werte angehalten werden müssen (sie halten alle bis jetzt an).Antworten:
Jelly ,
121110 BytesVielen Dank an @ Sp3000 für das Golfen ab 1 Byte!
Probieren Sie es online!
Wie es funktioniert
quelle
<code> </code>
fehlschlagen würde, aber anstelle der Backticks scheint ein tatsächliches SP-Zeichen anzuzeigen. Vielen Dank für den Hinweis.Julia,
645048423230 BytesDies ist eine rekursive Funktion, die eine Ganzzahl akzeptiert und ein Float-Array zurückgibt.
Wir erstellen ein Array, indem wir die Eingabe mit dem nächsten Term der Sequenz verketten, der als x mit der Potenz seiner Parität plus 1/2 berechnet wird . Dies ergibt entweder x 1/2 oder x 1 + 1/2 = x 3/2 . Ganzzahlige Division durch 1 ergibt das Wort. Wenn die Bedingung x <3 wahr ist, ist das letzte Element ein Boolescher Wert und kein numerischer Wert. Da das Array jedoch nicht vom Typ ist
Any
, wird es so umgewandelt, dass es den gleichen Typ wie der Rest des Arrays hat.14 Bytes gespart dank Dennis!
quelle
JavaScript (ES7),
4533 BytesErläuterung
Rekursiver Ansatz. Gibt eine durch Kommas getrennte Folge von Zahlen zurück.
Prüfung
**
Wird im Test für die Browserkompatibilität nicht verwendet.Code-Snippet anzeigen
quelle
**
, wir würden in allen Browsern unterstützt.**
in C # unterstützt.Mathematica,
4039 BytesVielen Dank an Martin Büttner für das Speichern von 1 Byte.
Testfall
quelle
Pyth,
1412 BytesDemonstration
Wir beginnen mit einer kumulativen Reduzierung,
.u
die in diesem Fall bei der Eingabe beginnt und eine Funktion anwendet, bis sich das Ergebnis wiederholt, und an diesem Punkt alle Zwischenergebnisse ausgibt.Die Funktion nimmt den vorherigen Wert als an
N
. Es beginnt mit der Quadratwurzel@N2
. Als nächstes teilt es diesen Wert bei der Multiplikation mitN
mit*B ... N
. Dies erzeugt die Liste[N ** .5, (N ** .5) * N]
, die unbegründeten Ergebnisse für die geraden und ungeraden Fälle. Als nächstes wird das entsprechende unbodenständige Ergebnis durch Indizieren in die Liste mit ausgewählt@ ... N
. Da Pyth über eine modulare Indizierung verfügt, werden keine Out-of-Bound-Fehler ausgegeben. Schließlich ist das Ergebnis mit bodenständigs
.quelle
MATL,
13 -12 BytesProbieren Sie es online!
Erläuterung
Danke Luis für das Speichern eines Bytes!
quelle
floor
Funktion wurde in geändertk
, sodass Sie damitZo
1 Byte speichern können. (Entschuldigung für diese Änderungen; Sie können die Release-Zusammenfassungen hier sehen )Minkolang 0,15 , 25 Bytes
Probieren Sie es hier aus!
Erläuterung
quelle
TSQL, 89 Bytes
Eingabe erfolgt in
@N
:Code:
quelle
APL,
282416 BytesDies ist ein Programm, das eine Ganzzahl akzeptiert und die aufeinanderfolgenden Ausgaben in separaten Zeilen ausgibt.
Erläuterung:
Probieren Sie es online aus
8 Bytes gespart dank Dennis!
quelle
Java 7,
8371 BytesIch habe ursprünglich eine typische
for
Schleife verwendet, musste aber durch die Reifen springen, damit sie richtig funktioniert. Nach demDiebstahlKreditaufnahme Idee user81655 die statt Rekursion, habe ich es auf zwölf Bytes.quelle
Haskell, 70 Bytes
In Haskell ist keine Ganzzahl
sqrt
integriert, aber ich denke, es ist möglicherweise etwas kürzer alsfloor.sqrt.fromInteger
.quelle
Oracle SQL 11.2, 128 Byte
Nicht golfen
Das Hinzufügen von MOD (i, 2) zu .5 ist kürzer, aber es gibt einen Fehler mit POWER (2, .5):
gibt
quelle
R
5451 Bytes3 Bytes gespart dank Plannapus.
quelle
floor(n^(.5+n%%2))
man sichn^(.5+n%%2)%/%1
meiner Meinung nach verkürzen . +1 Trotzdem.CJam, 18 Bytes
Teste es hier
Ähnlich wie Davids MATL-Antwort .
quelle
Python 3,
57,45,43, 41 BytesBessere Lösung mit Vorschlag von @mathmandan
Diese Methode druckt jede Nummer in einer neuen Zeile
Vorherige Lösung: Nach Empfehlung von xnor auf 43 Byte reduzieren
Sie können das oben genannte aufrufen, indem Sie tun,
a(10)
was zurückgibt[10, 3.0, 5.0, 11.0, 36.0, 6.0, 2.0, 1.0]
Das obige gibt die Werte als Float aus. Wenn Sie sie als Ganzzahlen haben möchten, können Sie für 43 Bytes einfach 2 zusätzliche Bytes hinzufügen:
quelle
[n][:n<2]or
, oder mit1/n*[n]or
dem Ganzzahlfall.def j(n):print n;n-1and j(n**(.5+n%2)//1)
. (Oder in Python 3 sinddef j(n):print(n);n-1and j(n**(.5+n%2)//1)
es 42 Byte.) Es wird die Sequenz Begriff für Begriff gedruckt, anstatt die Begriffe in einer Liste zu sammeln.n<2or
nicht machen-1and
TI-Basic, 30 Bytes
quelle
Repeat Ans=1
mitWhile log(Ans
und Verwendung√(Ans)Ans^remainder(Ans,2
.JavaScript ES6,
109102 BytesIch weiß, dass man Golf spielen kann. Gibt eine Zeichenfolge von durch Kommas getrennten Zahlen zurück.
quelle
C ++, 122 Bytes
quelle
C #, 62 Bytes
Inspiriert von @ user81655 und @ Alex A. habe ich die Rekursion verwendet.
quelle
Netzhaut, 144 Bytes
Eingabe und Ausgabe sind unär.
Die vorletzte Zeile enthält ein Leerzeichen, und die beiden mittleren Zeilen und die letzte Zeile sind leer.
Probieren Sie es online aus
Erläuterung
Ganzzahlige Quadratwurzel in der Netzhaut , von Digital Trauma
quelle
C
646361 Bytesquelle
n%2?1.5:0.5
mitn%2+0.5
oder ersetzen.5+n%2
(falls C erlaubt es). Wennn%2
wahr ist,n%2
ist 1, sonst 0.TI BASIC, 43 Bytes
Ich ziehe einen Thomas Kwa und beantworte diesen auf meinem Handy.
Ersetzen Sie
sqrt
mit dem tatsächlichen Symbol auf Ihrem Rechner. Zeigt eine durch Zeilenvorschub getrennte Liste von Zahlen an. Dies ist ein angemessenes Format.quelle
JavaScript ES6, 76 Bytes
Ist ein Generator namens
j
. Zum Verwenden einstellena = j(<your value>);
. Geben Sie ein, um den nächsten Wert in der Sequenz anzuzeigena.next().value
.Ungolfed:
quelle
F # 77 Bytes
Endet nicht bei 1, sondern geht weiter.
Verwendung:
Version, die tatsächlich bei 1, 100 Bytes endet
Ungolfed
quelle
Perl 5, 34 Bytes
33, plus 1 für
-pE
statt-e
Erläuterung
Zuerst
-p
setzt die Variable$_
gleich den Eingang von stdin. Dann starten wir einen Codeblock:Schließlich
-p
druckt$_
.Gleicher Länge
Verwendet auch
-p
.Dies: druckt
$_
; weist wie oben zu; testet, ob der Rückgabewert vonsay
(der 1 ist) minus dem neuen Wert von$_
0 ist, und wiederholt den Block, wenn dies der Fall ist; druckt dann$_
am Ende.quelle
dc,
2221 BytesErklärt:
Es gibt einen Fehler: Wenn der Eingang ist
1
, besteht der Ausgang aus zwei1
s.quelle