ฉันจะได้รับแซนด์วิชเมื่อไหร่


37

ป้อนคำอธิบายรูปภาพที่นี่

รับหนึ่งในอินพุตต่อไปนี้:

ไก่หัวหอมหวานเทอริยากิ
ไก่อบเตาอบ
อกไก่งวง
BMT อิตาลี
ทูน่า
แฮมฟอเรสต์
ลูกชิ้น Marinara
ส่งออกตัวเลขตั้งแต่ 1-7 (หรือ 0-6) แทนวันในสัปดาห์ที่คุณได้รับดีลนั้นเริ่มต้นจากวันจันทร์เป็นจำนวนต่ำสุด อินพุตอาจเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ทั้งหมดหากต้องการ (เช่น "italian bmt") ไม่อนุญาตให้ใช้อินเทอร์เน็ต


8
ไม่เห็นความซับซ้อนของ Kolmogorov นี้จริง ๆ ข้อความคือตัวเลขอินพุท ... เป็นเอาท์พุท
geokavel

5
อาทิตย์ยังบอกว่า "ลูกชิ้น Marinara" หรือ "ลูกชิ้น Marina Marina" ยัง?
Erik the Outgolfer

17
ฉันค่อนข้างแน่ใจว่ามันควรจะเป็นMarinaraแต่kemingในภาพนั้นช่างน่ากลัว ...
มนุษย์

6
หากเป็นประโยชน์กับทุกคน: จำนวนของaบวกกับจำนวนของeในแต่ละอินพุตคือ [5,4,3,2,1,3,6] ตามลำดับ
geokavel

คำตอบ:


85

Python 2 , 38 30 28 ไบต์

lambda S:`6793**164`[len(S)]

ลองออนไลน์!

น่าเสียดายที่ยังมีอีกหนึ่งไบต์ที่ยาวกว่าคำตอบที่ดีที่สุดของ Python 2 แม้ว่าจะไม่ได้ใช้enklact-approach

ตอนนี้หนึ่งไบต์สั้นกว่าฉันตอบทุกๆ ชั่วโมง

มันทำงานยังไง?

หลังจากแรงเดรัจฉานฉันพบนิพจน์ที่ส่งผลให้ตัวเลขมีเพียงตัวเลขที่ถูกต้อง
ฉันสังเกตเห็นว่าการดูเพียงหนึ่งหลักที่เฉพาะเจาะจงของความยาวของสตริงที่กำหนดต้องมี 3 ไบต์ ( %10) ดังนั้นฉันจึงเขียนโปรแกรม Python อื่น ( ลิงค์ Pastebin ) เพื่อค้นหาตัวเลขที่จับคู่ความยาวของสตริงอินพุตเข้ากับวันของสัปดาห์

เลขอาถรรพ์นี้: 6793**164 = 28714733692312345620167113260575862840674216760386883406587492336415023761043044176257567032312859371641211117824224067391750766520256112063756278010050204239810862527958109285342869876264808102743173594017101607983288521836082497514383184553444755034407847810524083812459571382103831904835921560285915349760536969265992879312869538914200854305957428078269094250817029486005437991820466986793657301214564264748923199288698278615871481529585816783654841131577178922192383679718074693535597651237893794976519274268917335387876260270630339777501802739852278932279775510324916969726203688466311848240746465178859847331248655567344801(ตัวเลขที่มีทศนิยม 629 หลักที่น่าประทับใจ)

และอย่างที่คุณเห็นหมายเลขนี้ให้การจับคู่ที่จำเป็นจาก [28, 20, 13, 11, 4, 16, 17] ถึง [0, 1, 2, 3, 4, 5, 6] (สตริง Python คือ 0- จัดทำดัชนี):

2871 4 733692 3 1 2 34 5 6 20 1 6711326 0 5758628406742167603868834... [4]^ [11]^ [13]^ [16]^ ^[17] ^[20] ^[28]

โปรแกรมของฉันยังพบการแสดงออกอื่น ๆ ที่ให้ผลผลิตตัวเลขที่มีคุณสมบัติที่จำเป็นแม้ว่าพวกเขาจะใช้เวลามากกว่าที่จะเป็นตัวแทนไบต์ (29 แทน 28): 19439**540, 34052**726, 39311**604, 44873**182, และ67930**164 78579**469(สิ่งเหล่านี้คือนิพจน์ทั้งหมดที่พบโดยโปรแกรมที่เชื่อมโยงการดำเนินการใช้เวลาหลายชั่วโมง)

ฟังก์ชันทางเลือกที่ต้องการ 28 ไบต์: lambda S:`7954<<850`[len(S)]
ฟังก์ชันทางเลือกที่ต้องใช้ 29 ไบต์: lambda S:`9699<<2291`[len(S)]
ฟังก์ชันทางเลือกที่ต้องใช้ 30 ไบต์: lambda S:`853<<4390`[len(S)+9]
ฟังก์ชันทางเลือกที่ต้องใช้ 31 ไบต์:lambda S:`1052<<3330`[len(S)+8]

มันทำงานยังไง? ฉันจะสร้างหมายเลขนั้นได้อย่างไร (30 ไบต์ตอบ)

คำตอบที่ 30 lambda S:`3879**41`[len(S)%10]ไบต์เป็น

มองไปที่ความยาวสายป้อนที่ผมสังเกตเห็นว่าทุกตัวเลขสุดท้ายในฐานสิบแตกต่างกันส่งผลให้ในรายการ[28, 20, 13, 11, 4, 16, 17] ดังนั้นผมจึงต้องการเพียงการทำแผนที่จากรายการที่ไปยังรายการของทั้งเจ็ดวันของสัปดาห์ที่ [8, 0, 3, 1, 4, 6, 7][0, 1, 2, 3, 4, 5, 6]

วิธีแรกของฉันใช้สตริงเพื่อทำการแมปlambda S:"13*24*560"[len(S)%10]แม้ว่าสตริงนั้นต้องใช้สิบเอ็ดไบต์ ( "13*24*560")
ดังนั้นฉันจึงเขียนโปรแกรม Python ( ลิงก์ Pastebin ) เพื่อทดสอบนิพจน์ทางคณิตศาสตร์ซึ่งส่งผลให้จำนวนเต็มกับตัวเลขที่ตรงกันโดยหวังว่าจะได้โปรแกรมเพิ่มเติม สิ่งที่ฉันเกิดขึ้นในตอนนี้คือ`3879**41`(เพียงสิบไบต์เท่านั้นที่โปรแกรมของฉันค้นหาได้เท่านั้น)

แน่นอนว่ามีการแสดงออกที่เป็นไปได้มากมายที่คุณสามารถลองได้ ฉันเพิ่งโชคดีที่มีหนึ่งในรูปแบบที่a**bมีผลเล็ก ๆ ที่เหมาะสมกับความต้องการของฉัน

สำหรับทุกคนที่อยากรู้อยากเห็น3879**41 = 1372495608710279938309112732193682350992788476725725221643007306215781514348937145528919415861895033279220952836384201346579163035594383625990271079 = 1.372... * 10**147.

อีกฟังก์ชั่นที่ถูกต้องฉันพบในขณะที่ค้นหานิพจน์ทางเลือกที่น่าเสียดายต้อง 32 ไบต์: lambda S:`7**416`[len(S)%10+290]


1
คุณสร้างหมายเลขนั้นได้อย่างไร : o
สิ้นเชิงมนุษย์

10
@icrieverytim กำลังดุร้าย
Jonathan Frech

-9114**28เป็นจำนวนเต็มขนาดเล็ก * ที่ใช้งานได้ (* ในแง่สมบูรณ์ไม่เพียงเพราะมันเป็นลบ - 111 หลักแทนที่จะเป็น 629) ไม่บันทึกเป็นไบต์
Jonathan Allan

4
ทุกครั้งที่ฉันตรวจสอบคำถาม PCG ใน HNQ และฉันมักจะผิดหวังที่พบว่าภาษากอล์ฟเป็นอันดับสามอันดับแรก วันนี้ฉันไม่ผิดหวัง ขอขอบคุณ!
Sidney

4
@icrieverytim ಠ_ಠเป็นเพียงตัวเลขเดียวกัน แต่ลดลงครึ่งหนึ่งด้วยค่า shift shift อีกหนึ่งಠ_ಠ: P
HyperNeutrino

49

Python 2 , 29 ไบต์

lambda s:'enklact'.find(s[3])

ลองออนไลน์!

คำอธิบาย

enklactค้นพบสตริงมายากลโดยค้นหาคอลัมน์แรกด้วยตัวอักษรที่ไม่ซ้ำกัน

คอลัมน์แรกไปSOTITBMซึ่งไม่มีประโยชน์เพราะมีคอลัมน์ที่ซ้ำกัน คนที่สองและสามก็ไม่ได้ผลเพราะพวกเขาwvutuleและeeranaaตามลำดับ อย่างไรก็ตามคอลัมน์ที่สี่ทำงานได้เหมือนมีตัวอักษรที่ไม่ซ้ำกันทั้งหมด

lambda s:'enklact'.find(s[3])

lambda s:                      # declare a function that takes a single paramater s
                  .find(    )  # find the index of the first instance of...
                        s[3]   # the fourth (0-indexing) character of s...
         'enklact'             # in the magic string

18

Pythonขนาด 26 ไบต์

lambda S:1923136>>len(S)&7

ลองออนไลน์!

ด้วยหนี้ขอบคุณ (สำหรับรหัสที่สองของฉันตรงลองกอล์ฟ) เพื่อตอบโจนาธาน Frech - ฉันไม่คิดว่าจะใช้ความยาวสายอักขระแทนตัวอักษรเด่น

รหัสนี้มาจากประสบการณ์ของฉันกับลำดับ De Bruijnและการเขียนโปรแกรมสำหรับหมากรุก

ในหมากรุกคุณมักจะทำงานกับจำนวนเต็ม 64- บิตจำนวนมากซึ่งแต่ละบิตระบุว่ามีอะไรจริงหรือเท็จเกี่ยวกับสี่เหลี่ยมที่สอดคล้องกันบนกระดานหมากรุกเช่น "มีชิ้นส่วนสีขาวที่นี่" หรือ "ตารางนี้มีเบี้ย"

ดังนั้นจึงเป็นประโยชน์ที่จะสามารถแปลง2**nเป็นnอย่างรวดเร็วและราคาถูกได้อย่างรวดเร็ว ใน C และ C ++ วิธีที่เร็วที่สุดในการทำเช่นนี้คือการคูณด้วยลำดับ 64- บิต De Bruijn - เทียบเท่ากับการเลื่อนทีละnบิต - จากนั้นเลื่อนไปทางขวา 58 (ใส่หกบิตแรกก่อน - ให้แน่ใจว่าคุณ กำลังใช้ int ที่ไม่ได้ลงชื่อหรือคุณจะได้ครึ่งเวลา 1 วินาที) และค้นหาหมายเลข 0..63 นี้ในตารางที่ให้ข้อมูลที่เกี่ยวข้องnซึ่งอยู่ในช่วงเดียวกัน แต่ไม่ค่อยเหมือนกัน

มันเกี่ยวข้องกัน อย่างไรก็ตามแทนที่จะเปลี่ยนจากเป็น2**nเป็นnเราต้องการเปลี่ยนจากnเป็นตัวเลข 3 บิตอื่น ๆ ดังนั้นเราจึงซ่อนตัวเลข 3 บิตของเราในจำนวนมายากล 31 บิต (การเปลี่ยน 28 บิตต้องใช้บิต 28-30 โดยมีหมายเลขเริ่มต้นที่ 0)

ฉันสร้างจำนวนที่ต้องการโดยเพียงแค่ดูว่าค่าใดที่ต้องลดลง (ลองทั้ง 0..6 และ 1..7 เป็นชุดเอาต์พุต) โชคดีที่ค่าที่ทับซ้อนกัน (14, 16 และ 17) เกิดขึ้นเมื่อทำงาน! และเนื่องจาก tri-bit แรกคือ000และถัดไปคือ001เราไม่ต้องการ 7 บิตซ้ายสุดทำให้มีจำนวนหลักน้อยกว่า -> ไบต์น้อยกว่า

จำนวนที่ต้องการคือ000xxxx001110101011xxxx100xxxxโดยที่ x สามารถเป็น 1 หรือ 0 และไม่มีผลต่อผลลัพธ์สำหรับหมวดย่อยเหล่านี้ - ฉันตั้งค่าเป็น 0 เพียงเพื่อย่อจำนวน แต่การเปลี่ยนแปลงใด ๆ ใน 8 xs สุดท้ายจะไม่ส่งผลกระทบ ความยาวของซอร์สโค้ด การตั้งค่า xs ทั้งหมดเป็น 0 และปล่อยให้เริ่มต้นให้ 1923,136 ในทศนิยม (หรือ 1D5840 ในฐานสิบหก แต่แล้วคุณต้องคำนำหน้า 0x - อัปยศ!) & 7 ที่ท้ายเพียงหน้ากาก 3 บิตสุดท้ายคุณยังสามารถ ใช้% 8 แต่คุณต้องใช้วงเล็บเนื่องจากกฎสำคัญของผู้ดำเนินการของงูใหญ่

tl; dr: 1923136 เข้ารหัสชุดค่าผสมสามบิตแต่ละชุดจาก 0 ถึง 6 ในตำแหน่งที่ถูกต้องที่ชื่อแซนวิชเหล่านี้เกิดขึ้นและจากนั้นก็เป็นเรื่องของการรับสามบิตสุดท้ายหลังจากการเปลี่ยนที่ถูกต้อง


ค่อนข้างคล้ายกับวิธีมาสก์ bit ของฉัน แต่ก็ดีกว่า
Bruno Costa

12

เยลลี่ 10 ไบต์

ธุรกิจ enklact นี้คืออะไร

⁽ṃXị“Ð$¥»i

ลิงก์ monadic ที่รับรายการอักขระและส่งคืนวันจันทร์ = 1 วันในสัปดาห์

ลองออนไลน์! หรือดูชุดทดสอบ

อย่างไร?

⁽ṃXị“Ð$¥»i - Link: list of characters, sandwichName  e.g. "Tuna"
⁽ṃX        - base 250 literal                             -7761
   ị       - index into sandwichName (1-indexed & modular) 'n'
    “Ð$¥»  - dictionary word                               "retinal"
         i - index of                                           5

คุณรู้จัก-7761/retinalคอมโบได้อย่างไร?
Emigna

3
เขียนลูปที่วิ่งผ่านการสร้าง "คำ" และดูว่ามีอยู่ในพจนานุกรมหรือไม่ "จอตา" เป็นคนเดียวระหว่าง -32249 และ 32250 (ช่วงของ⁽..)
Jonathan Allan

... ความผิดพลาดเล็กน้อย - ช่วงที่⁽..เป็นจริง [-31349,32250] - [- 99,999] (นอกจากนี้ยังมีตัวเลขหนึ่งที่อาจแสดงด้วยสามหรือน้อยกว่าไบต์เช่น7!!หรือȷ76)
Jonathan Allan

9

C (gcc) , 72 71 56 46 41 39 ไบต์

f(char*s){s=index(s="enklact",s[3])-s;}

ลองออนไลน์!


i;char x[]="enklact";i,x[]={101,110,107,108,97,99,116};จะสั้นกว่า
Jonathan Frech

กำลังจะโพสต์สิ่งนั้นถึง: char*x="enklact"สั้นกว่านี้: ลองออนไลน์!
scottinet

i=0นอกจากนี้คุณยังสามารถลบ
Jonathan Frech

เวอร์ชันที่สั้นลงโดยใช้index: ลองออนไลน์!
scottinet

@scottinet ดี! ฉันไม่เคยใช้ดัชนี () มาก่อน ขอบคุณ
cleblanc

7

MATL , 16 15 ไบต์

O5OHlO7KI6vjYm)

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

O5OHlO7KI6 % Push numbers 0, 5, 0, 2, 1, 0, 7, 4, 3, 6
v          % Concatenate all numbers into a column vector
j          % Push input as a string
Ym         % Mean (of ASCII codes)
)          % Index into the column vector (modular, 1-based, with implicit rounding)
           % Implicit display


5

ฉันคิดว่าฉันจะโพสต์ทางเลือกอื่นสองสามรายการ

Javascript ขนาด 38 ไบต์

a=s=>(271474896&7<<s.Length)>>s.Length

คำอธิบาย: หินรูปแบบบิต?

Javascript 27 ไบต์

s=>"240350671"[s.length%10]

ทางเลือกที่สองคือ 29 ไบต์ที่ถูกลืมไปนานa=
Bruno Costa

ทำไมต้องใช้ชิ้นa=ส่วน ดูคำตอบปุย
geokavel

1
@BrunoCosta ในเว็บไซต์นี้เราไม่ต้องการให้คุณตั้งชื่อฟังก์ชั่นของคุณ a=คนที่ไม่ประสงค์ออกนามทำงานเพื่อให้คุณไม่จำเป็นต้อง
Rɪᴋᴇʀ

1
@BrunoCosta มันเจ๋งจริง ๆ มันขึ้นอยู่กับคุณแล้ว คุณยังไม่สามารถนับจำนวนส่วนหัวนั้นได้และรวมไว้ในตัวอย่างเพื่อความสะดวกในการทดสอบ
Rɪᴋᴇʀ

1
@MichaelBoger Unfofrtantly ฉันไม่คิดว่าจะเป็นไปได้เพราะจำนวนรหัสขั้นต่ำในการทำงานนั้นฉันเชื่อว่ามันเป็นไปตามแนวของa=s=>{b=s.Length;return(271474896&7<<b)>>b}
Bruno Costa

4

เยลลี่ 11 ไบต์

4ị“-ƭɼoṚ0»i

ลองออนไลน์!

คำอธิบาย:

4ị“-ƭɼoṚ0»i
4ị          4th element of z
  “-ƭɼoṚ0»i First index in "enklactate"

2
@ Mr.Xcoder เว้นแต่ว่าฉันจะใช้enklactateแทนenklactสตริงของฉันซึ่งในกรณีนี้มันจะลดลงเหลือ 11)
Erik the Outgolfer

5
โอ้เพราะเหลวไหลทำไมenklactateในพจนานุกรมของ Jelly?
มนุษย์

3
@icrieverytim มันไม่ได้enkเป็นสตริงและlactateเป็นคำ แก้ไข: เพิ่งยืนยันenklactateไม่ได้อยู่ในพจนานุกรม
Erik the Outgolfer

1
@icrieverytim ฉันคิดว่ามันเป็นเพียงแค่การให้น้ำนม
Mr. Xcoder

2
อืมมมฉันต้องการค้นหาวิธีจำลองพจนานุกรมของ Jelly ... บางทีในครั้งต่อไป : P
สิ้นเชิงมนุษย์

3

Japt , 12 ไบต์

0-indexed รับอินพุตเป็นตัวพิมพ์เล็ก

`kÇXsm`bUg#

ทดสอบมัน


คำอธิบาย

อินพุตโดยนัยของสตริงตัวพิมพ์เล็ก U

`kÇXsm`

kotinsmสตริงบีบอัด

bUg#

รับดัชนีแรก ( b) ของตัวละครที่ดัชนี ( g) (26 #) Uใน (Yay, ดัชนีห่อ!)

เอาต์พุตโดยนัยของผลลัพธ์จำนวนเต็ม


ทางเลือก

เช่นเดียวกับข้างต้น (และคนอื่น ๆ !) เพียงแค่ใช้ตัวอักษรที่ดัชนี 3 แทนเพื่อให้สามารถป้อนตัวพิมพ์ใหญ่ - เล็กได้

`klact`bUg3

ทดสอบมัน


หมอนenไป? : P
สิ้นเชิงมนุษย์

1
@icrieverytim: นั่นคือสตริงที่บีบอัด enถูกบีบอัดไปยัง unprintable
Shaggy

7
ฉันคิดว่าฉันเห็นbUgรหัสของคุณ
shenles

3

05AB1E , 11 ไบต์

บันทึก 1 ไบต์ขอบคุณ Erik the Outgolfer และ 1 ไบต์ขอบคุณ Magic Octopus Urn

.•ΛΓ2º•I3èk

ลองออนไลน์!


"enklact"->’enkl†¼’
Erik the Outgolfer

’enkl†¼’->.•ΛΓ2º•
Magic Octopus Urn

@MagicOctopusUrn โอ้ขอบคุณ
Mr. Xcoder


@MagicOctopusUrn จะเก็บไว้ในที่เก็บขอบคุณ: p
Mr. Xcoder

3

JavaScript (ES6), 25 ไบต์

0 การจัดทำดัชนี

s=>"enklact".search(s[3])

ทดสอบมัน

o.innerText=(f=
s=>"enklact".search(s[3])
)(i.value);oninput=_=>o.innerText=f(i.value)
<select id=i><option selected value="Sweet Onion Chicken Teriyaki">Sweet Onion Chicken Teriyaki</option><option value="Oven Roasted Chicken">Oven Roasted Chicken</option><option value="Turkey Breast">Turkey Breast</option><option value="Italian BMT">Italian BMT</option><option value="Tuna">Tuna</option><option value="Black Forest Ham">Black Forest Ham</option><option value="Meatball Marinara">Meatball Marinara</option></select><pre id=o>


1
นี่คือ25 ไบต์ !
geokavel

ขอบคุณ @geokavel ไม่ทราบว่าฉันได้รับ 3 ไบต์พิเศษเหล่านั้นจากที่ใด แม้การนับf=จะทำเพียง 27.
Shaggy

ทางออกที่ง่ายและมีประสิทธิภาพ +1 :)
Brian H.

@Shaggy บางทีไบต์ที่สามพิเศษของคุณอาจขึ้นบรรทัดใหม่
Michael Boger

3

GolfScriptขนาด 12 ไบต์

{+}*93&(5?7%

ลองออนไลน์!

แผนที่ปัจจัยการผลิต (ผ่านผลรวมของจุดรหัสของพวกเขา) เพื่อที่จะ06

คำอธิบาย

พบกับเครื่องมือบังคับเดรัจฉานตัวอย่างสคริปต์ GolfScript ที่ฉันเขียนมานานแล้ว

{+}*  # Sum all code points.
93&   # ... AND 93.
(     # Decrement.
5?    # ... raised to the fifth power.
7%    # ... modulo 7.

นี่คือวิธีที่สิ่งนี้จะแปลงอินพุตแต่ละตัวเป็นผลลัพธ์ที่ต้องการ:

                                 {+}*   93&     (            5?   7%
Sweet Onion Chicken Teriyaki     2658    64    63     992436543    0
Oven Roasted Chicken             1887    93    92    6590815232    1
Turkey Breast                    1285     5     4          1024    2
Italian BMT                       965    69    68    1453933568    3
Tuna                              408    24    23       6436343    4
Black Forest Ham                 1446     4     3           243    5
Meatball Marinara                1645    77    76    2535525376    6

2

Excel, 28 ไบต์

ใช้enklactวิธีการ:

=FIND(MID(A1,4,1),"enklact")

คุณสามารถปล่อย 2 ไบต์ด้วยการแปลงเป็น Google ชีตและวาง")
Taylor Scott

2

Perl 6 , 22 ไบต์

tr/enklact/^6/.comb[3]

ลองออนไลน์!


perl 2017.07 ยอมรับtr/enklact/^6/.comb[3]ซึ่งจะเป็น 22 ไบต์ แต่ tio.run เห็นได้ชัดว่ายังไม่ได้
Massa

(tio.run รัน perl6 v2017.6)
Massa

1
ตราบใดที่มีล่ามที่สามารถเรียกใช้เวอร์ชัน 22 ไบต์ได้ก็สามารถใช้ได้
Shaggy


2

Huskขนาด 10 ไบต์

%7^5←n93ṁc

ลองออนไลน์!

ท่าเรืออีกคำตอบของฉัน GolfScript ฉันแน่ใจว่าในที่สุดฉันจะหาภาษาที่สามารถรวมคะแนนรหัสสำหรับไบต์เดียว ...

Husk (อัปเดตหลังการท้าทาย), 9 ไบต์

%7^5←n93Σ

ลองออนไลน์!

ตอนนี้Σ จะรวมคะแนนรหัสโดยตรง ตั้งแต่นี้ถูกเพิ่มเข้ามาต่อคำขอหลังจากที่ฉันตอบความท้าทายนี้ฉันจะไม่ใช้มันเป็นคะแนนหลักของฉัน





1

Perl 5 , 43 + 1 ( -p) = 44 ไบต์

for$i(S,O,TUR,I,TUN,B,M){$"++;$_=$"if/^$i/}

ลองออนไลน์!

ต้องใช้อักขระสามตัวแรกของอินพุตเป็นตัวพิมพ์ใหญ่


จะต้องเป็นตัวพิมพ์ใหญ่ทั้งหมดตัวพิมพ์เล็กทั้งหมดหรือปกติ
geokavel

เรียกมันว่าตัวพิมพ์ใหญ่ทั้งหมดแล้ว สิ่งที่เกินกว่าสามอักขระแรกนั้นจะถูกละเว้น
Xcali

1

Java 8, 26 ไบต์

เครดิตถึง @icrieverytim

รับอินพุตเป็นตัวอักษร []

s->"enklact".indexOf(s[3])

คุณสามารถทำได้s->"enklact".indexOf(s[3])หากคุณระบุว่าคุณรับอินพุตเป็นอาร์เรย์ถ่าน
shooqie

ไม่เป็นไร ฉันตอบไม่กี่ข้อที่สามารถทำให้สั้นลงได้เช่นนั้น
Roberto Graham

1

Haskell , 36 ไบต์

-9 ไบต์ขอบคุณ H.PWiz

f s=length$fst$span(/=s!!3)"enklact"

ลองออนไลน์!

โซลูชันสำรอง 45 ไบต์

นี้ใช้indexOfฟังก์ชั่นในการเป็นData.ListelemIndex

import Data.List
(`elemIndex`"enklact").(!!3)

ลองออนไลน์!



@ H.PWiz breakโอ้ทำผิดกฎระเบียบของ ขอบคุณ!
สิ้นเชิงมนุษย์


@ H.PWiz ฮ่าฮ่าฉันจะคิดถึงมันอย่างไร XD
เต็มมนุษย์

1

C ++, 119 118 77 76 73 ไบต์

-41 ไบต์ขอบคุณ Peter Cordes
-1 ไบต์ขอบคุณZacharý
-3 ไบต์ขอบคุณ Michael Boger

ที่ดัชนีสตริง 3 อักขระสำหรับแซนด์วิชทุกชนิดแตกต่างกัน

#include<string>
int s(char*p){return std::string("enklact").find(p[3]);}
std::initializer_list<char*> t{
    "Sweet Onion Chicken Teriyaki",
    "Oven Roasted Chicken",
    "Turkey Breast",
    "Italian BMT",
    "Tuna",
    "Black Forest Ham",
    "Meatball Marinara"
};

for (auto& a : t) {
    std::cout << s(a);
}

การเล่นกอล์ฟกับstd::stringมันชัดเจนมาก ... ฉันกำลังคิดอะไรอยู่ ...


1
std::findในสตริงตัวอักษร (หรืออาจจะstd::string) ดูเหมือนว่าวิธีที่ชัดเจนไป โดยทั่วไปความคิดเดียวกับindexหรือstrchrว่าคำตอบ C ที่มีการใช้ในโครงสร้างข้อมูลที่ 0-5 เป็นนัยจากตำแหน่ง
Peter Cordes

คุณสามารถลบบรรทัดใหม่ในระหว่างบรรทัดที่ 2 และ 3
Zacharý

คุณไม่ต้องการตัวแปรในการจัดเก็บ enklact std::string("enklact").find(p[3])ทำงานได้ดี วิธีนี้จะทำให้มันลง 3 ตัวอักษร
Michael Boger

คุณสามารถส่งตัวอักษรสตริงไปยังฟังก์ชันของคุณ (g ++ เพียงเพิ่มคำเตือน) เพื่อให้สิ่ง memcpy ไม่จำเป็น
Michael Boger


0

Golfscript ขนาด 13 ไบต์

ลองออนไลน์!

'enklact'\3=?

ใช้อักขระตัวที่ 4 (ซึ่งสำหรับแต่ละตัวจะไม่ซ้ำกัน) และค้นหาในสตริง " enklact"

อีกวิธีหนึ่งคือ:

'nklact'\3=?)

สิ่งนี้ใช้ประโยชน์จากความจริงที่ว่า?ฟังก์ชั่นของ Golfscript คืนค่า -1 หากไม่พบองค์ประกอบที่ค้นหา (ซึ่งสำหรับวันจันทร์จะไม่ทำงาน) หากสิ่งนี้ได้รับอนุญาตโซลูชันอาจลดลง 1 ไบต์



0

K (oK) , 13 ไบต์

วิธีการแก้:

"enklact"?*3_

ลองออนไลน์!

ตัวอย่าง:

> "enklact"?*3_"Black Forest Ham"
5
> "enklact"?*3_"Turkey Breast"
2

คำอธิบาย:

ตีความจากขวาไปซ้ายดึงองค์ประกอบที่ 4 จากอินพุตและส่งคืนตำแหน่งศูนย์ดัชนีในรายการ "enklact":

"enklact"?*3_  / the solution
           3_  / 3 drop, 3_"Turkey Breast" => "key Breast" 
          *    / first, *"key Breast" => "k"
         ?     / lookup right in left
"enklact"      / list to lookup element in
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.