У вас есть бассейн, который до краев наполнен водой. Вам нужно очистить его, но вы не можете придумать эффективный метод. Итак, вы решили использовать свою красную чашку соло. Вы будете постоянно наполнять чашку до конца и выбрасывать ее за пределы бассейна.
Вызов
Сколько времени займет очистка бассейна?
вход
[shape of pool] [dimensions] [shape of cup] [dimensions] [speed]
shape of pool
будет одна из этих строк:circle
,triangle
илиrectangle
. Обратите внимание, что они на самом деле относятся к 3-мерным формам: цилиндр, треугольная призма и прямоугольная призма.dimensions
будет отличаться в зависимости от формы.- круг:
[radius] [height]
. Объем = πr 2 ч - треугольник:
[base] [height] [length]
. Объем = 1/2 (чч) * длина - прямоугольник:
[width] [length] [height]
объем = lwh
- круг:
shape of cup
иdimensions
работать так же. Чашка также может быть кругом, треугольником или прямоугольником.speed
количество времени, необходимое для опустошения одной чашки, полной воды, в секундах .
Выход
Количество секунд, необходимое для опорожнения бассейна. Это может быть округлено до ближайшей секунды.
Примечания
- Там не будет единиц на входе. Предполагается, что все единицы измерения расстояния одинаковы (фигура не будет иметь высоту в дюймах и ширину в футах).
- Используйте 3.14 для
pi
. - Ввод будет состоять из строк и чисел с плавающей точкой.
- Дождя никогда не будет. Вода никогда не будет добавлена.
- У вас очень устойчивая рука. Вы будете наполнять чашку точно до краев каждый раз, и никогда не будете проливать ее.
- Как только вы приблизитесь к концу, вам будет трудно выкопать полную чашку воды. Вам не нужно беспокоиться об этом. Вы очень сильный, поэтому вы можете наклонить бассейн на бок (не тратя больше времени).
- Каждый раз, когда вы делаете расчет, можно округлить до сотых . Ваш окончательный ответ не должен быть точным.
Тестовые случаи
Вход: triangle 10 12.25 3 circle 5 2.2 5
Выход: 10
Несмотря на то есть меньше , чем 172,7 слева на последнем совок, он по- прежнему занимает целых пять секунд , чтобы очистить его.
Вход: triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2
Выход:804.2
- Вы должны округлять до ближайшей сотой после каждого расчета.
- Окончательный расчет округляется от 804.05567 до 804,2. Это потому, что этот последний кусочек воды должен быть опорожнен.
правила
- Вы можете написать полную программу или функцию.
- Ввод должен быть взят из стандартных параметров или параметров функции. Вывод должен быть распечатан через стандартный вывод или возвращен.
- Формат ввода можно изменить, если вы укажете его в представлении. Вы также можете сократить строки «круг», «треугольник» и «прямоугольник».
- Библиотеки и встроенные функции, связанные с объемом или областью, не допускаются.
счет
Это код-гольф . Представление с наименьшим количеством байтов выигрывает.
Ответы:
JavaScript ES6,
10078828174 байтаСпасибо @UndefinedFunction за помощь в удалении 4 байтов
Использование:
источник
.5*v
, не могли бы вы сделатьv/2
?t(["triangle", [10, 12.25, 3]], ["triangle", [10, 12.25, 3]], 5)
? Я понимаю,10
но не должен ли быть ответ5
? РЕДАКТИРОВАТЬ: просто избили edc65, та же проблема.f=(p,c,s,v=([s,a,b,c])=>s<'r'?a*a*b*3.14:a*b*c/(s<'t'?1:2))=>Math.ceil(v(p)/v(c))*s
-~
возникли проблемы с десятичными числами, что привело бы к округлению дополнительного шага. Я должен был добавить,a<'t'?1:2
потому(1+(a>'t'))
что по какой-то причине не работает.CJam, 46 байтов
Объяснение:
Попробуйте онлайн .
источник
Python 3,
340304 байтаИспользование:
Где
i
строка информации.Примеры:
q("t 10 12.25 3 c 5 2.2 5")
q("t 5 87.3 20001 r 5.14 2 105.623 0.2")
Примечание: названия фигур были сокращены до их первых букв соответственно.
источник
Javascript (ES6), 91
Принимая входные данные в виде строк для фигур, массивов чисел для измерений и единственного числа для скорости:
Это определяет анонимную функцию, так что используйте add
g=
перед ней. Тогда это можно назвать какalert(g("triangle", [10, 12.25, 3], "circle", [5, 2.2], 5))
Объяснение:
Мое оригинальное решение занимало одну строку и было длиной 111 байт:
Это также определяет анонимную функцию, так что используйте add
f=
перед ней. Тогда это можно назвать какalert(f("triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2"))
источник
K5 (ок), 123 байта
источник
Юлия,
122116958979 байтовЭто предполагает, что будет дана только первая буква имен формы. В противном случае решение будет на 6 байт длиннее.
Ungolfed + объяснение:
Сохранено 21 байт благодаря edc65 и 10 благодаря UndefinedFunction!
источник
ceil
Юлии, чтобы использовать вместо тогоfloor
, чтобы вырезать всю проверку целочисленного результата?a>'s'?prod(x)/2:prod(x)
наprod(x)/(a>'s'?2:1)
? (возможно, даже без круглых скобок, у меня нет идеала juilia под рукой, и я не смог проверить это)a<'d'?3.14x[1]^2*x[2]:a>'s'?prod(x)/2:prod(x)
наprod(x)*(a<'d'?3.14x[1]:a>'s'?.5:1)
? (Опять же , непроверенные)F #,
217186184160 байтЧерт, отступы!
Использование:
Обновить
Спасибо Алексу за то, что он отметил отступ в одном пробеле, который F # поддерживает
Удалось сбить нагрузку более от путем перехода от
array
кlist
типам вmatch
заявленииисточник
x**2.
вы можете сделатьx*x
? Это должно сэкономить 2 байта.Python 2,7 306 байт
Принимает ввод от стандартного ввода.
Тестирование
источник
Python 2,
22214613911910393 байтаДовольно простая реализация. Спасибо Sp3000 за
-(-n//1)
трюк для потолка, который должен работать во всех случаях (т.е. еще не нашел проблемы с ним).Ввод должен быть отформатирован так:
Использование:
Ungolfed:
Исходное решение, 222 байта
Это было сделано, когда правила все еще требовали от вас ввода всего слова, а не буквы. Я использовал тот факт, что
hash(s)%5
сопоставил их сcircle -> 2, triangle -> 3, rectangle -> 1
, однако, если я просто возьму одну букву в качестве ввода, я думаю, что могу получить это короче.Использование:
источник
Python 2/3,
252249 байтПримеры использования:
Только версии Python 2 и только Python 3 отличаются только тем, как они получают ввод;
raw_input()
для Python 2 иinput()
для Python 3, в отличие отre.sys.stdin.readline()
версии Python2 / 3.Python 2,
240237 байтPython 3,
236233 байтаИзменения:
Изменено
for o in[0,3if i[0]<'d'else 4]:
наfor o in[0,[4,3][i[0]<'d']]:
. Спасибо Vioz за вдохновение :).источник
[0, 3 if i[0] < 'd' else 4]
. Уже поздно (рано?): P.for
заявлении :).Пиф -
4039363534 байтаИспользует простой метод, сопоставляя оба контейнера, а затем сокращая путем деления.
Принимает входную разделенная запятую от стандартного ввода, с первой буквой каждой формы , как:
"t", 10, 12.25, 3, "c", 5, 2.2, 5
.Тестирование .
источник