Wyobraź sobie tę krótką funkcję, aby zacisnąć liczbę między 0 a 255:
c = n => n > 0 ? n < 255 ? n : 255 : 0
Czy to najkrótsza możliwa wersja funkcji clampowania z JavaScript (bez funkcji ES.Next)?
PS: Nie jestem pewien, czy jest to istotne, ale 0 i 255 nie są losowe, chodzi o to, aby zacisnąć liczbę jako 8-bitową liczbę całkowitą bez znaku.
code-golf
math
tips
javascript
Ricardo Amaral
źródło
źródło
[0,n,255]
i zabranie środkowego elementu - czy to może być krótsze?sort()
metoda JS domyślnie używa porównania leksykograficznego, więc wymagałoby to jawnego wywołania zwrotnego. (Coś w tym stylu .)Odpowiedzi:
20 bajtów
Dla porównania, jest to oryginalna wersja bez białych znaków i bez nazywania funkcji:
Wypróbuj online!
19 bajtów
Możemy zapisać bajt, odwracając logikę testów trójskładnikowych in 255 n≥232
n>>8
sprawdzając, czy jest większe niż . Z powodu operacji bitowej nie powiedzie się to jednak dla .Wypróbuj online!
19 bajtów
Ten zwraca zamiast ale działa dla .false 0 n≥232
Wypróbuj online!
18 bajtów
Łącząc obie powyższe wersje, otrzymujemy funkcję, która działa dla i zwraca dla .256−232≤n<232 false n<0
Wypróbuj online!
Skomentował
(Jest to poprawiona wersja kodu zaproponowanego przez @ValueInk w komentarzach).
17 bajtów
Możemy pójść o krok dalej, ograniczając prawidłowy zakres wejściowy do :−224<n≤224
Wypróbuj online!
Skomentował
źródło
n=>n>>8?255:n>0&&n
do 18 bajtów , ponieważfalse
może być zmuszany do0
a to sprawi, że wszystkie liczby ujemne oceny dofalse
n>>8