मुझे चाँद बना दो!


31

मध्य-शरद उत्सव शुरू हो गया है!

दुर्भाग्य से, मेरे सभी मूनकैक्स चोरी हो गए - वे अपने जैसे छोटे लोक के लिए बहुत महंगे हो रहे हैं, और मुझे डर है कि मैं किसी भी वर्ष नहीं खा पाऊंगा!

इसलिए मैं आपकी मदद के लिए मुड़ता हूं। क्या आप मुझे कुछ कर पाएंगे?

उन अनजान लोगों के लिए, मैं आपको इस बारे में शिक्षित करता हूं कि एक मूनकेक कैसा दिखता है।


Mooncakes कई अलग-अलग आकारों में आते हैं!
इसलिए मैं आपको अपना इनपुट देने जा रहा हूं , n , जब मैं चाहता हूं।

यहां मेरे द्वारा दिए गए आउटपुट के कुछ उदाहरण दिए गए हैं :

आकार n = 3 का मूनकेक:

    (@@@@@)  
    (@MAF@) 
    (@@@@@) 

आकार n = 6 का मूनकेक:

    (@@@@@@@@@@@) 
    (@         @)
    (@    M    @) 
    (@    F    @)
    (@         @)
    (@@@@@@@@@@@) 

यह कहना है, आकार एन का एक चाँद है:

  • n लाइनों को उच्च
  • 2 एन - 1 @ लंबा
  • 2n + 1 वर्ण लंबा (@s और कोष्ठक)

और तुम बेहतर मुझे अपने बहुत छोटे अभ्यास mooncakes फेंक नहीं है!
मान लें कि इनपुट हमेशा n> = 3 होगा

Mooncakes में निम्नलिखित सजावट भी शामिल हैं :

  • म्यूचुअल फंड
  • MAF
  • HMF
  • JCJ
  • TTT
  • ZJ
  • वामो
  • आरएफ
  • सीएफ

जो एक, यह कोई फर्क नहीं पड़ता - जब तक यह लंबवत और क्षैतिज रूप से केंद्रित है
इसे लंबवत या क्षैतिज रूप से भी लिखा जा सकता है!

मुझे विविधता चाहिए!
यदि आप वास्तव में मुझे एक ही मूनकेक के दो बनाने जा रहे हैं, तो सजावट बेहतर होगी!

यही है, सटीक एक ही इनपुट के साथ अपने कार्यक्रम के कई निष्पादन हमेशा एक ही सजावट उपज नहीं होना चाहिए

मैं आपके चंद्रमा केक खाने के लिए इंतजार नहीं कर सकता, इसलिए जितनी जल्दी मैं उन्हें ( अपने कोड को कम ) बेहतर प्राप्त कर सकता हूं !

शुभ लाभ!


सजावट के बारे में सोच रहे लोगों के लिए:
वे मिड-ऑटम फेस्टिवल के सभी वैकल्पिक नामों के शुरुआती हैं।
इस पोस्ट के शीर्ष पर लिंक किए गए विकिपीडिया पृष्ठ में एक सूची पाई जा सकती है।


स्पष्टीकरण:

व्हाट्सएप को लीड करने और पीछे करने के बारे में कोई नियम नहीं हैं
आप जितना चाहें उतना कम या ज्यादा!

सजावट आपके चांदनी के केंद्र में होनी चाहिए!
क्षैतिज सजावट पर, इसका मतलब है कि यह आपके केक की मध्य रेखा पर होना चाहिए, और सजावट स्ट्रिंग के बाईं और दाईं ओर वर्णों की संख्या बराबर होनी चाहिए।
ऊर्ध्वाधर सजावट पर, इसका मतलब है कि इसे आपके केक के मध्य स्तंभ में रहना चाहिए, और सजावट के ऊपर और नीचे वर्णों की संख्या बराबर होनी चाहिए।

सभी सजावट का उपयोग नहीं किया जाना चाहिए!
केवल आवश्यकता यह है कि किसी भी दिए गए इनपुट n के लिए एक से अधिक संभावना होनी चाहिए। संभावनाओं को भी होने की जरूरत नहीं है।

कार्य स्वीकार्य हैं।


2
नमस्ते, PPCG में आपका स्वागत है! यह एक महान पहली पोस्ट की तरह लग रहा है। आमतौर पर हम प्रस्तावित चुनौतियों के लिए सैंडबॉक्स का उपयोग करने की सलाह देते हैं । वहां आप दूसरों से प्रतिक्रिया प्राप्त कर सकते हैं, और उन चीजों के साथ चुनौती को सही कर सकते हैं जिनके बारे में आपने सोचा नहीं होगा, यहां पोस्ट करने से पहले। कहा जा रहा है, आपकी चुनौती अच्छी तरह से सोच-समझकर बनाई गई है। मुझ से +1। आपके पहले उदाहरण के बारे में एक सवाल, यह क्यों पढ़ता है MAFऔर क्या नहीं MF? मुझे Aआपके सजावट के विकल्प नहीं दिख रहे हैं।
केविन क्रूज़सेन

1
धन्यवाद! क्षमा करें, मुझे सैंडबॉक्स के बारे में पता नहीं था। क्या मैं वैसे भी सिर्फ एक को छोड़ने में सक्षम हूं? सजावट के बारे में - वह एक गलती थी। मैंने MAF को अनुमत सजावट में जोड़ा। प्रतिक्रिया बहुत सराहना की!
चंद्रमा खरगोश

1
अग्रणी और अनुगामी स्थानों के संबंध में कोई नियम नहीं हैं। आप पर निर्भर करता है!
चंद्रमा खरगोश

3
अरे, मुझे वास्तविक मूनकेक्स प्राप्त करने के लिए मैन्युअल रूप से अपने मूनकेक मशीन में यह सब टाइप करना होगा!
चंद्रमा खरगोश

4
... किस मामले में यह अच्छा है कि गैर-एएससीआईआई चरित्र सेट के साथ उन अभागे भाषाओं में से कोई भी उनके सिर को
पीछे नहीं हटाता है

जवाबों:


9

पायथ, 71 65 59 58 बाइट्स

@ बाइट के लिए 1 बाइट का धन्यवाद सहेजा गया।

jjRc"(@@)"2++J*KtytQ\@m.[Kd;.[ttQ@,,O"MC"\F]Oc"MAFHMF"3QkJ

इसे ऑनलाइन आज़माएं। परीक्षण सूट।

इतनी पैडिंग।


2
यह पागल है कि यह जवाब उसी भाषा में इसके नीचे से कितना अलग है ...
मैजिक ऑक्टोपस उर

आप को बदल कर एक बाइट बचा सकता है ?%Q2के साथ @,(दो विकल्प का क्रम उलटने) ... Q। मैंने (ए.बी.) ने यह प्रयोग किया कि मेरे अपने पायथ उत्तर को नीचे करने में बहुत कुछ है।
स्टीवन एच।

@StevenH। धन्यवाद, मैं हमेशा मॉड्यूलर अनुक्रमण के बारे में भूल जाता हूं।
पुरकाकूदरी

7

जावास्क्रिप्ट ईएस 6, 206 196 192 188 187 180 176 169 165 156 बाइट्स

g=(n,r=new Date%2,a=(s,x,b=' @'[+!s].repeat(n-3+!x))=>`(@${b+(s||'@')+b}@)
`,l=a` `.repeat(n/2-2+n%2))=>a()+l+(n%2?a(r?'MAF':'HMF',1):a('RC'[r])+a`F`)+l+a()

टूट - फूट

r=new Date%2                           // Sometimes 0, sometimes 1

// Function to create lines of the cake of the form `(@@@@@@@@@)` or `(@  ${s}  @)`
a=(s,x,b=' @'[+!s].repeat(n-3+!x))=>`(@${b+(s||'@')+b}@)
`

// Cake parts
a()                                    // Top of the cake.
l=a` `.repeat(n/2-2+n%2)               // Undecorated inner part.
a(r?'MAF':'HMF',1)                     // Decoration for uneven sized cakes.
a('RC'[r])+a`F`                        // Decoration for even sized cakes.
l                                      // Undecorated inner part.
a()                                    // Bottom part.

कोड-गोल्फ में मेरा पहला प्रयास। यह शायद अधिक गोल्फ हो सकता है।

@ETHProductions के लिए 4 बाइट्स सहेजे गए

संपादित करें मैंने संतुष्ट करने के लिए उपयोग की स्वतंत्रता ली :Date.now()%2 new Date%2

एक ही इनपुट के साथ आपके कार्यक्रम के कई निष्पादन हमेशा एक ही सजावट का उत्पादन नहीं करते हैं

यह मुझे एक और 7 बाइट्स को बचाने की अनुमति देता है +Math.random()>.5

@Arnauld की बदौलत एक और 4 बाइट्स बचाए


PPCG में आपका स्वागत है, और पहला जवाब! मेरा मानना ​​है कि ['MA','HA'][r]+'F'इससे गोल्फ हो सकता है 'MH'[r]+'AF'
ETHproductions

1
आप की जगह दो बाइट्स बचा सकता है [' R ',' C '][r]के साथ " ${'RC'[r]} ", प्रत्येक जगह "एक बैकटिक साथ।
ETHproductions

1
और ['MA','HM'][r]+'F'वास्तव में दो बाइट्स की तुलना में लंबा है ['MAF','HMF'][r];)
ETHproductions

2
आप ' @'[+!s]इसके बजाय(s?' ':'@')
Arnauld

2
इसके अलावा, आप के new Date%2बजाय उपयोग कर सकते हैं Date.now()%2
अरनुलद

6

पायथ, 99 79 71 68 64 बाइट्स

स्ट्रींग बनाने में पाइथ बहुत खराब है । या हो सकता है मैं तो बस कर रहा हूँ बुरा उन्हें बेहतर गोल्फ में हो रही।

jmj.[-yQ3@,k@,@,O"MC"\FgydQOc"MAFHMF"3Q>2ahydQ@" @"sIcdtQc2"(@@)

सजावट MAFऔर HMFक्षैतिज रूप से और सजावट MFऔर CFखड़ी बना सकते हैं ।

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


2
आह, इस कहानी में कुछ चरित्र विकास देखने के लिए अच्छा है।
चंद्रमा खरगोश

6

विम, 118 बाइट्स

(संख्या के साथ जैसे एक फाइल एक बफर के रूप इनपुट लेता है n इसकी सामग्री के रूप में)।

"aDi()<Esc>@ai@<Esc>.xY@apddll<C-v>G$k3hr @=@a/2-1
j@=@a-2-@a%2
l:let r=abs(reltime()[1])%2
@=@a%2?r?"RJCJ":"3rT":"rFkr"."ML"[r]
<Esc>

यहाँ यह xxd प्रारूप में अनियंत्रित नियंत्रण वर्णों के साथ है:

0000000: 2261 4469 2829 1b40 6169 401b 2e78 5940  "aDi().@ai@..xY@
0000010: 6170 6464 6c6c 1647 246b 3368 7220 403d  apddll.G$k3hr @=
0000020: 4061 2f32 2d31 0a6a 403d 4061 2d32 2d40  @a/2-1.j@=@a-2-@
0000030: 6125 320a 6c3a 6c65 7420 723d 6162 7328  a%2.l:let r=abs(
0000040: 7265 6c74 696d 6528 295b 315d 2925 320a  reltime()[1])%2.
0000050: 403d 4061 2532 3f72 3f22 524a 434a 223a  @=@a%2?r?"RJCJ":
0000060: 2233 7254 223a 2272 466b 7222 2e22 4d4c  "3rT":"rFkr"."ML
0000070: 225b 725d 0a1b                           "[r]..

इसे ऑनलाइन आज़माएं! (जैसा कि यह पता चला है, वी दुभाषिया सामान्य विम कोड के लिए भी ठीक काम करता है।)

व्याख्या

"aD                   " Delete the number and store it in @a
i()<Esc>              " Insert empty parentheses
@ai@<Esc>.x           " Insert @a '@' characters between the parentheses twice; delete 1
Y@apdd                " Copy the line and paste it @a times; delete 1
ll<C-v>G$k3hr<Space>  " Replace the inner area with spaces
@=@a/2-1<CR>j         " Go down @a/2-1 lines
@=@a-2-@a%2<CR>l      " Go right @a-2-@a%2 columns
:let r=reltime()[1]%2<CR>  " Get a random 1 or 0 based on the time (this may be OS-dependent)
@=@a%2?
   r?"RJCJ":"3rT"     " For odd @a, replace the next 3 characters with "JCJ" or "TTT"
  :"rFkr"."ML"[r]     " For even @a, replace this character with "F" and the above with "M" or "L"
<CR><Esc>

वाह, बहुत अच्छा! मुझे लगता है कि यह पहला गैर-निर्धारक विम उत्तर है जो मैंने देखा है! कुछ विचार: 1) जब आप इनपुट को "इनपुट" के बजाय "वाद" में डालते हैं, तो यह @aarg1, @barg2, आदि के लिए पूर्वनिर्धारित करता है , लेकिन यह एक विशिष्ट विशेषता है। यह तकनीकी रूप से कोई फर्क नहीं पड़ता क्योंकि आपके पास "aDशुरुआत में है, लेकिन मुझे लगा कि मैं इसे इंगित करूंगा। 2) आप अगर तुमने किया था बंद एक बाइट ले सकता है dd@apके बजायY@apdd
DJMcMayhem


dd@aPकाम करता है, लेकिन फिर एक अतिरिक्त jऔर अतिरिक्त kडाउन लाइन की आवश्यकता होती है ।
जॉर्डन

5

PHP, 342 292 249 185 178 176 बाइट्स

for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)<1])."@)
";$p=F.[M,AM,R,MH][rand()&2|$d=$n&1];$f=$n*($n+$d)-2;for($i=2+$d;$i--;$f+=$d?:2*$n+2)$o[$f]=$p[$i];echo$o;

के साथ बुलाना php -r '<code>' <size>

इतिहास

Rev 1: प्रारंभिक संस्करण; सभी आकार (छोटे केक सहित), सभी सजावट, सभी संभव निर्देश

रेव। 2: हटाए गए छोटे केक (-36 बाइट्स), रिस्ट्रिक्टेड डेकोरेशन ऑप्शंस, एक डेकोरेशन आइटम (-21) और एक सिंगल बाइट गोल्फ (-1) को हटा दिया।

रेव। 3: नीचे चार सजावट; (-17), केवल विषम आकार (-18) प्लस माइनर गोल्फिंग (-8) के लिए क्षैतिज है।

रेव। 4: "पेंट केक" भाग को नीचे करने के लिए जार्ग का धन्यवाद; उसने एक अद्भुत (-31) उतार दिया।
मेरे अतिरिक्त गोल्फ के साथ एक और -6, स्ट्रिंग की एक सरणी के बजाय एक स्ट्रिंग का उपयोग करने के लिए -27।

रेव। 5: -7 बाइट्स ज्यादातर क्रिस्टालकेक्स के लिए धन्यवाद

टूट - फूट

इससे घंटे कम हो रहे हैं। :)

// paint cake
for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)<1])."@)\n";

// add deco
$p=F.[M,AM,R,MH][rand()&2|$d=$n&1];
$f=$n*($n+$d)-2;
for($i=2+$d;$i--;$f+=$d?:2*$n+2)$o[$f]=$p[$i];

// output
echo$o;

1
for($i=0;$i<$n=$argv[1];$i++){$o[]=str_pad("(@",2*$n-1,!$i|$i==$n-1?"@":" ")."@)";}
जोर्ग हल्सरमैन

@ JörgHülsermann: बहुत बहुत धन्यवाद। मुझे इसके लिए समान अभिव्यक्ति लेनी थी !$i|$‌​i==$n-1?"@":" "; टर्नरी सिर्फ तुम्हारा (मेरी मशीन पर) स्वीकार नहीं करेगा, हालांकि यह सही है।
टाइटस

यह उदाहरण के लिए पर कोशिश sandbox.onlinephpfunctions.com
Jörg Hülsermann

1
यह आपको केक पेंट पर छह बाइट बचाता है: for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)==0])."@)\n";इसके अलावा, ऐसा लग रहा है कि आपको "डिक" मिल गया है अपने डिकरिंग ;-)
क्रिस्टालकेक्स

4

जावा 7, 399 349 बाइट्स

@Dodge और @ केविन क्रूज़सेन की मदद से अद्यतन संस्करण:

void m(int n){int i=2,r=n%2,x=2*n,u=r+2,y=r*4+(int)(Math.random()*2)*u,z=y+u;String t="MFZJMAFHMF".substring(y,z);char[][]c=new char[n][x+1];while(i<x-1)c[0][i]=c[n-1][i++]=64;for(i=0;i<u;)c[(n-1)/2+(1-r)*i][r*(i-1)+n]=t.charAt(i++);for(i=0;i<n;){c[i][0]=40;c[i][1]=c[i][x-1]=64;c[i][x]=41;System.out.println(new String(c[i++]).replace('\0',' '));}}

void m(int n){String[]s={"MF","MAF","ZJ","HMF","LF","JCJ","RF","TTT","CF","MAF"};char[]d=s[((int)(Math.random()*5))*2+(n%2)].toCharArray(),c[]=new char[n][2*n+1];int i=2;while(i<2*n-1)c[0][i]=c[n-1][i++]='@';i=0;while(i<d.length)c[(n-1)/2+(1-(n%2))*i][(n%2)*(-1+i)+n]=d[i++];i=0;while(i<n){c[i][0]='(';c[i][1]=c[i][2*n-1]='@';c[i][2*n]=')';System.out.println(new String(c[i++]).replace('\0',' '));}}

यहाँ कोशिश करो!

नया संस्करण बहुत अधिक अनुकूलित है और Stringसरणी हैंडलिंग से छुटकारा मिल गया है । के रूप में भी सुझाव दिया है, वहाँ अब केवल 4 सजावट कर रहे हैं: 2 भी आदानों (के लिए MF, ZJ) और अजीब आदानों के लिए 2 ( MAF, HMF) जो एक एकल में जोड़ दिया जाता है String

Ungolfed:

void m(int n){
    int i=2,
    r=n%2,
    x=2*n,
    u=r+2, // length of the decoration string
    y=r*4+(int)(Math.random()*2)*u, // random starting index of string (0, 2, 4, 7)
    z=y+u; // exclusive end index of string (2, 4, 7, 10)
    String t="MFZJMAFHMF".substring(y,z);
    char[][]c=new char[n][x+1];
    while(i < x-1) {
        c[0][i]=c[n-1][i++]=64; // '@'
    }
    for(i=0; i<u;) {
        c[(n-1)/2+(1-r)*i][r*(i-1)+n]=t.charAt(i++); // Depending on even/odd, fills the center column/row respectively with the decoration
    }
    for(i=0; i<n;) {
        c[i][0]=40; // '('
        c[i][1]=c[i][x-1]=64; // '@'
        c[i][x]=41; // ')'
        System.out.println(new String(c[i++]).replace('\0',' ')); // Print all
    }
}

प्रस्तुत करने के लिए धन्यवाद! मुझे स्पष्ट करने दें, क्योंकि कुछ उपयोगकर्ताओं ने इसे याद किया है - सभी सजावट शामिल नहीं होनी चाहिए। मैंने 'स्पष्टीकरण' खंड में इसे आगे बढ़ाया है। उम्मीद है कि आप कुछ बाइट्स बचा लेगा! मेरा मानना ​​है कि आप अभी भी सजावट का चयन करने के लिए उसी विधि का उपयोग करने में सक्षम होंगे।
चंद्रमा खरगोश

4
हाहा, जहाँ तक जावा गोल्फिंग जाती है, वह सभी सजावटों को शामिल कर सकती है;)। +1, हमेशा, जावा-पुटर को कोड़ा मारने के लिए गेंदों के साथ किसी के लिए भी।
मैजिक ऑक्टोपस उर्फ़

क्यों "MAF"दोहराया जाता है?
साइओस

@carusocomputing बहुत सच है। बस मामले में, हालांकि, मैंने सोचा था कि मैं इसका उल्लेख करूंगा। अच्छा!
चंद्रमा खरगोश

आपकी प्रतिक्रिया के लिए धन्यवाद :) सच, जावा गोल्फिंग के लिए बहुत इष्टतम नहीं है, लेकिन यह करने के लिए बहुत मजेदार है: पी। शायद मैं सजावट के छोरों और आरंभीकरण का char[]अधिक कुशलता से उपयोग कर सकता हूं और आगे अन्य चीजों को गोल्फ कर सकता हूं । @ काइओस को मैंने दोहराया MAFक्योंकि तब मेरे पास सभी इनपुट हैं सूचकांकों पर 0,2,4,6,8और सभी सजावटों के लिए एक विषम इनपुट सूचकांकों पर 1,3,5,7,9। किसी दिए गए इनपुट के लिए यादृच्छिक सूचकांक की गणना करना आसान बनाता है। Math.random()*5से एक यादृच्छिक संख्या देता है 0-4*2इसे फैलाता है 0,2,4,6,8। अजीब इनपुट के लिए +n%2कहते हैं 1पाने के लिए 1,3,5,7,9
QBrute

3

बैच, 386 बाइट्स

@echo off
set/pn=
set f=HMAC
set/ao=n%%2,u=n/2,l=h=u+1,d=%random%%%2*2+1
if %o%==1 set/al=u=0,d/=2
set c=
for /l %%i in (4,1,%n%) do call set c= %%c%%
call:l %n%
for /l %%i in (2,1,%n%) do call:l %%i
exit/b
:l
set s=   
if %1==%h% call set s=%%f:~%d%,2%%F
if %1==%u% call set s= %%f:~%d%,1%% 
if %1==%l% set s= F 
set s=(@%c%%s%%c%@)
if %1==%n% set s=%s: =@%
echo %s%

केवल उपयुक्त के रूप में एचएमएफ, एमएएफ, एमएफ या सीएफ का उत्पादन करेगा। नोट: कुछ लाइनें सफेद स्थान पर समाप्त होती हैं। चर:

  • n इनपुट पैरामीटर (STDIN से पढ़ें)
  • fसजावट उपसर्ग (प्रत्यय Fनिहित है)
  • oकी विषमता n(केवल एक बार उपयोग की जाती है, लेकिन ifकथन अभिव्यक्ति को स्वीकार नहीं करते हैं)
  • lऊपरी ऊर्ध्वाधर चरित्र की पंक्ति, या 0एक क्षैतिज सजावट के लिए
  • uनिचले ऊर्ध्वाधर चरित्र की पंक्ति, या 0एक क्षैतिज सजावट के लिए
  • h क्षैतिज सजावट की पंक्ति (एक ऊर्ध्वाधर सजावट द्वारा अधिलेखित हो जाती है)
  • d सजावट उपसर्ग में सजावट का सूचकांक (क्षैतिज के लिए 0/1 या ऊर्ध्वाधर के लिए 1/3)
  • cn-3रिक्त स्थान की स्ट्रिंग
  • s प्रत्येक पंक्ति के लिए आउटपुट स्ट्रिंग
  • %1पंक्ति संख्या, लेकिन nपहली पंक्ति के लिए भी सेट करें , ताकि पहली और अंतिम दोनों पंक्तियाँ @रिक्त स्थान के बजाय s का उपयोग करें ।

3

सी, 233 बाइट्स

यहाँ से थोड़ा नीचे गोल्फ करने में सक्षम होना चाहिए ...

A="HMFMAFCF";i,j,k,t;f(n){t=time();char*S=n&1?t&1?A:A+3:t&1?A+1:A+6;for(;i<n;i++,puts(")"))for(j=0,k=2*n-1,putchar(40);j<k;putchar(0==i*j|i==n-1|j==k-1?64:n&1&i==n/2&j>n-3&j<n+1?*S++:n&1?32:(i==n/2-1|i==n/2)&j>n-2&j<n?*S++:32),j++);}

बड़ी चुनौती, यह कोड के लिए कठिन और बदसूरत था।

इस मुख्य दुर्गंध के साथ भागो;

main(c,v)char**v;
{
    f(atoi(v[1]));
}

2

रूबी 2.3.1, 449 265 245 233 230 वर्ण

ऐसा लगता है कि एक माणिक उत्तर होना चाहिए, इसलिए यहां एक माणिक उत्तर है। यह वास्तव में चालाक नहीं है, उम्मीद है कि यहाँ कोई और अधिक चतुर होगा;)

गोल्फ संस्करण:

def m(n)
d,s=n.odd?? [[%w{MAF HMF}.sample],n/2]:[%w{RF LF}.sample.chars,(n-2)/2]
r=->f{l=f.size;q=($i-l)/2;($c=' '*$i)[q...l+q]=f;puts "(@#$c@)"}
$i=2*n-1;a='@'*$i
r[a]
(1..n-2).map{|x|(s...s+d.size)===x ?r[d[x-s]]:r['']}
r[a]
end

गोल्फ चाल:

  • एक कठोर स्ट्रिंग प्रक्षेप के साथ विधि घोषणा को बदलें
  • $ ग्लोबल्स को # {वैश्विक} की आवश्यकता नहीं है, केवल # $ वैश्विक
  • === रेंज के लिए .covers से कम है?

पठनीय संस्करण

def row(inner_width, fillchar='')
  padding = ( inner_width - fillchar.size) / 2
  (center =(' ' * inner_width))[padding...fillchar.size+padding]=fillchar
  puts "(@"+center+"@)"
end

def mooncake(n)
  decoration = n.odd?? [%w{ MAF HMF JCJ TTT }.sample] : %w{ ZJ LF RF CF }.sample.chars
  start_row = n.odd?? (n/2) : (n - 2) / 2
  inner_width = 2 * n - 1
  row(inner_width,'@'*inner_width)
  (1...(n-1)).each do |row|
    if (start_row ... start_row + decoration.size).include? row 
      row(inner_width,decoration[row - start_row])      
    else
      row(inner_width)      
    end
  end
  row(inner_width,'@'*inner_width)
end

परिक्षण

mooncake(3)
mooncake(4)
mooncake(5)
mooncake(6)

मैंने सरणी का उपयोग करके w / o को फिर से लागू किया, ऐसा लगता है कि हर कोई ऐसा कर रहा है।
रोब

1

मैं ऊब गया था ... यहाँ दो और संस्करण हैं:

PHP, 193 बाइट्स

function p($s){global$n;return"(@".str_pad($s,2*$n-3,$s?" ":"@",2)."@)
";}$p=[M,MA,R,HM][rand()&2|1&$n=$argv[1]];echo p(""),$e=str_repeat(p(" "),($n+$n%2)/2-2),$n&1?p($p.F):p($p).p(F),$e,p("");

Lmis´ उत्तर का एक बंदरगाह

PHP, 191 बाइट्स

for($p=[M,MA,R,HM][rand()&2|1&$n=$argv[1]].F;$i<$n*$w=2*$n+1;$i++)echo($x=$i%$w)?$w-1-$x?($y=$i/$w|0)%($n-1)&&1-$x&&$w-2-$x?$p[$n&1?$n>>1!=$y?9:$x-$n+1:($n-$x?9:$y-$n/2+1)]?:" ":"@":")
":"(";

एकल लूप में चरित्र द्वारा केक चरित्र को मुद्रित करना

टूट - फूट

for(
    $p=[M,MA,R,HM][rand()&2|1&$n=$argv[1]].F;   // pick decoration
    $i<$n*$w=2*$n+1;$i++)       // loop $i from 0 to $n*width-1:
echo                                // print ...
    $w-1-($x=$i%$w)                 // 1. not last column
        ?$x                         // 2. not first column
            ?
                ($y=$i/$w|0)%($n-1) // 3. not first or last line
                && 1-$x%($w-3)      // and not second or (width-2)th column
                ?$p[$n&1
                    ?$n>>1!=$y?3:1+$x-$n
                    :($n-$x?3:1+$y-$n/2)
                ]   ?               // 4. decoration character
                    :" "            // 4. else: blank
                :"@"                // 3. else: "@"
            :"("                    // 2. else: "("
        :")\n"                      // 1. else: ")"+newline
    ;

0

पायथन 3, 318 301 297 285 272 बाइट्स

DJMcMayhem की मदद से 17 बाइट्स बंद

Mbomb007 के लिए धन्यवाद 4 बाइट्स बंद

DJMcMayhem की बदौलत एक और 12 बाइट्स दस्तक दी

Mbomb007 की बदौलत एक और 13 बाइट्स से दस्तक दी

मेरा पहला गोल्फ कभी, तो यह सब बहुत अच्छा नहीं है। मैंने इस्तेमाल किया: al.ing math.ceil को y और str.format के रूप में z, घोंसले के शिकार प्रारूप, एकल पंक्ति आयात, लैम्ब्डा, और बिटवाइज़ ऑपरेशन प्लस कुछ अन्य चीजों के रूप में इसे प्राप्त करने के लिए।

def f(n):import random,math;y=math.ceil;z=str.format;i=y(2*n-5>>1);j=y(n-3>>1);return z("{a}{}{a}",z("{d}(@{}{b}F{c}@)\n{e}"," "*i,b=random.sample(["L","R"],1)[0],c=" "*(2*n-5-i),d=z("(@{}@)\n"," "*(2*n-3))*j,e=z("(@{}@)\n"," "*(2*n-3))*(n-3-j)),a=z("({})\n","@"*(2*n-1)))

Ungolfed संस्करण (अलग आयात, कोई उपनाम और कोई बिटवाइज़ ऑपरेशन नहीं):

def f(n):
    import random;
    import math;
    return "{a}{}{a}".format(
        "{d}(@{}{b}F{c}@)\n{e}".format(
            " "*(math.ceil((2*n-5)/2)),
            b=random.sample(["L","R"],1)[0],
            c=" "*((2*n)-(5+math.ceil((2*n-5)/2))),
            d="(@{}@)\n".format(" "*(2*n-3))*math.ceil((n-3)/2),
            e="(@{}@)\n".format(" "*(2*n-3))*(n-(3+(math.ceil((n-3)/2))))),
        a="({})\n".format("@"*(2*n-1)))

दिलचस्प बात यह है कि इसके गैर-बिटवाइज़ संस्करण का उपयोग करने के बाद भी सही आउटपुट प्राप्त होता है, हालाँकि, आउटपुट अलग है:

गैर बिटवाइस:

(@@@@@@@)
(@     @)
(@  LF @)
(@@@@@@@)

बिटवाइज़:

(@@@@@@@)
(@ LF  @)
(@     @)
(@@@@@@@)

आप आयात को फ़ंक्शन से बाहर ले जा सकते हैं और from ... import*कुछ बाइट्स बचाने के लिए उन्हें आयात करने के लिए टाइप कर सकते हैं
ब्लू

अच्छा जवाब, और साइट पर आपका स्वागत है! कुछ सुझाव: 1. लैंबडा फ़ंक्शन कम हैं, और 2. आप import math;y=math.ceilदो बाइट्स को बंद करने के लिए कर सकते हैं । यह आपको देगा import random;import math;y=math.ceil;lambda n:"{a}{}{a}".format("{d}(@{}{b}F{c}@)\n{e}".format(" "*(y((2*n-5)/2)),b=random.sample(["L","R"],1)[0],c=" "*((2*n)-(5+y((2*n-5)/2))),d="(@{}@)\n".format(" "*(2*n-3))*y((n-3)/2),e="(@{}@)\n".format(" "*(2*n-3))*(n-(3+(y((n-3)/2))))),a="({})\n".format("@"*(2*n-1)))जो 13 बाइट्स छोटा है।
DJMcMayhem

@DJMcMayhem बहुत बहुत धन्यवाद! मैंने अपना उत्तर अपडेट कर दिया।
एल। स्टीयर

मैं खुशी से मदद कर सकता है! एक और चीज जो आप शायद कर सकते हैं, वह है उर्फ formatचूंकि आप इसे बहुत कुछ कहते हैं। समस्या यह है, मैं बिल्कुल नहीं जानता कि कैसे एक सदस्य समारोह के लिए उपनाम (जैसे str.format) तो आप थोड़ा प्रयोग करना होगा। मैं सकारात्मक नहीं हूं, हालांकि यह छोटा होगा।
DJMcMayhem

4
अच्छा काम! मुझे खुशी है कि आप इस अभ्यास से बाहर हो गए :), हालांकि, मैं स्पष्ट करना चाहूंगा कि सजावट को विशिष्ट विनिर्देशों को फिट करने के लिए केंद्रित होना चाहिए। यह दर्शाने के लिए आपने अपना कोड बदलने का निर्णय लिया है या नहीं - क्या मैं पूछ सकता हूं कि आप अपनी पोस्ट में भी वर्तमान कोड रखते हैं? रखने के लायक अच्छा प्रयास, भले ही वह नियमों में से एक की उपेक्षा करता हो।
चंद्रमा खरगोश

0

C # 448 बाइट्स

golfed:

var v=n%2==0;int l=n+n-3,h=n-2,e=v?0:1,c=e+2;var c2=v?"MFZJLFRFCF":"MAFHMFJCJTTT";var r=new Random().Next(3+e);var f=new String(c2.Skip(c*r).Take(c).ToArray());var mc="";for (var i=0;i < h;i++) {var x="";if (!v && i==((h / 2))) { x=f;} else if (v && ((i==h / 2) || (i==(h/2)-1))) { x +=f[i%2==1?0:1];} var es=x.PadLeft((l/2)+1+e,' ').PadRight(l,' ');mc +="(@"+es+"@)\n";}var b="("+"".PadLeft(l+2, '@')+")";mc=b+"\n"+mc+ b; Console.WriteLine(mc);

इसका परीक्षण यहां करें

Ungolfed:

        var v = n % 2 == 0;
        int l = n + n - 3, h = n - 2, e = v ? 0 : 1, c = e + 2;
        var c2 = v ? "MFZJLFRFCF" : "MAFHMFJCJTTT";
        var r = new Random().Next(3 + e);
        var f = new String(c2.Skip(c * r).Take(c).ToArray());
        var mc = "";
        for (var i = 0; i < h; i++)
        {
            var x = "";
            if (!v && i == ((h / 2)))
            {
                x = f;
            }
            else if (v && ((i == h / 2) || (i == (h / 2) - 1)))
            {
                x += f[i % 2 == 1 ? 0 : 1];
            }
            var emptySpace = x.PadLeft((l / 2) + 1 + e, ' ').PadRight(l, ' ');
            mc += "(@" + emptySpace + "@)\n";
        }
        var b = "(" + "".PadLeft(l + 2, '@') + ")";
        mc = b + "\n" + mc + b;
        Console.WriteLine(mc);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.