क्या जेएस में एक टेंपरेरी फंक्शन को कम करना संभव है?


22

0 और 255 के बीच एक संख्या को जकड़ने के लिए इस छोटे से कार्य की कल्पना करें:

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

क्या यह जावास्क्रिप्ट (ES.Next सुविधाओं के बिना) के साथ एक क्लैंप फ़ंक्शन का सबसे कम संभव संस्करण है?

पुनश्च: सुनिश्चित नहीं है कि यह प्रासंगिक है लेकिन, 0 और 255 यादृच्छिक नहीं हैं, यह विचार 8-बिट अहस्ताक्षरित पूर्णांक के रूप में एक संख्या को जकड़ना है।


2
नमस्ते और PPCG में आपका स्वागत है! बस स्पष्ट होने के लिए, यहां आपको प्राप्त होने वाले किसी भी उत्तर को कोड गोल्फिंग के अलावा कुछ भी उपयोग करने के लिए एक अच्छा विचार नहीं होगा। इसके अलावा, यदि आप इस बात की परवाह करते हैं कि आपको किस संस्करण / वातावरण में काम करना है तो आप इसे निर्दिष्ट करना चाहते हैं।
FryAmTheEggman

1
ओह, मैं अच्छी तरह से वाकिफ हूं। मैंने सवाल को थोड़ा अपडेट किया है। धन्यवाद :)
रिकार्डो अमरल

2
मैं जेएस को नहीं जानता, लेकिन क्लैंप करने का एक तरीका [0,n,255]मध्यम तत्व को छांटना और लेना है - क्या वह छोटा हो सकता है?
xnor

1
@xnor दुर्भाग्य से, जे एस sort()विधि डिफ़ॉल्ट रूप से एक lexicographical तुलना का उपयोग करता है, ताकि स्पष्ट कॉलबैक की आवश्यकता होगी। (ऐसा ही कुछ ।)
अरनौलड

5
@Arnauld वाह, यह बहुत मूर्खतापूर्ण है। लेकिन ऐसा लगता है कि अगर यह संख्या संख्यात्मक होती तो भी यह लंबा होता।
xnor

जवाबों:


23

20 बाइट्स

संदर्भ के लिए, यह व्हाट्सएप और फ़ंक्शन का नाम लिए बिना मूल संस्करण है:

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

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


19 बाइट्स

हम एक बाइट को टर्नरी परीक्षणों के तर्क को उलझाकर बचा सकते हैं और n>>8परीक्षण कर सकते हैं कि n255 से अधिक है या नहीं । बिटवाइज़ आपरेशन के कारण यह तथापि के लिए असफल हो जायेगी n232

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

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


19 बाइट्स

false0n232

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

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


18 बाइट्स

256232n<232falsen<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

(यह टिप्पणियों में @ValueInk द्वारा प्रस्तावित कोड का एक निश्चित संशोधन है ।)


17 बाइट्स

224<n224

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
n<0n>>8

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