3D-Modellierungssoftware verwendet hauptsächlich UV-Mapping , um Texturen auf ein 3D-Objekt abzubilden. Die gültigen Werte für U und V liegen normalerweise in einem einschließlichen [0..1]
Bereich.
Herausforderung
Sie haben eine neue 3D-Modellierungssoftware gekauft, die sehr einfach zu bedienen ist. Es gibt jedoch ein Problem: Es addiert oder subtrahiert eine zufällige ganze Zahl von UV-Werten. Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die einen Eingabewert ändert, um einen Gleitkommawert in einem inklusiven [0..1]
Bereich zu erhalten.
Der resultierende Float sollte den gleichen Bruchteil wie das Original haben und so nah wie möglich am Original sein. Da beide 0
und 1
im Ausgabebereich liegen, sollten alle Ganzzahlen 0 oder weniger auf 0 und alle Ganzzahlen 1 oder mehr auf 1 geändert werden.
Ein Beispielalgorithmus in JavaScript:
function modFloat(input) {
while (input < 0 || input > 1) {
if (input < 0) input += 1;
if (input > 1) input -= 1;
}
return input;
}
Regeln
- Die Eingabe ist eine einzelne Ganzzahl oder ein Gleitkommawert. Jedes vernünftige Format ist zulässig, solange es in Ihrer Antwort angegeben ist.
- Die Ausgabe sollte eine dezimale Darstellung eines Gleitkommawerts sein.
- Die Ausgabegenauigkeit sollte mindestens die gleichen Dezimalstellen wie die Eingabe haben.
- Nachgestellte Nullen sind zulässig.
- Stellen Sie sicher, dass Ihr Code die 0 oder 1 für Ganzzahleingaben richtig auswählt.
Testfälle
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
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
any reasonable input format is allowed
, also würde ich sagen "Warum nicht?".Antworten:
Gelee , 6 Bytes
Probieren Sie es online!
Jelly hat keine
True
oderFalse
, sondern nutzt1
und0
an ihrer Stelle.quelle
Python , 20 Bytes
Probieren Sie es online!
Nimmt das Eingangsmodulo 1 und behandelt dann den Grenzfall, indem Ausgänge von 0 in 1 für positive Eingänge konvertiert werden. Eine Bool-Ausgabe würde zwei Bytes sparen.
quelle
1or
bricht die Syntax Textmarker. (Ich nehme an, es wird interpretiert als1 or
)Brachylog ,
1411 BytesDanke an Fatalize für das Golfen mit 3 Bytes.
Zur Abwechslung benutzt diese Antwort keinen Mod :)
Probieren Sie es online!
Erläuterung
quelle
∧≜:?+.≥0∧1≥
.JavaScript (ES6), 19 Byte
Gibt in JavaScript
n%x
eine negative Zahl zurück, wenn sien
negativ ist. Wenn wir also den positiven Rest erhalten möchten, müssen wir hinzufügen,x
wenn sien
negativ ist.(n%x+x)%x
deckt alle Fälle ab:Eine andere funktionierende Lösung bei 20 Bytes, die ein bisschen mehr von einem Muster zeigt:
quelle
MATL , 9 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Beispiel mit Eingabe
678.123456
quelle
Javascript, 28 Bytes
Verringert / erhöht die Werte rekursiv um 1, bis das Ergebnis in [0,1] angezeigt wird.
quelle
Japt , 8 Bytes
Testen Sie es online!
Ich denke, dies ist das erste Mal, dass ich jemals benutzt habe
b
...Erläuterung
quelle
Mathematica, 20 Bytes
Erläuterung
Dies ist eine eher ungewöhnliche Anwendung,
/;
bei der ich sie eher als eine verwende,&&
da die Bedingung danach nichts mit dem Muster zu tun hat, zu dem sie passt.Berechnen
x % 1
, was für alle Fälle außer positiven ganzen Zahlen korrekt ist.Ersetzen Sie Nullen im vorherigen Ausdruck, wenn ...
... der Eingang ist positiv ...
mit
1
.quelle
PHP, 37 Bytes
Laufen Sie mit
echo <number> | php -R '<code>'
.Es gibt so viele Möglichkeiten, dies zu tun ... dies sollte eine der kürzesten in PHP sein.
Das
fmod
Ergebnis ist negativ für negative Floats und0
für positive ganze Zahlen. diese müssen!!$m
angepasst werden : gilt für floats, xoring mit den$n>0
Ergebnissen false für positives float und negatives int, true für negatives float und positives int;+
wirft das zu1
oder0
- erledigt.quelle
C
575673 Bytes@ pinkfloydx33 Danke für den Hinweis!
Ungolfed-Version:
Probieren Sie es online!
quelle
1.
anstelle von tun1.0
?f
? 😂 Auch ich glaube nicht, dass die Klammer(f<0)
erforderlich ist.f(1)
(was 1 zurückgeben sollte)SmileBASIC, 28 Bytes
quelle
JavaScript (ES6), 19 Byte
Erklärung:
%1
liefert nicht in allen Fällen die richtigen Ergebnisse:In den falschen Fällen muss eine zusätzliche 1 hinzugefügt werden. Dabei handelt es sich um eine negative, nicht ganzzahlige und eine positive ganze Zahl. Dies
(n>0==!(n%1))
berechnet der Ausdruck .quelle
> <> 26 Bytes
Probieren Sie es online!
Da Lösungen in guten Golfsprachen fast immer sofort gegeben sind, habe ich beschlossen, die Dinge durcheinander zu bringen. Erste <> <Antwort!
Erläuterung
Eine lustige Tatsache: Die Erklärung ist ein gültiges <> <Programm!
quelle
Javascript,
4128 BytesMath.floor()
ist so lang ...quelle
n|0
ist kürzer alsMath.floor
(Ich denke, es funktioniert)|0
ist anders alsfloor()
bei negativen Zahlen.Pyth, 7 Bytes
Erläuterung
Wenn es Ihnen nichts ausmacht, True und False als 1 und 0 zu verwenden, können Sie die
s
6 Bytes löschen.quelle
Perl 6 , 15 Bytes
Probieren Sie es online!
Inspiriert von Seshoumaras Kommentar, dass Mod 1 fast funktioniert.
EDIT: Ha, Xnors Python-Lösung hat mich geschlagen.
quelle