JS에서 3 항보다 짧게 클램프 기능을 만들 수 있습니까?


22

이 짧은 함수가 0에서 255 사이의 숫자를 고정한다고 상상해보십시오.

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

이 기능은 JavaScript를 사용하여 가능한 가장 짧은 버전의 클램프 기능입니까 (ES.Next 기능 없음)?

추신 : 관련성이 있는지 확실하지 않지만 0과 255는 무작위가 아니며 숫자는 8 비트 부호없는 정수로 고정하는 것입니다.


2
PPCG에 오신 것을 환영합니다! 분명히, 당신이 여기에받은 답변은 반드시 코드 골프를 제외하고는 아무것도 사용하지 않는 것이 좋습니다. 그 외에도 어떤 버전 / 환경에서 작동해야하는지 지정하려면 해당 버전 / 환경을 지정해야 할 수 있습니다.
FryAmTheEggman

1
아, 잘 알고 있습니다. 질문을 조금 업데이트했습니다. 감사합니다 :)
Ricardo Amaral

2
JS를 모르지만 클램핑하는 한 가지 방법 [0,n,255]은 중간 요소 를 정렬 하고 취하는 것입니다.
xnor

1
@xnor 불행히도 JS sort()메소드는 기본적으로 사전 식 비교를 사용하므로 명시적인 콜백이 필요합니다. (문제 같은 .)
Arnauld

5
@Arnauld 와우, 그것은 꽤 바보입니다. 그러나 정렬이 수치 인 경우에도 더 길 것 같습니다.
xnor

답변:


23

20 바이트

참고로, 공백이없고 함수의 이름을 지정하지 않은 원본 버전입니다.

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

온라인으로 사용해보십시오!


19 바이트

3 진 테스트의 논리를 반전시키고 n255 보다 큰지 n>>8여부를 테스트하는 데 사용하여 바이트를 절약 할 수 있습니다 . 그러나 비트 연산으로 인해 n 2 32 동안 실패합니다 .n255n232

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 당신은 항상 갈 수 있습니다 (자바 스크립트가 수행하는 경향) n=>n>>8?255:n>0&&n에 대해 18 바이트 이후 false에 강제 할 수있는 0모든 부정적인 번호를 평가하고이 것false
값 잉크

1
n<0n>>8

아주 좋아요, 정말 고마워요!
Ricardo Amaral
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.