Nombre mixte à une fraction impropre
Dans ce défi, vous allez convertir un nombre mixte en une fraction incorrecte.
Parce que les fractions impropres utilisent moins de nombres, votre code devra être aussi court que possible.
Exemples
4 1/2
9/2
12 2/4
50/4
0 0/2
0/2
11 23/44
507/44
spécification
Vous pouvez supposer que le dénominateur de l'entrée ne sera jamais 0. L'entrée sera toujours au format x y/z
où x, y, z sont des entiers non négatifs arbitraires. Vous n'avez pas besoin de simplifier la sortie.
C'est le code-golf donc le code le plus court en octets gagne.
code-golf
number
parsing
rational-numbers
Downgoat
la source
la source
x
-y
ilz
être négatif?x,y,z
entrées séparées? La plupart des réponses supposent que le format d'entrée est en effet obligatoirex y/z
, mais certains ne le sont pas, d'où cette question d'avoir une réponse définitive.Réponses:
Japt, 10 octets
Woohoo, bat actuellement CJam!
Essayez-le en ligne!
Comment ça fonctionne
la source
LabVIEW, 29 primitives LabVIEW
la source
CJam,
161514 octetsou
Testez-le ici.
Explication
L'autre version évite d'utiliser une variable en utilisant un peu plus de décalage de pile.
la source
'//~\S/1$b'/@
c'est 13 octets. Edit : oh j'ai oublié l'entréel
.Mathematica, 58 octets
Cela renvoie le résultat simplifié. Si la sortie d'un nombre rationnel au lieu d'une chaîne est correcte, nous pouvons économiser 19 octets:
la source
PowerShell,
474442 octetsBiffé 44 est toujours régulier 44; (
Golfé quelques octets en utilisant l'expression régulière
-split
. Golfé un couple de plus grâce à TessellatingHeckler en échangeant le regex.Le
$args-split'\D'
prend notre argument d'entrée et se divise en caractères non numériques. Ici, il effectue deux divisions, l'une sur les espaces blancs, l'autre sur le/
personnage. Les résultats sont ensuite stockés dans les trois variables à l'aide d'une affectation simultanée. Nous formulons ensuite la sortie de chaîne sous la forme (le$l
nombre eft multiplié par l'$d
énominateur plus l'$n
umérateur) exécutée sous forme de bloc de code, de/
barre oblique, puis de$d
nouveau l' énominateur.la source
-split ' |/'
pour enregistrer un caractère avec un "correspond à ceci ou cela" regex, ou utiliser-split '\D'
pour diviser sur tout ce qui n'est pas un chiffre et s (h) avoir deux caractères. Si @Downgoat est prêt à être légèrement flexible sur le format de sortie, il'{0}*{2}+{1};{2}'-f($args-split'\D')|iex
fait 40 octets et a une sortie beaucoup plus cool car les chiffres sont même les uns au-dessus des autres!$l,$n,$d=$args-split'\D';+$l*$d+$n;$d
est encore plus courte à 37, et suit logiquement le même modèle qu'ici.Java avec Ten Foot Laser Pole 1.03, 79 + 25 (importation) = 104 octets
A besoin
import sj224.tflp.math.*;
Cela fonctionnera presque certainement aussi avec 1.04, mais jusqu'à présent, je ne l'ai testé qu'avec 1.03 parce que j'avais déjà un projet java configuré avec 1.03 dans le chemin de construction.
la source
JavaScript (ES6),
4441 octetsEnregistré 3 octets grâce à @ETHproductions !
Explication
Très simple.
Tester
Le test est sans déstructuration assigné pour fonctionner dans la plupart des navigateurs.
Afficher l'extrait de code
la source
[p,q,r]=
à la placep=
, puis remplacerp[0]
,p[1]
etp[2]
avecp
,q
etr
, respectivement. Après ce changement, j'obtiens 41:m=>([p,q,r]=m.match(/\d+/g),+q+p*r+"/"+r)
m.split(/\W/g)
place pour enregistrer un octetJulia,
5850 octetsIl s'agit d'une fonction anonyme qui accepte une chaîne et renvoie un
Rational
objet type. Pour l'appeler, donnez-lui un nom, par exemplef=s->...
.Nous pouvons profiter du fait que l'entrée peut être légèrement manipulée pour être une expression qui s'évalue à un rationnel. En particulier, un entier plus un rationnel est un rationnel, et les rationnels sont indiqués par des doubles barres obliques. Donc , si nous nous tournons
4 1/2
dans4+1//2
le résultat de cette évaluation sera9//2
.Non golfé:
la source
Smalltalk - 76 caractères
L'entrée correspond exactement au délimiteur de tableau et à la représentation de fraction inhérente de Smalltalk. Si ce n'était pas si verbeux, cela aurait pu être un concurrent sérieux!
C'est dommage que la simplification n'était pas une exigence, Smalltalk le fait automatiquement!
la source
Bash + coreutils, 28
$@
se développe à tous les paramètres de ligne de commande, se${@/\// }
développe donc à tous les paramètres de ligne de commande avec/
remplacé par, qui est placé sur
dc
la pile de. Le reste est une simple manipulation de pile et arithmétique.la source
Haskell ,
746763 octetsEssayez-le en ligne!
Explication
Comme H.PWiz l'a compris, nous pouvons utiliser le lexer de Haskell ici pour diviser la chaîne en ses parties. ( Un peu plus tôt , j'utilisais
span(>'/')
) Et Laikoni fait remarquer que<$>
fonctionne commemapSnd
deData.Tuple
.Le modèle de garde décompose notre code en trois chiffres que nous voulons utiliser
lex
.lex
invoque le lexer de haskell pour rompre le premier jeton. Il renvoie une liste avec chaque élément représentant une manière possible d'analyser la chaîne. Ces éléments sont des tuples, le premier élément étant le premier jeton et le reste de la chaîne étant le deuxième élément. Maintenant, comme le format d'entrée est très régulier, nous n'aurons jamais qu'une seule analyse, nous pouvons donc toujours prendre la première. La première chose que nous faisons est d'invoquerlex
l'entréeEnsuite, nous le déballons de sa liste en nous donnant un tuple 2
Le premier jeton sera la partie entière de la fraction mixte, laissant la fraction ajoutée par un espace à analyser. Puis, puisque les tuples sont,
Functors
nous pouvons utiliser(<$>)
un alias pourfmap
appliquerlex
au deuxième élément du tuple.Cela dévore l'espace et rompt le jeton suivant, le numérateur de notre fraction. Maintenant, nous lions ceci à une correspondance de modèle en utilisant
<-
. Notre modèle esta
saisit toute la partie de la fraction, notre premier jeton.:_
déballe la liste issue de notre deuxièmelex
.c
saisit le deuxième jeton que nous avons lexé, à savoir le numérateur de la fraction. Tout ce qui reste est lié às:d
ce qui le divise en son premier caractère, garanti par le format comme un/
et le reste qui sera le dénominateur.Maintenant que nous avons analysé l'entrée, nous effectuons le calcul réel:
Où
r
est la fonction de lecture que nous avons liée plus tôt.Il est important de noter que
lex
retourne une liste vide si elle échoue et non vide si elle réussit. Pourquoi ce n'est pas unMaybe
je ne sais pas.la source
/
Javascript ES6, 62 octets
la source
[b,c]=
à la place deb=
, puis utiliserb
à la placeb[0]
etc
à la place deb[1]
. De plus, vous pouvez réorganiser l'équation pour ne plus avoir besoin de parenthèses:p=prompt;[b,c]=p(a=+p()).split
/;alert(+b+c*a+"/"+c)
Perl,
826138 octetsCela peut probablement être joué plus.
Changements
split
, et 5 en utilisant<>
au lieu de<STDIN>
.la source
#!perl -paF/\D/
(9 octets), vous pouvez utiliser$_=$F[0]*$F[2]+$F[1]."/$F[2]"
.#!perl
partie du shebang et le saut de ligne ne comptent pas. Ce n'est que 38 octets.Mathematica, 51 octets
Fait intéressant, Mathematica prend en charge cela avec un intégré. Si la sortie d'un nombre est autorisée, nous n'avons besoin que de 28 octets:
la source
Java,
159148142120110 110 octetsEnregistré un tas d'octets grâce à FlagAsSpam.
la source
Long b=new Long(a[0]),c=new Long((a=a[1].split("/"))[0]),d=new Long(a[1]);
ARBLE , 13 octets
Essayez-le en ligne!
la source
"x y/z"
est obligatoire pour ce défi particulier, mais juste au cas où j'aurais demandé à OP de le vérifier.05AB1E ,
1715 octets-2 octets grâce à @MagicOctopusUrn .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Avec un format d'entrée et de sortie flexible, en prenant les entiers dans l'ordre
x,z,y
et en sortant le nominateur et le dénominateur sur des lignes séparées, ce serait 4 octets (c'est pourquoi j'ai ajouté le -tag d' analyse au défi ..):Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
4 1/2
est obligatoire pour ce défi particulier. Sinon , je l' aurais utilisé ma version 4 octets (ou si la sortie était obligatoire, mais l' entrée I souple utiliserait ce 6 byter:*+'/²J
)a
dans la pile " .. o.Ô Exactement ce dont j'avais besoin pour ce défi! Et intelligent avec la jointure par "/". Merci! :)a
dans la pile " au lieu d'utiliser'`'
..Python 3 ,
7876 octetsEssayez-le en ligne!
la source
return'%s/'%(int(a)*int(c)+int(b))+c
est 2 octets plus courtStax , 1 octet
Exécutez-le et déboguez-le (bien qu'il n'y ait pas grand-chose à déboguer)
La spécification de défi indique "Vous n'avez pas besoin de simplifier la sortie." En supposant qu'il soit autorisé de simplifier, il existe une instruction intégrée dans stax pour ce faire. L'entrée est interprétée implicitement comme un nombre entier et un nombre rationnel. L'
+
instruction s'élargit à la fois aux rationnels, ajoute et simplifie. Le résultat est implicitement imprimé.la source
Perl 5 avec -la -Mfeature = disons,
32 octets25 octetsEssayez-le en ligne!
(-7 octets grâce à Dom Hastings)
$_
est l'entrée entièrex y/z
, qui évalue la valeur dex
dans des contextes numériques (comme*
ici).$'
est la chaîne post-correspondance regex, qui contient ici tout ce qui vient après/
- doncz
,. Pour obtenir lay
valeur, nous utilisons l'-a
indicateur qui sépare l'entrée sur les espaces et les place dans le@F
tableau. Donc ici,@F = ("x", "y/z")
ce qui signifie$F[1]="y/z"
qui évalue dansy
des contextes numériques (puisquey
c'est la séquence contiguë initiale de chiffres avec$F[1]
).la source
-p
flag in your byte count; instead you count the language asPerl 5 with -p flag, 32 bytes
. See this meta post for the current consensus.$'
was the only real difference there really!$'
and-a
-$F[n]
to get parts of the string is a pretty good idea, I have to remember that! Thanks, updated the post.Lua, 123 Bytes
la source
Milky Way 1.6.0, 31 bytes
Ended up being much longer than I thought it would be.
Explanation
Usage
la source
Python 2.7, 88 Bytes
Try it online!
You have to type the input in quotes.
Probably not the best ...
la source
C, 64
Reads input from STDIN. Fairly self-explanatory, I think.
la source
Check, 120 bytes
Try it online!
I might be able to save some bytes by not trying to reuse the parsing loop (the second line). That way I could make the loop more specific, avoid the huge mess of conditionals, and I could use the register for other things.
la source
Ruby, 23 bytes
Try it online!
la source
C#, 112 bytes
Full/Formatted Version:
la source
APL (Dyalog Unicode), 31 bytes
Try it online!
Thanks to ngn for the
⊃⊥1∘↓
trickla source
PHP, 65 Bytes
Try it online
Code
Explanation
la source
Java 10, 87 bytes
A lambda from
String
toString
.Try It Online
la source