Liczby McNugget z kurczaka

29

Opis

Liczby Chicken McNugget to liczby, które można wyrazić jako sumę 6, 9 lub 20 - początkowe rozmiary słynnych pudełek Chicken McNuggets sprzedawanych przez McDonald's. W tej sumie liczba może wystąpić więcej niż jeden raz, podobnie 6 + 6 = 12jak liczba taka, a liczba musi „zawierać” co najmniej jeden z wymienionych rozmiarów. Pierwsze numery Chicken McNugget to:

6
9
6 + 6 = 12
6 + 9 = 15
9 + 9 = 6 + 6 + 6 = 18
20
6 + 6 + 9 = 21
...

Wyzwanie

Twoim zadaniem jest napisanie programu lub funkcji, która przy dodatniej liczbie całkowitej określa, czy tę liczbę można wyrazić w opisany sposób, dlatego jest to taka liczba Chicken McNugget. Powinien następnie wygenerować wartość prawdy lub fałszu na podstawie swojej decyzji.

Przypadki testowe

6 -> true
7 -> false
12 -> true
15 -> true
21 -> true
40 -> true
42 -> true

To jest , więc wygrywa najkrótsza odpowiedź w bajtach i obowiązują standardowe luki!

racer290
źródło
15
Należy zauważyć, że „Wszystkie liczby całkowite są liczbami McNugget, z wyjątkiem 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23, 25, 28, 31, 34, 37 i 43. ” ( mathworld )
Leaky Nun
1
Cóż, weźmy to za wyzwanie kompresyjne, ale dziękuję za notatkę
racer290
3
Czy ktoś ma link do tego OEIS?
CraigR8806
2
Co masz przeciwko 4-częściowemu zestawowi samorodków? mcdonalds.com/us/en-us/product/chicken-mcnuggets-4-piece.html
Dan Neely
2
numerphile ...
Jason C

Odpowiedzi:

37

Python, 27 bajtów

lambda n:0x82492cb6dbf>>n&1

Wypróbuj online!

Anders Kaseorg
źródło
11
Co to za magiczny kod, to jest niesamowite
HyperNeutrino
Możesz usunąć, ~ponieważ możesz zamienić dane wyjściowe.
Leaky Nun
1
Ponadto, 8953174650303ma dokładnie taką samą długość z 0x82492cb6dbf(choć mniej czytelny).
Leaky Nun
2
@HyperNeutrino magiczna liczba ma tylko te ustawione bity, które odpowiadają liczbom, które nie są liczbami Chicken McNugget. Spójrz na jego reprezentację binarną, a będzie o wiele jaśniej.
David Z
1
Szkoda, że ​​nie możesz łatwo użyć tego samego pomysłu z bazą 64
Jacob Garby
29

Python 3 , 24 bajty

lambda n:0<=n--n%3*20!=3

Wypróbuj online!

Wyjaśnienie

Z 6i 9spokoju, można dokonać wszystkich liczb całkowitych podzielnych przez 3które są większe niż 3, jak to stwierdził w komentarzu OVS na wyzwanie . Zakłada się, że można również zrobić 0. Podsumowując, można zrobić 0,6,9,12,15,....

Z jednej instancji 20, można zrobić: 20,26,29,32,35,....

Z dwóch wystąpień 20, można zrobić: 40,46,49,52,55,....

Trzy przypadki nigdy nie są konieczne, ponieważ 3 x 20 = 10 x 6.


Zauważ, że przypadki, w których nie 20jest to konieczne, można również podzielić przez 3; przypadki, w których jeden 20jest potrzebny, pozostawiają resztę 2; przypadki, w których 20potrzebne są dwa , pozostawia resztę 1.

Liczba 20potrzebnych może być zatem obliczona przez (-n)%3. Następnie robimy, n-(((-n)%3)*20)aby usunąć liczbę 20potrzebnych z numeru. Następnie sprawdzamy, czy ta liczba nie jest ujemna, ale nie jest 3.

Leaky Nun
źródło
39 bajtów
Mr. Xcoder
@ Mr.Xcoder zaktualizowany.
Leaky Nun
f=lambda n:n%3<1<n-2or n>20and f(n-20)Czy to działa?
Zacharý
@ Zacharý dzięki, zaktualizowano.
Leaky Nun
1
Możesz usunąć f=teraz, ponieważ nie jest rekurencyjny.
notjagan
8

Python 2 , 28 bajtów

lambda n:-n%3-n/20<(n%20!=3)

Wypróbuj online!

xnor
źródło
Korzystając z prób i błędów i mapując pierwszą część do zakresu, mam ogólne pojęcie o tym, jak to działa. Chciałbym jednak wiedzieć, jak wymyśliłeś to rozwiązanie.
Leaky Nun
@LeakyNun Zabawne, myślałem, że to naturalna metoda, a twoja sprytna :). Zauważyłem, że możliwe wartości (n%3,n/20)z listy wykluczonych to {(2, 0), (1, 0), (1, 1)}. Używanie -n%3zamiast tego dawało nierówność n/20>=(-n)%3. Stamtąd {3,23,43}błąkałem się, aby odwrócić, które są 3 mod 20 bez wpływu na 63,83, ... Znalazłem przesunięcie punktu końcowego nierówności dla tych, którzy działali najlepiej.
xnor
Cóż, moja metoda naprawdę polega na rozwiązaniu problemu, podczas gdy twoja metoda manipuluje wartościami z listy wykluczonych, więc powiedziałbym, że moja metoda jest bardziej naturalna :)
Leaky Nun
7

Galaretka , 11 bajtów

ṗ3’æ.“©µÞ‘ċ

Wypróbuj online!

Jak to działa

ṗ3’æ.“©µÞ‘ċ  Main link. Argument: n

ṗ3           Cartesian power; yield all 3-tuples over [1, ..., n].
  ’          Decrement all coordinates.
     “©µÞ‘   Yield [6, 9, 20].
   æ.        Take the dot product of each 3-tuple and [6, 9, 20].
          ċ  Count the occurrences of n (Positive for Chicken McNuggets numbers).
Dennis
źródło
4
Chicken McNuggets ™ and Jelly! Mmmm !!!
CJ Dennis
@CJDennis Właściwie to Chicken McNuggets © i Jelly.
caird coinheringaahing 17.07.17
@cairdcoinheringaahing Właściwie to Chicken McNuggets® i galaretka.
Dan
5

Haskell , 36 bajtów

f n|n<1=n==0
f n=any(f.(n-))[6,9,20]

Wypróbuj online!

Wyjaśnienie

To rozwiązanie jest tak proste, jak to tylko możliwe. Pierwszy wiersz deklaruje, że dla dowolnej liczby mniejszej niż 1 jest to liczba McNugget, jeśli n==0. To znaczy, że 0jest to liczba McNugget, a wszystkie liczby ujemne nie są.

Druga linia deklaruje, że dla wszystkich innych liczb njest liczbą McNugget, jeśli minus jeden z rozmiarów Nugget jest liczbą McNugget.

Jest to dość proste wyszukiwanie rekurencyjne.

Kreator pszenicy
źródło
3

Python 3 , 48 46 42 bajtów

lambda n:n+50in b'2345679:<=?@BCEHIKNQTW]'

Wypróbuj online!

Przełączniki Truei False.

notjagan
źródło
Możesz przełączyć Truei Falsedomyślnie
Mr. Xcoder
3

Galaretka , 11 bajtów

_20$%3$¿o>3

Wypróbuj online!

Port mojej odpowiedzi w Pythonie , ale nieco zmodyfikowany: odejmij, 20aż będzie podzielny przez 3, a następnie sprawdź, czy należy do 0,6,9,...niego, odwzorowując 0dane wejściowe (za pomocą or), a następnie sprawdź, czy jest większy niż 3.

Jedyne trzy liczby, które powstają 0po ukończeniu pierwszego kroku, to 0, 20lub 40, przy czym pierwszy jest poza domeną, a reszta jest większa niż 3.

Leaky Nun
źródło
Nie mam
pojęcia,
@ racer290 Argument wiersza polecenia.
Erik the Outgolfer,
3

Mathematica, 53 bajty

!Flatten@Table[Tr/@Tuples[{6,9,20},i],{i,#}]~FreeQ~#&
J42161217
źródło
Może możesz użyć tej FrobeniusSolvefunkcji.
alephalpha
3

Mathematica, 20 bajtów

0<=#-20Mod[-#,3]!=3&

Funkcja anonimowa. Pobiera liczbę jako dane wejściowe i zwraca Truelub Falsedane wyjściowe. Logika została skopiowana z odpowiedzi Dziurawej Zakonnicy , z dodatkowym nadużyciem Inequality.

LegionMammal978
źródło
3

Kod maszynowy x86-64, 22 bajty

48 B8 41 92 34 6D DB F7 FF FF 83 F9 40 7D 03 48 D3 E8 83 E0 01 C3

Powyższe bajty definiują funkcję w 64-bitowym kodzie maszynowym x86, który określa, czy wartością wejściową jest liczba Chicken McNugget. Pojedynczy dodatni parametr liczby całkowitej jest przekazywany do ECXrejestru zgodnie z 64-bitową konwencją wywoływania Microsoft stosowaną w systemie Windows. Wynikiem jest wartość logiczna zwrócona do EAXrejestru.

Mnemoniki do montażu bez golfa:

; bool IsMcNuggetNumber(int n)
; n is passed in ECX
    movabs  rax, 0xFFFFF7DB6D349241   ; load a 64-bit constant (the bit field)
    cmp     ecx, 64
    jge     TheEnd                    ; if input value >= 64, branch to end
    shr     rax, cl
TheEnd:
    and     eax, 1                    ; mask off all but LSB
    ret

Oczywiście ma to duży wpływ na rozwiązanie Andersa Kaseorga w Pythonie , ponieważ opiera się na polu bitowym reprezentującym wartości, które są liczbami Chicken McNugget. W szczególności każdy bit w tym polu, który odpowiada prawidłowemu numerowi Chicken McNugget, jest ustawiony na 1; wszystkie inne bity są ustawione na 0. (Uważa to 0 za prawidłowy numer Chicken McNugget, ale jeśli ci się to nie podoba, twoja preferencja jest modyfikacją jednobitową).

Zaczynamy od załadowania tej wartości do rejestru. Jest to wartość 64-bitowa, która do kodowania zajmuje już 8 bajtów, a ponadto potrzebujemy jednobajtowego prefiksu REX.W, więc tak naprawdę jesteśmy dość rozrzutni w kategoriach bajtów, ale to jest sedno rozwiązania, więc Myślę, że warto.

Następnie przesuwamy pole w prawo o wartość wejściową. * Wreszcie, maskujemy wszystkie bity oprócz najniższego rzędu, i to staje się naszym wynikiem logicznym.

Ponieważ jednak nie można przesunąć o więcej niż rzeczywistą liczbę bitów wartości, działa to tylko dla danych wejściowych od 0–63. Aby obsługiwać wyższe wartości wejściowe, wstawiamy test u góry funkcji, która rozgałęzia się na dole wartości wejściowej to> = 64. Jedyne interesujące w tym jest to, że wstępnie ładujemy stałą pola bitowego RAX, a następnie rozgałęziamy aż do instrukcji, która maskuje bit najniższego rzędu, zapewniając w ten sposób, że zawsze zwracamy 1.

Wypróbuj online!
(Wywołanie funkcji C tam jest opatrzone adnotacją, która powoduje, że GCC wywołuje ją przy użyciu konwencji wywoływania Microsoft, której używa mój kod zestawu. Gdyby TIO dostarczyło MSVC, nie byłoby to konieczne).

__
* Alternatywnie do zmiany moglibyśmy użyć BTinstrukcji x86 , ale jest to 1 bajt dłuższy do zakodowania, więc nie ma przewagi. Chyba że byliśmy zmuszeni zastosować inną konwencję wywoływania, która nie przekazała wygodnie wartości wejściowej do ECXrejestru. Byłby to problem, ponieważ SHR wymaga, aby jego operand źródłowy służył CLdo dynamicznego liczenia przesunięcia. Dlatego inna konwencja wywoływania wymagałaby MOVedycji wartości wejściowej z dowolnego rejestru, do którego została przekazana ECX, co kosztowałoby nas 2 bajty. BTInstrukcja może wykorzystać dowolny rejestr jako argumentu źródłowego, kosztem tylko 1 bajt. W takiej sytuacji byłoby lepiej.BTwstawia wartość odpowiedniego bitu do flagi carry (CF), więc użyłbyś SETCinstrukcji, aby uzyskać tę wartość w rejestrze liczb całkowitych, tak ALaby mogła zostać zwrócona do wywołującego.


Alternatywne wdrożenie, 23 bajty

Oto alternatywna implementacja wykorzystująca operacje modulo i mnożenia w celu ustalenia, czy wartością wejściową jest liczba Chicken McNugget.

Korzysta z konwencji wywoływania AMD64 Systemu V , która przekazuje wartość wejściową do EDIrejestru. Wynikiem jest nadal wartość logiczna, zwrócona w EAX.

Zauważ jednak, że w przeciwieństwie do powyższego kodu, jest to odwrotna wartość logiczna (dla wygody implementacji). Zwraca, falsejeśli wartość wejściowa to liczba Chicken McNugget lub truejeśli wartość wejściowa nie jest liczbą Chicken McNugget.

                    ; bool IsNotMcNuggetNumber(int n)
                    ; n is passed in EDI
8D 04 3F            lea    eax, [rdi+rdi*1]   ; multiply input by 2, and put result in EAX
83 FF 2B            cmp    edi, 43
7D 0E               jge    TheEnd             ; everything >= 43 is a McNugget number
99                  cdq                       ; zero EDX in only 1 byte
6A 03               push   3
59                  pop    rcx                ; short way to put 3 in ECX for DIV
F7 F1               div    ecx                ; divide input value by 3
6B D2 14            imul   edx, edx, 20       ; multiply remainder of division by 20
39 D7               cmp    edi, edx
0F 9C C0            setl   al                 ; AL = (original input) < (input % 3 * 20)
                 TheEnd:
C3                  ret

Brzydka w tym jest potrzeba jawnego obsługiwania wartości wejściowych> = 43 przez porównanie i odgałęzienie u góry. Istnieją oczywiście inne sposoby wykonania tego zadania, które nie wymagają rozgałęzienia, takie jak algorytm Caira coinheringaahing , ale kodowanie zajmie znacznie więcej bajtów, więc nie jest to rozsądne rozwiązanie. Myślę, że prawdopodobnie brakuje mi sztuczki, która sprawiłaby, że to zadziałałoby bardziej elegancko i było mniej bajtów niż powyższe rozwiązanie oparte na polu bitowym (ponieważ kodowanie samego pola bitowego zajmuje tak wiele bajtów), ale przestudiowałem to dla jakiś czas i wciąż tego nie widzę.

No cóż, spróbuj mimo to online !

Cody Gray
źródło
3

05AB1E, 17 16 bajtów

ŽGç₂в©IED®âO«]I¢

Wypróbuj online!

Wyjaśnienie

  ŽGç₂в                 The list [6, 9, 20]
       ©                Store this list in register_c
        IE              Loop <input> number of times
           ®â           Cartesian product stack contents with list in register_c
             O          Sum up the contents of each sub array
          D   «         List duplicated before taking Cartesian product, concat
               ]        End for loop
                I¢      Count occurences of input
obrót silnika
źródło
1
Masz zduplikowane linki TIO.
Wcielenie nieznajomości
1
Niezła odpowiedź. Witamy w PPCG i świecie 05AB1E. :) Jedna rzecz do golfa jest użycie do łańcucha (istnieją buitins ciągów 1-, 2-, i 3-char, będąc ', i odpowiednio). Mam wrażenie, że więcej można zagrać w golfa, być może stosując inne podejście, ale niezależnie od tego jest to miła pierwsza odpowiedź. +1 ode mnie
Kevin Cruijssen
1
Rzeczywiście miał rację. Znaleziono 12-byter wykorzystując polecenie wbudowane Åœ: … ÇIÅœåPOĀ. Jest to zupełnie inne podejście, więc jeśli chcesz, żebym opublikował je jako oddzielną odpowiedź, niż twój golf, daj mi znać. PS: Nie jestem w 100% pewien, czy materiały niedrukowalne są dozwolone na stronie kodowej 05AB1E . W takim przypadku może być konieczne inne kodowanie, co sprawiłoby, że niektóre znaki byłyby liczone jako 2 bajty. W takim przypadku ŽBo21вmoże być alternatywą dla bajtu +1.
Kevin Cruijssen
Jak wspomina Kevin, żaden z 3 bajtów w ciągu nie znajduje się na stronie kodowej 05ab1e i dlatego nie można go użyć bez zliczenia całego programu w utf-8, co wydłużyłoby go o wiele dłużej. Możesz jednak użyć ŽGç₂вzamiast ciągu, jednocześnie zapisując bajt w tym procesie.
Emigna
Kevin, idź na całość. Byłoby miło widzieć różne podejścia. Emigna, dzięki za sugestię, dokonam zmiany
rev
2

JavaScript (ES6), 69 64 bajtów

n=>'ABCDEFHIKLNOQRTWXZ]`cfl'.includes(String.fromCharCode(n+65))

Wyjścia falsedla numerów Chicken McNugget, trueinaczej.

darrylyeo
źródło
Chciałbym przynajmniej link „spróbuj”.
racer290
@ racer290 Dodano.
darrylyeo
n=>~'ABCDEFHIKLNOQRTWXZ]`cfl'.search(String.fromCharCode(n+65))dla 63 bajtów
Oki
2

Java, 21 57 24 bajtów

Wypróbuj online!

Gra w golfa:

n->(n-=n*2%3*20)>=0&n!=3

Nie golfowany:

import java.util.*;

public class ChickenMcNuggetNumbers {

  private static final Set<Integer> FALSE_VALUES = new HashSet<>(Arrays.asList(
    new Integer[] { 0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23,
    25, 28, 31, 34, 37, 43 }));

  public static void main(String[] args) {
    for (int i = 0; i < 45; ++i) {
      System.out.println(i + " -> expected=" + !FALSE_VALUES.contains(i)
        + ", actual=" + f(n->(n-=n*2%3*20)>=0&n!=3, i));
    }
  }

  public static boolean f(java.util.function.Function<Integer, Boolean> f, int n) {
    return f.apply(n);
  }
}

źródło
Wynik jest niewłaściwy dla 26 = 20 + 6.
Leaky Nun
@LeakyNun Algorytm był zbyt naiwny. Musiałem iść zgodnie z planem B, który dodał kilka bajtów, ale wydaje się, że teraz generuje poprawne wyniki. Na początek powinienem był iterować wszystkie wartości, zamiast polegać na testowanych przypadkach.
35 bajtów
Leaky Nun
1
24 bajty (patrz wyżej)
Leaky Nun
1
@LeakyNun dzięki! Nadal muszę się wiele nauczyć o golfie.
1

Python 2 , 51 bajtów

-1 bajt dzięki @LeakyNun

lambda n:max(n>43,25<n>n%3>1,5<n>n%3<1,n in[20,40])

Wypróbuj online! Stopka drukuje wszystkie numery inne niż McNugget

ovs
źródło
n%3może wynosić tylko 0 lub 1 lub 2, więc n%3==2jest równoważne z n%3>1.
Leaky Nun
1

Pyth , 15 bajtów

fg.{CM"     "{T./

Wypróbuj online!

Ciąg zawiera znaki odpowiadające punktom kodowym 6, 9 i 20.

notjagan
źródło
1

Haskell, 64 56 bajtów

Nie zrobiłem żadnych podstępów, ale patrząc na inne odpowiedzi, może być krótsze zaimportowanie Bitsmodułu i użycie tych metod. To podejście sprawdza się znacznie bardziej bezpośrednio.

f x=(\l->elem x[i*6+j*9+k*20|i<-l,j<-l,k<-l,x/=0])[0..x]
qfwfq
źródło
1
Liczba bajtów 66nie jest 64. Ale możesz zaoszczędzić wiele nawiasów i x/=0ochronić się, aby zaoszczędzić trochę bajtów, patrz tutaj .
ბიმო
1

JavaScript, 92 78 72 bajtów

* zapisano 14 bajtów dzięki @Jonasw

a=>!(a in[0,1,2,3,4,5,7,8,10,11,13,14,16,17,19,22,23,25,28,31,34,37,43])

Wykorzystuje fakt, że „Wszystkie liczby całkowite są liczbami McNugget z wyjątkiem 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23, 25, 28, 31, 34 , 37 i 43. ” z komentarza @ LeakyNun

SuperStormer
źródło
użycie prostej tablicy uratowałoby bajty dla .split ...
Jonas Wilms
@ Tablica Jonasa ma 108 bajtów, podzielony ciąg znaków to 73 bajty
SuperStormer
um jsbin.com/bucihuqefi/edit?console -11 bytes ...
Jonas Wilms
1

Dodaj ++ , 35 bajtów

D,f,@,A6$%0=@20$%0=A3$%0=A8<A43<s1<

Wypróbuj online!

Spójrz mam, nie pętle while. Lub struny. Lub listy. Lub naprawdę wszystko, co pomaga zaoszczędzić bajty. Ale głównie dlatego, że Add ++ nie wie, co to jest.

3 miesiące później zdałem sobie sprawę, że to było nieprawidłowe i naprawiłem to. W jakiś sposób to golfa o 13 bajtów. Jest to funkcja, która pobiera jeden argument i sprawdza, czy jest to numer Chicken McNugget, czy nie.

Jak to działa

D,f,@,                        - Create a monadic (one argument) function called f (example argument: 3)
A                             - Push the argument again; STACK = [3 3]
 6                            - Push 6;                  STACK = [3 3 6]
  $                           - Swap the top two values; STACK = [3 6 3]
   %                          - Modulo;                  STACK = [3 3]
    0                         - Push 0;                  STACK = [3 3 0]
     =                        - Are they equal?          STACK = [3 0]
      @                       - Reverse the stack;       STACK = [0 3]
       20                     - Push 20;                 STACK = [0 3 20]
         $                    - Swap the top two values; STACK = [0 20 3]
          %                   - Modulo;                  STACK = [0 3]
           0                  - Push 0;                  STACK = [0 3 0]
            =                 - Are they equal?          STACK = [0 0]
             A                - Push the argument;       STACK = [0 0 3]
              3               - Push 3;                  STACK = [0 0 3 3]
               $              - Swap the top two values; STACK = [0 0 3 3]
                %             - Modulo;                  STACK = [0 0 0]
                 0            - Push 0;                  STACK = [0 0 0 0]
                  =           - Are they equal?          STACK = [0 0 1]
                   A          - Push the argument;       STACK = [0 0 1 3]
                    8         - Push 8;                  STACK = [0 0 1 3 8]
                     <        - Less than;               STACK = [0 0 1 0]
                      A       - Push the argument;       STACK = [0 0 1 0 3]
                       43     - Push 43;                 STACK = [0 0 1 0 3 43]
                         <    - Less than;               STACK = [0 0 1 0 0]
                          s   - Sum;                     STACK = [1]
                           1  - Push 1;                  STACK = [1 1]
                            < - Less than;               STACK = [0]
Cairney Coheringaahing
źródło
1

Excel, 87 bajtów

=AND(OR(MOD(A1,3)*MOD(A1,20)*IF(A1>43,MOD(A1-40,3),1)*IF(A1>23,MOD(A1-20,3),1)=0),A1>5)

Alternatywnie 92 bajty:

=CHOOSE(MOD(A1,3)+1,A1>3,IF(A1>43,MOD(A1-40,3)=0,A1=40),IF(A1>23,MOD(ABS(A1-20),3)=0,A1=20))
Wernisch
źródło
1

PHP, 69 + 1 bajtów

for($n=$argn;$n>0;$n-=20)if($n%3<1)for($k=$n;$k>0;$k-=9)$k%6||die(1);

wychodzi z 1numeru Chicken McNugget, w przeciwnym razie 0.

Uruchom jako potok z -nlub spróbuj online .

Tytus
źródło
0

Python 2 , 61 bajtów

lambda n:n in[int(c,36)for c in'1234578ABDEGHJMNPSV']+[37,43]

Wypróbuj online!

Chas Brown
źródło
Lub możesz użyć współrzędnych kodowych i rozpakować za pomocą chr.
Leaky Nun
0

Mathematica, 59 bajtów

!Select[IntegerPartitions@#,{6,9,20}~SubsetQ~#&]=={}&&#!=0&
J42161217
źródło
0

Javascript 37 bajtów

Pobiera dodatnią liczbę całkowitą ni wyprowadza truedla liczb Chicken McNugget i falsedla innych.

F=n=>!(n<0||(n%6&&!F(n-9)&&!F(n-20)))

Wyjaśnienie

F=n=>!(            // negate the internal test for non-Chicken McNugget numbers
    n<0 || (       // if n < 0, or
        n%6 &&     // if n % 6 is truthy,
        !F(n-9) && // and n-9 is not a Chicken McNugget number
        !F(n-20)   // and n-20 is not a Chicken McNugget number
                   // then n is not a Chicken McNugget number
    )
)

Rekurencja w tej funkcji jest haniebna, a dla każdej wystarczająco dużej nprzekroczenia limitów stosów wywołań. Oto wersja, która omija te limity, sprawdzając, czy njest większa niż największy numer nie-Chicken McNugget (43 bajty [punkty bonusowe za bycie największym nie-Chicken McNugget?]):

F=n=>n>43||!(n<0||(n%6&&!F(n-9)&&!F(n-20)))

asgalant
źródło
0

JavaScript ES5, 46 bajtów

n=>n>5&&(!(n%20)||(n<24?!(n%3):n<44?n%3-1:1));

Jawna odpowiedź logiczna, 50 bajtów:

n=>!!(n>5&&(!(n%20)||(n<24?!(n%3):n<44?n%3-1:1)));

Niezdarny, ale załatwia sprawę. Zwraca falselub 0dla każdej wartości, która nie jest 0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23, 25, 28, 31, 34 , 37, lub 43, i true, -1lub 1do wszystkiego innego.

Jawne rozwiązanie zwraca truelub falsetylko.

n=>!!(                                          ); forces Boolean type (optional)
      n>5                                          false for 0, 1, 2, 3, 4, 5 (and negative inputs)
            !(n%20)                                explicit true for 20, 40
                      n<24?!(n%3)                  false for 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23
                                  n<44?n%3-1       false for 25, 28, 31, 34, 37, 43
ricdesi
źródło
0

Clojure 33 bajty

Szybka próba na ok: #(-> %(rem 20)(rem 9)(rem 6)(= 0))

MONODA43
źródło
0

Pari / GP , 48 bajtów

0jest fałszem. wszystko inne jest prawdą.

n->n*Vec(1/(1-x^6)/(1-x^9)/(1-x^20)+O(x^n++))[n]

Wypróbuj online!

alephalpha
źródło
Nieistotny komentarz: jaki był problem z twoją odpowiedzią? # ~ SetPrecision ~ 1 &?
J42161217,
@Jenny_mathy Nie udaje się 0.25test.
alephalpha