Herausforderung:
Bei einer gegebenen Index-Ganzzahl geben Sie n
entweder das n
'te Element in dieser Sequenz oder die Sequenz bis einschließlich Index aus n
:
25,25,7,28,29,20,21,22,23,14,35,26,7,28,29,20,16,29,12,15,28,21,14,17,30,13,16,29,12,15,28,21,10,6,12,18,15,11,7,13,19,17,13,9,15,21,18,14,10,16,22,19,15,11,17,23,20,16,12,18,24,21,17,13,19,25,23,19,15,21,27,24,20,16,22,28,25,21,17,23,29,16,13,9,15,21,18,14,10,16,22,20,16,12,18,24,21,17,13,19
Wie funktioniert diese Sequenz?
HINWEIS: In dieser Erklärung ist der Index n
1-indiziert.
Setzen Sie die Zahlen 1
durch x
auf zwei Linien der Länge n*6 - 1
, wo x
auf der aktuellen Iteration und die Länge der Zahlen hängt verwendet, und dann addieren Sie die Ziffern der n
‚th / am weitesten rechts stehenden Olympischen Ringen dieser beiden Linien.
Die erste Zahl in der Sequenz wird wie folgt berechnet:
The length of the lines are 5 (because 1*6 - 1 = 5):
12345
67891(0)
Then leave the digits in an Olympic Rings pattern:
1 3 5
7 9
And sum them:
1+3+5+7+9 = 25
So n=1
ergibt sich 25
.
Die zweite Zahl in der Sequenz wird wie folgt berechnet:
The length of the lines are 11 (because 2*6 - 1 = 11):
12345678910
11121314151(6)
Then leave the digits in the second/right-most Olympic Rings pattern:
7 9 0
4 5
And sum them:
7+9+0+4+5 = 25
So n=2
ergibt sich 25
.
Die dritte Zahl in der Folge berechnet sich wie folgt:
The length of the lines are 17 (because 3*6 - 1 = 17):
12345678910111213
14151617181920212(2)
Then leave the digits in the third/right-most Olympic Rings pattern:
1 2 3
0 1
And sum them:
1+2+3+0+1 = 7
So n=3
ergibt sich 7
.
etc.
Herausforderungsregeln:
- Wenn Sie das
n
'te Element in der Sequenz ausgeben , können Sie die Eingabe als 0-indiziert statt als 1-indiziert annehmen. Beachten Sie jedoch, dass die Berechnungen vonn*6 - 1
dann zu(n+1)*6 - 1
oder werden(n+1)*5 + n
. - Einzelne Zahlen mit mehr als einer Ziffer können am Ende der ersten Zeile aufgeteilt werden, wenn die Länge
n*5 + n-1
erreicht ist. Daher ist es möglich, dass eine Zahl mit zwei oder mehr Ziffern teilweise der hintere Teil von Zeile 1 und teilweise der hintere Teil von Zeile 1 ist führender Teil der Linie 2.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
Hier ist eine Auswahl der Testfälle von 1 bis 1.000. Sie können also eines davon auswählen.
Einige zusätzliche höhere Testfälle:
1010: 24
1011: 24
2500: 19
5000: 23
7500: 8
10000: 8
100000: 25
1*5 + 1-1 = 5
? Sollte es nicht sein1*5 + 5 - 1 = 9
?n=1
son*5 + n-1
wird1*5 + 1-1
, was wiederum ist5 - 0 = 5
.n * 5 + n - 1
gleichn * 6 - 1
?Antworten:
Schale , 16 Bytes
Probieren Sie es online!
-3 Bytes dank H.PWiz .
(Gehetzte) Erklärung:
quelle
Retina ,
706862 BytesProbieren Sie es online!
Erläuterung
Nennen wir den Eingang n und verwenden wir ihn
3
als Beispiel.Das
10**
ist die Kurzform, bei10*$&*_
der die Eingabe durch eine Zeichenfolge mit 10n Unterstrichen ersetzt wird.Jetzt ersetzen wir jeden Unterstrich durch die Länge des Strings bis einschließlich dieses Unterstrichs. Dies ergibt also nur die Zahl von 1 bis 10n, die alle zusammen verkettet sind ( 10n reicht immer aus, um zwei Zeilen der erforderlichen Länge auszufüllen).
Eval! In dieser und der nächsten Phase wird der Quellcode eines anderen Programms generiert, das dann für diese Zeichenfolge verketteter Ganzzahlen ausgeführt wird.
Um dieses Programm zu generieren, werden in dieser Phase zunächst die Ganzzahlen durch eine Zeichenfolge mit 6n Unterstrichen ersetzt (
$+
bezieht sich auf die ursprüngliche Eingabe des Programms).Ersetzen dann die Unterstrichen mit
L`.{…}
, wo…
ist 6n-1 (die Länge der Leitungen wir suchen at). Wir haben also einen regulären Ausdruck generiert, dessen Quantifizierer von der ursprünglichen Eingabe abhängt.Wenn dieses Programm ausgewertet wird, stimmt es mit Teilen der Länge 6n-1 überein , von denen es mindestens zwei geben wird. Für unsere Beispieleingabe erhalten
3
wir:Jetzt müssen wir nur noch die relevanten Ziffern extrahieren.
Zunächst
%
entfernen wir in jeder Zeile ( ) alle bis auf die letzten fünf Ziffern (,-6
). Das gibt unsEndlich:
Wir erweitern jede zweite Ziffer (
2
) in den ersten zehn (9
dies ist 0-basiert) in unary. Das sind die Positionen auf den Olympischen Ringen.Und wir zählen die Anzahl der resultierenden Unterstriche, um sie zu summieren und das Ergebnis in Dezimalzahlen umzuwandeln.
quelle
1
.-7
Python 2 ,
9490 BytesProbieren Sie es online!
quelle
Japt ,
333230292827 BytesOh, das ist nicht hübsch!
Gibt den n- ten Term 1-indiziert aus.
Versuch es
Erläuterung
quelle
Python 2 , 97 Bytes
Probieren Sie es online!
quelle
Python 3,
129123 BytesProbieren Sie es online
Das ist zwar ziemlich durcheinander, funktioniert aber.
quelle
05AB1E ,
222120 BytesProbieren Sie es online!
Erläuterung
Alternativer 21-Byte-Ansatz
quelle
Jelly , 19 Bytes
Probieren Sie es online!
quelle
J ,
61, 58,57 BytesProbieren Sie es online!
quelle
Ruby ,
65 6356 BytesProbieren Sie es online!
quelle
Reinigen ,
138101 BytesProbieren Sie es online!
quelle
Java 8,
138111109 BytesIch muss natürlich meine eigene Herausforderung beantworten. :)
Ich habe meinen anfänglichen Code verloren, den ich zum Erstellen der Testergebnisse in der Herausforderungsbeschreibung verwendet habe, also habe ich gerade neu begonnen.
Erläuterung:
Probieren Sie es online aus.
quelle