Вы - рыба в пруду, которая должна выжить, поедая другую рыбу. Вы можете есть только рыбу того же размера или меньше, чем вы сами. Вы должны создать программу, которая принимает мелкую рыбу в качестве отсортированного ввода. Исходя из этого, вы должны определить, сколько рыбы вы можете съесть и, в конечном итоге, вырастете до размера.
Таблица размеров
+--------------+--------------+--------------+--------------+
| | Amount extra | Total size 1 | Increase to |
| Current size | needed for | fish | size |
| | next size | | |
+--------------+--------------+--------------+--------------+
| 1 | 4 | 4 | 2 |
+--------------+--------------+--------------+--------------+
| 2 | 8 | 12 | 3 |
+--------------+--------------+--------------+--------------+
| 3 | 12 | 24 | 4 |
+--------------+--------------+--------------+--------------+
| 4 | 16 | 40 | 5 |
+--------------+--------------+--------------+--------------+
| 5 | 20 | 60 | 6 |
+--------------+--------------+--------------+--------------+
| 6 | 24 | 84 | 7 |
+--------------+--------------+--------------+--------------+
правила
- Ваш размер начинается с 1
- Входные данные мелководья будут содержать целые числа рыб в диапазоне от 0 до 9
- 0 = водоросли и не помогут вам накормить.
- Целое число рыбы представляет размер рыбы (1-9).
- Вы можете есть только рыбу того же размера или меньше, чем вы сами.
- Вы можете есть рыбу в любом порядке по вашему выбору, чтобы максимизировать свой размер.
- Вы можете съесть каждую рыбу только один раз.
- Чем больше рыбы вы едите, тем быстрее вы растете. Рыба размера 2 равна двум рыбам размера 1, рыба размера 3 равна трем рыбам размера 1 и так далее.
- Ваш размер увеличивается на единицу каждый раз, когда вы достигаете суммы ниже.
Возвращает целое число максимально возможного размера
Примеры
"11112222" => 3
4 fish size 1 increases to 2, 4 size 2 makes you 3
"111111111111" => 3
4 fish size 1 increases to 2, 8 size 1 makes you 3
Самый короткий код (считая в байтах) для этого на любом языке, на котором выигрывают числа.
5,6
или6,6
из последнего примера Марка и получить размер 13; все же удалите5,5
вместо этого, и можно достичь только пятого размера.Ответы:
JavaScript (ES6), 44 байта
Принимает ввод как массив целых чисел.
Попробуйте онлайн!
Как?
Порог для достижения размера s + 1Ts s+1 определяется как:
Мы отслеживаем наш текущий размер в и то, что мы ели до сих пор в t (мы начинаем с t = 1 , так что это фактически отключено на 1 ).s t t=1 1
источник
Python 2 , 60 байт
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) ,
4039 байтПопробуйте онлайн!
объяснение
Хранить
floor(s)
вf
символически. Начните сs=1
(размер).Перебирать каждый элемент ввода ...
Если элемент не больше чем
s
, то увеличитьs
на<element> / (4 * floor(s))
. ВOr (||)
короткие замыкания в противном случае.Возвращение
floor(s)
.источник
Желе , 17 байт
Попробуйте онлайн!
Интересный метод, который вполне может быть побежден каким-то циклом или рекурсией.
Как?
источник
Haskell , 46 байтов
Попробуйте онлайн!
источник
Луа , 214 байт
Попробуйте онлайн!
Даже не самый короткий здесь, но было забавно понять это: D
источник