Écrivez une fonction ou un programme qui peut faire de l'arithmétique simple (addition, soustraction, multiplication et division) en base 10 et en base 2.
La fonction prendra une expression mathématique en entrée et produira le résultat correct dans la base correcte. L'entrée sera des n
nombres séparés par un ou plusieurs opérateurs ( + - * /
).
Si toutes les valeurs d'entrée ne contiennent que 0 et 1, toutes les valeurs sont considérées comme binaires. Si au moins un chiffre est 2-9
, toutes les valeurs sont considérées comme la base 10.
Règles:
- Vous pouvez supposer qu'il n'y aura qu'un seul opérateur entre les numéros (
10*-1
n'apparaîtra pas) - Vous pouvez supposer qu'il n'y aura pas de parenthèses.
- Priorité normale de l'opérateur (essayez l'expression dans la calculatrice Google en cas de doute).
- Vous ne pouvez pas supposer qu'il n'y aura que des entiers
- Il n'y aura pas de zéros non significatifs en entrée ou en sortie
- Vous pouvez supposer que seule une entrée valide sera donnée
- Vous pouvez supposer que toutes les valeurs d'entrée sont positives (mais l'opérateur moins peut rendre possible une sortie négative,
1-2=-1
et10-100=-10
) - REPL n'est pas accepté
- Vous pouvez choisir de prendre l'entrée en tant qu'arguments séparés ou en tant qu'argument unique, mais l'entrée doit être dans le bon ordre.
- -À- dire que vous pouvez représenter
1-2
avec les arguments d'entrée1
,-
,2
mais pas1
,2
,-
.
- -À- dire que vous pouvez représenter
- Vous devez accepter les symboles
+ - * /
dans l'entrée, pasplus
,minus
etc. - Vous devez prendre en charge les valeurs à virgule flottante (ou jusqu'à la limite maximale de votre langue, mais la prise en charge uniquement des nombres entiers n'est pas acceptée).
eval
est accepté
Exemples:
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
Il s'agit du code golf, donc le code le plus court en octets gagnera.
code-golf
arithmetic
base-conversion
binary
Stewie Griffin
la source
la source
110/10
, est-ce11.0
acceptable?Réponses:
Japt,
7772626062 *605951 octetsExplication (plus ou moins la même que pour la réponse JS):
Essayez-le en ligne!
* ne s'est pas divisé correctement
la source
eval
est affecté àOx
. Je vais voir si cela peut être encore raccourci.OxUf"[2-9]" ?U:`({Ur"\\d+(\\.\\d+)?""(($&e14+P).n(2)/16384)"}).s(2)
Il est probablement possible de le faire générer du code Japt au lieu de JS, puis de l'utiliserOv
pour l'évaluer.OvUf"[2-9]" ?U:Ur"\\d+(\\.\\d+)?""~~[$&e14+P n2 /16384]" +" s2
Le~~[...]
est nécessaire car les parenthèses ne correspondent pas dans un désordre de chaîne avec le transpilateur .OvUf"[2-9]" ?U:"({Ur"[\\d.]+""º$&e14+P n2 /2pE¹"})¤
JavaScript ES6,
8797 1100 2106 310210198100 4938886 octetsDémo + explication:
1 -
J'ai oublié les flotteurs 2 - Encore une fois, le problème des flotteurs: analyser les étages binaires, donc je dois multiplier par 1e14 puis diviser par 16384
3 - J'espère que la tâche donnée est accomplie, commencez à jouer au golf: D
4 - il y avait un bug avec la division
la source
e.match(/[2-9]/g)
poure.match`[2-9]`
.('0b'+$&*1e14)/1638
cela devrait fonctionner mais je ne suis pas sûr à 100%Jolf, 31 octets, sans concurrence
J'ai ajouté une quantité décente de fonctions inspirées de ce défi et, comme tel, il est considéré comme non compétitif. Je suis content car j'ai finalement implémenté des fonctions unaires (comme
(H,S,n)=>val
dans ES6, mais sont supportées dans ES5!)La suite de tests , Tentez votre propre entrée , ou régler manuellement l'entrée .
la source
Bash, 60 octets
Exemple d'exécution:
la source
dc
nécessiterait un ordre de polissage inversé des opérations, ce qui n'est pas autorisé par le défi.𝔼𝕊𝕄𝕚𝕟 2, 46 caractères / 72 octets
Try it here (Firefox only).
Explication
la source
PowerShell, 107 octets
Non golfé
Exemple
la source