Nomor McNugget Ayam

29

Deskripsi

Nomor Chicken McNugget adalah angka yang dapat dinyatakan sebagai jumlah 6, 9 atau 20 - ukuran awal kotak Chicken McNuggets yang terkenal yang dijual oleh McDonald's. Dalam jumlah itu, suatu angka dapat muncul lebih dari satu kali, demikian 6 + 6 = 12juga angka yang demikian, dan angka tersebut harus "mengandung" setidaknya satu dari ukuran yang disebutkan. Nomor Chicken McNugget pertama adalah:

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

Tantangan

Tugas Anda adalah menulis sebuah program atau fungsi, yang, diberi bilangan bulat positif, menentukan apakah angka ini dapat dinyatakan dengan cara yang dijelaskan, karena itu adalah nomor Chicken McNugget. Maka harus menghasilkan nilai yang benar atau salah berdasarkan keputusannya.

Uji kasus

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

Ini adalah , jadi jawaban tersingkat dalam byte menang dan celah standar berlaku!

racer290
sumber
15
Perlu dicatat bahwa "Semua bilangan bulat adalah angka McNugget kecuali 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23, 23, 25, 25, 28, 31, 34, 37, dan 43. " ( mathworld )
Leaky Nun
1
Baiklah, mari kita anggap ini sebagai tantangan kompresi, tetapi terima kasih atas catatannya
racer290
3
Adakah yang punya tautan OEIS untuk ini ???
CraigR8806
2
Apa yang Anda miliki terhadap paket nugget 4 buah? mcdonalds.com/us/en-us/product/chicken-mcnuggets-4-piece.html
Dan Neely
2
numberphile ...
Jason C

Jawaban:

37

Python, 27 byte

lambda n:0x82492cb6dbf>>n&1

Cobalah online!

Anders Kaseorg
sumber
11
Apa kode ajaib ini o_O ini luar biasa
HyperNeutrino
Anda dapat menghapus ~karena Anda dapat menukar output.
Leaky Nun
1
Juga, 8953174650303memiliki panjang yang sama persis dengan 0x82492cb6dbf(meskipun kurang dapat dibaca).
Leaky Nun
2
@HyperNeutrino angka ajaib hanya memiliki set bit yang sesuai dengan angka yang bukan nomor Chicken McNugget. Lihatlah representasi binernya dan itu akan jauh lebih jelas.
David Z
1
Sayang Anda tidak dapat dengan mudah menggunakan ide yang sama ini dengan basis 64
Jacob Garby
29

Python 3 , 24 byte

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

Cobalah online!

Penjelasan

Dengan 6dan 9sendiri, seseorang dapat membuat semua bilangan bulat dapat dibagi dengan 3yang lebih besar dari 3, seperti yang dinyatakan dalam komentar Ovs untuk tantangan . Diasumsikan bahwa seseorang juga dapat membuat 0. Kesimpulannya, seseorang bisa membuatnya0,6,9,12,15,... .

Dengan satu contoh 20 , satu dapat membuat: 20,26,29,32,35,....

Dengan dua contoh 20 , seseorang dapat membuat: 40,46,49,52,55,....

Tiga contoh tidak perlu, untuk 3 x 20 = 10 x 6 .


Perhatikan bahwa kasus-kasus di mana tidak 20diperlukan juga dapat dibagi dengan 3; kasus-kasus di mana seseorang 20dibutuhkan meninggalkan sisa 2; kasus di mana dua 20diperlukan meninggalkan sisa 1.

Jumlah yang 20dibutuhkan karenanya dapat dihitung dengan (-n)%3. Kemudian, kita lakukan n-(((-n)%3)*20)untuk menghapus jumlah yang 20dibutuhkan dari nomor tersebut. Kami kemudian memeriksa bahwa nomor ini adalah non-negatif, tetapi tidak 3.

Biarawati Bocor
sumber
39 byte
Tn. Xcoder
@ Mr.Xcoder diperbarui.
Leaky Nun
f=lambda n:n%3<1<n-2or n>20and f(n-20)Apakah itu bekerja?
Zacharý
@ Zacharý terima kasih, diperbarui.
Leaky Nun
1
Anda dapat menghapus f=sekarang karena tidak rekursif.
notjagan
8

Python 2 , 28 byte

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

Cobalah online!

Tidak
sumber
Menggunakan beberapa trial-and-error dan memetakan bagian pertama ke kisaran, saya punya ide kasar tentang cara kerjanya. Namun, saya ingin tahu bagaimana Anda menghasilkan solusi ini.
Leaky Nun
@ LeakyNun Lucu, saya pikir ini adalah metode alami dan Anda adalah yang pintar :). Saya mencatat nilai yang mungkin (n%3,n/20)dari daftar Anda yang dikecualikan adalah {(2, 0), (1, 0), (1, 1)}. Menggunakan -n%3sebaliknya memberi ketimpangan n/20>=(-n)%3. Dari sana, saya bermain-main sebentar untuk membalik {3,23,43}yang 3 mod 20 tanpa mempengaruhi 63,83, ... Saya menemukan menggeser titik akhir ketidaksetaraan untuk ini bekerja paling baik.
xnor
Nah metode saya melibatkan benar-benar menyelesaikan masalah sedangkan metode Anda mengutak-atik nilai-nilai dalam daftar yang dikecualikan, jadi saya akan mengatakan bahwa metode saya lebih alami :)
Leaky Nun
7

Jelly , 11 byte

ṗ3’æ.“©µÞ‘ċ

Cobalah online!

Bagaimana itu bekerja

ṗ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
sumber
4
Chicken McNuggets ™ dan Jelly! Mmmm !!!
CJ Dennis
@ CJDennis Sebenarnya ini adalah Chicken McNuggets © dan Jelly.
caird coinheringaahing
@cairdcoinheringaahing Sebenarnya ini Chicken McNuggets® dan Jelly.
Dan
5

Haskell , 36 byte

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

Cobalah online!

Penjelasan

Solusi ini sangat mudah. Baris pertama menyatakan bahwa untuk nomor apa pun yang kurang dari 1 itu adalah nomor McNugget jika n==0. Dengan kata lain itu 0adalah nomor McNugget dan semua angka negatif tidak.

Baris kedua menyatakan bahwa untuk semua nomor lainnya, nadalah nomor McNugget jika minus salah satu ukuran Nugget adalah nomor McNugget.

Ini adalah pencarian rekursif yang cukup sederhana.

Wisaya Gandum
sumber
3

Python 3 , 48 46 42 byte

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

Cobalah online!

Switch Truedan False.

notjagan
sumber
Anda dapat beralih Truedan Falsesecara default
Tn. Xcoder
3

Jelly , 11 byte

_20$%3$¿o>3

Cobalah online!

Port jawaban Python saya , tetapi sedikit diubah: kurangi 20sampai habis dibagi 3, lalu periksa apakah itu milik 0,6,9,...pemetaan 0dengan input (dengan menggunakan or), lalu periksa apakah itu lebih besar dari3 .

Hanya tiga angka yang menghasilkan 0setelah menyelesaikan langkah pertama adalah 0, 20, atau 40, dengan yang pertama berada di luar domain, dan sisanya menjadi lebih besar dari 3.

Biarawati Bocor
sumber
Saya tidak mengerti bagaimana cara memasukkan input ..
racer290
@ racer290 Argumen baris perintah.
Erik the Outgolfer
3

Mathematica, 53 byte

!Flatten@Table[Tr/@Tuples[{6,9,20},i],{i,#}]~FreeQ~#&
J42161217
sumber
Mungkin Anda bisa menggunakan FrobeniusSolvefungsinya.
alephalpha
3

Mathematica, 20 byte

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

Fungsi anonim. Mengambil angka sebagai input dan mengembalikan Trueatau Falsesebagai output. Logika disalin dari jawaban Leaky Nun , dengan beberapa tambahan penyalahgunaan Inequality.

LegionMammal978
sumber
3

x86-64 Kode Mesin, 22 byte

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

Byte di atas menentukan fungsi dalam kode mesin x86 64-bit yang menentukan apakah nilai input adalah nomor McNugget Chicken. Parameter integer positif tunggal dilewatkan dalam ECXregister, mengikuti konvensi panggilan Microsoft 64-bit yang digunakan pada Windows. Hasilnya adalah nilai Boolean yang dikembalikan dalam EAXregister.

Mnemonik perakitan tidak dikumpulkan:

; 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

Jelas, ini memainkan banyak solusi Anders Kaseorg dengan Python , dalam hal ini didasarkan pada bidang-bit yang mewakili nilai-nilai yang merupakan angka Chicken McNugget. Secara khusus, setiap bit dalam bidang ini yang sesuai dengan nomor McNugget Chicken yang valid diatur ke 1; semua bit lainnya ditetapkan ke 0. (Ini menganggap 0 sebagai nomor Chicken McNugget yang valid, tetapi jika Anda tidak menyukainya, preferensi Anda adalah modifikasi satu-bit.)

Kami memulai dengan hanya memuat nilai ini ke dalam register. Ini adalah nilai 64-bit, yang sudah membutuhkan 8 byte untuk mengkodekan, ditambah kita membutuhkan awalan REX.W satu-byte, jadi kita benar-benar cukup boros dalam hal byte, tapi ini adalah inti dari solusi, jadi Saya kira itu sepadan.

Kami kemudian menggeser bidang ke kanan dengan nilai input. * Akhirnya, kami menutup semua kecuali bit urutan terendah, dan itu menjadi hasil Boolean kami.

Namun, karena Anda tidak dapat menggeser lebih dari jumlah bit sebenarnya dalam nilai, ini hanya berfungsi untuk input dari 0-63. Untuk mendukung nilai input yang lebih tinggi, kami menyisipkan tes di bagian atas fungsi yang bercabang ke bagian bawah nilai input adalah> = 64. Satu-satunya hal yang menarik tentang ini adalah kami memuat ulang konstanta bit-field diRAX , dan kemudian bercabang ke instruksi yang menutupi bit orde terendah, sehingga memastikan bahwa kami selalu mengembalikan 1.

Cobalah online!
(Fungsi C panggilan ada dijelaskan dengan atribut yang menyebabkan GCC menyebutnya dengan menggunakan konvensi panggilan Microsoft yang menggunakan kode perakitan saya. Jika TIO telah menyediakan MSVC, ini tidak akan diperlukan.)

__
* Sebagai alternatif dari shift, kita bisa menggunakan BTinstruksi x86 , tapi itu 1 byte lebih lama untuk dikodekan, jadi tidak ada keuntungan. Kecuali kami dipaksa untuk menggunakan konvensi panggilan yang berbeda yang tidak dengan mudah menyampaikan nilai input dalam ECXregister. Ini akan menjadi masalah karena SHR mengharuskan operand sumbernya CLuntuk perhitungan shift dinamis. Oleh karena itu, konvensi panggilan yang berbeda akan mengharuskan kami MOVmengedit nilai input dari register apa pun yang diteruskan ECX, yang akan memakan biaya 2 byte. The BTinstruksi dapat menggunakan setiap mendaftar sebagai operan sumber, dengan biaya hanya 1 byte. Jadi, dalam situasi itu, akan lebih baik.BTmenempatkan nilai bit yang sesuai ke dalam flag carry (CF), jadi Anda akan menggunakanSETCinstruksi untuk mendapatkan nilai itu dalam register integer seperti ALsehingga bisa dikembalikan ke pemanggil.


Implementasi alternatif, 23 byte

Berikut ini adalah implementasi alternatif yang menggunakan operasi modulo dan multiplikasi untuk menentukan apakah nilai input adalah nomor McNugget Ayam.

Ia menggunakan konvensi pemanggilan Sistem V AMD64 , yang meneruskan nilai input dalam EDIregister. Hasilnya masih Boolean, kembali di EAX.

Namun, perlu diketahui bahwa tidak seperti kode di atas, ini adalah Boolean terbalik (untuk kenyamanan implementasi). Ini mengembalikan falsejika nilai input adalah nomor McNugget Chicken, atau truejika nilai input bukan nomor McNugget Chicken.

                    ; 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

Apa yang jelek tentang ini adalah kebutuhan untuk secara eksplisit menangani nilai input> = 43 oleh cabang perbandingan-dan-di atas. Jelas ada cara lain untuk melakukan ini yang tidak memerlukan percabangan, seperti algoritma caird coinheringaahing , tetapi ini akan membutuhkan lebih banyak byte untuk dikodekan, jadi bukan solusi yang masuk akal. Saya pikir saya mungkin kehilangan beberapa trik bit-twiddling yang akan membuat ini bekerja lebih elegan dan lebih sedikit byte daripada solusi berbasis bitfield di atas (karena pengkodean bitfield itu sendiri membutuhkan begitu banyak byte), tetapi saya telah mempelajari ini untuk beberapa saat dan masih tidak bisa melihatnya.

Oh well, coba online saja!

Cody Grey
sumber
3

05AB1E, 17 16 byte

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

Cobalah online!

Penjelasan

  Ž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
putaran
sumber
1
Anda memiliki duplikat tautan TIO.
Perwujudan Ketidaktahuan
1
Jawaban bagus. Selamat datang di PPCG dan dunia 05AB1E. :) Satu hal yang perlu golf adalah dengan menggunakan string (ada buitins untuk string 1, 2, dan 3-char, menjadi ', dan masing-masing). Saya punya perasaan lebih bisa bermain golf, mungkin dengan menggunakan pendekatan yang berbeda, tetapi terlepas dari ini adalah jawaban pertama yang bagus. +1 dari saya.
Kevin Cruijssen
1
Memang benar. Ditemukan 12-byter dengan memanfaatkan builtin yang Åœ: … ÇIÅœåPOĀ. Ini pendekatan yang sama sekali berbeda, jadi jika Anda ingin saya mempostingnya sebagai jawaban terpisah dan bukan golf Anda, beri tahu saya. PS: Saya tidak 100% yakin apakah unsintables diizinkan dalam codepage 05AB1E . Mungkin harus dalam pengkodean yang berbeda dalam kasus itu, yang akan membuat beberapa karakter masing-masing dihitung sebagai 2 byte .. Dalam kasus itu ŽBo21вbisa menjadi alternatif untuk +1 byte.
Kevin Cruijssen
Seperti Kevin sebutkan, tak satu pun dari 3 byte dalam string Anda berada di halaman kode 05ab1e dan dengan demikian tidak dapat digunakan tanpa menghitung seluruh program dalam utf-8 yang akan membuatnya jauh lebih lama. Namun Anda dapat menggunakan ŽGç₂вbukannya string sambil secara bersamaan menyimpan byte dalam proses.
Emigna
Kevin, lakukanlah. Akan menyenangkan melihat pendekatan yang berbeda. Emigna, terima kasih atas saran Anda, saya akan melakukan perubahan
rev
2

JavaScript (ES6), 69 64 byte

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

Output falseuntuk nomor Chicken McNugget, truejika tidak.

Darrylyeo
sumber
Saya ingin setidaknya tautan "coba saja" ..
racer290
@ racer290 Ditambahkan.
darrylyeo
n=>~'ABCDEFHIKLNOQRTWXZ]`cfl'.search(String.fromCharCode(n+65))untuk 63 byte
Oki
2

Java, 21 57 24 byte

Cobalah online!

Golf:

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

Tidak Terkumpul:

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);
  }
}

sumber
Hasilnya salah untuk 26 = 20 + 6.
Leaky Nun
@LeakyNun Algoritma terlalu naif. Saya harus menggunakan paket B yang menambahkan beberapa byte, tetapi tampaknya menghasilkan hasil yang benar sepanjang waktu sekarang. Saya seharusnya sudah mengulangi semua nilai untuk memulai dengan bukannya mengandalkan kasus uji dalam pertanyaan.
35 byte
Leaky Nun
1
24 byte (lihat di atas)
Leaky Nun
1
@ LeakyNun terima kasih! Saya masih harus banyak belajar tentang golf.
1

Python 2 , 51 byte

-1 byte terima kasih kepada @LeakyNun

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

Cobalah online! Footer mencetak semua nomor bukan McNugget

ovs
sumber
n%3hanya bisa 0 atau 1 atau 2, jadi n%3==2sama dengan n%3>1.
Leaky Nun
1

Pyth , 15 byte

fg.{CM"     "{T./

Cobalah online!

String berisi karakter yang sesuai dengan codepoint 6, 9, dan 20.

notjagan
sumber
1

Haskell, 64 56 byte

Saya tidak melakukan sedikit pun tipu daya, tetapi melihat jawaban lain mungkin sebenarnya lebih pendek untuk mengimpor Bitsmodul dan menggunakan metode itu. Pendekatan ini memeriksa jauh lebih langsung.

f x=(\l->elem x[i*6+j*9+k*20|i<-l,j<-l,k<-l,x/=0])[0..x]
qfwfq
sumber
1
Jumlah byte 66tidak 64. Tetapi Anda dapat menyimpan banyak tanda kurung dan x/=0menjaga untuk menyimpan beberapa byte, lihat di sini .
ბიმო
1

Javascript, 92 78 72 byte

* Disimpan 14 byte berkat @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])

Menggunakan fakta bahwa "Semua bilangan bulat adalah angka McNugget kecuali 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23, 23, 25, 25, 28, 31, 34 , 37, dan 43. " dari komentar @ LeakyNun

SuperStormer
sumber
menggunakan array sederhana akan menghemat byte untuk .plit ...
Jonas Wilms
@Jonas array adalah 108 byte, string yang
terpecah
um jsbin.com/bucihuqefi/edit?console -11 byte ...
Jonas Wilms
1

Tambahkan ++ , 35 byte

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

Cobalah online!

Lihatlah ma, tidak ada loop sementara. Atau string. Atau daftar. Atau benar-benar apa pun yang membantu menghemat byte. Tetapi terutama karena Add ++ tidak tahu apa itu.

3 bulan kemudian, saya menyadari bahwa ini tidak valid, dan memperbaikinya. Entah bagaimana, itu golf dengan 13 byte. Ini adalah fungsi yang mengambil satu argumen dan menguji apakah argumen itu adalah nomor Chicken McNugget atau tidak.

Bagaimana itu bekerja

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]
caird coinheringaahing
sumber
1

Excel, 87 byte

=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)

Atau, 92 byte:

=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
sumber
1

PHP, 69 +1 byte

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

keluar dengan 1untuk Nomor McNugget Ayam, selain itu 0.

Jalankan sebagai pipa dengan -natau coba online .

Titus
sumber
0

Python 2 , 61 byte

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

Cobalah online!

Chas Brown
sumber
Atau Anda bisa menggunakan codepoint dan dekompresi dengan chr.
Leaky Nun
0

Mathematica, 59 byte

!Select[IntegerPartitions@#,{6,9,20}~SubsetQ~#&]=={}&&#!=0&
J42161217
sumber
0

Javascript 37 byte

Mengambil bilangan bulat positif ndan keluaran trueuntuk nomor McNugget Ayam dan falseuntuk yang lain.

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

Penjelasan

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
    )
)

Rekursi pada fungsi ini sangat kejam, dan untuk setiap yang cukup besar n, Anda akan melampaui batas tumpukan panggilan. Berikut adalah versi yang menghindari batas-batas tersebut dengan memeriksa apakah nlebih besar dari nomor McNugget non-Ayam terbesar (43 byte [poin bonus karena menjadi nomor McNugget non-Ayam terbesar?]):

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

sangat penting
sumber
0

JavaScript ES5, 46 byte

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

Jawaban boolean eksplisit, 50 byte:

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

Canggung, tapi itu menyelesaikan pekerjaan. Pengembalian falseatau 0untuk setiap nilai yang bukan 0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23, 25, 28, 31, 34 , 37, atau 43, dantrue , -1, atau 1untuk segala sesuatu yang lain.

Solusi eksplisit kembali trueatau falsehanya.

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
sumber
0

Clojure 33 byte

Upaya cepat ok: #(-> %(rem 20)(rem 9)(rem 6)(= 0))

MONODA43
sumber
0

Pari / GP , 48 byte

0palsu. segala sesuatu yang lain adalah benar.

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

Cobalah online!

alephalpha
sumber
Komentar yang tidak relevan: apa masalah dengan jawaban Anda ini? # ~ SetPrecision ~ 1 &?
J42161217
@ Jenny_mathy Gagal dalam 0.25ujian.
alephalpha