¿Es posible hacer que una función de abrazadera sea más corta que una ternaria en JS?


22

Imagine esta breve función para sujetar un número entre 0 y 255:

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

¿Es esta la versión más corta posible de una función de abrazadera con JavaScript (sin funciones ES.Next)?

PD: No estoy seguro de si es relevante, pero, el 0 y el 255 no son aleatorios, la idea es fijar un número como un entero sin signo de 8 bits.


2
Hola y bienvenido a PPCG! Para que quede claro, cualquier respuesta que reciba aquí no será necesariamente una buena idea para usar en cualquier otra cosa que no sea el código de golf. Aparte de eso, si le importa en qué versión / entorno tiene que funcionar, es posible que desee especificarlo.
FryAmTheEggman

1
Oh, estoy bien enterado. He actualizado un poco la pregunta. Gracias :)
Ricardo Amaral

2
No sé JS, pero una forma de sujetar es ordenar [0,n,255]y tomar el elemento del medio, ¿podría ser más corto?
xnor

1
@xnor Desafortunadamente, el sort()método JS utiliza una comparación lexicográfica por defecto, por lo que requeriría una devolución de llamada explícita. (Algo así .)
Arnauld

55
@Arnauld Wow, eso es bastante tonto. Pero parece que sería más largo incluso si el tipo fuera numérico.
xnor

Respuestas:


23

20 bytes

Como referencia, esta es la versión original sin espacios en blanco y sin nombrar la función:

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

Pruébalo en línea!


19 bytes

n>>8norte255norte232

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

Pruébalo en línea!


19 bytes

Funalsmi0 0norte232

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

Pruébalo en línea!


18 bytes

256-232norte<232Funalsminorte<0 0

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

Pruébalo en línea!

Comentado

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

(Esta es una revisión fija del código propuesto por @ValueInk en los comentarios).


17 bytes

-224<norte224

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

Pruébalo en línea!

Comentado

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

¿Por qué parar ahí? Si usted es extremadamente liberal con lo que se considera un 0 (como JavaScript tiende a hacer) siempre se puede ir a dar n=>n>>8?255:n>0&&nde 18 bytes , ya que falsese puede forzar a 0y esto hará que todos los números negativos se evalúan afalse
Valor de tinta

1
norte<0 0n>>8

Muy bien, muchas gracias!
Ricardo Amaral
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.