Escriba una función o programa que pueda hacer aritmética simple (suma, resta, multiplicación y división) tanto en la base 10 como en la base 2.
La función tomará una expresión matemática como entrada y generará el resultado correcto en la base correcta. La entrada será n
números separados por uno o varios operadores ( + - * /
).
Si todos los valores de entrada contienen solo 0 y 1, todos los valores se consideran binarios. Si al menos un dígito es 2-9
, todos los valores se consideran base 10.
Reglas:
- Puede suponer que solo habrá un operador entre los números (
10*-1
no aparecerá) - Puede suponer que no habrá paréntesis.
- Precedencia de operador normal (pruebe la expresión en la calculadora de Google si tiene dudas).
- No puedes asumir que solo habrá enteros
- No habrá ceros a la izquierda en la entrada o salida
- Puede suponer que solo se proporcionarán datos válidos
- Puede suponer que todos los valores de entrada son positivos (pero el operador menos puede hacer posible una salida negativa,
1-2=-1
y10-100=-10
) - REPL no es aceptado
- Usted puede optar por tomar la entrada como argumentos separados, o como un único argumento, pero la entrada tiene que estar en el orden correcto.
- Es decir, usted puede representarse
1-2
con los argumentos de entrada1
,-
,2
, pero no1
,2
,-
.
- Es decir, usted puede representarse
- Debe aceptar los símbolos
+ - * /
en la entrada, noplus
,minus
etc. - Debe admitir valores de coma flotante (o hasta el límite máximo de su idioma, sin embargo, no solo se admiten enteros).
eval
es aceptado
Ejemplos:
1+1
10
1010+10-1
1011
102+10-1
111
1+2+3
6
10*10*10
1000
11*11*11
11011
10*11*12+1
1321
10.1*10.1
110.01
20.2*20.2
408.04
10/5
2
110/10
11
Also accepted (optional line or comma-separated input):
10
+
10
-
1
11 <-- This is the output
Este es el código de golf, por lo que ganará el código más corto en bytes.
code-golf
arithmetic
base-conversion
binary
Stewie Griffin
fuente
fuente
110/10
, ¿es11.0
aceptable?Respuestas:
Japt,
7772626062 *605951 bytesExplicación (más o menos lo mismo que para la respuesta JS):
Pruébalo en línea!
* no se dividió correctamente
fuente
eval
está asignado aOx
. Veré si se puede acortar más.OxUf"[2-9]" ?U:`({Ur"\\d+(\\.\\d+)?""(($&e14+P).n(2)/16384)"}).s(2)
Probablemente sea posible hacer que genere código Japt en lugar de JS, luego useOv
para evaluar eso.OvUf"[2-9]" ?U:Ur"\\d+(\\.\\d+)?""~~[$&e14+P n2 /16384]" +" s2
Esto~~[...]
es necesario porque los paréntesis no coincidentes en una cadena ensucian el transpiler .OvUf"[2-9]" ?U:"({Ur"[\\d.]+""º$&e14+P n2 /2pE¹"})¤
JavaScript ES6,
8797 1100 2106 310210198100 4938886 bytesDemo + explicación:
1 - se olvidó de los flotadores
2 - nuevamente problema de flotadores: analizar los pisos binarios, así que tengo que multiplicar por 1e14 y luego dividir por 16384
3 - espero que haya logrado la tarea dada, ahora comience a jugar al golf: D
4 - hubo un error al dividir
fuente
e.match(/[2-9]/g)
ae.match`[2-9]`
.('0b'+$&*1e14)/1638
esto debería funcionar pero no estoy 100% seguroJolf, 31 bytes, sin competencia
Agregué una cantidad decente de funciones inspiradas en este desafío y, por lo tanto, se considera no competitiva. Estoy feliz porque finalmente implementé funciones unarias (como
(H,S,n)=>val
en ES6, ¡pero son compatibles con ES5!)Conjunto de pruebas , Pruebe su propia entrada , o ajustar manualmente la entrada .
fuente
Bash, 60 bytes
Ejemplo de ejecución:
fuente
dc
requeriría un orden inverso al pulido de las operaciones, lo cual no está permitido por el desafío.𝔼𝕊𝕄𝕚𝕟 2, 46 caracteres / 72 bytes
Try it here (Firefox only).
Explicación
fuente
PowerShell, 107 bytes
Sin golf
Ejemplo
fuente