... или есть?
Ваша задача состоит в том, чтобы разобрать мой счет на обед, который содержит базовую цену, советы, скидки, купоны и дополнительные услуги, и выяснить, был ли мой обед 0 долларов или меньше . Если это вход:
12.34
15 tip
25 discount
1.5 extra
2 coupon
Тогда вывод может быть false
. Вот как это работает:
12.34
это базовая цена.
15 tip
означает добавить 15% к итогу.
25 discount
значит вычесть 25% от общей суммы.
1.5 extra
означает добавить 1,5 к общему количеству.
2 coupon
значит вычесть 2 из общей суммы.
Может быть любое количество чаевых, скидок, купонов и дополнительных услуг, но всегда будет одна базовая цена.
Затем мы делаем (12.34 * 1.15) * 0.75 + 1.5 - 2
для вывода 10,14. 10.14 больше 0, поэтому мы выводим false. Мой обед не был бесплатным.
правила
Число tip
означает добавление числа процентов к общему количеству.
число discount
означает вычитать число процентов от общего числа
число extra
означает добавить число к итогу
число coupon
означает вычесть число из общего
Другой пример:
10
20 tip
20 discount
2 coupon
2 coupon
1 coupon
50 discount
2.55 coupon
Цена -0.24
((10 * 1,20 * 0,80 - 2 - 2 - 1) * 0,5 - 2,55), поэтому вывод верен (мой обед был бесплатным.)
Примечания:
- Точность должна быть не менее 2 знаков после запятой.
- Вы можете взять ввод как строку с символами новой строки (завершающий символ новой строки необязательно) или другим символом разделения, или массивом / списком входных данных.
15 tip
так0.15 tip
Ответы:
05AB1E ,
373334 байтаПопробуйте онлайн!
объяснение
Занимает
mod 7
трюк от Jone ответа Джанатана Алланаисточник
1
когда значение <1.JavaScript (ES6),
8885 байтПринимает ввод как массив строк. Возвращает
0
не бесплатно или1
бесплатно.Как это устроено
Каждая строка разбита на пробел, чтобы получить
a
= количество,b
= тип операции. Если операции вообще нет (как в первой строке),b
по умолчанию устанавливается значение"e"
«extra».Чтобы добавить правильную сумму к сумме
t
, мы используем объект, ключи которого являются первой буквой операции:Примечание . Если счет состоит только из одного элемента,
map()
он вернет одноэлементный массив, который будет приведен к целому числу при применении|
оператора, что приведет к провалу окончательного теста. Но ОП подтвердила, что этого не может быть. (Массивы из 2 или более элементов приводятся к 0.)демонстрация
Показать фрагмент кода
источник
CJam ,
4542 байтаВзять входные данные как массив строк, а чаевые и скидку - как десятичные дроби.
Попробуйте онлайн!
объяснение
Код, который оценивается в зависимости от первых букв:
источник
Желе ,
4239 байтПринимает список строк с десятичными отформатированными числами
(ведущие нули будут работать, но имеют побочный эффект печати нулей до STDOUT до окончательного результата).
Попробуйте онлайн! - не бесплатно; или бесплатно .
Как?
источник
GNU sed + dc,
117111107 байтИспользование
-z
флага интерпретатора (включается в оценку как 1 байт):объяснение
Поскольку входные данные уже очень близки к нотации обратного польского, преобразовать
extra
иcoupon
в+
и просто-
, и не намного больше, чтобы изменить проценты в множители. Затем вызовитеdc
и-
получите читаемый результат в зависимости от того , найден ли он (мы должны отрицать результат, поэтому-
подразумевает «несвободный», иначе 0 будет особым случаем, который будет нуждаться в собственной обработке).пример
Второй случай из вопроса:
Это становится этой
dc
программой:В результате чего:
источник
JavaScript,
173169145 байтТам еще должно быть много игры в гольф, чтобы сделать
Попробуйте онлайн! (145 байтов в настоящее время)
Попробуйте это:
Спасибо programmer5000 за все его советы по игре в гольф
источник
{w=i.split`<nl>`
где <nl> является буквальнымf=
часть, это разрешено правилами, и вы можете заменить$.split(' ')
на$.split` `
.JavaScript (ES6), 97
107Ввод в виде многострочной строки с завершающим символом новой строки.
Регулярное выражение разделяет числовую и необязательную части текста для каждой строки в d и b .
Расчеты должны быть более или менее очевидными. Просто обратите внимание:
- использование,
-=
чтобы избежать проблем при смешивании чисел со строками- сумма сводится к нулю, чтобы сохранить 1 байт, поэтому последняя проверка для
>= 0
вместо<= 0
PS еще намного дольше, чем у @ Arnauld's. Крысы.
Тестовое задание
источник
C #
324219 байтЭто не красиво, и, вероятно, не самый лучший способ, но вот оно. Требуется, чтобы ввод передавался как строковый массив, а подсказки / скидки передавались как плавающие (
0.15 tip
вместо15 tip
), поскольку это было разъяснено как приемлемое в комментариях к спецификации.Explaination:
Должен быть лучший способ сделать это, но это работает по крайней мере
источник
100
вt
филиале.float.Parse(s.Split(' ')[0])
что-то, чтобы уменьшить дублирование. Это сэкономит около 80 символов.PowerShell ,
218156143 байтаПопробуйте онлайн!
РЕДАКТИРОВАТЬ Сохраненные байты путем предварительного разделения переданной переменной
РЕДАКТИРОВАТЬ 2 Хранить вторую часть строки, чтобы я мог сделать лучше подстановочные вызовы
источник
Python 133 байта
Похоже на версию JavaScript ES6. Но преобразование типов требуется для
float
значений в Python.Объяснение:
Извлеките первое значение и конвертируйте его в число с плавающей точкой.
Для каждой другой строки в счете:
float
dict
чтобы выбрать правильную операцию в соответствии с первой буквойИспользование:
источник
Java 227 байт
Некоторое время назад я так и не получил ответа Java, поэтому вот мой ответ на C #, портированный на Java, стоимостью 8 байт.
Для объяснения и тому подобное, смотрите мой ответ C #
Как и этот ответ, этот ответ ожидает, что чаевые и скидка будут переданы как плавающие (
0.15
не15
)источник
var
универсального типа в C # и лямбда-выражения (я знаю, что в Java они есть, но в C # они более привлекательные)Jq 1,5 ,
129119114112 байтрасширенный
Попробуйте онлайн!
источник