फ़्लोट्स मॉड!


19

3D-मॉडलिंग सॉफ़्टवेयर मुख्य रूप से UV Mapping का उपयोग बनावट को 3D ऑब्जेक्ट पर मैप करने के लिए करता है । यू और वी दोनों के लिए मान्य मूल्य आमतौर पर एक समावेशी [0..1]श्रेणी में स्थित हैं ।

चुनौती

आपने एक नया 3 डी-मॉडलिंग सॉफ्टवेयर खरीदा जो उपयोग करने के लिए सुपर-आसान है। हालांकि इसके साथ एक समस्या है: यह यूवी मानों से एक यादृच्छिक पूर्णांक संख्या को जोड़ता या घटाता है। आपका कार्य एक प्रोग्राम या एक फ़ंक्शन बनाना है जो एक समावेशी [0..1]रेंज में एक फ्लोट मूल्य प्राप्त करने के लिए एक इनपुट मूल्य को संशोधित करता है ।

परिणामी फ्लोट में मूल के समान अंश होना चाहिए, और जितना संभव हो उतना मूल के करीब होना चाहिए। क्योंकि दोनों 0और 1उत्पादन श्रेणी में हैं, किसी भी पूर्णांक 0 या उससे कम 0 में बदल जानी चाहिए, और किसी भी पूर्णांक 1 या अधिक से अधिक 1 को बदलना चाहिए।

जावास्क्रिप्ट में एक उदाहरण एल्गोरिथ्म:

function modFloat(input) {
    while (input < 0 || input > 1) {
        if (input < 0) input += 1;
        if (input > 1) input -= 1;
    }
    return input;
}

नियम

  • इनपुट एकल पूर्णांक या फ्लोट मान है। किसी भी उचित प्रारूप को तब तक अनुमति दी जाती है जब तक कि वह आपके उत्तर में निर्दिष्ट हो।
  • आउटपुट एक फ्लोट मान का दशमलव प्रतिनिधित्व होना चाहिए।
  • आउटपुट सटीक इनपुट के रूप में कम से कम एक दशमलव स्थान होना चाहिए।
  • ट्रेलिंग शून्य की अनुमति है।
  • सुनिश्चित करें कि आपका कोड सही ढंग से चुनता है कि पूर्णांक इनपुट के लिए आउटपुट में से कौन सा 0 या 1 है।

परीक्षण के मामलों

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

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है!


4
क्या आप 1 से 1 के नक्शे का इरादा रखते हैं? आमतौर पर एक आधी खुली सीमा का उपयोग किया जाता है। आपके छद्मकोश के आधार पर, क्या मुझे सभी पूर्णांकों को समझना चाहिए> 1 को 1 जाना है, और सभी पूर्णांक <0 को 0 पर जाना है
xnor

4
यदि इनपुट 1 है तो सभी% 1 समाधान विफल हो जाते हैं!
शीशमारा

9
वास्तव में, मुझे 1-> 1 चीज पसंद है, यह समस्या को कई भाषाओं के लिए एक तुच्छ अंतर्निर्मित होने से बचाता है।
xnor

2
क्या मैं इसके लिए sed का उपयोग कर सकता हूं? Sed में कोई डेटा प्रकार नहीं हैं, इनपुट को एक पाठ स्ट्रीम होना होगा।
शीशमारा

1
@ शीशमौरा any reasonable input format is allowed, तो मैं कहूंगा "क्यों नहीं?"।
लोलबास

जवाबों:



9

पायथन , 20 बाइट्स

lambda x:x%1or+(x>0)

इसे ऑनलाइन आज़माएं!

इनपुट मॉडुलो 1 लेता है, फिर सकारात्मक इनपुट के लिए 0 से 1 के आउटपुट को परिवर्तित करके सीमा मामले को संभालता है। एक बूल आउटपुट दो बाइट्स को बचाएगा।

lambda x:x%1or x>0

मुझे लगता 1orहै कि सिंटैक्स हाइलाइटर तोड़ रहा है । (मुझे लगता है कि इसकी व्याख्या की गई है 1 or)
12M2121

@ 12Me21 हाँ, और मैंने ऐसा कोई हाइलाइटर नहीं देखा है जो इसे सही ढंग से संभालता हो।
xnor

मेरा करता है :) 12Me21.github.io/syntax/link#1or
12M21

6

ब्रेकीलॉग , 14 11 बाइट्स

3 बाइट्स को गोल्फ के लिए घातक बनाने के लिए धन्यवाद।

∧≜:?+.≥0∧1≥

एक बदलाव के लिए, यह उत्तर mod का उपयोग नहीं करता है :)

इसे ऑनलाइन आज़माएं!

व्याख्या

∧≜                Label an integer variable. This will start trying different
                  values for this variable, the ones closest to 0 first.
   :?+.           This variable summed to the input is equal to the output
      .≥0∧1≥      which is >= 0 and <= 1

पॉजिटिव पूर्णांक के लिए यह आउटपुट 0 जब मैंने इसे ऑनलाइन आज़माया।
नील

1
@ नील सही किया, धन्यवाद। मुझे नहीं पता कि मैंने इसे क्यों याद किया
सिंह

2
आप इस तरह के रूप में 3 बाइट्स बचा सकते हैं: ∧≜:?+.≥0∧1≥
घातक

4

जावास्क्रिप्ट (ईएस 6), 19 बाइट्स

n=>(n%1+1)%1||n>0|0

जावास्क्रिप्ट में, n%xऋणात्मक संख्या देता है यदि nऋणात्मक है, तो इसका मतलब है कि यदि हम सकारात्मक अवशेष प्राप्त करना चाहते हैं, तो हमें जोड़ना होगा xयदि nनकारात्मक है। (n%x+x)%xसभी मामलों को शामिल किया गया:

n     n%1   n%1+1 (n%1+1)%1
0     0     1     0
1     0     1     0
2.4   0.4   1.4   0.4
-1    0     1     0
-2.4  -0.4  0.6   0.6

20 बाइट्स पर एक और काम करने वाला समाधान, जो एक पैटर्न के कुछ अधिक दिखाता है:

n=>n%1+(n%1?n<0:n>0)

3

MATL , 9 बाइट्स

1&\0>yg>+

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

इनपुट के साथ उदाहरण 678.123456

1      % Push 1
       % STACK: 1
&\     % Implicit input. Divmod with 1
       % STACK: 0.123456, 678
0>     % Is it positive?
       % STACK: 0.123456, 1
y      % Duplicate from below
       % STACK: 0.123456, 1, 0.123456
g      % Convert to logical: nonzero becomes 1
       % STACK: 0.123456, 1, 1
>      % Greater than? This is true if fractional part of input was zero
       % and non-fractional part was positive
       % STACK: 0.123456, 0
+      % Add. Implicitly display
       % STACK: 0.123456

3

जावास्क्रिप्ट, 28 बाइट्स

m=f=>f<0?m(f+1):f>1?m(f-1):f

जब तक परिणाम [0,1] में होता है, तब तक मूल्यों में 1 की पुनरावृत्ति घट जाती है / बढ़ जाती है


PPCG में आपका स्वागत है, और अच्छा जवाब!
ETHproductions

2

जाप , 8 बाइट्स

u1 ªUbV1

इसे ऑनलाइन टेस्ट करें!

मुझे लगता है कि यह पहली बार है जब मैंने कभी b...

व्याख्या

 u1 ªUbV1  // Implicit: U = input, V = 0
Uu1        // Take U%1, but add 1 if U is negative. This is equivalent to %1 in Python.
    ª      // If the result is falsy (0), instead take
     UbV1  //   U bound between 0 and 1.
           // This converts positive integers to 1, zero/negative integers to 0.
           // Implicit: output result of last expression

2

गणितज्ञ, 20 बाइट्स

#~Mod~1/. 0/;#>0->1&

व्याख्या

यह एक अधिक असामान्य उपयोग है /;जहाँ मैं इसका अधिक उपयोग कर रहा हूँ &&क्योंकि यह जिस स्थिति से मेल खाता है उससे इसका कोई लेना देना नहीं है।

#~Mod~1...

कंप्यूट x % 1, जो पूर्णांक को छोड़कर सभी मामलों के लिए सही है।

.../. 0/;...

पिछले अभिव्यक्ति में शून्य बदलें अगर ...

...#>0...

... इनपुट सकारात्मक है ...

...->1...

के साथ 1


2

PHP, 37 बाइट्स

<?=($m=fmod($argn,1))+(!!$m^$argn>0);

के साथ भागो echo <number> | php -R '<code>'

ऐसा करने के बहुत सारे तरीके हैं ... यह पीएचपी में सबसे छोटा होना चाहिए।

fmodपरिणाम नकारात्मक तैरता के लिए और नकारात्मक है 0धनात्मक पूर्णांक के लिए; उन लोगों को समायोजन की आवश्यकता है: !!$mफ्लोट के लिए सच है, $n>0सकारात्मक फ्लोट और नकारात्मक इंट के लिए झूठ के साथ परिणाम, नकारात्मक फ्लोट के लिए सही और सकारात्मक इंट; +कास्ट कि 1या 0- किया।


2

सी 57 56 73 बाइट्स

b;f(float n){b=n;printf("%f",((!(n-b)&&n<=0)?0:n<0?1.+n-b:(n-b)?n-b:1));}

@ pinkfloydx33 इशारा करने के लिए धन्यवाद!

Ungolfed संस्करण:

f(float n)
{
  int b=n;
  printf("%f",( (!(n-b)&&n<=0)?0:n<0?1.+n-b:(n-b)?n-b:1) );
}

इसे ऑनलाइन आज़माएं!


क्या आप इसके 1.बजाय कर सकते हैं 1.0?
कृति लिथोस

@KritiiLithos मैं उस संकेतन से परिचित नहीं हूँ लेकिन यह काम करने लगा।
हाबिल टॉम

क्या आपको सब कुछ कॉल करना चाहिए f? 😂 इसके अलावा मुझे नहीं लगता कि कोष्ठक (f<0)आवश्यक है।
kennytm

यह सरलीकृत किया जा सकता है मुझे लगता है कि घटाव को दोहराने के लिए नहीं। लेकिन किसी भी तरह से यह काम नहीं करता है f(1)(जिसे 1 लौटना चाहिए)
Pinkfloydx33

@ pinkfloydx33 इसे इंगित करने के लिए बहुत बहुत धन्यवाद, यह कोड काम से बहुत दूर था। :) इसे ठीक किया, अब ठीक चलना चाहिए!
एबेल टॉम

1

स्माइलबासिक, 28 बाइट्स

INPUT N?N-FLOOR(N)+(N<<0==N)

1

जावास्क्रिप्ट (ईएस 6), 19 बाइट्स

n=>(n>0==!(n%=1))+n

स्पष्टीकरण: %1सभी मामलों में सही परिणाम नहीं देता है:

input       %1          output
-ve int     -0
-ve frac    -ve frac    +ve frac
0           0
+ve frac    +ve frac
+ve int     0           1

एक अतिरिक्त 1 को उन मामलों में जोड़ा जाना चाहिए जो गलत हैं, जो एक नकारात्मक गैर-पूर्णांक और एक सकारात्मक पूर्णांक हैं। यह वह है जो अभिव्यक्ति की (n>0==!(n%1))गणना करता है।


इसकी कई अन्य व्यवस्थाएँ हैं, लेकिन मुझे अभी तक इसका पता नहीं चला है ...
ETHproductions

1

> <> , 26 बाइट्स

:1%:?vr1(?v1n;
     >n;n0<

इसे ऑनलाइन आज़माएं!

क्योंकि अच्छी गोल्फिंग भाषाओं में समाधान लगभग हमेशा तुरंत दिया जाता है, मैंने चीजों को मिलाने का फैसला किया। पहला <> <जवाब!

व्याख्या

:1%:?vr1(?v1n;    Assume input i in stack
     >n;n0<

:                 Duplicate i (need it if i%1 != 0)
 1                Push 1
  %               Pop i and 1, push i%1
   :              Duplicate top of stack because  we need one for the if     
    ?v            If i%1 != 0 ------------------------,
      r           Reverse stack so that i is TOS      | 
       1(?v       If i > 0 (not < 1)                  |
           1n;      Print 1 and Exit                  |
                  Else                                |                   
        n0<         Print 0 and --,                   |
     >n           Print n <-------|-------------------'
       ;          Exit <----------'

मजेदार तथ्य: स्पष्टीकरण एक मान्य <> <कार्यक्रम है!


0

जावास्क्रिप्ट, 41 28 बाइट्स

n=>n-Math.floor(n)+(n<<0==n)

Math.floor() इतना लंबा है ...


n|0की तुलना में कम है Math.floor(मुझे लगता है कि यह काम करता है)
क्रिकेई लिथोस

|0floor()नकारात्मक संख्याओं की तुलना में अलग है ।
12Me21

0

अजगर, 7 बाइट्स

|%Q1s<0

व्याख्या

|%Q1s<0
|%Q1s<0Q      Implicitly add input
 %Q1          Input mod 1
|             Short-circuting or
    s<0Q      1 if input is positive, 0 otherwise

अगर आपको ट्रू और फाल्स को 1 और 0 के रूप में उपयोग करने में कोई आपत्ति नहीं है, तो आप s6 बाइट छोड़ सकते हैं ।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.