JSでクランプ関数を3項より短くすることは可能ですか?


22

0から255の間の数値をクランプするこの短い関数を想像してください。

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

これは、JavaScript(ES.Next機能なし)を使用したクランプ関数の最短バージョンですか?

PS:関係があるかどうかはわかりませんが、0と255はランダムではありません。アイデアは数字を8ビット符号なし整数としてクランプすることです。


2
こんにちは、PPCGへようこそ!明確にするために、ここで受け取った答えは、必ずしもコードゴルフ以外の用途に使用することをお勧めしません。それとは別に、どのバージョン/環境で動作するかを気にする場合は、指定することをお勧めします。
FryAmTheEggman

1
ああ、私はよく知っています。質問を少し更新しました。ありがとうございました:)
リカルドアマラル

2
私はJSを知りませんが、クランプする1つの方法は[0,n,255]、中央の要素をソートして取得することです-それは短いかもしれませんか?
23:26の

1
@xnor残念ながら、JS sort()メソッドはデフォルトで辞書式比較を使用するため、明示的なコールバックが必要になります。(そのようなもの。)
Arnauld

5
@Arnauldうわー、それはかなりばかげています。しかし、ソートが数値であっても長くなるようです。
23:34の

回答:


23

20バイト

参考のために、これは空白なしで関数に名前を付けない元のバージョンです。

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

オンラインでお試しください!


19バイト

3項テストのロジックを反転し、n255より大きいn>>8かどうかをテストすることで1バイトを節約できます。ビット演算のため、しかし、これは失敗しますN 2 32n255n232

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

停止する理由 あなたは(JavaScriptを行う傾向があるとして)0としてカウントするもので、非常にリベラルであれば、あなたは常にのために行くことができるn=>n>>8?255:n>0&&nための18バイト以降、falseに強制変換することができ0、これは、すべての負の数はに評価になりますfalse
バリューインク

1
n<0n>>8

とても素敵です、どうもありがとう!
リカルドアマラル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.