জেএসের টর্নারির চেয়ে ক্ল্যাম্প ফাংশনটি আরও ছোট করা কি সম্ভব?


22

0 এবং 255 এর মধ্যে একটি সংখ্যা বাতাতে এই সংক্ষিপ্ত ফাংশনটি কল্পনা করুন:

c = n => n > 0 ? n < 255 ? n : 255 : 0

এটি কি জাভাস্ক্রিপ্ট (ES.Next বৈশিষ্ট্য ব্যতীত) দিয়ে একটি ক্ল্যাম্প ফাংশনের সবচেয়ে সংক্ষিপ্ততম সংস্করণ?

PS: এটি প্রাসঙ্গিক কিনা তা নিশ্চিত নয় তবে 0 এবং 255 এলোমেলো নয়, ধারণাটি একটি 8-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যার হিসাবে একটি সংখ্যা বাতা দেওয়া।


2
হাই এবং পিপিসি তে আপনাকে স্বাগতম! কেবল স্পষ্ট করে বলতে গেলে, এখানে আপনি যে কোনও উত্তর পেয়েছেন তা কোড গল্ফিং ব্যতীত অন্য কোনও ক্ষেত্রে ব্যবহার করা ভাল ধারণা নয়। এটিকে বাদ দিলে, এটিতে কোন সংস্করণ / পরিবেশ কাজ করে তা যত্নশীল করে আপনি এটি নির্দিষ্ট করতে চাইতে পারেন।
FryAmTheEggman

1
ওহ, আমি ভাল জানি। আমি প্রশ্নটি কিছুটা আপডেট করেছি। আপনাকে ধন্যবাদ :)
রিকার্ডো অমরাল

2
আমি জেএসকে জানি না, তবে বাতাড়ানোর একটি উপায় হ'ল [0,n,255]মাঝারি উপাদানটিকে বাছাই করা এবং গ্রহণ করা - এটি কি আরও সংক্ষিপ্ত হতে পারে?
xnor

1
@ এক্সনর দুর্ভাগ্যক্রমে, জেএস sort()পদ্ধতিটি ডিফল্ট অনুসারে একটি অভিধানিক তুলনা ব্যবহার করে, যাতে এর জন্য সুস্পষ্ট কলব্যাকের প্রয়োজন হয়। ( এরকম কিছু ।)
আর্নল্ড

5
@ আর্নল্ড বাহ, এটি বেশ নির্বোধ। তবে দেখে মনে হচ্ছে বাছাইয়ের সংখ্যাটি থাকলেও এটি দীর্ঘতর হবে।
xnor

উত্তর:


23

20 বাইট

রেফারেন্সের জন্য, সাদা অংশ ছাড়াই এবং ফাংশনটির নামকরণ না করে এটিই মূল সংস্করণ:

n=>n>0?n<255?n:255:0

এটি অনলাইন চেষ্টা করুন!


19 বাইট

আমরা তিন পরীক্ষার যুক্তিবিজ্ঞান ইনভার্টারিং এবং ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারবেন n>>8পরীক্ষা করা হবে কিনা তা n চেয়ে বেশী 255 । বিটওয়াইজ অপারেশনের কারণে, তবে এটি n232 ব্যর্থ হবে ।

n=>n<0?0:n>>8?255:n

এটি অনলাইন চেষ্টা করুন!


19 বাইট

এটি এক 0 এর পরিবর্তে false প্রদান করে তবে n 2 32 এর জন্য কাজ করে ।0n232

n=>n>255?255:n>0&&n

এটি অনলাইন চেষ্টা করুন!


18 বাইট

উপরে উভয় সংস্করণই মিশ্রন দ্বারা, আমরা একটি ফাংশন দিয়ে শেষ যে জন্য কাজ 256232n<232 এবং আয় false জন্য n<0

n=>n>>8?n>0&&255:n

এটি অনলাইন চেষ্টা করুন!

মন্তব্য

n =>          // n = input number
  n >> 8 ?    // if n is greater than 255 or n is negative:
    n > 0 &&  //   return false if n is negative
    255       //   or 255 otherwise
  :           // else:
    n         //   return n unchanged

( মন্তব্যগুলিতে @ ভালিউইঙ্ক প্রস্তাবিত কোডটির এটি একটি স্থির সংশোধন is )


17 বাইট

-224<এন224

n=>n>>8?-n>>>24:n

এটি অনলাইন চেষ্টা করুন!

মন্তব্য

n =>          // n = input number
  n >> 8 ?    // if n is greater than 255 or n is negative:
    -n >>> 24 //   non-arithmetic right-shift of -n by 24 positions
  :           // else:
    n         //   return n unchanged

কেন সেখানে থামো? যদি আপনি 0 হিসাবে গণনা করে চূড়ান্ত উদার হন (যেমন জাভাস্ক্রিপ্ট করতে পারে) আপনি সর্বদা 18 বাইটেরn=>n>>8?255:n>0&&n জন্য যেতে পারেন , যেহেতু জোর করা যায় এবং এটি সমস্ত নেতিবাচক সংখ্যার মূল্যায়ন করতে পারেfalse0false
মান কালি

1
@ ভালুআইঙ্ক যদি আপনি পরীক্ষা না করেন তবে এন<0অবশ্যই, n>>8যে কোনও নেতিবাচক ইনপুট জন্য সত্যবাদী হবে।
আর্নৌল্ড

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