El software de modelado 3D utiliza principalmente el mapeo UV para mapear texturas en un objeto 3D. Los valores válidos para U y V generalmente se encuentran en un [0..1]rango inclusivo .
Desafío
Usted compró un nuevo software de modelado 3D que es súper fácil de usar. Sin embargo, hay un problema: agrega o resta un número entero aleatorio de los valores UV. Su tarea es crear un programa o una función que modifique un valor de entrada para obtener un valor flotante en un [0..1]rango inclusivo .
El flotador resultante debe tener la misma parte fraccional que el original y estar lo más cerca posible del original. Debido a que ambos 0y 1están en el rango de salida, cualquier número entero 0 o menos debería cambiar a 0, y cualquier número entero 1 o mayor debería cambiar a 1.
Un algoritmo de ejemplo en JavaScript:
function modFloat(input) {
while (input < 0 || input > 1) {
if (input < 0) input += 1;
if (input > 1) input -= 1;
}
return input;
}
Reglas
- La entrada es un entero único o valor flotante. Se permite cualquier formato razonable siempre que se especifique en su respuesta.
- La salida debe ser una representación decimal de un valor flotante.
- La precisión de salida debe ser al menos los mismos lugares decimales que la entrada.
- Se permiten ceros finales.
- Asegúrese de que su código elija correctamente cuál de 0 o 1 para generar entradas enteras.
Casos de prueba
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
Este es el código de golf , por lo que gana el código más corto en bytes.

any reasonable input format is allowed, así que diría "¿Por qué no?".Respuestas:
Jalea , 6 bytes
Pruébalo en línea!
Jelly no tiene
TrueoFalse, pero usa1y0en su lugar.fuente
Python , 20 bytes
Pruébalo en línea!
Toma el módulo de entrada 1, luego maneja el caso límite al convertir salidas de 0 a 1 para entradas positivas. Una salida bool ahorraría dos bytes.
fuente
1orestá rompiendo el resaltador de sintaxis. (Supongo que se interpreta como1 or)Brachylog ,
1411 bytesGracias a Fatalize por jugar al golf 3 bytes.
Para variar, esta respuesta no usa mod :)
Pruébalo en línea!
Explicación
fuente
∧≜:?+.≥0∧1≥.JavaScript (ES6), 19 bytes
En JavaScript,
n%xdevuelve un número negativo sines negativo, lo que significa que si queremos obtener el residuo positivo, debemos agregarxsines negativo.(n%x+x)%xcubre todos los casos:Otra solución de trabajo a 20 bytes, que muestra un poco más de un patrón:
fuente
MATL , 9 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Ejemplo con entrada
678.123456fuente
Javascript, 28 bytes
Recurrentemente disminuye / aumenta los valores en 1 hasta que el resultado esté en [0,1]
fuente
Japt , 8 bytes
¡Pruébalo en línea!
Creo que esta es la primera vez que uso
b...Explicación
fuente
Mathematica, 20 bytes
Explicación
Este es un uso bastante inusual de
/;donde lo estoy usando más como&&porque la condición después de que no tiene nada que ver con el patrón que coincide.Calcular
x % 1, que es correcto para todos los casos, excepto los enteros positivos.Reemplace ceros en la expresión anterior si ...
... la entrada es positiva ...
con
1.fuente
PHP, 37 bytes
Corre con
echo <number> | php -R '<code>'.Hay muchas maneras de hacer esto ... esta debería ser una de las más cortas en PHP.
El
fmodresultado es negativo para flotantes negativos y0para enteros positivos; esos necesitan ajuste:!!$mes verdadero para flotadores, xoring con$n>0resultados en falso para flotador positivo e int negativo, verdadero para flotador negativo e int positivo;+lanza eso a1o0- hecho.fuente
C
575673 bytes@ pinkfloydx33 Gracias por señalar!
Versión sin golf:
Pruébalo en línea!
fuente
1.lugar de1.0?f? 😂 Además, no creo que el paréntesis(f<0)sea necesario.f(1)(que debería devolver 1)SmileBASIC, 28 bytes
fuente
JavaScript (ES6), 19 bytes
Explicación:
%1no da los resultados correctos en todos los casos:Es necesario agregar un 1 adicional en los casos que son incorrectos, que son los de un entero no negativo y un entero positivo. Esto es lo que
(n>0==!(n%1))calcula la expresión .fuente
> <> , 26 bytes
Pruébalo en línea!
Debido a que las soluciones en buenos idiomas de golf casi siempre se dan de manera bastante instantánea, decidí mezclar las cosas. Primero <> <respuesta!
Explicación
Dato curioso: ¡la explicación es un programa <> <válido!
fuente
Javascript,
4128 bytesMath.floor()es tan largo ...fuente
n|0es más corto queMath.floor(creo que funciona)|0Es diferente quefloor()para los números negativos.Pyth, 7 bytes
Explicación
Si no le importa usar Verdadero y Falso como 1 y 0, puede soltar
s6 bytes.fuente
Perl 6 , 15 bytes
Pruébalo en línea!
Inspirado por el comentario de seshoumara de que el mod 1 casi funciona.
EDITAR: Ja, la solución Python de xnor me ganó.
fuente