Le logiciel de modélisation 3D utilise principalement UV Mapping pour cartographier les textures sur un objet 3D. Les valeurs valides pour U et V sont généralement situées dans une [0..1]
plage inclusive .
Défi
Vous avez acheté un nouveau logiciel de modélisation 3D extrêmement simple à utiliser. Cependant, il y a un problème: il ajoute ou soustrait un nombre entier aléatoire des valeurs UV. Votre tâche consiste à créer un programme ou une fonction qui modifie une valeur d'entrée pour obtenir une valeur flottante dans une [0..1]
plage inclusive .
Le flotteur résultant doit avoir la même partie fractionnaire que l'original et être aussi proche que possible de l'original. Étant donné que les deux 0
et se 1
trouvent dans la plage de sortie, tous les entiers 0 ou moins doivent passer à 0 et tous les entiers 1 ou supérieur doivent passer à 1.
Un exemple d'algorithme en JavaScript:
function modFloat(input) {
while (input < 0 || input > 1) {
if (input < 0) input += 1;
if (input > 1) input -= 1;
}
return input;
}
Règles
- L'entrée est un entier ou une valeur flottante unique. Tout format raisonnable est autorisé tant qu'il est spécifié dans votre réponse.
- La sortie doit être une représentation décimale d'une valeur flottante.
- La précision de sortie doit être au moins égale à la même décimale que l'entrée.
- Les zéros de fin sont autorisés.
- Assurez-vous que votre code choisit correctement celui de 0 ou 1 à afficher pour les entrées entières.
Cas de test
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
C'est le code-golf , donc le code le plus court en octets gagne!
any reasonable input format is allowed
, donc je dirais "Pourquoi pas?".Réponses:
Gelée , 6 octets
Essayez-le en ligne!
La gelée n'a pas
True
ouFalse
, mais utilise1
et0
à sa place.la source
Python , 20 octets
Essayez-le en ligne!
Prend le module d'entrée 1, puis gère le cas limite en convertissant les sorties de 0 en 1 pour les entrées positives. Une sortie booléenne économiserait deux octets.
la source
1or
est en train de briser le surligneur de syntaxe. (Je suppose que c'est interprété comme1 or
)Brachylog ,
1411 octetsMerci à Fatalize d'avoir joué au golf 3 octets.
Pour changer, cette réponse n'utilise pas de mod :)
Essayez-le en ligne!
Explication
la source
∧≜:?+.≥0∧1≥
.JavaScript (ES6), 19 octets
En JavaScript,
n%x
renvoie un nombre négatif sin
est négatif, ce qui signifie que si nous voulons obtenir le résidu positif, nous devons ajouterx
sin
est négatif.(n%x+x)%x
couvre tous les cas:Une autre solution de travail à 20 octets, qui montre un peu plus d'un modèle:
la source
MATL , 9 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Exemple avec entrée
678.123456
la source
Javascript, 28 octets
Diminue / augmente récursivement les valeurs de 1 jusqu'à ce que le résultat soit dans [0,1]
la source
Japt , 8 octets
Testez-le en ligne!
Je pense que c'est la première fois que je l'utilise
b
...Explication
la source
Mathematica, 20 octets
Explication
C'est une utilisation plutôt inhabituelle de l'
/;
endroit où je l'utilise plus comme un&&
parce que la condition après elle n'a rien à voir avec le motif auquel elle correspond.Calcul
x % 1
, qui est correct pour tous les cas sauf les entiers positifs.Remplacez les zéros dans l'expression précédente si ...
... l'entrée est positive ...
avec
1
.la source
PHP, 37 octets
Courez avec
echo <number> | php -R '<code>'
.Il y a tellement de façons de le faire ... cela devrait être l'un des plus courts en PHP.
Le
fmod
résultat est négatif pour les flottants négatifs et0
pour les entiers positifs; ceux-ci doivent être!!$m
ajustés : est vrai pour les flottants, xoring avec des$n>0
résultats faux pour le flottant positif et int négatif, vrai pour le flottant négatif et int positif;+
jette cela à1
ou0
- fait.la source
C
575673 octets@ pinkfloydx33 Merci d'avoir souligné!
Version non golfée:
Essayez-le en ligne!
la source
1.
place de1.0
?f
Devez- vous tout appeler ? 😂 Je ne pense pas non plus que la parenthèse(f<0)
soit nécessaire.f(1)
(qui devrait renvoyer 1)SmileBASIC, 28 octets
la source
JavaScript (ES6), 19 octets
Explication:
%1
ne donne pas les résultats corrects dans tous les cas:Un 1 supplémentaire doit être ajouté dans les cas erronés, qui sont ceux d'un non-entier négatif et d'un entier positif. C'est ce que l'expression
(n>0==!(n%1))
calcule.la source
> <> , 26 octets
Essayez-le en ligne!
Parce que les solutions sont bonnes langues de golf sont presque toujours fournies instantanément, j'ai décidé de mélanger les choses. Première <> <réponse!
Explication
Fait amusant: l'explication est un programme <> <valide!
la source
Javascript,
4128 octetsMath.floor()
c'est si long ...la source
n|0
est plus court queMath.floor
(je pense que cela fonctionne)|0
est différent de celuifloor()
des nombres négatifs.Pyth, 7 octets
Explication
Si cela ne vous dérange pas d'utiliser True et False comme 1 et 0, vous pouvez supprimer le
s
pour 6 octets.la source
Perl 6 , 15 octets
Essayez-le en ligne!
Inspiré par le commentaire de seshoumara que le mod 1 fonctionne presque .
EDIT: Ha, la solution Python de xnor m'a battu.
la source