Twoim celem jest ustalenie, czy liczbę można podzielić przez 3 bez użycia warunków warunkowych. Wprowadzony zostanie 8-bitowa liczba bez znaku od 0 do 255. Zachęcamy do kreatywności!
Możesz używać TYLKO
Równość / nierówność (
==
,!=
,>
,<
,>=
,<=
)Arytmetyczna (
+
,-
,x
)Operatory logiczne (
!
nie&&
i,||
lub)Operatory bitowe (
~
nie,&
i,|
lub,^
xor,<<
,>>
,>>>
arytmetyczne i logiczne zmiany lewy i prawy)Stałe (byłoby lepiej, gdybyś trzymał je małe)
Zmienne przypisanie
Wyjście, 0
jeśli fałsz, 1
jeśli prawda.
Obowiązują standardowe zasady kodowania atomowego. Jeśli masz jakieś pytania, zostaw je w komentarzach. Przykładowe metody tutaj . Token to dowolny z powyższych elementów, z wyłączeniem stałych i zmiennych.
Odpowiedzi:
C - 2 żetony
Wydaje się działać do 2 31 -1.
Kredyty
zalgo("nhahtdh")
na multiplikatywny odwrotny pomysł.źródło
<=
działa, i pamiętał, że 0xAAAAAAAB jest traktowane jakounsigned int
typ, więc wynik mnożenia jest niepodpisany.Pyton,
32 tokenyRozwiązanie brutalnej siły, ale działa.
Podziękowania dla Howarda za redukcję 1 tokena.
źródło
0x9......>>x&1
.C -
54 (?) ŻetonówPracuje dla dowolnym niepodpisanym 32-bitowym numerem .
Ten kod wykorzystuje multiplikatywny odwrotny moduł 2 32 dzielnika do przekształcania operacji dzielenia na operację mnożenia.
Edytować
Moje rozwiązanie (opublikowane 2 minuty później) ma tego samego ducha, co rozwiązanie aditsu. Podziękowania dla niego za użycie
==
tego ulepsza moje rozwiązanie o 1 token.Odniesienie
źródło
Bull
: PC - 15 (?) Żetonów
Od 4 ≡ 1 (mod 3) mamy 4 n ≡ 1 (mod 3). Reguła sumowania cyfr nie ogranicza się do sumowania cyfr, ale pozwala również dowolnie podzielić liczbę na sekwencje cyfr i zsumować je wszystkie, zachowując zgodność.
Przykład w bazie 10, dzielnik = 9:
1234 ≡ 12 + 34 ≡ 1 + 2 + 3 + 4 ≡ 123 + 4 ≡ 1 (mod 9)
Wszystkie instrukcje w programie korzystają z tej właściwości. Można go uprościć do pętli, która uruchamia instrukcję,
n = (n & 0x3) + (n >> 2);
dopókin < 4
instrukcja nie podzieli liczby w bazie-4 na co najmniej znaczącą cyfrę i zsumuje 2 części.źródło
n = (n & 0x3) + (n >> 2);
wyniku zmniejsza się do 3 bitów, a powtórzenie spowodowało, że pozostały tylko 2 bity stackoverflow.com/a/3421654/995714Python (2 tokeny?)
Lub
Lub
źródło
JavaScript - 3 tokeny
To narusza fakt, że użycie bitowych operatorów na liczbach skraca ją do liczby całkowitej w JavaScript.
źródło
=
,*
,|
,==
C - 4 żetony
Działa do 383.
Poprzednia wersja (większe stałe):
Działa do 1535
źródło
bash - ???
Nie jestem pewien, jak to zdobyć.
na przykład
źródło
Befunge 93 - 5 żetonów
Naprawiono - podział został usunięty.
Pobiera dane wejściowe, odejmuje 3, aż będzie mniejsze niż 0, skieruj wskaźnik w górę („|”), a następnie dodaje 3. Jeśli wartość wynosi 0, wówczas wskaźnik przesuwa się w prawo („ 1. @” wysyła „1”), w przeciwnym razie przesuwa się w lewo („@. ” wyprowadza „0”). „@” kończy program.
źródło
Partia - 7 żetonów
Myślę
Zwraca,
1
jeśli podaną liczbę (jako stdin) można podzielić przez trzy.źródło
Rubin, 6 (?) Żetonów
Naprawdę nie jestem pewien, jak liczyć tokeny. OP, możesz mnie zdobyć?
Myślę, że to 6 ...
1
,0
,0
,*
,255
,x
Zauważ, że
*
mnożenie nie jest liczbą całkowitą.źródło
Python 0
Wysłałem Eariler, ale użyłem warunkowych. Nie używaj warunkowych i żadnych tokenów, tylko słowa kluczowe
wykorzystuje sztuczkę polegającą na tym, że wielokrotność 3 ma cyfry, które dodają do 3
Edycja: Usunięto niepotrzebną lambda
Edycja: Dalsza gra w golfa (117 znaków) wciąż nie zawiera tokenów
Zabity bezpośredni dostęp do fajnego getitem Pythona Dłuższy w 132 znakach
http://www.codeskulptor.org/#user34_uUl7SwOBJb_0.py
źródło
[]
jest jednak niedozwolony.only
.Python - 25 tokenów
Na początek mam długie rozwiązanie, które jest implementacją jednej z odpowiedzi w linku w moim pierwszym poście.
n
jest wejściem.or
jest równoważne z||
.źródło
JavaScript - 3 tokeny
Przetestuj na konsoli przeglądarki:
źródło
JavaScript
nie jest pewny co do tokena #
function mod3 (i) { return {'undefined':'100','0':'0'}[[0][i]][i.toString (3).split('').pop ()]}
lub jeśli wyjście dla 0 może wynosić 1;
function mod3 (i) { return '100'[i.toString (3).split('').pop ()]}
źródło
Tcl , 83 bajty
Wypróbuj online!
źródło
proc T n {set n [expr [join [split [expr [join [split $n ""] +]] ""] +]];expr {$n in {0 3 6 9}}}
Wypróbuj online!proc T n {expr {[expr [join [split [expr [join [split $n ""] +]] ""] +]] in {0 3 6 9}}}
Wypróbuj online!