Напишите функцию или программу, которые могут выполнять простую арифметику (сложение, вычитание, умножение и деление) как в базе 10, так и в базе 2.
Функция будет принимать математическое выражение в качестве входных данных и выводить правильный результат в правильной базе. На входе будут n
числа, разделенные одним или несколькими операторами ( + - * /
).
Если все входные значения содержат только 0 и 1, все значения считаются двоичными. Если хотя бы одна цифра равна 2-9
, все значения считаются основанием 10.
Правила:
- Можно предположить, что между числами будет только один оператор (
10*-1
не появится) - Вы можете предположить, что не будет скобок.
- Обычный приоритет оператора (попробуйте выражение в Google Calculator, если у вас есть сомнения).
- Вы не можете предполагать, что будут только целые числа
- Не будет начальных нулей на входе или выходе
- Вы можете предполагать, что будет дан только верный ввод
- Можно предположить, что все входные значения положительны (но оператор минус может сделать возможным отрицательный вывод,
1-2=-1
и10-100=-10
) - REPL не принимается
- Вы можете взять входные данные как отдельные аргументы, или в качестве единственного аргумента, но вход должен быть в правильном порядке.
- Т.е. вы можете представить
1-2
с входными аргументами1
,-
,2
, но не1
,2
,-
.
- Т.е. вы можете представить
- Вы должны принять символы
+ - * /
на входе, а неplus
иminus
т. Д. - Вы должны поддерживать значения с плавающей запятой (или до максимального ограничения вашего языка, однако поддержка только целых чисел не принимается).
eval
принято
Примеры:
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
Это код гольфа, поэтому выиграет самый короткий код в байтах.
code-golf
arithmetic
base-conversion
binary
Стьюи Гриффин
источник
источник
110/10
, является11.0
приемлемым?Ответы:
Japt,
7772626062 *605951 байтОбъяснение (более или менее такое же, как для ответа JS):
Попробуйте онлайн!
* не делится должным образом
источник
eval
назначен наOx
. Я посмотрю, можно ли его еще сократить.OxUf"[2-9]" ?U:`({Ur"\\d+(\\.\\d+)?""(($&e14+P).n(2)/16384)"}).s(2)
возможно, можно заставить его генерировать код Japt вместо JS, а затем использовать егоOv
для оценки.OvUf"[2-9]" ?U:Ur"\\d+(\\.\\d+)?""~~[$&e14+P n2 /16384]" +" s2
Это~~[...]
необходимо, потому что несоответствующие скобки в путанице строки с транспортером .OvUf"[2-9]" ?U:"({Ur"[\\d.]+""º$&e14+P n2 /2pE¹"})¤
JavaScript ES6,
8797 1100 2106 310210198100 4938886 байтДемо + объяснение:
1 - забыл о числах с плавающей точкой
2 - снова проблема с числами с плавающей точкой: parseInt Этажи бинарные, поэтому мне нужно умножить на 1e14, а затем разделить на 16384
3 - надеюсь, что это достигло поставленной задачи, теперь начните игру в гольф: D
4 - была ошибка с делением
источник
e.match(/[2-9]/g)
наe.match`[2-9]`
.('0b'+$&*1e14)/1638
это должно работать, но я не уверен на 100%Джольф, 31 байт, неконкурентный
Я добавил приличное количество функций, вдохновленных этим вызовом, и, таким образом, он считается неконкурентным. Я счастлив, потому что наконец-то реализовал унарные функции (как
(H,S,n)=>val
в ES6, но поддерживается в ES5!)Набор тестов , попробуйте свой собственный вход , или вручную установить вход .
источник
Баш, 60 байт
Пример выполнения:
источник
dc
потребует обратного полирования порядка операций, что запрещено задачей.𝔼𝕊𝕄𝕚𝕟 2, 46 символов / 72 байта
Try it here (Firefox only).
объяснение
источник
PowerShell, 107 байт
Ungolfed
пример
источник