Einführung
Eine fünfeckige Zahl ( A000326 ) wird durch die Formel P n = 0,5 × (3n 2 -n) erzeugt . Oder Sie können einfach die Anzahl der verwendeten Punkte zählen:
Sie können die Formel oder das GIF oben verwenden, um die ersten fünfeckigen Zahlen zu finden:
1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330, 376, 425, 477, etc...
Als nächstes müssen wir die Summe von x aufeinanderfolgenden Zahlen berechnen .
Wenn zum Beispiel x = 4 ist , müssen wir P n + P n + 1 + P n + 2 + P n + 3 betrachten (was aus 4 Termen besteht). Wenn die Summe der fünfeckigen Zahlen auch eine fünfeckige Zahl ist, nennen wir dies eine fünfeckige Fünfeckzahl .
Für x = 4 , ist die kleinste pentagonal Fünfeck Zahl 330
, die aus gemacht wird 4 aufeinander folgende Fünfeckszahl: 51, 70, 92, 117
. Wenn also der Eingang ist 4
, sollte Ihr Funktionsprogramm ausgeben 330
.
Aufgabe
- Bei einer Ganzzahl größer als 1 wird die kleinste fünfeckige Fünfeckzahl ausgegeben.
- Sie können eine Funktion oder ein Programm bereitstellen.
- Hinweis: Es gibt keine Lösungen für zB x = 3 . Dies bedeutet, dass wenn eine Nummer nicht gemacht werden kann aus den ersten 10000 fünfeckigen Zahlen , müssen Sie die Berechnung beenden und das ausgeben, was am besten zu Ihnen passt.
- Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
Testfälle:
Input: 2
Output: 1926 (which comes from 925, 1001)
Input: 3
Output: ?
Input: 4
Output: 330 (which comes from 51, 70, 92, 117)
Input: 5
Output: 44290 (which comes from 8400, 8626, 8855, 9087, 9322)
Input: 6
Output: 651 (which comes from 51, 70, 92, 117, 145, 176)
Input: 7
Output: 287 (which comes from 5, 12, 22, 35, 51, 70, 92)
Input: 8
Output: ?
Input: 9
Output: 12105 (which comes from 1001, 1080, 1162, 1247, 1335, 1426, 1520, 1617, 1717)
Input: 10
Output: ?
Es können auch größere Zahlen angegeben werden:
Input: 37
Output: 32782
Input: 55
Output: 71349465
Input: 71
Output: 24565290
10001-x
x = 3
, welche haben keine Lösungen?9919
->496458299155
Antworten:
CJam, 29 Bytes
Probieren Sie es online aus.
Die Ausführung dauert einige Sekunden.
Erläuterung
Zuerst müssen wir überprüfen, wie viele Fünfeckzahlen wir als mögliche Summen betrachten müssen. Die Summe der ersten 10.000 Fünfeckzahlen ist
500050000000
. Die erste größere fünfeckige Zahl ist die 577.380.Ich habe ein leicht modifiziertes Programm verwendet, um die größten Eingaben zu finden, die eine nicht leere Lösung ergeben. Dies sind alle Lösungen für Eingaben über 9.000:
quelle
Lua, 142 Bytes
Ungolfed
Yay für das Umkehren von Tabellen!
Update 142 Bytes: Durch Entfernen des überflüssigen Funktionsaufrufs 'tonumber' wurden 10 Bytes gespeichert.
quelle
Haskell, 109 Bytes
Kehrt zurück
0
wenn keine fünfeckige Fünfeckzahl vorhanden ist.Anwendungsbeispiel (dauert einige Zeit):
map (#take(10^4)p) [1..10]
->[1,1926,0,330,44290,651,287,0,12105,0]
.Es ist mehr oder weniger eine direkte Implementierung der Definition: Wenn sich die Summe der ersten
x
Elemente in der Liste befindet, geben Sie sie aus, oder wiederholen Sie den Versuch mit dem Ende der Liste. Beginnen Sie mit den ersten 10.000 fünfeckigen Zahlen, halten Sie an und kehren Sie zurück,0
wenn die Liste weniger alsx
Elemente enthält.quelle
PARI / GP, 71 Bytes
Ich mag die
ispolygonal
Funktion in PARI / GP.quelle
Python 3, 144 Bytes
Dies kehrt die Definition einer fünfeckigen Zahl um; Wenn P (n) = (3n ^ 2-n) / 2, dann ist ein gegebenes P eine fünfeckige Zahl, wenn f (1 + sqrt (24 * P + 1)) / 6 eine ganze Zahl ist. (Technisch sollte es auch (1-sqrt (24 * P + 1)) / 6 sein, aber das sollte immer negativ sein.) Verwendet auch Leerzeichen und Tabulatoren als zwei verschiedene Einrückungsstufen, wie hier vorgeschlagen . Dies gibt nichts aus, wenn keine fünfeckige fünfeckige Zahl gefunden werden kann. Ich vertraue darauf, dass das in Ordnung ist?
Ich bin der festen Überzeugung, dass jemand, der schlauer ist als ich, einen Weg finden könnte, dies noch weiter zu verkürzen, wahrscheinlich um die for-Schleife herum.
quelle
LabVIEW, 39 LabVIEW-Grundelemente
Diesmal läuft kein GIF davon.
Der Math-Knoten in der Schleife erstellt ein Array aller Zahlen. Nehmen Sie ein Sub-Array, fügen Sie Elemente hinzu, suchen Sie nach dieser Nummer, falls gefunden, nehmen Sie einen Index und stoppen Sie die Schleife.
Eine ungültige Eingabe gibt die höchste fünfeckige Zahl aus.
quelle
R
114100 Bytesungolfed (irgendwie)
quelle
Gelee , 30 Bytes
Dieser Code funktioniert mit dieser Version von Jelly und entspricht dem folgenden Binärcode:
Es ist bei weitem langsam und Speicher hungrig für das Online - Interpreter, da es die ersten 150.000.000 für pentagonality prüft (149.995.000 nun mal die 10.000 seine th Fünfeckszahl).
Wenn Sie die Reichweite auf etwas Sinnvolleres verkürzen, können Sie es online ausprobieren! für ausreichend kleine eingänge.
Idee
Ein bekanntes Ergebnis für fünfeckige Zahlen ist x genau dann wenn sqrt (24x + 1) - 1 durch 6 teilbar ist .
Anstatt die ersten 10.000 fünfeckigen Zahlen zu berechnen, definieren wir eine Hilfsverknüpfung, mit der nichtfünfeckige Zahlen aus einem bestimmten Array entfernt werden. Warum? Da die neueste Version von Jelly vor dieser Herausforderung keine Möglichkeit hat, Listen zu schneiden ...
Code
Jelly, 21 Bytes (nicht konkurrierend)
Die neueste Version von Jelly verfügt über zwei neue Funktionen (überlappende Slices und Listenfilter / Überschneidungen) und eine Fehlerbehebung, die eine viel geringere Anzahl von Bytes ermöglicht.
Dieser Code funktioniert auf meinem Desktop-Computer einwandfrei, ist aber für das Zeitlimit von TIO ein bisschen zu langsam. Zu es online auszuprobieren! (Für ausreichend kleine Eingaben) müssen wir den Anfangsbereich noch einmal reduzieren.
Wie es funktioniert
quelle
Mathematica 85 Bytes
Führt eine Schnellsuche bis P 10 4 durch .
quelle
Axiom, 157 Bytes
ungolfed und ergebnisse
Esplenation: Wir können n mit dem Ergebnis "a" finden, siehe unten
[verwende 1 + sqrt (...), weil n> 0]
Dies oben bedeutet, dass, falls vorhanden, keine solche existiert
als
Weiter müssen wir beweisen, dass p (n0) = a ist, um sicher zu sein (weil es nicht immer so ist)
Aber der Haupttrick wäre, die Summe zu machen
erst am Anfang, und finden Sie die nächsten x Elemente Summe einfach mit
und so weiter für die anderen Summen (Verwendung oben in der Aussage a: = a + p (j + x) - p (j)). Dies bedeutet, dass es nicht notwendig ist, eine Zahl x Elementsumme in der Schleife zu verwenden ... ..
quelle
Python 2 ,
128124 BytesProbieren Sie es online!
quelle
Javascript 93 Bytes
quelle