Раздвижные двери имеют разные цены в зависимости от ширины дверей. Различные цены следующие:
- 60 - 80 см: 150
- 81 - 100 см: 200
- 101 - 120 см: 20220
При покупке шкафа вы, очевидно, захотите минимизировать стоимость, поэтому ваша задача - найти ширину дверей, которая минимизирует общую стоимость, основываясь на общей ширине шкафа.
Правила:
- Общая ширина будет принята за
- Все двери будут иметь одинаковую ширину
- Выберите самые маленькие двери, если два типа дверей стоят одинаково
- Ширина указана в сантиметрах, целые числа не десятичные
- Округлить десятичные
- Цена должна быть возвращена как целое число (без знака валюты)
- Входные и выходные форматы не являются обязательными, но порядок выхода должен быть:
Number of doors, Width, Price
. - Вход будет в диапазоне
[120 1000)
.
Это код гольф. Самый короткий код в байтах побеждает.
Примеры:
Input: 156
Output: 2, 78, 300
Input: 331
Output: 3, 111, 660
Input: 420
Output: 4, 105, 880
code-golf
arithmetic
Стьюи Гриффин
источник
источник
201
интересного контрольного примера ...Ответы:
05AB1E , 47 байтов
Код:
Не самая лучшая подача, но хоть что то :)
Попробуйте онлайн!
источник
JavaScript (ES6), 101 байт
-~(~-a/b)
такой же, как Math.ceil (a / b) в 31-битных целых числах.источник
Perl
190180154133128117 байтвключает +1 для
-p
комментарии:
Сохраните 11 байтов, вставляя и разделяя хэш на два массива
Сохранить 5 байтов с помощью
-p
(благодаря @ dev-null)Сохраните 18 байтов, используя POSIX :: ceil, и еще 3, используя синтаксис списка для хэша (спасибо @ msh210)
источник
sub r{$a=$_[0];~~$a==$a?$a:1+~~$a}
естьsub r{use POSIX;ceil pop}
.(80=>150,100=>200,120=>220)
есть(80,150,100,200,120,220)
.[120-1000)
, но всегда можно изменить1E4
на1E9
...PowerShell,
137135 байтовВывод через новую строку
Мы принимаем вход
$a
, установить нашу цену$j
на9000000000
(большой номер , который намного больше , чем мы когда - нибудь потребность). Далее мы делаем цикл с60..120
помощью|%{...}
. На каждой итерации мы вычисляем$p
цену текущего элемента с помощью псевдо-троичного оператора , а затем вычисляем$c
потолок$a/$_
. Если текущая сумма меньше наименьшей общей суммы, которую мы видели ($j
), сохраните все эти переменные:$j
(общая),$k
(количество требуемых дверей) и$i
(ширина двери) и продолжите цикл. Как только цикл закончен, просто выведите лучшие значения.Изменить - Сохранение двух байтов путем перемещения назначений
$c
и$p
вif
условныеисточник
Pyth, 65 байт
Попробуй это здесь!
объяснение
Сначала генерируется список всех возможных комбинаций количества дверей / ширины двери и рассчитывается цена для каждой из этих комбинаций. Тогда нам нужно только упорядочить его по цене и ширине двери и взять первый элемент полученного списка.
Кодовое объяснение следует после того, как я проиграл это.Пожалуйста, помогите мнесыграть вгольф, это слишком долго.источник
JavaScript (ES6) 96
Как отмечает @Neil,
=-~(~-n/d)
эквивалентно делению с округлением до целых чисел 32 бит или меньше.источник
R ,
135104 байтаПопробуйте онлайн!
Сохранено 31 байт
utf8ToInt
cbind
непосредственно, а не после определения переменныхКак это устроено:
approx
возвращает цену одной двери в зависимости от ее длины. ВозвращаетсяNA
за пределы диапазона[60,120]
.(number of doors, door width, total price)
возвращается.order
Функция используется , чтобы найти минимальную цену; на основании этого извлекается правильный триплет. В случае связейorder
вернет вход, который идет первым, и поскольку мы зациклились с 16 на 1 , будет возвращено наибольшее количество дверей (наименьшая ширина двери).источник
stepfun
дольше - так как нужно удалить ширину снаружи[60,120]
.