डेनिस, डोरकनॉब, मार्टिन ब्यूटनर, क्रिस जस्टर-यंग - पिज़्ज़ेरिया!


42

प्रोग्रामिंग पहेलियाँ और कोड गोल्फ एक नया मॉडरेटर पाने के बारे में है , डेनिस ! यह चुनौती उनके और हमारे अन्य सक्रिय (या हाल ही में सक्रिय) मध्यस्थों के लिए एक श्रद्धांजलि है: डॉर्कनोब , मार्टिन ब्यूटनर और क्रिस जस्टर-यंग । चुनौती शीर्षक पेप्टो बिस्मोल गीत की धुन को पढ़ने के लिए है ।

असल में, हम उन सब पर पिज्जा के लिए इलाज के लिए जा रहे हैं उन्नीसवीं काटो पिज़्ज़ेरिया , लेकिन हम सुनिश्चित करें कि वे साझा यह काफी क्योंकि बनाने की जरूरत है कुछ की mods पिज्जा नशा होने के लिए जाना जाता है!

पिज़्ज़ेरिया द्वारा बेचे जाने वाले पिज्जा पाठ के सभी आयताकार ब्लॉक हैं। पिज्जा की चौड़ाई और लंबाई किसी भी गैर-नकारात्मक पूर्णांक हो सकती है जब तक कि उनका उत्पाद चार से विभाज्य न हो। पाठ पिज्जा के ब्लॉक में प्रत्येक ग्रिड स्थान एक स्लाइस का प्रतिनिधित्व करता है, इसलिए स्लाइस को चार समान समूहों में विभाजित करना हमेशा संभव होता है।

मॉड सामूहिक रूप से एक एकल पिज्जा का आदेश देंगे, किसी भी उचित प्रारूप जैसे उनके सर्वर में इसकी चौड़ाई और लंबाई पैरामीटर प्रदान करते हैं [width],[length]। पिज्जा उनके टेबल पर आने से ठीक पहले, आपको प्रत्येक स्लाइस को उस मॉड के शुरुआती हिस्से के साथ लेबल करना होगा जो इसे खाने के लिए मिलता है ताकि यह सुनिश्चित हो सके कि वे सभी को अच्छी तरह से साझा करते हैं। सभी को समान संख्या में स्लाइस मिलनी चाहिए।

  • E डेनिस के लिए है
  • D Doorknob के लिए है
  • M मार्टिन के लिए है
  • C क्रिस के लिए है

हालाँकि, मॉड थोड़ा ज़बरदस्त होते हैं, और आवश्यकता होती है कि उनके स्लाइस के संबंधित सेट पथ से जुड़े हों , यानी कि उनके सभी स्लाइस को एक दूसरे से ऊपर, नीचे, बाएँ और दाएँ घुमाकर पहुँचा जा सकता है, न कि किसी और को पार करना स्लाइस (और विकर्ण चलती नहीं)। परवाह न करें कि आप इसे तब तक कैसे करते हैं जब तक यह किया जाता है।

एक बार जब आप प्रत्येक स्लाइस को ठीक से लेबल कर लेते हैं, तो एक वैकल्पिक अनुगामी न्यूलाइन के साथ मॉड्स को पिज्जा डिलीवर करें।

आपका लेबलर एक प्रोग्राम या फ़ंक्शन हो सकता है और लेबल किए गए पिज्जा को प्रिंट या वापस कर सकता है। काटने में सबसे छोटा लेबलर जीतता है।

उदाहरण

उदाहरण 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 यह मुख्य रूप से डायरिया राइमिंग डिवाइस है।
केल्विन के शौक

28
उन्हें आवश्यकता होती है कि उनके संबंधित स्लाइस के रास्ते पथ से जुड़े हों । यह थोड़ा डरावना है कि आप जानेंगे कि मेरे बारे में ...
डेनिस

22
ठीक है, क्या है के साथ इस अजीब आयताकार-रूपरेखा के आकार का पिज्जा टुकड़ा है कि तुम मुझे दे दिया है? मुझे वापसी चाहिए!
दरवाज़े

12
@flawr आप की पसंद के लिए नहीं, नॉन-मॉड।
केल्विन के शौक

14
" काटने वाले जीत में सबसे छोटा भूलभुलैया " - मैं देखता हूं कि आपने वहां क्या किया था।
DankMemes

जवाबों:


21

CJam, 20 बाइट्स

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

मुझे लगता है कि यह काम करना चाहिए :)

इसे ऑनलाइन आज़माएं

स्पष्टीकरण:

यह पहली बार सीसी… ईई… डीडी… एमएम… को बाएं से दाएं और ऊपर से नीचे तक एक पिज्जा लेबल बनाता है, फिर प्रत्येक पंक्ति को वर्णानुक्रम में क्रमबद्ध करता है। केवल डिस्कनेक्ट सीई सीमा और ईडी सीमा, या ईडी सीमा और डीएम सीमा (यदि वे आसन्न पंक्तियों पर आते हैं) के बीच हो सकते हैं। लेकिन छंटनी यह सुनिश्चित करती है कि 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

पायथ, 30 25 बाइट्स

jb.eu_GkbceQs*R/*FQ4"EDMC

लाइव डेमो और सभी परीक्षण मामलों

@Jakube के लिए 5 बाइट्स कट ऑफ!

मेरे कश्मीर उत्तर के रूप में एक ही एल्गोरिथ्म ... लेकिन बहुत कम।

30-बाइट संस्करण:

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

लाइव डेमो और 50-बाइट संस्करण के लिए सभी परीक्षण मामले


7

के, 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?)
केल्विन के शौक

@ केल्विन हॉबीज यह उस इनपुट के लिए काम करता है।
kirbyfan64sos

1
मैं उसी दृष्टिकोण का उपयोग करने जा रहा था और मुझे पूरा यकीन है कि यह काम करेगा। हालांकि यह सी हैरिस है।
डेनिस

@ डेनिस वूप्स फिक्स्ड।
kirbyfan64sos 21

7

अजगर, 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

अटक , ४२ ३३

यह लौटता है! और भयंकर रूप में। :( - मैंने 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?
यो '

@ यो 'हाँ। यह आउटपुट करता है CCCCCCEE\nDDDDEEEE\nDDMMMMMM
केडे

/ me_stupid, इसके लिए क्षमा करें।
यो '

4

रेव 1 सी, 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-बाइट की बचत के लिए, यह संस्करण किसी भी विषम संख्या में पंक्तियों के मध्य (केवल) स्लाइस की मध्य पंक्ति को उलट देता है।

रेव 0 सी, 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 से अधिक हाइट्स के लिए ज़िगज़ैग करने की आवश्यकता नहीं है (प्रत्येक मॉड का पिज्जा राशन चारों ओर लपेटेगा।)

इसलिए हमें वास्तव में केवल zigzag की आवश्यकता है जब ऊंचाई 3 है, और फिर हमें केवल मध्य पंक्ति को उलटने की आवश्यकता है।

जैसा कि यह पता चला है, डेनिस और डोरकनॉब उस पंक्ति पर केवल मॉड हैं। और उन्हें 1 के साथ अपने ASCII कोड XORING द्वारा इंटरचेंज किया जा सकता है।

यह आसान है कि सी में एक स्ट्रिंग को रिवर्स करने का कोई आसान तरीका नहीं है।

परीक्षण कार्यक्रम में अपराजित

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

महान व्याख्या।
ट्राइकोप्लाक्स

1

जावास्क्रिप्ट (ईएस 6) 107

ज़िगज़ैग समाधान। टेम्पलेट स्ट्रिंग का उपयोग करते हुए, नईलाइन महत्वपूर्ण और गिनी जाती है।

फायरफॉक्स के साथ स्निपेट का परीक्षण करें।

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 बाइट्स

इस उत्तर में उपयोग की जाने वाली विशेषताएँ इस चुनौती से नई हैं (ऐसा नहीं है कि यह मायने रखता है ...)। बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

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

इसे ऑनलाइन आज़माएं!

यह aditsu के समाधान को लागू करता है जो अब नए प्रकार के चरणों के लिए कुछ हद तक संभव है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.