Od pewnego czasu mam problem z liczeniem na palcach, a mianowicie, że mogę policzyć tylko do dziesięciu. Moim rozwiązaniem tego problemu było policzenie dwójkowe na moich palcach, odłożenie kciuka na jeden, palca wskazującego na dwa, kciuka i palca wskazującego na trzy itd. Jednak napotykamy na pewien problem, kiedy dojdziemy do numer cztery. W szczególności wymaga od nas podniesienia środkowego palca, co skutkuje raczej niefortunnym gestem, co zwykle nie jest akceptowane w społeczeństwie. Ten typ liczby jest nieuprzejmy . Dochodzimy do kolejnego nieuprzejmego numeru na 36, kiedy podnosimy kciuk na drugiej dłoni i środkowym palcu pierwszej ręki. Definicja nieuprzejmej liczby to dowolna liczba, która w tym systemie liczenia powoduje, że tylko wystawiamyśrodkowy palec dowolnej dłoni. Gdy miniemy 1023 (maksymalna liczba osiągalna dla jednej osoby, dwiema pięcioma palcami każda), załóżmy, że kontynuujemy trzecią rękę, z dodatkowymi rękami dodanymi w razie potrzeby.
Twoje zadanie:
Napisz program lub funkcję, która odbiera dane wejściowe i wyświetla wartość prawda / fałsz na podstawie tego, czy dane wejściowe są liczbą nieuprzejmą.
Wejście:
Liczba całkowita od 0 do 10 9 (włącznie).
Wynik:
Wartość prawda / fałsz wskazująca, czy dane wejściowe są liczbą nieuprzejmą.
Przypadki testowe:
Input: Output:
0 ---> falsy
3 ---> falsy
4 ---> truthy
25 ---> falsy
36 ---> truthy
127 ---> falsy
131 ---> truthy
Punktacja:
To jest golf golfowy , więc wygrywa najniższy wynik w bajtach.
assume we continue with a third hand
Praca zespołowa sprawia, że sen staje się nieuprzejmy.Odpowiedzi:
APL (dzaima / APL) , 5 bajtów
Wypróbuj online!
4∊
jest 4 członkiem32⊤
do-base-32?źródło
Regex (ECMAScript), 37 bajtów
Dane wejściowe są jednostronne, podobnie jak długość ciągu
x
s.^((?=(x+)(\2{31}x*))\3)*(x{32})*x{4}$
Wypróbuj online!
źródło
JavaScript (SpiderMonkey) , 23 bajty
Wypróbuj online!
To banalne rozwiązanie, wystarczy przekonwertować na bazę 32 i sprawdzić, czy jest w niej 4.
JavaScript (SpiderMonkey) , 26 bajtów
Wypróbuj online!
To interesujące, że
/4/.test(...)
kosztowało o jeden bajt więcej niż....match(4)
.źródło
Japt , 5 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Ruby,
3619 bajtówWypróbuj online!
Zapisano 17 bajtów metodą @tsh .
źródło
100010011111
00100
.->n{n.to_s(32)=~/4/}
?10001
, druga00111
i trzecia11
? Żaden z nich nie ma środkowego palca tylko w góręAPL + WIN, 10 bajtów
Monity o wprowadzenie liczby całkowitej
Zauważmy, że sześć rąk jest wymaganych do przedstawienia 10 ^ 9 konwersji na wektor 6 elementów reprezentacji podstawowej 32 i sprawdza, czy 4 istnieje w dowolnym elemencie.
źródło
Perl 6 , 16 bajtów
Wypróbuj online!
Sprawdza, czy
4
w bazie 32 znajduje się reprezentacja liczby. Zwraca zero jako fałsz lub dopasowanie zawierające4
.źródło
Python 2 ,
3432 bajtyWypróbuj online!
2 bajty dzięki tsh
źródło
Kod maszynowy x86, 17 bajtów
Powyższe bajty definiują funkcję, która przyjmuje liczbę jako dane wejściowe do
EAX
rejestru i zwraca wynik jako wartość logiczną wEAX
rejestrze (EAX
== 0, jeśli dane wejściowe nie są liczbą podstawową;!EAX
= 0, jeśli dane wejściowe są liczbą podstawową ).W czytelnych dla człowieka mnemonikach zestawu:
Wypróbuj online!
źródło
idiv
. Nie widzę w tym żadnych stopniowych ulepszeń. Ale zobacz moją odpowiedź : 14 bajtów na pętlę przesunięcia, która używa MOV / AND / SUB / JZ do sprawdzania niskich 5 bitów pod kątem chamstwa.Julia 1.0 , 25 bajtów
Wypróbuj online!
Julia 1.0 , 26 bajtów
Alternatywą jest 1 znak krótszy, ale 1 bajt dłuższy, szkoda, że
∈
zajmuje 3 bajty w Unicode.Wypróbuj online!
źródło
n->n%32...
pierwszej odpowiedzi na 2 bajty krótsze?05AB1E , 5 bajtów
Odpowiedź portu APL (dzaima / APL) na @ Adám .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
₆
to 36, a nie 32.Catholicon , 4 bajty
Pobiera liczbę jako łańcuch podstawowy-256.
Wypróbuj online!
Zestaw testowy
źródło
<<
i>>
pozwala to na liczby większe niż 255, jak pokazano w pakiecie testowym.C # (interaktywny kompilator Visual C #) , 31 bajtów
Dane wyjściowe przez zgłoszenie wyjątku. Sposób, w jaki zamieniasz jedną liczbę z dziesiętnej na inną, polega na wielokrotnym dzieleniu liczby dziesiętnej przez tę bazę i przyjmowaniu reszty jako cyfry. To właśnie robimy i sprawdzamy, czy którakolwiek cyfra ma wartość 4 w bazie-32;
Wypróbuj online!
źródło
n>31
->n>0
J , 12 bajtów
Wypróbuj online!
źródło
R ,
5048 bajtówWypróbuj online!
Wykorzystuje teraz staranne podejście oparte na macierzy (dzięki uprzejmości @Giueseppe). Generuje matrycę 5x7 bitów, konwertuje ją na szereg liczb całkowitych bazowych 32 i sprawdza, czy są jakieś 4.
źródło
intToBits
ale wtedy możemy pracowaćints
zamiastraw
która kończy się oszczędność bajt - patrz na przykład ten zintToBits
4
w liczbie bazowej 32, to och, 29 bajtów .Python 3 , 43 bajty
Sprawdza każdy 5-bitowy fragment, aby sprawdzić, czy jest niegrzeczny (równy 4).
Wypróbuj online!
źródło
C (gcc) , 34 bajty
Wypróbuj online!
źródło
Węgiel , 6 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyprowadza
-
s zgodnie z tym, jak niegrzeczna jest liczba. Wyjaśnienie:Używam konwersji ciągów znaków, aby uniknąć konieczności oddzielania literałów liczbowych dla
32
i4
.źródło
Tidy , 18 bajtów
Wypróbuj online! Sprawdza, czy
4
jest elementembase(32,x)
(konwersja podstawowa).źródło
Haskell , 31 bajtów
Wypróbuj online!
źródło
Cubix , 26 bajtów
Wypróbuj online!
Owija się w sześcian o długości krawędzi 3 w następujący sposób
Zobacz, jak biegnie
Dość podstawowa implementacja, bez wszystkich przekierowań:
IS
inicjuje program, przesuwając wejście i 32 na stos%4-!
pobiera resztę i sprawdza, czy wynosi 4 przez odjęcie1O@
wyjście 1, jeśli było 4 i zatrzymanie;;,
posprzątaj stos i dziel liczbę całkowitąp;?
oczyść spód stosu i sprawdź wynik div dla 0O@
jeśli div spowoduje zero wyjścia i zatrzymanias
zamień wierzch stosu i zacznij od kroku 2 powyżejźródło
MATL , 8 bajtów
Wypróbuj online!
źródło
G
(nie jestem pewien, dlaczego włączyłem go w pierwszej kolejności), ale to tylko jeden bajt (dzięki za wykrycie tego!). Zmiana32YA52
na32_YA4
tę samą liczbę bajtów, prawda?'32_YA4'n'32YA52'n-
Partia,
7745 bajtówNa podstawie tych nieco kręcących się hacków . Objaśnienie: Należy sprawdzić tylko 6 rąk z powodu ograniczonego zakresu (30 bitów) wejścia, które musi być obsługiwane. Magiczna liczba
m
jest równoważna z111111
bazą 32, więc pierwsza operacja przełącza nieuporządkowane bity w liczbie wejściowej. Następnie pozostaje ustalić, która z 6 rąk ma teraz zero.źródło
kod maszynowy x86, 14 bajtów
(ten sam kod maszynowy działa w trybie 16-bitowym, 32-bitowym i 64-bitowym. W trybie 16-bitowym używa AX i DI zamiast EAX i EDI w trybie 32 i 64-bitowym).
Algorytm: sprawdź niskie 5 bitów za pomocą
x & 31 == 4
, następnie przesuń w prawo o 5 bitów i powtórz, jeśli wynik przesunięcia jest niezerowy.Możliwość
char isrude(unsigned n);
wywołania z C zgodnie z konwencją wywoływania Systemu x86-64. 0 to prawda, nie-0 to fałsz (to jest asm, a nie C 1 ).Wykorzystuje to krótkie
op al, imm8
kodowanie dla AND i SUB. Mógłbym kiedyśXOR al,4
wygenerować 0 na równości, ale SUB jest szybszy, ponieważ może makro połączyć się z JZ w jeden U-sub i rozgałęzienie w rodzinie Sandybridge.Ciekawostka: użycie wyniku zmiany o więcej niż 1 będzie powolne w rodzinie P6 (przeciągnięcia frontonu aż do wycofania się zmiany), ale to w porządku.
Przypis 1: Jest to funkcja języka asemblera, a x86 asm ma jedno
jz
i drugiejnz
, więc zgodnie z meta mogę wybrać jeden z dwóch sposobów. Nie zamierzam tego dopasowywać do prawdy / fałszu C.Okazało się, że wygodne jest zwracanie w AL zamiast EFLAGS, więc możemy opisać tę funkcję kompilatorowi C bez opakowania, ale mój wybór prawdy / fałszu nie jest ograniczony przez użycie wywołującego języka C do przetestowania go.
źródło
ES6,
313026 bajtówNie krępuj się zgłaszać pomysły dotyczące dalszego ograniczenia, jeśli w ogóle.
źródło
test
, możesz tak naprawdę zapisać dwa bajty, dopasowując je4
jako liczbę i pozwalającmatch
przekonwertować je na ciąg, a następnie RegExp dla ciebie .Retina 0.8.2 , 31 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Zwraca zero, chyba że liczba jest grubiańska. Działa poprzez konwersję danych wejściowych na unarną, a następnie na unarnie zakodowaną bazę 32 i zliczanie liczby
4
s w wyniku.źródło
Java 8,
4033 bajtówOdpowiedź portu APL (dzaima / APL) na @ Adám .
Wypróbuj online.
Wyjaśnienie:
źródło
> <> , 28 bajtów
Dane wyjściowe 4 dla nieuprzejmych liczb generują wyjątek dla nieuprzejmych liczb.
Wypróbuj online!
źródło
Wolfram Language (Mathematica) ,
37 bajtów36 bajtów29 bajtów-2 bajty Jonathan Frech
Wypróbuj online!
31-bajtowe rozwiązanie:
Wypróbuj online!
źródło
...#...&
jest często używana w Mathematica).[n]
na końcu, tylko&
. Ponieważ posty mają historię edycji, można pominąć poprzednie wpisy, a konwencja dla starych wyników to<s>40</s> <s>36</s>
Java 8,
282221 bajtówZainspirowany @ Kevin-cruijssen odpowiedź „s . Działa tylko na 2 ręce.
Wypróbuj online!
Wyjaśnienie:
źródło