Aufgabe:
Ihre Aufgabe ist es, wenn Sie drei Eingaben erhalten:
- ein Zähler
n
- ein Nenner
d
- eine andere ganze Zahl,
x
Erstellen Sie ein Programm / eine Funktion, die die x
dritte Stelle der Zahl nach der Dezimalstelle findet.
Technische Daten:
- Der Bereich von
n
undd
liegt zwischen1
und2^31 - 1
, einschließlich. - Der Bereich von
x
liegt zwischen1
und10,000,000
einschließlich.- Sie können wählen, ob 1-basierte Indizierung oder 0-basierte Indizierung für verwendet werden soll
x
. Bitte geben Sie in Ihrer Antwort an, welche Sie verwenden.
- Sie können wählen, ob 1-basierte Indizierung oder 0-basierte Indizierung für verwendet werden soll
n
kann größer sein alsd
.n
,d
undx
sind garantiert positive ganze Zahlen (für 1-basierte Index-Version vonx
, wenn Sie 0-basierte Indexierung fürx
dannx
verwenden möchten, kann sein0
).- Sie können Eingaben auf jede vernünftige Weise vornehmen (dh auf jede Art und Weise, die keine Standardlücke darstellt).
Regeln:
- Sie müssen die exakte
x
Ziffer zurückgeben, nicht wenn sie gerundet ist - also ist die z. B.15
zehnte Ziffer1/6
nicht7
, aber6
. - Ihr Programm muss für alle
x
unter 10 Millionen funktionieren, es sei denn, Ihre Sprache unterstützt keine Dezimalstellen von 10 Millionen Stellen.
Beispiel I / O:
Die Beispieleingabe verwendet eine 0-basierte Indizierung, dh, es x
wird von 0
nach gewechselt 9,999,999
. Außerdem wird die "Eingabe" als Zeichenfolge mit Leerzeichen zwischen den Zahlen geschrieben.
1 2 3: 0
5 6 0: 8
5 6 1: 3
1 6 15: 6 (not 7, as it's not rounded)
1 11 2: 0
1 10000 9999999: 0
11 7 1: 7
Antworten:
Python 2 , 25 Bytes
Port meiner Haskell-Antwort, da Python standardmäßig auch Bignums unterstützt. Wie dort
x
ist 1-indiziert.Probieren Sie es online! (Keerthana Prabhakarans Umschlag ausleihen.)
quelle
Mathematica 33 Bytes
1-basierte Indizierung.
zB 10-millionste Stelle von Pi rechts vom Dezimalpunkt:
dauert auf meinem alten Rechner ca. 2 Sekunden.
Du kannst es online bei WolframAlpha ausprobieren (klicke auf das Gleichheitszeichen)
quelle
Haskell , 26 Bytes
Funktioniert für alle Testfälle. Yay Bignums!
(n#d)x
nimmtInteger
s und gibt ein zurückInteger
.x
ist 1-indiziert.Probieren Sie es online!
quelle
PHP> = 7.1, 40 Bytes
bcdiv
Online Version
quelle
<br /> <b>Notice</b>: Uninitialized string offset: -1 in <b>[...][...]</b> on line <b>6</b><br />
Gelee , 7 Bytes
Probieren Sie es online!
Eine Funktionsübermittlung (funktioniert aber auch als Vollprogramm). Jelly-Funktionen können nur zwei Argumente direkt übernehmen. Daher nehme ich die Ziffer als linkes Argument, den Zähler als rechtes Argument und den Nenner aus der Standardeingabe (anstelle eines dritten Arguments).
Menschen, die an Jelly gewöhnt sind, sind sich vielleicht bewusst, dass ein vollständiges Programm mehr als zwei Argumente enthalten kann. Dadurch verlieren Sie jedoch den Zugriff auf die genaueste Methode zum Schreiben der konstanten Ganzzahl 10, die hier ziemlich relevant ist. Insofern fühlt sich diese Art von gemischtem Input eher wie ein Exploit an als wie nützliches Golfen. Ich persönlich bin damit nicht einverstanden, aber die Regel, dies zuzulassen, liegt derzeit bei +40 / -12. Solange sie in den Regeln enthalten ist, kann ich sie genauso gut ausnutzen (und muss ziemlich konkurrenzfähig sein).
Ein linkes Argument von 1 bezieht sich auf die Ziffer unmittelbar nach dem Dezimalpunkt (die ".1s-Ziffer"), ein Argument von 2 auf die .01s-Ziffer und so weiter.
Erläuterung
Jelly hat eine Arithmetik mit willkürlicher Genauigkeit für ganze Zahlen. Durch Vormultiplizieren mit einer Potenz von 10 verschieben wir die gewünschte Ziffer effektiv an die Position der Einheit, an der sie viel einfacher zu extrahieren ist.
quelle
sed
-r
, 93131136BytesProbieren Sie es online!
( Siehe Ausgabe in Dezimal )
Nimmt Eingaben in Unary und Ausgaben in Unary auf, und das Programm ist 1-indiziert. Zum Glück das hat mich Herausforderung bereits auf diese vorbereitet.
Das Konzept ist ähnlich, beide implementieren lange Teilung. Hier führe ich lange Teilungen durch
x
, wox
sich die Stelle nach der Dezimalstelle befindet, die ich finden muss. Nach jeder Iteration verwerfe ich die vorherigen Dezimalstellen, da sie nicht mehr benötigt werden.Während des Aufteilens hat das Programm das Format
dividend;divisor;x,result
.s/$/,/
Fügt man dieses Komma hinzu, wird das Komma benötigt, um das Ergebnis von allem anderen zu trennenDann folgt die Hauptprogrammschleife
:d
Etikett ds/,.+/,/
alles nach dem Komma entfernen:
leeres Etiketts/(1+)(1*;\1;1*,)1{10}?/\21/
Führen Sie eine Division durch, indem Sie dem Ergebnis bei jeder Iteration 1 hinzufügen und gleichzeitig Blöcke mit 10 fortlaufenden Einsen im Ergebnis entfernent
verzweige zum leeren Etikett, sprich Schleife, bis die Dividende erschöpft ists/1*/&&&&&&&&&&/
Multiplizieren Sie die Dividende mit 10, um sich auf die nächste Iteration vorzubereitenta
Abzweig zur Bezeichnung a:a
beschriften Sie a, diese Linie und die Linie oben werden angefordert, umtd
Arbeit zu bildens/1,/,/
subtrahiere 1 von xtd
bedingte Verzweigung nach d, wird ausgelöst, wenn seit der letzten bedingten Verzweigung eine erfolgreiche Substitution stattgefunden hat, da dieses/1*/&&&&&&&&&&/
immer erfolgreich ist.td
Durch die Einführung der Verzweigung a wird dies jedoch behoben, so dass es nur von der vorherigen Substitution abhängts/.+,//
Entfernen Sie schließlich alles außer dem Ergebnisquelle
Ruby ,
3433 BytesProbieren Sie es online!
quelle
REXX, 76 Bytes
(Nicht sehr kurz, aber ich dachte, es würde eine Änderung in REXX bedeuten) Rexx ist per Definition 1-basiert.
Erläuterung:
Das Zusammenführen von 3 und 4 verlängert sich aufgrund der geänderten Syntax:
Für Nicht-REXXer: Zeichenfolgen und Zahlen sind in REXX vollständig austauschbar. Sie werden dadurch bestimmt, wie Sie auf sie einwirken. Sie können also eine Zahl mit Stichfunktionen ohne Konvertierung analysieren. Beispielsweise
gibt 55 und nicht 2728 zurück!
quelle
rexx main.rexx 1 2 3
. Sie sollten in Ihrer Antwort erwähnen, dass die Eingabe 1-indiziert ist.Batch, 70 Bytes
quelle
Assembly Intel x86-CPU-Sprache, 50 Bytes
Übersetzung in nasm
Für den Parameter 'c' beginnt der Bereich bei 0; es wäre 0..0xfffffffd. Wenn die Parameter b = 0 oder c außerhalb des Bereichs 0..0xfffffffd liegen, wird -1 zurückgegeben
quelle
Lua, 42 Bytes
quelle
C
4943 BytesDas Argument 'i' ist eine 0-Indizierung. Testcode und Ergebnis
quelle
Java 7,
146139137133128122 Bytes-3 Bytes dank Erik the Outgolfer, ich habe total vergessen, dass Importe nicht in einer eigenen Zeile sein müssen
-4 Byte dank Qwerp-Derp für das Verschieben von n% d in den Konstruktor
-6 Bytes danke Kevin Cruijssen für das Entfernen des toString ()
Ich hoffe, so wird die Byte-Zählung für Java-Funktionen mit Importen durchgeführt
Verwendet die BigDecimal-Klasse von Java, um eine genaue Darstellung der Dezimalerweiterung zu erhalten. Beachten Sie, dass es sich nicht um den schnellsten Code handelt, der jemals ausgeführt wurde, aber letztendlich für alle Testfälle die richtige Ausgabe liefert. Ungolfed-Code:
Probieren Sie es online!
quelle
BigDecimal(n)
mitBigDecimal(n%d)
, und werde das losn=n%d
?.toString()
und+""
stattdessen verwenden (mit zwei zusätzlichen Klammern).Clojure, 39 Bytes
anonyme Funktion mit Argumenten
n,d,x
wox
eine einseitige Indizierung verwendet wird.quelle
F # (.NET Core) , 30 Byte
Probieren Sie es online!
(1-basierte Indizierung verwenden)
quelle
Groovy, 30 Bytes
x verwendet eine 1-basierte Indizierung.
Erläuterung:
quelle
Python 2 ,
50,44 ,40,36 BytesProbieren Sie es online!
quelle
1,7,10000000
Ruby, 39 Bytes
quelle
JavaScript (ES6), 34 Byte
x ist 0-basiert
quelle
f(1,7,10000000)
zum Beispiel.Python 2 , 32 Bytes
Verwendet die 0-Indizierung
Probieren Sie es online!
Bearbeiten:
Zurück zur ursprünglichen Lösung, wie in Ørjan Johansens Antwort zu sehen, dass es funktioniert, aber ich werde nicht weiter Golf spielen
quelle
Groovy, 55 Bytes
Erklärt mit
1,11,2
:quelle
Axiom,
71 6176 Bytesn ist 0-Indizierung [0..M]. Testcode und Ergebnis
quelle
JavaScript (Node.js) , 43 Byte, Port
Probieren Sie es online!
JavaScript (Node.js) , 51 Byte
Probieren Sie es online!
Verwenden Sie Array anstatt rekursiv, um einen Stapelüberlauf zu vermeiden
quelle