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 0
y 1
está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
True
oFalse
, pero usa1
y0
en 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
1or
está 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%x
devuelve un número negativo sin
es negativo, lo que significa que si queremos obtener el residuo positivo, debemos agregarx
sin
es negativo.(n%x+x)%x
cubre 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.123456
fuente
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
fmod
resultado es negativo para flotantes negativos y0
para enteros positivos; esos necesitan ajuste:!!$m
es verdadero para flotadores, xoring con$n>0
resultados en falso para flotador positivo e int negativo, verdadero para flotador negativo e int positivo;+
lanza eso a1
o0
- 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:
%1
no 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|0
es más corto queMath.floor
(creo que funciona)|0
Es 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
s
6 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