Definition
Es gibt eine unendliche Reihe verketteter natürlicher Zahlen (positive ganze Zahlen, beginnend mit 1):
1234567891011121314151617181920212223...
Herausforderung
- Schreiben Sie ein Programm in einer beliebigen Sprache, das die Positionsnummer als Eingabe akzeptiert und eine Ziffer von dieser Position in der oben definierten Zeile ausgibt.
- Die Positionsnummer ist eine positive Ganzzahl beliebiger Größe. Das heißt, die erste Position ist 1 und ergibt die Ausgangsziffer '1'.
- Die Eingabe erfolgt entweder dezimal (z. B. 13498573249827349823740000191) oder in elektronischer Form (z. B. 1.2e789) entsprechend einer positiven Ganzzahl.
- Das Programm muss in angemessener Zeit (10 Sekunden auf einem modernen PC / Mac) beendet werden, wenn ein sehr großer Index als Eingabe verwendet wird (z. B. 1e123456 - das ist 1 mit 123456 Nullen). Eine einfache Iterationsschleife ist daher nicht akzeptabel.
- Bei ungültiger Eingabe muss das Programm nach 1 s mit einem Fehler abgebrochen werden. Z.B. 1,23e (ungültig) oder 1,23e1 (entspricht 12,3 - keine ganze Zahl)
- Es ist in Ordnung, die öffentliche BigNum-Bibliothek zu verwenden, um Zahlen zu analysieren / zu speichern und einfache mathematische Operationen mit ihnen durchzuführen (+ - * / exp). Es wird keine Byte-Strafe angewendet.
- Kürzester Code gewinnt.
TL; DR
- Eingabe: Bignum Integer
- Ausgabe: Ziffer an dieser Stelle in unendlicher Reihe
123456789101112131415...
Einige Abnahmetestfälle
in der Notation "Input: Output". Alle von ihnen sollten bestehen.
- 1: 1
- 999: 9
- 10000000: 7
- 1e7: 7 (wie oben)
- 13498573249827349823740000191: 6
- 1.1e10001: 5
- 1e23456: 5
- 1,23456e123456: 4
- 1e1000000: 0
- 1.23e: Fehler (ungültige Syntax)
- 0: Fehler (außerhalb der Grenzen)
- 1.23e1: Fehler (keine ganze Zahl)
Bonus!
Geben Sie die Ziffernpositionsnummer innerhalb der Nummer und die Ausgangsnummer selbst aus. Beispielsweise:
13498573249827349823740000191: 6 24 504062383738461516105596714
- Das ist die Ziffer '6' an Position 24 der Nummer '50406238373846151610559 6 714'
1e1000000: 0 61111 1000006111141666819445...933335777790000
- Stelle '0' an Position 61111 der 999995-stelligen langen Nummer, die ich hier nicht einschließen werde.
Wenn Sie die Bonusaufgabe erfüllen, multiplizieren Sie die Größe Ihres Codes mit 0,75
Kredit
Diese Aufgabe wurde bei einem Treffen von devclub.eu im Jahr 2012 ohne große Anzahl von Anforderungen gestellt. Daher waren die meisten Antworten Trivialschleifen.
Habe Spaß!
code-golf
number
sequence
number-theory
metalim
quelle
quelle
1.23456e123456
willkürlich zu behandeln, bestraft Sprachen, die solche Werte nicht nativ verarbeiten können, und erfordert, dass sie eine String-Verarbeitung durchführen, die tangential zur Herausforderung ist.Antworten:
CJam , 78 Bytes
Das Programm ist 104 Bytes lang und qualifiziert sich für den Bonus.
Die Newline ist rein kosmetisch. Die erste Zeile analysiert die Eingabe, die zweite Zeile generiert die Ausgabe.
Probieren Sie es online!
Idee
Für jede positive ganze Zahl k gibt es 9 × 10 k-1 positive ganze Zahlen mit genau k Stellen (ohne führende Nullen). Wenn wir also alle verketten, erhalten wir eine ganze Zahl von 9 × n × 10 k-1 .
Wenn Sie nun alle ganzen Zahlen mit n oder weniger Ziffern verketten, erhalten Sie eine ganze Zahl von
Ziffern.
Für eine gegebene Eingabe q versuchen wir, das höchste n so zu bestimmen, dass der obige Ausdruck kleiner als q ist . Wir setzen n: = ⌈log 10 q⌉-1 , dann n: = ⌈log 10 q⌉-2 usw., bis der gewünschte Ausdruck kleiner als q wird , subtrahieren den resultierenden Ausdruck von q (ergibt r ) und speichern den letzten Wert von n in l .
r gibt nun den Index in der Verkettung aller positiven ganzen Zahlen von l + 1 an , was bedeutet, dass die gewünschte Ausgabe die r% (l + 1) -te Stelle der r / (l + 1) -ten ganzen Zahl von l + 1 ist Ziffern.
Code (Eingabe-Parsing)
Code (Ausgabegenerierung)
quelle
C Jam, 75 × 0,75 = 56,25
Dies ist ziemlich schnell, eine Iteration pro Ziffer der Zahl, die die gewünschte Position enthält. Ich bin sicher, es kann viel mehr golfen werden, es ist ziemlich grob, wie es ist.
Geben Sie die Position als Eingabe an, die Ausgabe ist:
Probieren Sie es online aus .
quelle
1.23e1
. Es ist jedoch fehlerhaft,1.23456e123456
da die Eingabe nicht durch ein Double dargestellt werden kann. Auch die letzten Testfälle dauern 3 Minuten.