Implémentez un algorithme de division dans votre langue préférée qui gère la division entière. Il ne doit gérer que des nombres positifs - mais des points bonus s'il gère également la division négative et mixte. Les résultats sont arrondis pour des résultats fractionnaires.
Le programme ne peut pas contenir les /
, \
, div
ou opérateurs similaires. Ce doit être une routine qui n'utilise pas les capacités de division native de la langue.
Vous avez seulement besoin de gérer jusqu'à 32 bits de division. L'utilisation d'une soustraction répétée n'est pas autorisée.
Contribution
Prenez deux entrées sur stdin séparées par de nouvelles lignes ou espaces (votre choix)
740
2
Production
Dans ce cas, la sortie serait 370
.
La solution la plus courte l'emporte.
code-golf
arithmetic
division
Thomas O
la source
la source
740,2
également autorisé pour l'entrée? c'est-à-dire séparés par des virgules?Réponses:
Python - 73 caractères
Prend une entrée séparée par des virgules, par exemple
740,2
la source
JavaScript, 61
Cela fait une chaîne de la longueur du dividende
,,,,,,
(6) et se divise sur le diviseur,,,
(3), résultant en un tableau de longueur 3:,['', '', '']
dont je soustrais alors une longueur. Certainement pas le plus rapide, mais j'espère néanmoins intéressant!la source
A=Array,P=prompt,P((''+A(+P())).split(','+A(+P())).length)
JavaScript - 36 caractères
la source
alert
parp
vous donnera des caractères supplémentaires. :)Mathematica: 34 caractères
Résout symboliquement l'équation (xa == b)
la source
Solve[x#==#2]&@@Input[]
Python - 72 caractères
Prend une entrée séparée par des virgules, par exemple 740,2
la source
Python, 37
Étape 1. Convertissez en unaire.
Étape 2. Algorithme de division unaire.
la source
Python - 41 caractères
Prend une entrée séparée par des virgules, par exemple
740,2
la source
Python, 70
Quelque chose de fou que je viens de penser (en utilisant une entrée séparée par des virgules):
Si vous acceptez de petites erreurs de précision flottante, la
round
fonction peut être supprimée.la source
Yabasic - 17 caractères
la source
PHP - 82 caractères (buggy)
C'est une solution très simple, cependant - elle ne gère pas les fractions ou les signes différents (sauterait dans une boucle infinie). Je n'entrerai pas dans les détails dans celui-ci, c'est assez simple.
L'entrée est en stdin, séparée par une nouvelle ligne.
PHP - 141 caractères (complet)
Entrée et sortie identiques à la précédente.
Oui, c'est presque le double de la taille de la précédente, mais cela:
Reformater et expliquer:
la source
Ruby 1.9, 28 caractères
Reste de la division, 21 caractères
Échantillon:
Pour Ruby 1.8:
la source
('a'*a+'b').split('a'*b).size-1
, 3 caractères plus gros.APL (6)
/
n'est pas ici la division, maisfoldr
. c'est-à-dire,F/a b c
esta F (b F c)
. Si je ne peux pas l'utiliserfoldr
parce qu'on l'appelle/
, cela peut se faire en 9 caractères:Explication:
⎕
:input()
⍟⎕
:map(log, input())
-/⍟⎕
:foldr1(sub, map(log, input()))
*-/⍟⎕
:exp(foldr1(sub, map(log, input())))
⌊*-/⍟⎕
:floor(exp(foldr1(sub, map(log, input()))))
la source
PHP, 55 caractères
Sortie (740/2): http://codepad.viper-7.com/ucTlcq
la source
<?$a=fgetcsv(STDIN);echo$a[0]*pow($a[1],-1);
suffit d'utiliser une virgule au lieu d'un espace pour séparer les nombres.Scala 77
la source
Haskell, 96 caractères
L'entrée se fait sur une seule ligne.
Le code recherche simplement la réponse en prenant le diviseur
d
et en le multipliant par tous les entiersn >= 0
. Soitm
le dividende. Le plus grandn
tel quin * d <= m
est choisi pour être la réponse. Le code choisit en fait le moinsn
teln * d > m
et en soustrait 1 parce que je peux prendre le premier élément d'une telle liste. Dans l'autre cas, je devrais prendre le dernier, mais il est difficile de prendre le dernier élément d'une liste infinie. Eh bien, la liste peut être prouvée finie, mais Haskell ne sait pas mieux quand il effectue le filtre, il continue donc de filtrer indéfiniment.la source
Lisp commun, 42 personnages
Accepte une entrée séparée par un espace ou une ligne
la source
Frapper,
7264 caractèresGénérez un nombre infini de sauts de ligne, prenez le premier x, mettez-les tous dans un fichier appelé f, puis obtenez la taille de f en blocs de la taille de y. A suivi les conseils de manatwork pour raser huit personnages.
la source
read x y
. Avec quelques espaces supplémentaires supprimés, vous pouvez réduire à 64 caractères: pastebin.com/Y3SfSXWkPython - 45 caractères
Prend une entrée séparée par des virgules, par exemple 740,2
la source
Python, 94 caractères
Une recherche binaire récursive:
la source
Python, 148
D'autres solutions peuvent être courtes, mais sont-elles à l'échelle du Web ?
Voici une solution élégante à temps constant qui exploite la puissance du CLOUD.
Ai-je mentionné qu'il utilise également Haskell?
la source
Python, 46 octets
Personne n'avait publié la solution de soustraction ennuyeuse, donc je n'ai pas pu résister à le faire.
la source
Smalltalk , Squeak 4.x saveur
définir ce message binaire en entier:
Une fois golfé, ce quotient est encore long (88 caractères):
Mais c'est relativement rapide:
-> 127 ms sur mon modeste mac mini (8 MOp / s)
Par rapport à la division régulière:
-> 31 ms, c'est 4 fois plus lent
Je ne compte pas les caractères pour lire stdin ou écrire stdout, Squeak n'a pas été conçu pour les scripts.
Bien sûr, une soustraction répétée plus stupide
ou simple énumération stupide
pourrait aussi fonctionner, mais n'est pas vraiment intéressant
la source
la source
DC: 26 caractères
J'admets que ce n'est pas la solution la plus rapide.
la source
Python 54
Prend une entrée séparée par des virgules.
Des mots parce que le démarquage meurt avec une liste suivie d'un code?:
la source
Q, 46
.
la source
Référence: http://www.forums.hscripts.com/viewtopic.php?f=13&t=1358
la source
Python, 40 caractères
la source
Python, 37
Construit une chaîne de longueur
x
('0'*x
) et utilise un découpage étendu pour sélectionner chaquey
e caractère, à partir de l'indexy-1
. Imprime la longueur de la chaîne résultante.Comme Gnibbler, cela prend une entrée séparée par des virgules. Le supprimer coûte des
9
caractères:la source
Retina 0.7.3, 33 octets (pas en compétition)
La langue est plus récente que le défi. Prend une entrée séparée par un espace avec le diviseur en premier. La division par zéro n'est pas définie.
Essayez-le en ligne
la source