Программное обеспечение для 3D-моделирования в основном использует UV Mapping для наложения текстур на 3D-объект. Допустимые значения для U и V обычно находятся в включающем [0..1]
диапазоне.
Вызов
Вы купили новое программное обеспечение для 3D-моделирования, которое очень просто в использовании. Однако есть одна проблема: он добавляет или вычитает случайное целое число из значений UV. Ваша задача - создать программу или функцию, которая изменяет входное значение, чтобы получить значение с плавающей запятой в инклюзивном [0..1]
диапазоне.
Получившийся поплавок должен иметь ту же дробную часть, что и оригинал, и быть как можно ближе к оригиналу. Поскольку оба 0
и 1
находятся в выходном диапазоне, любые целые числа 0 или меньше должны измениться на 0, а любые целые числа 1 или больше должны измениться на 1.
Пример алгоритма в JavaScript:
function modFloat(input) {
while (input < 0 || input > 1) {
if (input < 0) input += 1;
if (input > 1) input -= 1;
}
return input;
}
правила
- Ввод - одно целое число или значение с плавающей запятой. Разрешен любой разумный формат, если он указан в вашем ответе.
- Вывод должен быть десятичным представлением значения с плавающей запятой.
- Точность вывода должна быть не менее десятичных разрядов, чем на входе.
- Конечные нули допускаются.
- Убедитесь, что ваш код правильно выбирает, какой из 0 или 1 выводить для целочисленных входов.
Контрольные примеры
Input | Output
------------+---------
-4 | 0
-1 | 0
0 | 0
1 | 1
2 | 1
1.0001 | 0.000100
678.123456 | 0.123456
-678.123456 | 0.876544
4.5 | 0.5
Это код-гольф , поэтому выигрывает самый короткий код в байтах!
any reasonable input format is allowed
, так что я бы сказал: «Почему бы и нет?».Ответы:
Желе , 6 байт
Попробуйте онлайн!
Желе не имеет
True
илиFalse
, но использует1
и0
на своем месте.источник
Python , 20 байт
Попробуйте онлайн!
Принимает вход по модулю 1, затем обрабатывает граничный случай путем преобразования выходных значений от 0 до 1 для положительных входных данных. Вывод bool сохранит два байта.
источник
1or
нарушает подсветку синтаксиса. (Я предполагаю, что это интерпретируется как1 or
)Брахилог ,
1411 байтБлагодаря Fatalize для игры в гольф 3 байта.
Для разнообразия, этот ответ не использует мод :)
Попробуйте онлайн!
объяснение
источник
∧≜:?+.≥0∧1≥
.JavaScript (ES6), 19 байт
В JavaScript
n%x
возвращает отрицательное число, еслиn
оно отрицательное, это означает, что если мы хотим получить положительный остаток, мы должны добавить,x
еслиn
оно отрицательное.(n%x+x)%x
охватывает все случаи:Другое рабочее решение на 20 байтов, которое показывает немного больше паттерна:
источник
MATL , 9 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Пример с вводом
678.123456
источник
Javascript, 28 байт
Рекурсивно уменьшает / увеличивает значения на 1, пока результат не будет в [0,1]
источник
Japt , 8 байт
Проверьте это онлайн!
Я думаю, что это первый раз, когда я использовал
b
...объяснение
источник
Mathematica, 20 байтов
объяснение
Это довольно необычное использование,
/;
когда я использую его больше как&&
условие, потому что условие после него не имеет ничего общего с шаблоном, которому оно соответствует.Вычислить
x % 1
, что верно для всех случаев, кроме положительных целых чисел.Заменить нули в предыдущем выражении, если ...
... вход положительный ...
с
1
.источник
PHP, 37 байт
Беги с
echo <number> | php -R '<code>'
.Есть так много способов сделать это ... это должно быть одним из самых коротких в PHP.
fmod
Результат отрицательный для отрицательных поплавков и0
для положительных целых чисел; те, которые нуждаются в корректировке:!!$m
истинно для чисел с плавающей запятой, xoring с$n>0
результатами ложно для положительных чисел с плавающей запятой и отрицательных значений int, истина для отрицательных чисел с плавающей запятой и положительных значений int;+
бросает это1
или0
- сделано.источник
C
575673 байта@ pinkfloydx33 Спасибо за указание!
Безголовая версия:
Попробуйте онлайн!
источник
1.
вместо1.0
?f
? 😂 Кроме того, я не думаю, что скобки в(f<0)
это необходимо.f(1)
(который должен возвратить 1)SmileBASIC, 28 байт
источник
JavaScript (ES6), 19 байт
Объяснение:
%1
не дает правильных результатов во всех случаях:Дополнительная 1 должна быть добавлена в случаях, которые являются неправильными, которые являются случаями отрицательного нецелого числа и положительного целого числа. Это то, что
(n>0==!(n%1))
вычисляет выражение .источник
> <> , 26 байт
Попробуйте онлайн!
Поскольку решения на хороших языках игры в гольф почти всегда даются мгновенно, я решил все перепутать. Первый <> <ответ!
объяснение
Интересный факт: объяснение является действительной <> <программой!
источник
Javascript,
4128 байтMath.floor()
это так долго ...источник
n|0
корочеMath.floor
(я думаю, что это работает)|0
отличается отfloor()
отрицательных чисел.Pyth, 7 байт
объяснение
Если вы не возражаете против использования True и False в качестве 1 и 0, вы можете сбросить их
s
на 6 байтов.источник
Perl 6 , 15 байт
Попробуйте онлайн!
Вдохновленный комментарием Сешумара , мод 1 почти работает.
РЕДАКТИРОВАТЬ: Ха, решение xnor Python превзошло меня.
источник