Bevor jemand etwas sagt, ähnlich und ähnlich . Aber das ist kein Betrug.
Einige positive ganze Zahlen können als die Summe von mindestens zwei aufeinanderfolgenden positiven ganzen Zahlen geschrieben werden. Zum Beispiel 9=2+3+4=4+5
. Schreiben Sie eine Funktion, die eine positive Ganzzahl als Eingabe annimmt und als Ausgabe die längste Folge von aufeinanderfolgenden positiven Ganzzahlen ausgibt (jedes Format ist akzeptabel, obwohl -5 Byte, wenn die Ausgabe die aufsteigende Folge ist, die +
wie oben gezeigt durch getrennt ist) Wenn es keine solche Sequenz gibt, sollte die Nummer selbst ausgedruckt werden.
Das ist Code Golf. Es gelten Standardregeln. Kürzester Code in Bytes gewinnt.
Beispiele (Beachten Sie, dass die Formatierung variiert)
Input: 9
Output: 2,3,4
Input: 8
Output: 8
Input: 25
Output: [3,4,5,6,7]
-n+1
bisn
)Antworten:
Python, 67 Bytes
Eine seltsam einfache Strategie: Suche nach dem Intervall R mit der richtigen Summe.
Da das untere Ende des Intervalls nur zunimmt, werden längere Intervalle vor kürzeren gefunden.
quelle
Pyth,
1210 BytesDer Code ist 15 Bytes lang und qualifiziert sich für den -5 Bytes Bonus. Versuchen Sie es online im Pyth-Compiler .
Vielen Dank an @Jakube für das Golfen mit 2 Bytes!
Wie es funktioniert
quelle
Mathematica,
7368655643 Bytesquelle
Tuples
einen Infix-Ausdruck erstellen.Haskell,
4948 Bytesquelle
[...]!!0
anstelle vonhead[...]
.MATLAB,
8779 BytesIch weiß, dass es bereits eine MATLAB-Antwort gibt, diese unterscheidet sich jedoch in der Herangehensweise erheblich.
Dies funktioniert auch bei Octave . Sie können es hier online versuchen . Ich habe den Code bereits
consecutiveSum.m
in den verknüpften Arbeitsbereich eingefügt. Geben Sie ihnconsecutiveSum
an der Eingabeaufforderung ein und geben Sie den Wert ein (z. B. 25).Ich arbeite immer noch daran, es zu reduzieren (möglicherweise wird die verwendete Gleichung ein wenig angepasst), aber im Grunde findet es den größten Wert,
n
für denm
eine ganze Zahl ist, und zeigt dann die erstenm
Zahlen an, die mit beginnenn
.Warum funktioniert das? Nun, im Grunde gibt es eine mathematische Gleichung, die all diese Zahlen regelt. Wenn Sie davon ausgehen, dass sie alle aufeinander folgen und irgendwann beginnen, können Sie im Grunde sagen:
Daraus wird nun ersichtlich, dass die Sequenz im Grunde genommen nur die ersten
p
Dreieckszahlen (einschließlich der 0.) sind, die zup+1
vielen addiert werdenn
. Wenn wir jetzt lassenm=p+1
, können wir sagen:Das ist eigentlich ziemlich lösbar. Ich bin immer noch auf der Suche nach dem kürzesten Code. Ich habe einige Ideen, um den obigen Code zu reduzieren.
Bei einer Eingabe von 25 wäre die Ausgabe:
quelle
1,3,6,10,...
maximiert werden.Python 2, 94 Bytes
Die Eingabe erfolgt aus stdin. Diese Lösung eignet sich für sehr große Eingaben.
Dies iteriert über die möglichen Lösungslängen r mit r ≤ √ (2n) und prüft explizit auf eine Lösung. Um eine Lösung zu bestehen, wenn R ungerade ist, n mod r muss Null sein , und wenn R gerade ist, n mod r muss r / 2 .
Beispielnutzung
Ich habe bewusst Beispiele mit relativ kleinen Leistungen ausgewählt.
quelle
Oktave, 89 Bytes
Das ist das Beste, was ich in Octave machen kann. Der Algorithmus ist der gleiche wie bei xnor.
In MATLAB wären dies 95 Bytes:
In MATLAB dauert dies ca. 0,1 Sekunden für die Eingabe
2000000
und 1 Sekunde für die Eingabe1000002
.quelle
awk, 51 bytes
Der Code ist 56 Bytes minus 5 Bytes für das Ausgabeformat. Ich musste 4 zusätzliche Bytes verwenden, um dieses Format zu erzeugen, also habe ich tatsächlich 1 Byte gespeichert. Hurra! ;)
Tatsächlich ist es die harte Arbeit, ab 1 zu summieren, bis die Summe größer als die Eingabe ist. Dann beginnt die Subtraktion von Zahlen ab 1, bis die Zahl kleiner als die Eingabe ist. Auf diese Weise werden Start- und Endnummer so lange geändert, bis ein Ergebnis gefunden wurde, das dann gedruckt wird.
Anwendungsbeispiel
Ausgabe des Beispiels
Ich habe dies für eine Eingabe von versucht
1e12
und es gab464562+...+1488562
fast sofort das richtige Ergebnis ( ). Obwohl es natürlich eine Weile gedauert hat ...quelle
{while($0!=s)s+=(s<$0) ? (++j) : -(++i); while(++i<j)r=r i"+"}$0=r j
Ich hoffe, das hilft: i ist immer die letzte Ganzzahl, die vom Beginn der Kette abgezogen wurde, j ist immer die letzte Ganzzahl, die am Ende der Kette hinzugefügt wurdeJapt , 33 Bytes
Dies verwendet Dennis 'Pyth-Technik , obwohl es erheblich länger ist ...
Probieren Sie es online! Warnung: Bei größeren Eingaben (<= 20) dauert es eine Weile, bis der Browser zum Stillstand gekommen ist.
Ungolfed und Erklärung
Bonusverdienende Version: (38 Bytes - 5 = 33)
quelle
Julia, 92 Bytes
Dies ist eine anonyme Funktion, die eine Ganzzahl akzeptiert und ein Array zurückgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=x->...
.Ungolfed:
quelle
Ruby, 94 Bytes
Ungolfed:
Verwendung:
quelle
Im Ernst, 53 - 5 = 48 Bytes
Hex Dump
Probieren Sie es online!
Es ist der Brute-Force-Ansatz, ähnlich wie bei Dennis 'Pyth.
Alles bis auf den
k
gerade gelesenen Eingangn
in Register 1 und erstellt dann die Liste[[1],[2,2],[3,3,3],[4,4,4,4],...]
bis aufn
n
den.Das nächste Bit bis
╗
ist eine in Register 0 gespeicherte Funktion, die ein Paar nimmt, beide Elemente inkrementiert, sie in einen Bereich umwandelt, die Summe des Bereichs findet und prüft, ob diese Summe der Wert in Register 1 ist. es gibt den entsprechenden Bereich zurück und wenn dies nicht der Fall ist, wird eine leere Liste zurückgegeben.Der Teil bis zum letzten Auftreten von
M
ordnet eine Funktion über der oben beschriebenen ausgefallenen Liste von Listen zu, wobeienumerate
auf jeder Liste die gespeicherte Funktion zugeordnet wird. Wenn es fertig ist, haben wir eine Liste von Listen, von denen jede leer ist oder einen Bereich, der sich summiertn
.;░
Entfernt die leeren Listen.p@X
nimmt die erste liste die bleibt (0@E
würde auch funktionieren).'+j
setzt+
zwischen jede Zahl, während es die Liste in eine Zeichenkette für den Bonus umwandelt.quelle
ES6, 72 Bytes
Gerade Portierung der awk-Lösung von @ Cabbie407, aber ohne den Formatierungsbonus, da es hier eine Strafe ist.
quelle
Python 3,
239236215203 BytesDas ist etwas umständlich. Ich muss später Golf spielen.
DiesDankk
liegt daran , dass Python unhöfliche Geräusche von sich gibt, wenn Siet[0]
nach einem leerent
suchen. Auch dies ist Golfen erforderlich.t[:1]
, keine unhöflichen Geräusche mehr! Sie müssen nur gegen ein anderes Array prüfen.quelle
Gelee , 8 Bytes (nicht konkurrierend)
Probieren Sie es online!
Wenn ich das richtig verstehe, könnte dies eine (11-5 = 6) -byte Version sein:
quelle
05AB1E , 11 - 5 = 6 Bytes (nicht konkurrierend)
Diesen Bonus natürlich nehmen :)
Probieren Sie es online!
quelle
PHP, 70 Bytes
Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online .erhöht sich,
p
bis eine ganzzahlige Lösung für gefunden wirdargument==(p+q)*(q-p+1)/2
, und gibtdann den Bereich von
p
bis ausq
.quelle
Excel VBA, 119 - 5 = 114 Bytes
Sub
Routine, die die Eingaben
einer Ganzzahl vom erwarteten Typ annimmt und die längste Folge aufeinanderfolgender Zahlen, die sich daraus ergeben, an die Zelle ausgibt[A1]
quelle