Ecrire un programme ou une fonction qui prend en nombres entiers positifs a
, b
et c
, et des impressions ou des retours a/b
à c
décimales, en utilisant les opérations + - * /% [ajouter, soustraire, multiplier, diviser, modulent] sur les nombres entiers positifs: vous pouvez utiliser tout ce qui votre langue le permet, mais pas sur les nombres à virgule flottante. La plage de a, b, c serait la plage autorisée pour les entiers non signés dans votre langue. Le résultat numérique sera tronqué au dernier chiffre à imprimer (donc non round
).
Cela signifie que si votre langue n'a pas de type entier (flottant uniquement), vous pouvez participer en utilisant ces nombres flottants uniquement comme des entiers positifs. L'indice de cet exercice serait d'écrire la fonction qui trouve les chiffres dans une division en virgule flottante, en utilisant uniquement l'opération + - * /% sur des entiers [non signés].
Exemples
print(1,2,1)
imprimerait0.5
print(1,2,2)
imprimerait0.50
print(13,7,27)
imprimerait1.857142857142857142857142857
print(2,3,1)
imprimerait0.6
print(4,5,7)
imprimerait0.8000000
print(4,5,1)
imprimerait0.8
print(9999,23,1)
imprimerait434.7
print(12345613,2321,89)
imprimerait si votre langue a 32 bits non signés5319.09220163722533390779836277466609220163722533390779836277466609220163722533390779836277466
Le code le plus court en octets gagne. Je suis désolé si cela n'apparaît pas clairement ... Je ne connais pas non plus les langues, je ne me souviens pas bien des mots ... Il vaut mieux avoir un lien vers Ideone.com ou un autre endroit pour essayer facilement la réponse spécialement pour tester une entrée différente de celle proposée.
(1,2,0)
. Voir meta.codegolf.stackexchange.com/a/5608/194(1,2,0)
?(1,2,0)
ne devrait pas être pertinent car ce0
n'est pas un entier positif. Et je préférerais que c reste comme ça puisque je préfère ne pas avoir à penser à ajouter un.
ou pasRéponses:
05AB1E ,
17 13 11 1914 octetsSaisie dans le formulaire
b, a, c
.Enregistré 5 octets grâce à Grimy .
Essayez-le en ligne!
la source
b,a,c
?‰`I°*¹÷I°+¦'.sJ
‰`¹+I°*¹÷¦'.sJ
Haskell, 87 octets
Exemple d'utilisation:
(13#7)27
->"1.857142857142857142857142857"
.23 octets pour gérer le
c==0
cas et utiliser un zéro non significatif au lieu de choses comme.5
.Comment ça marche: multiplier
a
avec10^c
, diviser parb
, transformer en une chaîne, diviser où le.
doit être inséré, joindre les deux parties avec un.
entre-deux et fixer les cas de bord.la source
Perl 6 ,
58 57 5548 octetsCe qui est assez ennuyeux, c'est qu'il pourrait être réduit à juste
{($^a.FatRat/$^b).base(10,$^c)}
s'il était autorisé à arrondir à la valeur la plus proche.Explication:
la source
(...).FatRat / 10**$x
une division d'un rationnel? Vous n'êtes autorisé qu'à diviser des entiers.does Real
oudoes Numeric
ce serait autorisé? Et si j'augmente (patch de singe) la classe existante pour supprimer ces rôles, cela serait-il autorisé?+-*/%
uniquement avec des types entiers simples. "entier simple" en termes de fonctionnalité (tout d'abord: division entière) et non de représentation interne. Pensez-vous qu'il est autorisé d'utiliser une bibliothèque logicielle à virgule flottante qui, malgré son nom, n'utilise également que des entiers pour la représentation interne?Perl, 55 octets
Comprend +3 pour
-p
Donnez a et b sur une ligne sur STDIN, c sur la suivante
division.pl
:l'
$_/$&
est un peu défendables de. Je veux en fait une division entière mais perl n'en a pas sans charger des modules spéciaux. C'est donc temporairement un non-entier que je tronque immédiatement (en utilisant|0
) donc je me retrouve avec l'entier qu'une division entière donnerait. Il pourrait être réécrit($_-$_%$&)/$&
afin de ne pas avoir même temporairement une valeur non entière (ce serait cependant en interne un flottant)la source
$-
pour le faire uniquement int? (Je pense qu'il y a des limites strictes sur le mix / max de celui-ci, et je suis sûr que vous l'auriez déjà envisagé, mais cela mérite d'être vérifié!)use integer
$-
, bon à savoir. Merci!JavaScript (ES6),
5550 octets(a/b|0)
effectue la division flottante mais transforme immédiatement en un entier. Veuillez me faire savoir si cela n'est pas autorisé.la source
PHP, 187 octets
fonctionne avec des chaînes pour le numérateur qui peuvent être des valeurs int supérieures à
PHP_INT_MAX
Je n'ai aucune autre chance alors 13/7 est raccourci à 1.8571428571429 et j'atteins donc pas le cas de test avec 27 décimales
De cette façon, 36 octets ne sont pas autorisés
la source
Pyth -
2119181614 octetsSera à la recherche sur le format d'entrée, qui peut prolly enregistrer un tas.
Suite de tests . (PS le 27 ne termine pas en ligne, donc j'en ai fait 10 à la place).
la source
0
n'est pas un entier positif (même si l'op continue d'ajouter des exemples avecc=0
)JavaScript (ES6),
646259 octetsSauvegardé 2 octets grâce à ETHproductions.
La division incluse donne toujours un entier.
la source
m
complètement fonctionnerait toujours?f=(a,b,n,s)=>n+1?f((q=(a-a%b)/b,a%b*10),b,n-1,s?s+q:q+'.'):s
est de 60 octets.Java 7, 105 octets
Code non testé et testé:
Essayez-le ici.
Production:
la source
divide
et non/
.int
type pour stocker la valeur numérique. (N'est-ce pas cool? BigInteger est un nombreint[]
de chiffres. Par exemple, {1,2,5} en base 10 est 125. I Je ne sais pas dans quelle base se trouvent les chiffres de BigInteger, mais je suppose que c'est plus de 10. "Rubis, 67 octets
si j'en fais une fonction pour exécuter les cas de test ci-dessus
la source
->a,b,c{...}
remplacer les ellipses par votre code. (L'affectation réelle de la variable n'est pas nécessaire par consensus.)Raquette 203 octets
Non golfé:
Usage:
Production:
Autre méthode (réponse non valable ici):
la source
real->decimal-string
attend unereal
valeur comme premier argument, tout/
comme la division en virgule flottante, ce qui n'est pas autorisé dans cette tâche. Aussi:real->decimal-string
arrondit ((f 1 6 7)
->0.1666667
) au lieu de tronquer.q, 196 octets
Pour exécuter: définissez d'abord a, b, c.
la source
Rouille, 114 octets
code de test:
la source
PHP, 89 octets
intdiv () est introduit en php 7 donc il nécessite cela. php 7.1 me permettrait de changer la liste () en [] et économiserait ainsi 4 octets.
utiliser comme:
la source
$o.=intdiv($a=10*($a%$b),$b);
par$o.=($a=10*($a%$b))/$b^0;
économisera 4 octets.C #, 126 octets
Programme complet avec cas de test:
La division entière est implémentée. Des nombres de n'importe quelle taille peuvent être utilisés, en raison du
BigInteger
type de données (l'importationSystem.Numerics
est requise). Le paramètre de nombre de chiffresc
est limité à 2 ^ 31-1, mais il doit fournir plus qu'assez de chiffres.la source
Groovy (
787742 octets)Explication
Eval.me(a+'.0g');
- Conversion de l'entrée entière en entrée BigDecimal. En groovy, la notation BigDecimal est une notation double avec un G ou g ajouté. J'aurais aussi pu utiliser le constructeurnew BigDecimal(it)
mais cela a sauvé un octet..divide(b, n, 1)
- Divisez par b avec n précision, mode d'arrondi à moitié.Essayez-le ici: https://groovyconsole.appspot.com/script/5177545091710976
la source
Lot, 122 octets
la source
Mathematica, 50 octets
Fonction Sans nom de trois arguments (qui sont commandés
c
,a
,b
pour sauver un quelque part octet), qui renvoie une chaîne. Il multipliea/b
par10^c
, prend la plus grande fonction entière, puis se convertit en chaîne et insère une virgule décimale à l'endroit approprié. Dommage que les noms de fonction ne soient pas plus courts.la source
Python 3, 62 octets
Essayez-le ici
* Remarque : repl.it utilise une version plus ancienne de Python 3 , qui nécessite que tous les indices de champ soient spécifiés, ce
"{:.{1}f}"
qui signifie que ce sera le cas"{0:.{1}f}"
, ce qui en fait 63 octets dans repl.itComment utiliser
Entrez les trois valeurs avec des espaces entre les deux. c'est-à-dire qu'une entrée de
1 2 1
donnerait un résultat de0.5
Explication
input().split()
: Obtient une entrée utilisateur et la divise en une liste avec un séparateur de (espace)a,b,c = map(int,XX)
: Mappe les variables dans les valeurs spécifiées par l'utilisateur avec un type int"{:.{1}f}".format(a/b,c)
: Formate une chaîne pour afficher le résultat de la division et remplace{1}
parc
pour définir la décimale de la chaîne affichéeprint(XX)
: imprime la chaîne fourniela source
Python 3 , 58 octets
Essayez-le en ligne!
Ceci est précis pour le nombre de décimales spécifié tant que
a * 10 ** c
n'est pas trop grand.J'ai essayé Python 2 pour raccourcir le
str(...)
to`...`
mais Python 2 insère unL
à la fin s'il est trop grand, donc la vérification prendrait bien plus d'octets que cela ne vaut.la source
Stax , 13 octets
Exécuter et déboguer
Les arguments sont acceptés dans l'
c a b
ordre.la source
C, 67 octets
Essayez-le en ligne!
Une version précédente, je pense, avait un bug dans la mémoire de lecture qui n'était pas affecté au programme ... Merci à plafondcat et pour tous ...
la source