মোড দ্য ফ্লোটস!


19

3 ডি-মডেলিং সফ্টওয়্যারটি মূলত 3 ডি অবজেক্টে টেক্সচারের মানচিত্রের জন্য ইউভি ম্যাপিং ব্যবহার করে । ইউ এবং ভি উভয়ের জন্য বৈধ মানগুলি সাধারণত অন্তর্ভুক্ত [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 যেতে হবে>
xnor

4
ইনপুট 1 হলে সমস্ত% 1 সমাধান ব্যর্থ হয়!
শৈশুমারা

9
প্রকৃতপক্ষে, আমি 1-> 1 জিনিসটি পছন্দ করি, এটি সমস্যাটিকে অনেক ভাষার জন্য অন্তর্নির্মিত হতে বাধা দেয়।
xnor

2
আমি কি এর জন্য সেড ব্যবহার করতে পারি? সেডে কোনও ডেটা ধরণের নেই, ইনপুটটি একটি পাঠ্য স্ট্রিম হতে হবে।
শৈশুমারা

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)
12

@ 12Me21 হ্যাঁ, এবং আমি কোনও হাইলাইটার দেখিনি যা এটি সঠিকভাবে পরিচালনা করে।
xnor

খনিটি করেছে :) 12
12

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

জাভাস্ক্রিপ্ট (ES6), 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 দ্বারা হ্রাস / বৃদ্ধি করে


পিপিসিজিতে স্বাগতম, এবং দুর্দান্ত উত্তর!
ETH প্রোডাকশনগুলি

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

পিএইচপি, 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));}

@ গোলাপফ্লোয়েডএক্স 33 দেখানোর জন্য ধন্যবাদ!

অবরুদ্ধ সংস্করণ:

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?
ক্রিটসি লিথোস

@ ক্রিটিক্সিলিথোস আমি এই স্বরলিপিটির সাথে পরিচিত নই তবে মনে হচ্ছে এটি কার্যকর হবে।
আবেল টম

আপনার কি সব কিছু কল করা উচিত f? 😂 এছাড়াও আমি মনে করি না যে প্রথম বন্ধনীটি (f<0)প্রয়োজনীয়।
কেনেটিএম

এটিকে সরল করা যেতে পারে বলে আমি মনে করি বিয়োগফলটির প্রতিলিপি না করা। তবে f(1)
যেভাবেই

@ পিঙ্কফ্লয়েডএক্স 33 এটিকে নির্দেশ করার জন্য অনেক ধন্যবাদ, এই কোডটি করা খুব বেশি দূরে ছিল :) :) এটি ঠিক করা হয়েছে, এখনই ঠিকঠাক চালানো উচিত!
আবেল টম

1

স্মাইলব্যাসিক, 28 বাইট

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

1

জাভাস্ক্রিপ্ট (ES6), 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))গণনা করে।


এর অন্যান্য বেশ কয়েকটি ব্যবস্থা রয়েছে, তবে আমি এখনও এর চেয়ে ছোট একটি খুঁজে পাই নি ...
ETH প্রোডাকশনগুলি

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()negativeণাত্মক সংখ্যার চেয়ে আলাদা ।
12

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 বাইটের জন্য ড্রপ করতে পারেন ।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.