เบอร์ไก่ McNugget


29

ลักษณะ

ตัวเลข Chicken McNugget เป็นตัวเลขที่สามารถแสดงผลรวมเป็น 6, 9 หรือ 20 - ขนาดเริ่มต้นของกล่องChicken McNuggets ที่มีชื่อเสียงที่จำหน่ายโดย McDonald's ในผลรวมนั้นตัวเลขอาจเกิดขึ้นมากกว่าหนึ่งครั้งดังนั้นจึง6 + 6 = 12เป็นตัวเลขเช่นกันและจำนวนจะต้อง "มี" อย่างน้อยหนึ่งขนาดที่กล่าวถึง หมายเลข Chicken McNugget แรกคือ:

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

ท้าทาย

งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ให้เลขจำนวนเต็มบวกกำหนดว่าหมายเลขนี้สามารถแสดงในลักษณะที่อธิบายได้หรือไม่ดังนั้นจึงเป็นหมายเลข Chicken McNugget จากนั้นควรให้ผลลัพธ์ที่เป็นจริงหรือเป็นเท็จตามการตัดสินใจ

กรณีทดสอบ

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

นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะและช่องโหว่มาตรฐานใช้!


15
ควรสังเกตว่า "จำนวนเต็มทั้งหมดเป็นหมายเลข McNugget ยกเว้น 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23, 25, 28, 31, 34, 37 และ 43 " ( mathworld )
Nun

1
ทีนี้ลองมาเป็นความท้าทายในการบีบอัด แต่ขอบคุณสำหรับโน้ต
racer290

3
ทุกคนมีลิงค์ OEIS สำหรับสิ่งนี้ ???
CraigR8806

2
คุณมีอะไรกับชุดนักเก็ต 4 ชิ้น mcdonalds.com/us/en-us/product/chicken-mcnuggets-4-piece.html
Dan Neely

คำตอบ:


37

Python ขนาด 27 ไบต์

lambda n:0x82492cb6dbf>>n&1

ลองออนไลน์!


11
รหัสขลังนี้คืออะไร o_O สิ่งนี้น่าทึ่ง
HyperNeutrino

คุณสามารถลบ~เพราะคุณสามารถสลับเอาท์พุท
Leun Nun

1
นอกจากนี้ยัง8953174650303มีความยาวเท่ากันด้วย0x82492cb6dbf(แม้ว่าจะอ่านน้อยกว่า )
Leun Nun

2
@HyperNeutrino จำนวนเวทย์มนตร์มีเพียงบิตที่ตั้งไว้ซึ่งสอดคล้องกับตัวเลขที่ไม่ใช่ตัวเลขChicken McNugget ดูการแทนค่าไบนารี่ของมันและมันจะชัดเจนกว่ามาก
David Z

1
ความอับอายที่คุณไม่สามารถใช้ความคิดเดียวกันนี้กับฐาน 64
Jacob Garby

29

Python 3 , 24 ไบต์

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

ลองออนไลน์!

คำอธิบาย

ด้วยตัวเอง6และ9อย่างเดียวเราสามารถทำให้จำนวนเต็มทั้งหมดหารด้วย3ค่าที่มากกว่า3ตามที่ระบุไว้การแสดงความคิดเห็น OVS ของความท้าทาย สันนิษฐานว่าสามารถสร้าง0ได้ 0,6,9,12,15,...โดยสรุปหนึ่งที่สามารถทำให้

ด้วยตัวอย่างหนึ่งของ 2020,26,29,32,35,...หนึ่งสามารถ:

ด้วยสองอินสแตนซ์ของ 2040,46,49,52,55,...หนึ่งสามารถ:

สามกรณีไม่จำเป็นสำหรับ 3 x 20 = 10 x 6สามกรณีจะไม่จำเป็นสำหรับ


โปรดสังเกตว่ากรณีที่ไม่20จำเป็นต้องมีก็สามารถหารด้วย 3; กรณีที่20จำเป็นต้องออกจากส่วนที่เหลือของ2 ; กรณีที่สองเป็นสิ่งจำเป็นใบที่เหลือของ201

จำนวนที่จำเป็นสามารถจึงจะคำนวณโดย20 (-n)%3จากนั้นเราn-(((-n)%3)*20)จะลบจำนวนที่20ต้องการจากจำนวน จากนั้นเราจะตรวจสอบว่าหมายเลขนี้ไม่เป็นลบ 3แต่ไม่ได้เป็น



@ Mr.Xcoder อัพเดทแล้ว
Leun Nun

f=lambda n:n%3<1<n-2or n>20and f(n-20)มันทำงานอย่างไร
Zacharý

@ Zacharýขอบคุณอัปเดตแล้ว
Leun Nun

1
คุณสามารถลบf=ตอนนี้ได้เนื่องจากมันไม่เรียกซ้ำ
notjagan

8

Python 2 , 28 ไบต์

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

ลองออนไลน์!


ใช้การทดลองและข้อผิดพลาดบางอย่างและการแมปส่วนแรกกับช่วงฉันมีความคิดคร่าว ๆ ของวิธีการทำงาน อย่างไรก็ตามฉันต้องการทราบว่าคุณคิดวิธีนี้ได้อย่างไร
Leun Nun

@LeakyNun ขำ ๆ ฉันคิดว่านี่เป็นวิธีที่เป็นธรรมชาติและคุณเป็นคนฉลาด :) ผมตั้งข้อสังเกตค่าเป็นไปได้ของจากรายการยกเว้นของคุณ(n%3,n/20) {(2, 0), (1, 0), (1, 1)}ใช้แทนให้ความไม่เท่าเทียมกัน-n%3 n/20>=(-n)%3จากนั้นฉันเล่นสักครู่เพื่อย้อนกลับ{3,23,43}ซึ่งเป็น 3 mod 20 โดยไม่มีผลกระทบต่อ 63,83, ... ฉันพบว่าการเปลี่ยนจุดสิ้นสุดความไม่เท่าเทียมกันสำหรับการทำงานเหล่านี้ดีที่สุด
xnor

ดีวิธีของฉันจริงๆเกี่ยวข้องกับการแก้ปัญหาที่เกิดขึ้นในขณะที่วิธีการของคุณจะเล่นซอกับค่าในรายการยกเว้นดังนั้นฉันจะบอกว่าวิธีการของฉันคือเป็นธรรมชาติมากขึ้น :)
รั่วนูน

7

เยลลี่ 11 ไบต์

ṗ3’æ.“©µÞ‘ċ

ลองออนไลน์!

มันทำงานอย่างไร

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

4
Chicken McNuggets ™และ Jelly! mmmm !!!
CJ Dennis

@CDDennis ที่จริงแล้วมันคือ Chicken McNuggets ©และ Jelly
caird coinheringaahing

@cairdcoinheringaahing จริงๆแล้วมันคือ Chicken McNuggets®และ Jelly
Dan

5

Haskell , 36 ไบต์

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

ลองออนไลน์!

คำอธิบาย

วิธีนี้เป็นวิธีที่ตรงไปตรงมาที่สุดเท่าที่จะทำได้ บรรทัดแรกบอกว่าตัวเลขใด ๆ น้อยกว่า 1 มันเป็นจำนวน McNugget n==0ถ้า กล่าว0คือเป็นหมายเลข McNugget และไม่ใช่จำนวนลบทั้งหมด

บรรทัดที่สองประกาศว่าสำหรับหมายเลขอื่นทั้งหมดnคือหมายเลข McNugget หากลบด้วยขนาด Nugget ใด ๆ จะเป็นหมายเลข McNugget

นี่เป็นการค้นหาแบบเรียกซ้ำที่เรียบง่าย



3

เยลลี่ 11 ไบต์

_20$%3$¿o>3

ลองออนไลน์!

พอร์ตของคำตอบ Python ของฉันแต่แก้ไขเล็กน้อย: ลบ20จนกระทั่งหารด้วยจาก3นั้นตรวจสอบว่าเป็นของ0,6,9,...โดยการจับคู่0กับอินพุต (โดยใช้or ) แล้วตรวจสอบว่ามันมีค่ามากกว่า3หรือไม่

เพียงสามตัวเลขที่ผลิต0เมื่อเสร็จขั้นตอนแรกคือ0, 20หรือกับคนแรกที่ถูกออกจากโดเมนและเป็นมากขึ้นส่วนที่เหลือกว่า403


ฉันไม่เข้าใจวิธีป้อนข้อมูล ..
racer290

@ อาร์กิวเมนต์ racer290 บรรทัดคำสั่ง
Erik the Outgolfer



3

Mathematica ขนาด 20 ไบต์

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

ฟังก์ชั่นไม่ระบุชื่อ ใช้ตัวเลขเป็นอินพุตและส่งคืนTrueหรือFalseเป็นเอาต์พุต ลอจิกคัดลอกมาจากคำตอบของ Leaky NunโดยมีการละเมิดInequalityเพิ่มเติม


3

x86-64 รหัสเครื่อง, 22 ไบต์

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

ไบต์ข้างต้นกำหนดฟังก์ชั่นในรหัสเครื่อง 64 บิต x86 ที่กำหนดว่าค่าอินพุตเป็นหมายเลข Chicken McNugget หรือไม่ พารามิเตอร์จำนวนเต็มบวกเดียวจะถูกส่งผ่านในการECXลงทะเบียนตามการเรียกใช้Microsoft 64 บิตที่ใช้บน Windows ผลลัพธ์คือค่าบูลีนที่ส่งคืนในEAXรีจิสเตอร์

คำย่อของชุดประกอบ Ungolfed:

; 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

เห็นได้ชัดว่าสิ่งนี้เล่นกันอย่างหนักในโซลูชันของAnders Kaseorg ใน Pythonซึ่งมีพื้นฐานมาจากบิตฟิลด์ซึ่งแสดงถึงค่าที่เป็นตัวเลข Chicken McNugget โดยเฉพาะแต่ละบิตในฟิลด์นี้ที่สอดคล้องกับหมายเลข Chicken McNugget ที่ถูกต้องถูกตั้งค่าเป็น 1 บิตอื่น ๆ ทั้งหมดถูกตั้งค่าเป็น 0 (ซึ่งถือว่า 0 เป็นหมายเลข Chicken McNugget ที่ถูกต้อง แต่ถ้าคุณไม่ชอบสิ่งนั้นการตั้งค่าของคุณจะเป็นการแก้ไขแบบบิตเดียว)

เราเริ่มต้นโดยเพียงแค่โหลดค่านี้ในการลงทะเบียน มันเป็นค่า 64- บิตซึ่งใช้เวลา 8 ไบต์ในการเข้ารหัสและเราจำเป็นต้องใช้คำนำหน้า REX หนึ่งไบต์ดังนั้นเราจึงใช้เวลาค่อนข้างน้อยในแง่ของไบต์ แต่นี่คือหัวใจของการแก้ปัญหาดังนั้น ฉันคิดว่ามันคุ้มค่า

จากนั้นเราเลื่อนฟิลด์ไปทางขวาด้วยค่าอินพุต * * * *สุดท้ายเราปิดบังทั้งหมดยกเว้นบิตลำดับต่ำสุดและนั่นกลายเป็นผลบูลีนของเรา

อย่างไรก็ตามเนื่องจากคุณไม่สามารถเลื่อนได้มากกว่าจำนวนบิตในค่านี้จะใช้งานได้กับอินพุตตั้งแต่ 0-63 เท่านั้น เพื่อรองรับค่าอินพุตที่สูงขึ้นเราใส่การทดสอบที่ด้านบนของฟังก์ชั่นที่สาขาไปยังด้านล่างของค่าอินพุตคือ> = 64 สิ่งเดียวที่น่าสนใจเกี่ยวกับเรื่องนี้คือเราโหลดค่าคงที่บิตฟิลด์ล่วงหน้าRAXแล้วสาขา ลงไปที่คำสั่งที่ปิดบังบิตลำดับต่ำสุดดังนั้นจึงมั่นใจได้ว่าเราจะส่งคืน 1 เสมอ

ลองออนไลน์!
(การเรียกฟังก์ชัน C นั้นมีหมายเหตุประกอบกับแอตทริบิวต์ที่ทำให้ GCC เรียกใช้โดยใช้หลักการเรียก Microsoft ที่รหัสแอสเซมบลีของฉันใช้ถ้า TIO ให้ MSVC สิ่งนี้ไม่จำเป็น)

__
* เป็นอีกทางเลือกหนึ่งในการเปลี่ยนเราสามารถใช้BTคำสั่งx86 ได้แต่นั่นยาว 1 ไบต์ในการเข้ารหัสดังนั้นจึงไม่มีข้อได้เปรียบ นอกจากว่าเราถูกบังคับให้ใช้แบบแผนการโทรที่แตกต่างกันซึ่งไม่ผ่านค่าอินพุตในการECXลงทะเบียน นี่จะเป็นปัญหาเนื่องจากSHR ต้องการให้ตัวถูกดำเนินการต้นทางของมันCLสำหรับการนับกะแบบไดนามิก ดังนั้นแบบแผนการโทรที่แตกต่างกันนั้นต้องการให้เราMOVแก้ไขค่าอินพุตจากสิ่งที่รีจิสเตอร์มันถูกส่งไปยังECXซึ่งจะทำให้เรามีค่า 2 ไบต์ BTการเรียนการสอนสามารถใช้ใด ๆ ที่ลงทะเบียนเป็นผู้ถูกดำเนินการแหล่งที่มาที่ค่าใช้จ่ายเพียง 1 ไบต์ ดังนั้นในสถานการณ์นั้นมันจะดีกว่าBTทำให้ค่าของบิตที่สอดคล้องกันเข้าไปธงพก (CF) ดังนั้นคุณจะใช้SETCคำสั่งเพื่อรับค่านั้นในรีจิสเตอร์จำนวนเต็มเช่นALนั้นมันจะถูกส่งกลับไปยังผู้เรียก


การติดตั้งทางเลือก 23 ไบต์

นี่คือการดำเนินการทางเลือกที่ใช้โมดูโลและการดำเนินการคูณเพื่อตรวจสอบว่าค่าอินพุตเป็นหมายเลข Chicken McNugget

มันใช้หลักการเรียกประชุม System V AMD64ซึ่งส่งผ่านค่าอินพุตในEDIรีจิสเตอร์ EAXผลที่ได้ก็ยังคงเป็นแบบบูลกลับมาใน

อย่างไรก็ตามโปรดทราบว่าสิ่งนี้ต่างจากรหัสด้านบนนี่คือบูลีนผกผัน (เพื่อความสะดวกในการติดตั้ง) มันจะส่งคืนfalseถ้าค่าอินพุตเป็นหมายเลข Chicken McNugget หรือtrueถ้าค่าอินพุตไม่ใช่หมายเลข 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

สิ่งที่น่าเกลียดเกี่ยวกับเรื่องนี้คือต้องจัดการค่าอินพุต> = 43 โดยเปรียบเทียบและสาขาที่ด้านบน เห็นได้ชัดว่ามีวิธีการอื่นในการทำเช่นนี้ซึ่งไม่ต้องการการแยกย่อยเช่นอัลกอริทึมของ caird coinheringaahingแต่การเข้ารหัสนี้ต้องใช้จำนวนไบต์ที่มากขึ้นดังนั้นจึงไม่ใช่ทางออกที่สมเหตุสมผล ฉันคิดว่าฉันอาจพลาดเคล็ดลับที่ทำให้การทำงานนี้ออกมาสวยงามและมีจำนวนไบต์น้อยกว่าโซลูชันที่ใช้บิตฟิลด์ข้างต้น (เนื่องจากการเข้ารหัสบิตฟิลด์เองนั้นใช้ไบต์จำนวนมาก) แต่ฉันได้ศึกษาเรื่องนี้ ครู่หนึ่งและยังไม่เห็น

ลองดูออนไลน์กันดีกว่า!


3

05AB1E, 17 16 ไบต์

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

ลองออนไลน์!

คำอธิบาย

  Ž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

1
คุณมีลิงค์ของ TIO ซ้ำ
ศูนย์รวมแห่งความไม่รู้

1
คำตอบที่ดี ยินดีต้อนรับสู่ PPCG และโลกแห่ง 05AB1E :) สิ่งหนึ่งที่กอล์ฟคือการใช้สตริง (มี buitins สำหรับ 1, 2 และสาย 3 ถ่านเป็น', และตามลำดับ) ฉันมีความรู้สึกมากกว่าที่จะเล่นกอล์ฟบางทีอาจใช้วิธีการอื่น แต่ไม่ว่านี่จะเป็นคำตอบแรกที่ดี +1 จากฉัน
Kevin Cruijssen

1
ถูกต้องแน่นอน พบ 12 byter โดยใช้ builtin :Åœ … ÇIÅœåPOĀมันเป็นวิธีการที่แตกต่างอย่างสิ้นเชิงดังนั้นหากคุณต้องการให้ฉันโพสต์เป็นคำตอบที่แยกจากกันแทนที่จะเป็นกอล์ฟของคุณโปรดแจ้งให้เราทราบ PS: ผมไม่แน่ใจ 100% ถ้า unprintables ได้รับอนุญาตในเพจรหัส 05AB1E มันอาจจะต้องมีการเข้ารหัสที่แตกต่างกันในกรณีนั้นซึ่งจะทำให้ตัวละครบางตัวนับเป็น 2 ไบต์แต่ละตัวแทนในกรณีนี้ŽBo21вอาจเป็นทางเลือกสำหรับ +1 ไบต์
Kevin Cruijssen

Like Kevin mentions, neither of the 3 bytes in your string are in the 05ab1e code page and thus can't be used without counting the whole program in utf-8 which would make it a lot longer. You can however use ŽGç₂в instead of the string while simultaneously saving a byte in the process.
Emigna

Kevin, go for it. It'd be nice to see different approaches. Emigna, thanks for you suggestion, I will make the change
rev

2

JavaScript (ES6), 69 64 bytes

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

Outputs false for Chicken McNugget numbers, true otherwise.


I'd like at least a "try it" link..
racer290

@racer290 Added.
darrylyeo

n=>~'ABCDEFHIKLNOQRTWXZ]`cfl'.search(String.fromCharCode(n+65)) for 63 bytes
Oki

2

Java, 21 57 24 bytes

Try it online!

Golfed:

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

Ungolfed:

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

Result is wrong for 26 = 20 + 6.
Leaky Nun

@LeakyNun Algorithm was too naive. I had to go with plan B which added some bytes, but appears to produce correct results all of the time now. I should have iterated all of the values to begin with instead of relying on the test cases in the question.


1
24 bytes (see above)
Leaky Nun

1
@LeakyNun thanks! I still have a lot to learn about golfing.



1

Haskell, 64 56 bytes

I didn't do any bit trickery, but looking at the other answers it might actually be shorter to import the Bits module and use those methods. This approach checks much more directly.

f x=(\l->elem x[i*6+j*9+k*20|i<-l,j<-l,k<-l,x/=0])[0..x]

1
The byte count is 66 not 64. But you you can save a lot of parenthesis and put an x/=0 guard to save some bytes, see here.
ბიმო

1

Javascript, 92 78 72 bytes

*saved 14 bytes thanks to @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])

Uses the fact that "All integers are McNugget numbers except 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23, 25, 28, 31, 34, 37, and 43." from @LeakyNun's comment


using a simple array would save the bytes for .split ...
Jonas Wilms

@Jonas array is 108 bytes, splitted string is 73 bytes
SuperStormer




1

Add++, 35 bytes

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

Try it online!

Look ma, no while loops. Or strings. Or lists. Or really anything that helps save bytes. But mainly because Add++ doesn't know what any of those are.

3 months later, I realised that this was invalid, and fixed it. Somehow, that golfed it by 13 bytes. This is a function that takes one argument and tests whether that argument is a Chicken McNugget number or not.

How it works

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]

1

Excel, 87 bytes

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

Alternatively, 92 bytes:

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




0

Javascript 37 bytes

Takes a positive integer n and outputs true for Chicken McNugget numbers and false for others.

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

Explanation

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

The recursion on this function is heinous, and for any sufficiently large n, you will exceed call stack limits. Here's a version that avoids those limits by checking if n is larger than the largest non-Chicken McNugget number (43 bytes [bonus points for being the largest non-Chicken McNugget number?]):

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


0

JavaScript ES5, 46 bytes

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

Explicit boolean answer, 50 bytes:

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

Clumsy, but it gets the job done. Returns false or 0 for every value that isn't 0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23, 25, 28, 31, 34, 37, or 43, and true, -1, or 1 for everything else.

Explicit solution returns true or false only.

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.