Perangkat lunak pemodelan 3D terutama menggunakan Pemetaan UV untuk memetakan tekstur ke objek 3D. Nilai yang valid untuk U dan V biasanya terletak dalam [0..1]
rentang inklusif .
Tantangan
Anda membeli perangkat lunak pemodelan 3D baru yang super mudah digunakan. Namun ada satu masalah dengan itu: ia menambah atau mengurangi bilangan bulat acak dari nilai UV. Tugas Anda adalah membuat program atau fungsi yang mengubah nilai input untuk mendapatkan nilai float dalam [0..1]
rentang inklusif .
Float yang dihasilkan harus memiliki bagian fraksional yang sama seperti aslinya, dan sedekat mungkin dengan aslinya. Karena keduanya 0
dan 1
berada dalam kisaran output, bilangan bulat 0 atau kurang harus berubah menjadi 0, dan bilangan bulat 1 atau lebih besar harus berubah menjadi 1.
Contoh algoritma dalam JavaScript:
function modFloat(input) {
while (input < 0 || input > 1) {
if (input < 0) input += 1;
if (input > 1) input -= 1;
}
return input;
}
Aturan
- Input adalah bilangan bulat tunggal atau nilai float. Format wajar apa pun diizinkan selama ditentukan dalam jawaban Anda.
- Output harus berupa representasi desimal dari nilai float.
- Ketepatan output harus paling tidak sama dengan desimal sebagai input.
- Angka nol di belakang diperbolehkan.
- Pastikan kode Anda memilih yang mana dari 0 atau 1 yang akan dikeluarkan untuk input integer.
Uji kasus
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
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
any reasonable input format is allowed
, jadi saya akan mengatakan "Kenapa tidak?".Jawaban:
Jelly , 6 byte
Cobalah online!
Jelly tidak memiliki
True
atauFalse
, tetapi menggunakan1
dan0
di tempatnya.sumber
Python , 20 byte
Cobalah online!
Mengambil inputo modulo 1, kemudian menangani kasus batas dengan mengubah output 0 ke 1 untuk input positif. Output bool akan menghemat dua byte.
sumber
1or
melanggar stabilo sintaks. (Saya menganggap itu ditafsirkan sebagai1 or
)Brachylog ,
1411 byteBerkat Fatalize untuk bermain golf 3 byte.
Untuk perubahan, jawaban ini tidak menggunakan mod :)
Cobalah online!
Penjelasan
sumber
∧≜:?+.≥0∧1≥
.JavaScript (ES6), 19 byte
Dalam JavaScript,
n%x
mengembalikan angka negatif jikan
negatif, artinya jika kita ingin mendapatkan residu positif, kita harus menambahkanx
jikan
negatif.(n%x+x)%x
mencakup semua kasus:Solusi lain yang bekerja pada 20 byte, yang menunjukkan sedikit lebih banyak pola:
sumber
MATL , 9 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Contoh dengan input
678.123456
sumber
Javascript, 28 byte
Mengurangi / meningkatkan nilai secara rekursif 1 hingga hasilnya dalam [0,1]
sumber
Japt , 8 byte
Uji secara online!
Saya pikir ini adalah pertama kalinya saya pernah menggunakan
b
...Penjelasan
sumber
Mathematica, 20 byte
Penjelasan
Ini adalah penggunaan yang agak tidak biasa di
/;
mana saya menggunakannya lebih seperti&&
karena kondisi setelah itu tidak ada hubungannya dengan pola yang cocok.Hitung
x % 1
, yang benar untuk semua kasus kecuali bilangan bulat positif.Ganti nol dalam ekspresi sebelumnya jika ...
... inputnya positif ...
dengan
1
.sumber
PHP, 37 byte
Jalankan dengan
echo <number> | php -R '<code>'
.Ada begitu banyak cara untuk melakukan ini ... ini harus menjadi salah satu yang terpendek dalam PHP.
The
fmod
Hasilnya adalah negatif untuk mengapung negatif dan0
untuk bilangan bulat positif; mereka perlu penyesuaian:!!$m
benar untuk float, xoring dengan$n>0
hasil false untuk float positif dan int negatif, berlaku untuk float negatif dan int positif;+
melemparkan itu ke1
atau0
- dilakukan.sumber
C
575673 byte@ pinkfloydx33 Terima kasih telah menunjukkan!
Versi tidak disatukan:
Cobalah online!
sumber
1.
bukan1.0
?f
? 😂 Juga saya pikir kurung(f<0)
tidak diperlukan.f(1)
(yang seharusnya mengembalikan 1)SmileBASIC, 28 byte
sumber
JavaScript (ES6), 19 byte
Penjelasan:
%1
tidak memberikan hasil yang benar dalam semua kasus:Tambahan 1 perlu ditambahkan dalam kasus-kasus yang salah, yaitu kasus non-integer negatif dan integer positif. Inilah yang
(n>0==!(n%1))
dihitung ekspresi .sumber
> <> , 26 byte
Cobalah online!
Karena solusi dalam bahasa golf yang baik hampir selalu diberikan secara instan, saya memutuskan untuk mencampuradukkan semuanya. Pertama <> <jawaban!
Penjelasan
Fakta menyenangkan: penjelasannya adalah program <> <yang valid!
sumber
Javascript,
4128 byteMath.floor()
begitu lama ...sumber
n|0
lebih pendek dariMath.floor
(saya pikir itu berfungsi)|0
berbeda darifloor()
angka negatif.Pyth, 7 byte
Penjelasan
Jika Anda tidak keberatan menggunakan True dan False sebagai 1 dan 0, Anda dapat menjatuhkan
s
untuk 6 byte.sumber
Perl 6 , 15 byte
Cobalah online!
Terinspirasi oleh komentar seshoumara bahwa mod 1 hampir berfungsi.
EDIT: Ha, solusi Python xnor mengalahkan saya untuk itu.
sumber