Человек должен выполнить N
единицы работы; характер работы такой же.
Чтобы освоить работу, он выполняет только одну единицу работы в первый день .
Он хочет отпраздновать завершение работы, поэтому он решает завершить одну единицу работы в последний день .
Он разрешен только для завершения x
, x+1
или x-1
единицы работы в день , где x
есть единицы работы , выполненной в предыдущий день.
Ваша задача - создать программу или функцию, которая будет вычислять минимальное количество дней, которое он потратит на выполнение N
единиц работы.
Пример ввода и выхода:
input -> output (corresponding work_per_day table)
-1 -> 0 []
0 -> 0 []
2 -> 2 [1,1]
3 -> 3 [1,1,1]
5 -> 4 [1,1,2,1] or [1,2,1,1]
9 -> 5 [1,2,3,2,1]
13 -> 7 [1,2,2,2,3,2,1]
Входные данные могут быть получены через STDIN
или как аргумент функции, или любым подходящим способом.
Вывод может быть распечатан или как результат функции, или любым подходящим способом.
Это код-гольф . Самое короткое решение побеждает.
источник
Ответы:
Желе , 5 байт
Это использует закрытую форму подхода @ LeakyNun .
Попробуйте онлайн!
По счастливой случайности
Ḟ
перегружается какfloor
/real
для вещественных / комплексных чисел. Это один из трех перегруженных атомов в желе.Как это работает
источник
Pyth , 8 байт
Как это работает:
Попробуйте онлайн!
В псевдокоде:
бонус 22 байта
«должен вернуть 7 за -1»
Попробуйте онлайн!
источник
JavaScript (ES2016), 24 байта
Сокращенная версия варианта ES6 приведена ниже благодаря @Florent и Оператору экспонирования (в настоящее время только в Firefox для ночных сборок или переносчиков).
JavaScript (ES6), 30 байт
На основании этой последовательности .
источник
f=n=>(n-1)**.5+(n+1)**.5|0
JavaScript,
3231 байтКод Ungolfed:
Он использует тот же алгоритм, что и anwser Кенни Лау, но он реализован как рекурсивное закрытие для сохранения некоторых байтов.
Применение:
Решение REPL, 23 байта
Приготовьтесь
q=
запустить фрагмент:источник
>=
к<
: Dfor(t=1;;)if(t*t++/4>=q)return t-1;
только 36 байтов :)Python, 28 байт
Выводит поплавок.
max
Есть дать0
дляn<=0
избегая ошибки для квадратного корня из отрицательного.источник
UGL ,
3025 байтПопробуйте онлайн!
Не работает для отрицательных входов.
Как это работает:
Предыдущее 30-байтовое решение:
Онлайн переводчик здесь .
Не работает для отрицательных входов.
Как это работает:
источник
MATL, 11 байт
Алгоритм, аналогичный @KennyLau, за исключением того, что вместо бесконечного зацикливания я зацикливаюсь на 1 ... 2n, чтобы сохранить несколько байтов.
Попробуйте онлайн!
объяснение
источник
Пайк, 8 байт
Попробуй это здесь!
Использует тот же алгоритм, что и @KennyLau
источник
Python, 43 байта
источник
Java 8,
3024 байтаПопробуйте онлайн.
Не нужно проверять,
n
больше ли 0, потому что JavaMath.sqrt
возвращаетNaN
отрицательные входные данные, что происходит0
с приведением, котороеint
мы уже используем для положительных входных данных.источник
Рубин , 30 байтов
Попробуйте онлайн!
Сохранение байта здесь с
.to_i
вместо.floor
.Поддержка неположительных объемов работы обходится в 6 байт (
n<1?0:
).источник