Einführung
In der Mathematik ist eine polygonale Zahl eine Zahl, die als Punkte oder Kiesel dargestellt wird, die in Form eines regelmäßigen Polygons angeordnet sind. Die Punkte werden als Buchstaben (Einheiten) angesehen. Dies sind eine Art zweidimensionaler figürlicher Zahlen.
Die Zahl 10 kann beispielsweise als Dreieck angeordnet sein:
* ** *** ****
Aber 10 kann nicht als Quadrat angeordnet werden. Die Zahl 9 kann andererseits sein:
*** *** ***
Einige Zahlen, wie z. B. 36, können sowohl als Quadrat als auch als Dreieck angeordnet werden:
****** * ****** ** ****** *** ****** **** ****** ***** ****** ******
Gemäß der Konvention ist 1 die erste polygonale Zahl für eine beliebige Anzahl von Seiten. Die Regel zum Vergrößern des Polygons auf die nächste Größe besteht darin, zwei benachbarte Arme um einen Punkt zu verlängern und dann die erforderlichen zusätzlichen Seiten zwischen diesen Punkten hinzuzufügen. In den folgenden Diagrammen wird jede zusätzliche Ebene rot dargestellt.
Dreieckige Zahlen:
Quadratzahl:
Nach dieser Regel können auch Polygone mit einer höheren Anzahl von Seiten wie Fünfecke und Sechsecke konstruiert werden, obwohl die Punkte nicht mehr wie oben ein vollkommen regelmäßiges Gitter bilden.
Fünfeckige Zahlen:
Sechseckige Zahlen:
Quelle: Wikipedia
Deine Aufgabe
Bei einer positiven ganzen Zahl N (1 <= N <= 1000) wird jede Art von polygonaler Zahl N von Dreieckszahlen bis einschließlich ikosagonaler Zahlen (20-gon) gedruckt.
Beispiel: Die Zahl 10 ist eine Dreiecks- und eine Dekagonalzahl. Die Ausgabe sollte also ungefähr so aussehen (Sie können Ihr eigenes Ausgabeformat auswählen, aber es sollte ungefähr so aussehen):
3 10
Testfälle
1 -> 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 -> (None)
3 -> 3
6 -> 3 6
36 -> 3 4 13
Als Referenz ist die n
-te k
-gonale Zahl:
Bildnachweis: xnor
Denken Sie daran, das ist Code-Golf , also gewinnt der Code mit den wenigsten Bytes.
quelle
n
k-gonale Zahl(k-2)*n*(n-1)/2 + n
.Antworten:
Python 3, 68 Bytes
Löst für jede mögliche Anzahl von Seiten
s+2
die quadratische FormelR=s*n*(n-1)/2 + n
auf,n
um festzustellen, ob das Ergebnis eine ganze Zahl ist.Vergleichen (73 Bytes):
Ein alternativer Lösungsansatz für
s
gibt 62 Bytes in Python 3, schlägt aber fehlR=1
.quelle
JavaScript (ES6), 90 Byte
Löst die quadratische Gleichung. 73 Bytes auf genügend neuen Firefox-Versionen:
quelle
> <>, 62 + 3 = 65 Bytes
Erwartet die Eingabe oben im Stapel, also +3 Bytes für die
-v
Flag.Dies ist meine erste Programmierung in> <>, daher fehlen mir möglicherweise einige offensichtliche Tricks, um den Code zu verkürzen.
Erläuterung:
Initialisierung
Bewegt N zum Register, schiebt den Zähler auf den Stapel (beginnend mit
1
, was Dreieckszahlen entspricht) und startet die Sequenz mit den Werten0
und1
.Hauptschleife
Vergleicht die Oberseite des Stapels mit dem Register. Wenn es gleich ist, gehen Sie zur Druckroutine. Wenn es größer ist, gehen Sie zur Rücksetzroutine. Nehmen Sie andernfalls die Differenz zwischen den beiden obersten Stapelelementen, fügen Sie den Zähler hinzu und fügen Sie ihn zum vorherigen obersten Stapelelement hinzu. Dies berechnet die nächste polygonale Zahl.
Drucken
Gibt den Zähler + 2 gefolgt von einer neuen Zeile aus und wechselt dann zur Rücksetzroutine.
Zurücksetzen
Entfernt die beiden obersten Stapelelemente und erhöht den Zähler. Beendet das Programm, wenn der Zähler größer als 18 ist, ansonsten schiebt er die Startnummern
0
und1
zum Stapel und kehrt zur Hauptschleife zurück.quelle
Jelly , 22 Bytes
Probieren Sie es online!
Erläuterung
quelle
Axiom 203 Bytes
Hier ist weniger Golf und Routine, die Zahlen zeigen
quelle
AWK , 67 Bytes
Probieren Sie es online!
Ich habe versucht, das Quadrat tatsächlich zu lösen, aber es ist kürzer (und für mich weniger fehleranfällig) , jeden Wert zu überprüfen, um festzustellen, ob er funktioniert.
quelle
R,
6866 BytesLiest
N
von stdin. Berechnet die erstenN
k-gonalen Zahlen und ermittelt diek
GleichheitN
mit der xnor-Formel. Spart jedoch Bytes in Klammern, indem1:18
anstelle von3:20
und2
am Ende hinzugefügt wird .expand.grid
von Standardnamen der SpaltenVar1
,Var2
..., wenn ein Name nicht gegeben ist.$
Indizes durch partielle Übereinstimmung,m$V
entspricht alsom$Var2,
der zweiten Spalte.alte Version:
Probieren Sie es online!
quelle
Pari / GP , 34 Bytes
Pari / GP verfügt über eine integrierte Funktion zum Testen, ob eine Zahl eine polygonale Zahl ist.
Probieren Sie es online!
quelle
Gelee , 20 Bytes
Ich habe gerade angefangen, eine effektive Kopie dieser Herausforderung zu schreiben (auch wenn sie alle k> 1 und nicht nur [1,20] abdeckt) ... also werde ich sie beantworten!
Ein vollständiges Programm, das eine Geleelistendarstellung der Ergebnisse druckt *
Probieren Sie es online!
* Kein Ergebnis gibt nichts aus;
Ein einzelnes Ergebnis gibt nur diese Zahl aus.
mehrere ergebnisse druckt a
[]
geschlossene,,
getrennte Liste der ZahlenWie?
quelle