Número mixto a una fracción impropia
En este desafío, convertirás un número mixto en una fracción impropia.
Debido a que las fracciones impropias usan menos números, su código deberá ser lo más corto posible.
Ejemplos
4 1/2
9/2
12 2/4
50/4
0 0/2
0/2
11 23/44
507/44
Especificación
Puede suponer que el denominador de la entrada nunca será 0. La entrada siempre estará en el formato x y/z
donde x, y, z son enteros arbitrarios no negativos. No necesita simplificar la salida.
Este es el código de golf, por lo que el código más corto en bytes gana.
code-golf
number
parsing
rational-numbers
Downgoat
fuente
fuente
x
,y
yz
ser negativo?x,y,z
entradas separadas? La mayoría de las respuestas asumen que el formato de entrada es obligatoriox y/z
, pero algunas no lo son, de ahí que esta pregunta tenga una respuesta definitiva.Respuestas:
Japt, 10 bytes
¡Woohoo, actualmente venciendo a CJam!
Pruébalo en línea!
Cómo funciona
fuente
LabVIEW, 29 primitivas de LabVIEW
fuente
CJam,
161514 byteso
Pruébalo aquí.
Explicación
La otra versión evita usar una variable al usar un poco más de cambio de pila.
fuente
'//~\S/1$b'/@
esto es 13 bytes. Editar : oh, olvidé la entradal
.Mathematica, 58 bytes
Esto devuelve el resultado simplificado. Si generar un número racional en lugar de una cadena está bien, podemos guardar 19 bytes:
fuente
PowerShell,
474442 bytesTachado 44 sigue siendo regular 44; (
Golfé un par de bytes usando regex
-split
. Golfé un par más gracias a TessellatingHeckler intercambiando la expresión regular.La
$args-split'\D'
toma nuestro argumento de entrada y se divide en caracteres que no sean dígitos. Aquí realiza dos divisiones, una en el espacio en blanco y la otra en el/
personaje. Los resultados se almacenan en las tres variables mediante una asignación simultánea. Luego formulamos el resultado de la cadena como (el$l
número eft multiplicado por el$d
enominador más el$n
umerador) ejecutado como un bloque de código, una/
barra diagonal y luego el$d
enominador nuevamente.fuente
-split ' |/'
para guardar un personaje con una expresión regular "emparejar esto o aquello", o usar-split '\D'
para dividir cualquier cosa que no sea un dígito y s (h) tenga dos caracteres. Si @Downgoat está dispuesto a ser ligeramente flexible en el formato de salida,'{0}*{2}+{1};{2}'-f($args-split'\D')|iex
es de 40 bytes y tiene una salida mucho más fría porque ¡los números están incluso uno encima del otro!$l,$n,$d=$args-split'\D';+$l*$d+$n;$d
es más corto aún en 37, y lógicamente sigue el mismo patrón que aquí.Java con Ten Foot Laser Pole 1.03, 79 + 25 (importación) = 104 bytes
Requiere
import sj224.tflp.math.*;
Esto casi seguro también funcionará con 1.04, pero hasta ahora solo lo he probado con 1.03 porque ya tenía un proyecto Java configurado con 1.03 en la ruta de compilación.
fuente
JavaScript (ES6),
4441 bytes¡ Ahorró 3 bytes gracias a @ETHproductions !
Explicación
Muy simple.
Prueba
La prueba es sin asignación de desestructuración para trabajar en la mayoría de los navegadores.
Mostrar fragmento de código
fuente
[p,q,r]=
en lugar dep=
, a continuación, reemplacep[0]
,p[1]
yp[2]
conp
,q
yr
, respectivamente. Después de este cambio, obtengo 41:m=>([p,q,r]=m.match(/\d+/g),+q+p*r+"/"+r)
m.split(/\W/g)
lugar, puede usar para guardar un byteJulia,
5850 bytesEsta es una función anónima que acepta una cadena y devuelve un
Rational
objeto de tipo. Para llamarlo, dale un nombre, por ejemplof=s->...
.Podemos aprovechar el hecho de que la entrada puede manipularse ligeramente para ser una expresión que se evalúa como racional. En particular, un número entero más un racional es un racional, y los racionales se denotan con barras dobles. Entonces, si nos convertimos
4 1/2
en4+1//2
, el resultado evaluado será9//2
.Sin golf:
fuente
Smalltalk - 76 caracteres
La entrada coincide exactamente con el delimitador de matriz y la representación de fracción inherente de Smalltalk. Si simplemente no fuera tan detallado, ¡podría haber sido un contendiente serio!
Es una pena que la simplificación no fuera un requisito, Smalltalk lo hace automáticamente.
fuente
Bash + coreutils, 28
$@
se expande a todos los parámetros de la línea de comandos, por lo que se${@/\// }
expande a todos los parámetros de la línea de comandos con/
reemplazado por, que se coloca en
dc
la pila. El resto es simple manipulación de pila y aritmética.fuente
Haskell ,
746763 bytesPruébalo en línea!
Explicación
Como H.PWiz descubrió, podemos usar el lexer de Haskell aquí para dividir la cuerda en sus partes. (Anteriormente estaba usando
span(>'/')
) Y Laikoni señaló que<$>
funciona igual quemapSnd
desdeData.Tuple
.El protector de patrón divide nuestro código en los tres números que queremos usar
lex
.lex
invoca el lexer de Haskell para romper la primera ficha. Devuelve una lista con cada elemento que representa una forma posible de analizar la cadena. Estos elementos son tuplas con el primer elemento como el primer token y el resto de la cadena como el segundo elemento. Ahora, dado que el formato de entrada es muy regular, solo vamos a tener exactamente un análisis, por lo que siempre podemos tomar el primero. Lo primero que hacemos es invocarlex
en la entradaLuego lo desenvolvemos de su lista dándonos una tupla de 2
La primera ficha será la parte completa de la fracción mixta, dejando la fracción antepuesta por un espacio para analizar aún. Entonces, dado que las tuplas son
Functors
, podemos usar(<$>)
un alias parafmap
aplicarlex
al segundo elemento de la tupla.Esto come a través del espacio y rompe la siguiente ficha, el numerador de nuestra fracción. Ahora vinculamos esto a una coincidencia de patrón usando
<-
. Nuestro patrón esa
agarra toda la parte de la fracción, nuestro primer token.:_
desenvuelve la lista resultante de nuestro segundolex
.c
agarra la segunda ficha que lexedimos, que es el numerador de la fracción. Todo lo que queda está vinculado a los:d
que lo divide en su primer carácter, garantizado por el formato de ser un/
y el resto que será el denominador.Ahora que hemos analizado la entrada, hacemos el cálculo real:
¿Dónde
r
está la función de lectura que vinculamos anteriormente?Es importante tener en cuenta que
lex
devuelve una lista vacía si falla y no vacía si tiene éxito. Por qué esto no es unMaybe
no lo sé.fuente
/
Javascript ES6, 62 bytes
fuente
[b,c]=
en lugar deb=
, luego usarb
en lugar deb[0]
yc
en lugar deb[1]
. Además, puede reorganizar la ecuación para que no necesite paréntesis:p=prompt;[b,c]=p(a=+p()).split
/;alert(+b+c*a+"/"+c)
Perl,
826138 bytesEsto probablemente se puede jugar más al golf.
Cambios
split
y 5 al usar en<>
lugar de<STDIN>
.fuente
#!perl -paF/\D/
(9 bytes), puede usar$_=$F[0]*$F[2]+$F[1]."/$F[2]"
.#!perl
parte del shebang y el salto de línea no cuentan. Esto es solo 38 bytes.Mathematica, 51 bytes
Curiosamente, Mathematica admite esto con una función integrada. Si se permite emitir un número, entonces solo necesitamos 28 bytes:
fuente
Java,
159148142120110 bytesGuardado un montón de bytes gracias a FlagAsSpam.
fuente
Long b=new Long(a[0]),c=new Long((a=a[1].split("/"))[0]),d=new Long(a[1]);
ARBLE , 13 bytes
Pruébalo en línea!
fuente
"x y/z"
es obligatorio para este desafío en particular, pero en caso de que le haya pedido a OP que lo verifique.05AB1E ,
1715 bytes-2 bytes gracias a @MagicOctopusUrn .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Con un formato de entrada y salida flexible, tomar los enteros en el orden
x,z,y
y generar el nominador y el denominador en líneas separadas sería de 4 bytes (razón por la cual agregué la etiqueta de análisis al desafío ...):Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
4 1/2
es obligatorio para este desafío en particular. De lo contrario, habría usado mi versión de 4 bytes (o si la salida fuera obligatoria, pero de entrada flexible, usaría este 6 bytes*+'/²J
)a
en la pila " ... o.Ô ¡Exactamente lo que necesitaba para este desafío! E inteligente con la combinación de "/". ¡Gracias! :)a
en la pila " en lugar de usar'`'
..Python 3 ,
7876 bytesPruébalo en línea!
fuente
return'%s/'%(int(a)*int(c)+int(b))+c
es 2 bytes más cortoStax , 1 byte
Ejecútelo y depúrelo (aunque no hay mucho que depurar)
La especificación de desafío dice "No es necesario simplificar la salida". Suponiendo que se permita simplificar, entonces hay una instrucción incorporada en stax para hacer esto. La entrada se interpreta implícitamente como un número entero y un número racional. La
+
instrucción se amplía a racionales, agrega y simplifica. El resultado se imprime implícitamente.fuente
Perl 5 con -la -Mfeature = digamos,
32 bytes25 bytesPruébalo en línea!
(-7 bytes gracias a Dom Hastings)
$_
es la entrada completax y/z
, que evalúa el valor dex
en contextos numéricos (como el*
aquí).$'
es la cadena regex posterior al partido, que aquí contiene lo que viene después/
, entoncesz
,. Para obtener ely
valor, usamos la-a
bandera que divide la entrada en espacios y los coloca en la@F
matriz. Entonces, aquí, lo@F = ("x", "y/z")
que significa$F[1]="y/z"
que se evalúa eny
contextos numéricos (ya quey
es la secuencia contigua inicial de dígitos con$F[1]
).fuente
-p
bandera en su cuenta de bytes; en su lugar, cuenta el idioma comoPerl 5 with -p flag, 32 bytes
. Vea esta meta publicación para el consenso actual.$'
fue la única diferencia real allí realmente!$'
y-a
-$F[n]
para obtener partes de la cadena es una muy buena idea, ¡tengo que recordar eso! Gracias, actualicé la publicación.Lua, 123 bytes
fuente
Vía Láctea 1.6.0 , 31 bytes
Terminé siendo mucho más largo de lo que pensé que sería.
Explicación
Uso
fuente
Python 2.7, 88 bytes
Pruébalo en línea !
Tienes que escribir la entrada entre comillas.
Probablemente no sea el mejor ...
fuente
C, 64
Lee la entrada de STDIN. Bastante autoexplicativo, creo.
fuente
Cheque , 120 bytes
Pruébalo en línea!
Es posible que pueda guardar algunos bytes al no intentar reutilizar el ciclo de análisis (la segunda línea). De esa forma, podría hacer que el ciclo sea más específico, evitar el gran desorden de condicionales y podría usar el registro para otras cosas.
fuente
Ruby , 23 bytes
Pruébalo en línea!
fuente
C #, 112 bytes
Versión completa / formateada:
fuente
APL (Dyalog Unicode) , 31 bytes
Pruébalo en línea!
Gracias a ngn por el
⊃⊥1∘↓
trucofuente
PHP, 65 bytes
Pruébalo en línea
Código
Explicación
fuente
Java 10, 87 bytes
Una lambda de
String
aString
.Pruébalo en línea
fuente