Dennis, Doorknob, Martin Büttner, Chris Jester-Young - Pizzeria!


42

Programming ปริศนาและรหัสกอล์ฟเป็นเรื่องเกี่ยวกับการได้รับการดูแลใหม่ , เดนนิส ! ความท้าทายนี้เป็นส่วยให้เขาและการใช้งาน (หรือใช้งานเมื่อเร็ว ๆ นี้) ดูแลอื่น ๆ ของเรา: Doorknob , มาร์ตินBüttnerและคริสเจสเตอร์หนุ่ม ชื่อเรื่องท้าทายคือหมายถึงการอ่านการปรับแต่งของเพลง Pepto Bismol

โดยทั่วไปเราจะปฏิบัติต่อพวกเขาทั้งหมดเพื่อพิซซ่าที่สิบเก้ากัด Pizzeriaแต่เราต้องทำให้แน่ใจว่าพวกเขาร่วมกันอย่างเป็นธรรมเพราะบางส่วนของวัยรุ่นจะรู้จักที่จะติดยาเสพติดพิซซ่า!

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

วัยรุ่นรวมจะสั่งพิซซ่าเดียวให้กว้างและความยาวพารามิเตอร์ไปยังเซิร์ฟเวอร์ของพวกเขาในรูปแบบที่เหมาะสมใด ๆ [width],[length]เช่น ก่อนที่พิซซ่าจะมาถึงที่โต๊ะคุณต้องติดป้ายแต่ละชิ้นด้วยชื่อเริ่มต้นของตัวดัดแปลงที่จะกินเพื่อให้แน่ใจว่าพวกเขาทุกคนมีส่วนร่วมอย่างเป็นธรรม ทุกคนควรได้รับจำนวนชิ้นเท่ากัน

  • E สำหรับเดนนิส
  • D สำหรับ Doorknob
  • M สำหรับมาร์ติน
  • C สำหรับคริส

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

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

เครื่องเขียนฉลากของคุณอาจเป็นโปรแกรมหรือฟังก์ชั่นและสามารถพิมพ์หรือส่งคืนพิซซ่าที่มีข้อความ labeler ที่สั้นที่สุดในคำกัดชนะ

ตัวอย่าง

ตัวอย่างที่ 1

ใบสั่ง: 4,1

พิซซ่าที่มีป้ายกำกับที่เป็นไปได้:

EDMC
MEDC
CDEM

ตัวอย่างที่ 2

ใบสั่ง: 4,4

พิซซ่าที่มีป้ายกำกับที่เป็นไปได้:

MMMM
CCCC
DDDD
EEEE
DEMC
DEMC
DEMC
DEMC
CCCC
DEEM
DEEM
DDMM

ตัวอย่างที่ 3

ใบสั่ง: 8,3

พิซซ่าที่มีป้ายกำกับที่เป็นไปได้:

MMMMMMCC
DDDDCCCC
DDEEEEEE
DDDCMMMM
DCDCMEEE
DCCCMEEE

ตัวอย่างที่ 4

ใบสั่ง: 20,5

พิซซ่าที่มีป้ายกำกับที่เป็นไปได้:

DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEDMMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC

( Dที่นี่ไม่ได้เชื่อมต่อกันแต่ก็โอเค)


12
@BetaDecay ส่วนใหญ่เป็นอุปกรณ์คล้องจองท้องเสีย
งานอดิเรกของ Calvin

28
พวกเขาต้องการให้ชุดของชิ้นที่เกี่ยวข้องนั้นเชื่อมต่อกับเส้นทาง มันเป็นเรื่องเล็ก ๆ น้อย ๆ ที่น่ากลัวที่คุณต้องการรู้ว่าเกี่ยวกับฉัน ...
เดนนิส

22
โอเคอะไรกับชิ้นพิซซ่ารูปสี่เหลี่ยมผืนผ้าที่แปลกประหลาดนี้ที่คุณให้ฉัน ฉันต้องการเงินคืน!
Doorknob

12
@flawr ไม่ใช่สำหรับคนที่ชอบคุณไม่ใช่คนแก้ไข
งานอดิเรกของ Calvin

14
"คนงานฉลากที่สั้นที่สุดในการกัดชนะ" - ฉันเห็นสิ่งที่คุณทำที่นั่น
DankMemes

คำตอบ:


21

CJam, 20 ไบต์

q~1$*4/"CEDM"e*/:$N*

ฉันคิดว่ามันน่าจะใช้ได้ :)

ลองออนไลน์

คำอธิบาย:

ครั้งแรกนี้จะทำให้พิซซ่าที่มีข้อความ CC … EE … DD … MM …จากซ้ายไปขวาและบนลงล่างจากนั้นเรียงลำดับตามลำดับตัวอักษรของแต่ละแถว การตัดการเชื่อมต่อเท่านั้นที่สามารถเกิดขึ้นได้ระหว่างเส้นขอบ CE และเส้นขอบ ED หรือเส้นขอบ ED และเส้นขอบ DM (หากอยู่ในแถวที่อยู่ติดกัน) แต่การเรียงลำดับทำให้แน่ใจว่า E ไปทางด้านขวาและ D ไปทางซ้ายเช่น C <E> D <M ดังนั้น E และ D ยังคงเชื่อมต่ออยู่

q~          read and evaluate the input
1$          copy the width
*4/         multiply with the height and divide by 4
"CEDM"e*    repeat each letter in "CEDM" that many times
/           split into rows of the given width
:$          sort each row
N*          join with newlines

1
เลือกกลับแถวที่แบ่งปันโดย Doorknob และฉัน นั่นคือการใช้อย่างชาญฉลาด$!
เดนนิส

8

Pyth, 30 25 ไบต์

jb.eu_GkbceQs*R/*FQ4"EDMC

การสาธิตสดและกรณีทดสอบทั้งหมด

ตัด 5 ไบต์ด้วย @Jakube!

อัลกอริทึมเช่นเดียวกับคำตอบ K ของฉัน ... แต่สั้นกว่ามาก

รุ่น 30 ไบต์:

jb.e?%k2_bbcjkm*/*FQ4d"EDMC"hQ

การสาธิตสดและทุกกรณีทดสอบสำหรับรุ่น 50 ไบต์


7

K, 61 ไบต์

{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}

ตัวอย่าง:

ryan@DevPC-LX:~/golf$ rlwrap k2
K 2.8 2000-10-10 Copyright (C) 1993-2000 Kx Systems
Evaluation. Not for commercial use. 
\ for help. \\ to exit.

  `0:{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}[4;1]
EDMC
  `0:{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}[4;4]
EEEE
DDDD
MMMM
CCCC
  `0:{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}[8;3]
EEEEEEDD
MMMMDDDD
MMCCCCCC
  `0:{[a;b]{((+:;|:)@x!2)[r@x]}'!#r:(b;a)#,/{(_(a*b)%4)#x}'"EDMC"}[20;5]
EEEEEEEEEEEEEEEEEEEE
DDDDDDDDDDDDDDDEEEEE
DDDDDDDDDDMMMMMMMMMM
CCCCCMMMMMMMMMMMMMMM
CCCCCCCCCCCCCCCCCCCC

ryan@DevPC-LX:~/golf$ 

ฉันเกลียดที่จะเป็นคนที่ต้องฝืนสิ่งเหล่านี้ ...


ดูเหมือนว่าซิกแซกกลับไปกลับมาบนลงล่าง ถูกต้องไหม (มันจะใช้ได้1,8หรือเปล่า?)
งานอดิเรกของ Calvin

@ Calvin'sHobbies ดูเหมือนว่าจะทำงานกับอินพุตนั้น
kirbyfan64sos

1
ฉันจะใช้วิธีการเดียวกันและฉันค่อนข้างแน่ใจว่ามันใช้งานได้ มันคือC hris แม้ว่า
เดนนิส

@Dennis Whoops แก้ไขแล้ว.
kirbyfan64sos

7

Pyth, 20 ไบต์

VceQs*L/*FQ4"CEDM"SN

ใช้เคล็ดลับการเรียงลำดับของ @ aditsu

สาธิต.

ฉันมากับโปรแกรมทางเลือกจำนวนมากที่มีความยาวเท่ากันในขณะที่พยายามตีกอล์ฟนี้:

VceQs*L/*FQ4"CEDM"SN
VceQsCm"CEDM"/*FQ4SN
VceQs*L*FQ"CEDM"%4SN
VceQ%4s*L*FQ"CEDM"SN
VcQs*L/*Qvz4"CEDM"SN    (Newline separated input)
jbSMceQs*L/*FQ4"CEDM
Vcs*L/*FQ4"CEDM"hQSN

6

Stuck , 42 33

มันกลับมาแล้ว! และในรูปแบบที่ยาวมาก ๆ :( - ฉันขโมยไอเดียการจัดเรียงของ aditsu เพื่อประหยัด 9 ไบต์ :)

t;g*4/[4*"CEDM"z"];F*":j0GK'$:Nj

คำอธิบาย:

t;g*4/                              # Take |-separated input,
                                    #   store the first value in var stack,
                                    #   multiply the two numbers and divide by 4.
      [4*"CEDM"z                    # Wrap that value in an array, make 3 copies
                                    #   to get a list of length 4, zip with "EDMC"
                "];F*":j0GK         # For each item, multiply letter by value to
                                    #   to get string, join the result, split into
                                    #   segments the size of the saved variable.
                            '$:Nj   # For each item, sort so the letters are in the correct
                                    #   order, join by newline, print.

อินพุตตัวอย่าง:

20|5

ตัวอย่างผลลัพธ์:

CCCCCCCCCCCCCCCCCCCC
CCCCCEEEEEEEEEEEEEEE
DDDDDDDDDDEEEEEEEEEE
DDDDDDDDDDDDDDDMMMMM
MMMMMMMMMMMMMMMMMMMM

คุณแน่ใจว่ามันจะเป็นเพียงแค่เชื่อมต่อสำหรับ8|3?
โย'

@yo 'ใช่ มันออกCCCCCCEE\nDDDDEEEE\nDDMMMMMMมา
Kade

/ me_stupid ขอโทษสำหรับสิ่งนั้น
yo '31

4

Rev 1 C, 74

i;f(w,h){for(i=w*h;i--;i%w||puts(""))putchar(h-i/w*2==1^"CDEM"[i*4/w/h]);}

สำหรับการบันทึกแบบ 1 ไบต์รุ่นนี้จะย้อนกลับ (เฉพาะ) แถวกลางของส่วนแบ่งสำหรับจำนวนแถวคี่ใด ๆ

Rev 0 C, 75

i;f(w,h){for(i=w*h;i--;i%w||puts(""))putchar(h==3&i/w==1^"CDEM"[i*4/w/h]);}

คำตอบมากมายที่นี่ซิกแซก แต่ส่วนใหญ่แล้วเพียงแค่แสดงตัวอักษรตามลำดับ (จากซ้ายไปขวาบนลงล่าง) ทำงานได้ดี:

ไม่จำเป็นต้องซิกแซกสำหรับความสูง 1,2 หรือ 4

ไม่จำเป็นต้องซิกแซกสำหรับความสูงที่มากกว่า 4 (ปันส่วนพิซซ่าแต่ละ mod จะห่อรอบ)

ดังนั้นเราจึงจำเป็นต้องซิกแซกจริง ๆ เมื่อความสูงเท่ากับ 3 และจากนั้นเราต้องย้อนกลับแถวกลาง

เมื่อปรากฎว่า Dennis และ Doorknob เป็น mods เดียวในแถวนั้น และพวกเขาสามารถแลกเปลี่ยนโดย XORing รหัส ASCII ของพวกเขาด้วย 1

สิ่งนี้มีประโยชน์เนื่องจากไม่มีวิธีที่ง่ายในการย้อนกลับสตริงใน C

Ungolfed ในโปรแกรมทดสอบ

i;
f(w,h){
  for(i=w*h;i--;i%w||puts(""))            //loop through all squares. puts inserts a newline at the END of each line.
  putchar(h==3&i/w==1^"CDEM"[i*4/w/h]);   //put the letter, XORing D and E for the middle row of height 3.
}

W,H;
main(){
  scanf("%d%d",&W,&H);
  f(W,H);
} 

คำอธิบายที่ดี
trichoplax

1

JavaScript (ES6) 107

วิธีแก้ปัญหาซิกแซก การใช้สตริงแม่แบบขึ้นบรรทัดใหม่มีความสำคัญและนับ

ทดสอบการเรียกใช้ข้อมูลโค้ดด้วย FireFox

f=(w,h)=>{for(i=o=r='',z=l=1;--l?l:c='CDEM'[l=w*h/4,i++];r[w-1]&&(o+=r+`
`,r='',z=!z))r=z?r+c:c+r;return o}


//TEST

(test=_=>([w,h]=I.value.match(/\d+/g),O.innerHTML=f(w,h)))()
<input id=I value='8 3'><button onclick='test()'>-></button>
<pre id=O></pre>


0

เรติน่า 83 ไบต์

คุณสมบัติที่ใช้ในคำตอบนี้ใหม่กว่าความท้าทายนี้ (ไม่ใช่ว่ามันสำคัญ ... ) จำนวนไบต์ถือว่าการเข้ารหัส ISO 8859-1

\d+
$*#
#(?=.*¶(.+))
$1
\G####
CDEM
S_`((.)+?(?=.*¶(?<-2>#)+$))|\D
O`.
T`DE`ED
O%`.

ลองออนไลน์!

วิธีนี้ใช้โซลูชันของ aditsu ซึ่งตอนนี้ค่อนข้างเป็นไปได้เนื่องจากขั้นตอนการเรียงลำดับใหม่

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