Tâche:
Votre tâche consiste, lorsque vous avez reçu trois entrées:
- un numérateur
n
- un dénominateur
d
- un autre entier,
x
Créez un programme / une fonction qui trouve le x
e chiffre du nombre après la décimale.
Spécifications:
- La plage de
n
etd
est comprise entre1
et2^31 - 1
, inclusive. - La plage de
x
est comprise entre1
et10,000,000
, inclusive.- Vous pouvez choisir d'utiliser l'indexation basée sur 1 ou l'indexation basée sur 0 pour
x
. Veuillez indiquer dans votre réponse laquelle vous utilisez.
- Vous pouvez choisir d'utiliser l'indexation basée sur 1 ou l'indexation basée sur 0 pour
n
peut être plus grand qued
.n
,d
etx
sont garantis comme des entiers positifs (pour la version d'index basée sur 1 dex
, si vous choisissez d'utiliser l'indexation basée sur 0 pourx
alorsx
peut l'être0
).- Vous pouvez prendre des entrées de toute manière raisonnable (c'est-à-dire de toute façon qui n'est pas une faille standard).
Règles:
- Vous devez renvoyer le
x
th chiffre exact , pas lorsqu'il est arrondi - donc le15
th chiffre de1/6
, par exemple, ne l'est pas7
, mais6
. - Votre programme doit fonctionner pour tous les
x
moins de 10 millions, sauf si votre langue ne prend pas en charge les décimales jusqu'à 10 millions de lieux.
Exemple d'E / S:
L'exemple d'entrée utilise une indexation basée sur 0, ce qui signifie x
qu'il ira de 0
à 9,999,999
. En plus de cela, "l'entrée" est écrite comme une chaîne avec des espaces séparant les nombres.
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
Réponses:
Python 2 , 25 octets
Port de ma réponse Haskell, car Python prend également en charge les bignums par défaut. Comme là,
x
est indexé 1.Essayez-le en ligne! (empruntant l'emballage de Keerthana Prabhakaran.)
la source
Mathematica 33 octets
Indexation basée sur 1.
Exemple: 10 millionième chiffre de Pi à droite du séparateur décimal:
prend environ 2 secondes sur mon ancienne machine.
Vous pouvez l'essayer en ligne sur WolframAlpha (cliquez sur le signe égal)
la source
Haskell , 26 octets
Fonctionne pour tous les cas de test. Yay bignums!
(n#d)x
prendInteger
s et retourne unInteger
.x
est indexé 1.Essayez-le en ligne!
la source
PHP> = 7.1, 40 octets
bcdiv
Version en ligne
la source
<br /> <b>Notice</b>: Uninitialized string offset: -1 in <b>[...][...]</b> on line <b>6</b><br />
Gelée , 7 octets
Essayez-le en ligne!
Une soumission de fonction (mais fonctionne également comme un programme complet). Les fonctions Jelly ne peuvent prendre directement que deux arguments; ainsi je prends le chiffre pour retourner comme argument de gauche, le numérateur comme argument de droite et le dénominateur de l'entrée standard (au lieu d'utiliser un troisième argument).
Les gens habitués à Jelly peuvent être conscients qu'un programme complet peut prendre plus de deux arguments, mais cela vous fait perdre l'accès à la manière la plus simple d'écrire l'entier constant 10, ce qui est assez pertinent ici. En tant que tel, ce type d'entrée mixte ressemble un peu à un exploit plutôt qu'à un golf réellement utile; Personnellement, je ne suis pas d'accord avec cela, mais la règle autorisant cela est actuellement à +40 / -12, donc tant que c'est dans les règles, je peux aussi bien l'exploiter (et je dois être compétitif).
Un argument de gauche de 1 fait référence au chiffre immédiatement après la virgule décimale (le "chiffre .1s"), un argument de 2 au chiffre .01s, etc.
Explication
Jelly a une arithmétique de précision arbitraire sur les entiers, donc en pré-multipliant par une puissance de 10, nous déplaçons effectivement le chiffre que nous voulons vers la position des unités, où il est beaucoup plus facile d'extraire.
la source
sed
-r
, 93131136octetsEssayez-le en ligne!
( Voir sortie en décimal )
Prend les entrées en unaire et les sorties en unaire, et le programme est indexé 1. Heureusement, ce défi m'a déjà préparé pour celui-ci.
Le concept est similaire, les deux implémentent une longue division. Ici, j'exécute de longs
x
temps de division , oùx
est le chiffre après la décimale que je dois trouver. Après chaque itération, je supprime les décimales précédentes car elles ne sont plus nécessaires.Pendant la division, le programme est au format
dividend;divisor;x,result
.s/$/,/
ajoute cette virgule, la virgule est nécessaire pour séparer le résultat de tout le resteSuit ensuite la boucle du programme principal
:d
étiquette ds/,.+/,/
tout supprimer après la virgule:
étiquette vides/(1+)(1*;\1;1*,)1{10}?/\21/
effectuer la division, en ajoutant 1 au résultat à chaque itération, tout en supprimant simultanément des blocs de 10 1 continus dans le résultatt
branchez-vous sur l'étiquette vide, en d'autres termes, bouclez jusqu'à ce que le dividende soit épuisés/1*/&&&&&&&&&&/
multipliez le dividende par 10 pour préparer la prochaine itérationta
branche pour étiqueter un:a
étiqueter a, cette ligne et la ligne ci-dessus sont nécessaires pour fairetd
fonctionners/1,/,/
soustraire 1 de xtd
branche conditionnelle à d, ceci est déclenché s'il y a eu une substitution réussie puisque la dernière branche conditionnelle, depuiss/1*/&&&&&&&&&&/
toujours réussie,td
sera toujours déclenchée, mais en introduisant la branche a, nous corrigeons cela de sorte que cela ne dépend que de la substitution précédentes/.+,//
enfin, supprimez tout sauf le résultatla source
Rubis ,
3433 octetsEssayez-le en ligne!
la source
REXX, 76 octets
(Pas très court mais j'ai pensé que cela ferait un changement d'en faire un dans REXX) Rexx est basé sur 1 par définition.
Explication:
La fusion de 3 et 4 l'allonge en fait à cause du changement de syntaxe:
Pour les non-REXX: les chaînes et les nombres sont totalement interchangeables dans REXX. Ils sont déterminés par la façon dont vous agissez sur eux. Vous pouvez donc analyser un nombre en utilisant des fonctions de piqûre sans conversion. Par exemple
renvoie 55 et non 2728!
la source
rexx main.rexx 1 2 3
. Vous devez mentionner dans votre réponse que l'entrée est indexée sur 1.Lot, 70 octets
la source
Assemblage Intel x86 cpu language, 50 bytes
traduction en nasm
Pour le paramètre «c», la plage commence à 0; ce serait 0..0xfffffffd. Si les paramètres b = 0 ou c hors de la plage 0..0xfffffffd, il renverrait -1
la source
Lua, 42 octets
la source
C,
4943 octetsL'argument «i» est l'indexation 0. Code de test et résultat
la source
Java 7,
146139137 137133128122 Octets-3 octets grâce à Erik l'Outgolfer, j'ai totalement oublié que les importations n'avaient pas à être sur leur propre ligne
-4 octets grâce à Qwerp-Derp pour avoir déplacé n% d vers le constructeur
-6 octets remercie Kevin Cruijssen d'avoir supprimé le toString ()
J'espère que c'est ainsi que le décompte d'octets se fait pour les fonctions java avec les importations
Utilise la classe BigDecimal de Java pour obtenir une représentation exacte de l'expansion décimale. Notez que ce n'est pas le code le plus rapide jamais exécuté, mais qu'il produit finalement la sortie correcte pour tous les cas de test. Code non golfé:
Essayez-le en ligne!
la source
BigDecimal(n)
parBigDecimal(n%d)
, et vous débarrasser de lan=n%d
?.toString()
et utiliser à la+""
place (avec deux parenthèses supplémentaires).Clojure, 39 octets
fonction anonyme avec des arguments
n,d,x
oùx
utilise une indexation basée sur.la source
F # (.NET Core) , 30 octets
Essayez-le en ligne!
(utilisez l'indexation basée sur 1)
la source
Groovy, 30 octets
x utilise une indexation basée sur 1.
Explication:
la source
Python 2 ,
50,44,40,36 octetsEssayez-le en ligne!
la source
1,7,10000000
Rubis, 39 octets
la source
JavaScript (ES6), 34 octets
x est basé sur 0
la source
f(1,7,10000000)
, par exemple.Python 2 , 32 octets
Utilise l'indexation 0
Essayez-le en ligne!
Modifier:
Revenu à la solution d'origine comme le montre la réponse d'Ørjan Johansen selon laquelle cela fonctionne, mais je ne la jouerai plus
la source
Groovy, 55 octets
Expliqué en utilisant
1,11,2
:la source
Axiom,
71 6176 octetsn est une indexation 0 [0..M]. Code de test et résultat
la source
JavaScript (Node.js) , 43 octets, port
Essayez-le en ligne!
JavaScript (Node.js), 51 bytes
Try it online!
use Array rather than recursive to avoid stackoverflow
la source