আমাকে একটি মুনকেক বানাও!


31

মিড শরত উত্সব শুরু হয়েছে!

দুর্ভাগ্যক্রমে, আমার সমস্ত মুনকেকগুলি চুরি হয়ে গেছে - তারা আমার মতো ছোট লোকের জন্য খুব ব্যয়বহুল হয়ে উঠছে, এবং আমি আশঙ্কা করছি যে এই বছর আমি কোনও খাবার খেতে পারব না!

তাই আমি সাহায্যের জন্য আপনার দিকে ফিরে। আপনি আমাকে কিছু করতে সক্ষম হবে?

অচেতনদের জন্য, আমি আপনাকে মুনকেকের মতো দেখতে শিক্ষিত করি।


মুনকেক বিভিন্ন আকারে আসে!
সুতরাং আমি আপনাকে আমার ইনপুট দেব , এন , যখন আমি একটি চাই।

আমি যে আউটপুটটি চাই তার কয়েকটি উদাহরণ এখানে দেওয়া হয়েছে :

আকারের মুনকেক = 3:

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

আকারের মুনকেক = 6:

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

অর্থাৎ, আকার একটি mooncake এন হল:

  • এন লাইন উচ্চ
  • 2n - 1 @ গুলি দীর্ঘ
  • 2n + 1 টি অক্ষর দীর্ঘ (@ গুলি এবং বন্ধনী)

এবং আপনি ভাল আমাকে আপনার অতি ক্ষুদ্র অনুশীলন মুনকেকস নিক্ষেপ না!
ধরুন ইনপুট সর্বদা n> = 3 থাকবে

মুনকেকসে নিম্নলিখিত সজ্জাগুলির একটি রয়েছে :

  • এম এফ
  • MAF
  • HMF
  • JCJ
  • ttt
  • ZJ
  • এলএফ
  • আরএফ
  • সিএফ

কোনটি, এটি গুরুত্বপূর্ণ নয় - যতক্ষণ না এটি উল্লম্ব এবং অনুভূমিকভাবে কেন্দ্রিক হয়
এটি উল্লম্ব বা অনুভূমিকভাবেও লেখা যেতে পারে!

আমি বিভিন্ন চাই!
আপনি যদি সত্যিই আমাকে একই মুনকেক দুটি করতে যাচ্ছেন, তবে সাজসজ্জাটি আরও ভাল হবে!

এটি হ'ল, ঠিক একই ইনপুট সহ আপনার প্রোগ্রামটির একাধিক মৃত্যুদন্ড অবশ্যই সর্বদা একই সাজসজ্জা দেয় না

আমি আপনার চাঁদের পিঠা খেতে অপেক্ষা করতে পারি না, তাই যত তাড়াতাড়ি আমি সেগুলি পেতে পারি ( আপনার কোডটি সংক্ষিপ্ত ) আরও ভাল!

শুভকামনা!


সজ্জা সম্পর্কে যারা ভাবছেন তাদের জন্য:
এগুলি হ'ল মধ্য-শরৎ উত্সবের বিকল্প বিকল্পগুলির আদ্যক্ষর।
এই পোস্টের শীর্ষে লিঙ্কিত উইকিপিডিয়া পৃষ্ঠায় একটি তালিকা পাওয়া যাবে।


ব্যাখ্যা:

শীর্ষস্থানীয় এবং অনুসরণযোগ্য শ্বেত স্থান সম্পর্কিত কোনও নিয়ম নেই
আপনার যতটুকু বা আপনার পছন্দ মতো সামান্য!

অলঙ্করণগুলি অবশ্যই আপনার মুনকেকের খুব মাঝখানে থাকতে হবে!
অনুভূমিক সজ্জাতে, এর অর্থ এটি আপনার কেকের মাঝের লাইনে থাকতে হবে এবং সজ্জা স্ট্রিংয়ের বাম এবং ডানদিকে অক্ষরের সংখ্যা সমান হতে হবে।
উল্লম্ব সজ্জাতে, এর অর্থ এটি আপনার কেকের মাঝের কলামে থাকতে হবে এবং সজ্জাটির উপরে এবং নীচের অক্ষরের সংখ্যা সমান হতে হবে।

সমস্ত সজ্জা ব্যবহার করা উচিত নয়!
একমাত্র প্রয়োজন হ'ল যে কোনও ইনপুট এন এর জন্য একাধিক সম্ভাবনা থাকতে হবে। সম্ভাবনাগুলিও সমান হওয়ার দরকার নেই।

ফাংশন গ্রহণযোগ্য।


2
হাই, পিপিসিজিতে আপনাকে স্বাগতম! এটি একটি দুর্দান্ত প্রথম পোস্টের মতো দেখাচ্ছে। সাধারণত আমরা প্রস্তাবিত চ্যালেঞ্জগুলির জন্য স্যান্ডবক্স ব্যবহার করার পরামর্শ দিই । সেখানে আপনি অন্যের কাছ থেকে প্রতিক্রিয়া পেতে পারেন এবং এখানে পোস্ট করার আগে এমন বিষয়গুলির সাথে চ্যালেঞ্জটি নিখুঁত করতে পারেন perfect বলা হচ্ছে, আপনার চ্যালেঞ্জটি সুচিন্তিত মনে হচ্ছে। আমার কাছ থেকে +1 আপনার প্রথম উদাহরণ সম্পর্কিত একটি প্রশ্ন যদিও এটি পড়ে MAFএবং পড়ে না কেন MF? আমি Aআপনার সাজসজ্জা-বিকল্পগুলি দেখতে পাচ্ছি না ।
কেভিন ক্রুইজসেন

1
ধন্যবাদ! দুঃখিত, আমি স্যান্ডবক্স সম্পর্কে সচেতন ছিলাম না। আমি কি কেবল এইটিকে ছেড়ে যেতে পারি? সজ্জা সম্পর্কে - এটি একটি ভুল ছিল। আমি অনুমোদিত সজ্জায় এমএএফ যোগ করেছি। মতামত খুব প্রশংসা!
চাঁদ খরগোশ

1
শীর্ষস্থানীয় এবং পিছনের স্থানগুলি সম্পর্কে কোনও নিয়ম নেই। আপনার উপর!
চাঁদ খরগোশ

3
আরে, আসল মুনকেকগুলি পেতে আমাকে নিজের মুনকেক মেশিনে ম্যানুয়ালি এগুলি টাইপ করতে হবে!
চাঁদ খরগোশ

উত্তর:


9

পাইথ, 71 65 59 58 বাইট

@ স্টিভেনএইচকে 1 বাইট সংরক্ষণ করা হয়েছে।

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

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

এত প্যাডিং।


2
এই উত্তরটি একই ভাষায় এটির নীচের উত্তর থেকে কীভাবে আলাদা তার বাদাম ...
ম্যাজিক অক্টোপাস উরন

আপনি প্রতিস্থাপন পর এক বাইট সংরক্ষণ করতে পারবেন ?%Q2সঙ্গে @,(দুটি বিকল্প ক্রম বিপরীত) ... Q। আমি (আব) এটিকে আমার নিজের পাইথের উত্তরটি নীচে গল্ফ করার জন্য ব্যবহার করেছি।
স্টিভেন এইচ।

@StevenH। ধন্যবাদ, আমি সবসময় মডুলার ইনডেক্সিং সম্পর্কে ভুলে যাই।
পূর্কাকুডারী

7

জাভাস্ক্রিপ্ট ES6, 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.

কোড-গল্ফে আমার প্রথম প্রচেষ্টা। এটি সম্ভবত আরও গল্ফ করা যেতে পারে।

4 বাইট সংরক্ষণ করেছেন @ETHProductions ধন্যবাদ

সম্পাদনা করুন আমি সন্তুষ্ট করার জন্য ব্যবহারের স্বাধীনতা গ্রহণ করেছি :Date.now()%2 new Date%2

ঠিক একই ইনপুট সহ আপনার প্রোগ্রামটির একাধিক মৃত্যুদন্ড অবশ্যই সর্বদা একই সাজসজ্জা দেয় না

এটি আমাকে আরও 7 বাইট ওভার বাঁচাতে দেয় +Math.random()>.5

আরনাউল্ডকে ধন্যবাদ দিয়ে আরও 4 টি বাইট সংরক্ষণ করা হয়েছে


পিপিসিজিতে আপনাকে স্বাগতম, এবং দুর্দান্ত প্রথম উত্তর! আমি বিশ্বাস করি ['MA','HA'][r]+'F'যে গল্ফ করা যেতে পারে 'MH'[r]+'AF'
ETH প্রোডাকশনস

1
আপনি প্রতিস্থাপন [' R ',' C '][r]এবং দুটি ব্যাকটিক দিয়ে " ${'RC'[r]} "প্রতিস্থাপন করে দুটি বাইট সংরক্ষণ করতে পারেন "
ETH প্রোডাকশনস

1
এবং এর ['MA','HM'][r]+'F'তুলনায় আসলে দুটি বাইট দীর্ঘ ['MAF','HMF'][r];)
ইটিএইচ প্রোডাকশনস

2
আপনি এর ' @'[+!s]পরিবর্তে ব্যবহার করতে পারেন(s?' ':'@')
আর্নল্ড

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 বাইট

বাফার হিসাবে ইনপুট নেয় (উদাহরণস্বরূপ এন এর বিষয়বস্তু হিসাবে এন নম্বর সহ একটি ফাইল )।

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

এটি এটি এক্সএক্সডি ফর্ম্যাটে অপ্রিন্টযোগ্য নিয়ন্ত্রণ অক্ষরের সাথে রয়েছে:

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) আপনি যখন "ইনপুট" এর পরিবর্তে "যুক্তিগুলিতে" ইনপুট @aরাখেন, @bএটি আরগ 1, আরগ 2 ইত্যাদির পূর্বনির্ধারিত হয় তবে এটি একটি ভি নির্দিষ্ট বৈশিষ্ট্য। "aDআপনার শুরুতে যেহেতু এটি প্রযুক্তিগতভাবে কোনও বিষয় নয় , তবে আমি কেবল ভেবেছিলাম এটি উল্লেখ করব। 2) আপনি যদি এর dd@apপরিবর্তে করেন তবে আপনি একটি বাইট অফ নিতে পারেনY@apdd
ডিজেএমসিএমহেহম

@DJMcMayhem হায়রে dd@ap যথেষ্ট কাজ করে না
জর্দান

dd@aPকাজ করে, তবে তারপরে লাইনের নিচে একটি অতিরিক্ত jএবং অতিরিক্ত প্রয়োজন k
জর্ডান

5

পিএইচপি, 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>

ইতিহাস

রেভ 1: প্রাথমিক সংস্করণ; সমস্ত আকার (ছোট কেক সহ), সমস্ত সজ্জা, সমস্ত সম্ভাব্য দিকনির্দেশ

রেভ। 2: সরানো ছোট কেক (-36 বাইট), পুনর্গঠিত সাজসজ্জার বিকল্পগুলি, একটি সজ্জা আইটেম (-21) এবং একটি একক বাইট গল্ফ (-1) সরানো হয়েছে।

রেভ 3: চার থেকে কম সজ্জা; (-17), কেবল বিজোড় আকার (-18) প্লাস মাইনর গল্ফিংয়ের জন্য অনুভূমিক (-8)।

রেভ 4: জার্গকে "পেইন্ট কেক" অংশটি গল্ফ করার জন্য ধন্যবাদ; তিনি একটি আশ্চর্যজনক (-31) খুলেছেন।
আমার অতিরিক্ত গল্ফিং সহ আরও একটি -6 এবং স্ট্রিংগুলির অ্যারের পরিবর্তে একটি একক স্ট্রিং ব্যবহার করার জন্য -27।

রেভ। ৫: -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?"@":" ")."@)";}
জার্গ হালসারম্যান

@ জার্গহেলসারম্যান: প্রচুর ধন্যবাদ। আমাকেও একইরকম অভিব্যক্তি নিতে হয়েছিল !$i|$‌​i==$n-1?"@":" "; যদিও এটি সঠিক, ত্রিনিদী কেবল আপনার (আমার মেশিনে) গ্রহণ করবে না।
তিতাস


1
এই আপনি ছয় বাইট সংরক্ষণ পিষ্টক পেইন্ট করুন: for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)==0])."@)\n";এছাড়া, এটিও মনে হচ্ছে আপনি "ম্যাড" আপনার decos golfing ;-) পেয়েছিলাম
Christallkeks

4

জাভা 7, 399 349 বাইট

@ ডজ এবং @ কেভিন ক্রুইজসেনের সহায়তায় আপডেট সংস্করণ:

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"পুনরাবৃত্তি হয়?
সাইয়েস

পছন্দ করুন যদিও সেক্ষেত্রে, আমি ভেবেছিলাম আমি এটি উল্লেখ করব। নিস!
চাঁদ খরগোশ

আপনার মতামতের জন্য ধন্যবাদ :) সত্য, জাভা গল্ফ করার পক্ষে খুব অনুকূল নয়, তবে এটি করা বেশ মজাদার: পি। সম্ভবত আমি লুপগুলি এবং ডেকোরেশনটির সূচনা 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
কিউব্রেট

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 ইনপুট প্যারামিটার (এসটিডিআইএন থেকে পড়া)
  • fসজ্জা উপসর্গ (প্রত্যয় অন্তর্ভুক্ত F)
  • oঅদ্ভুততা n(শুধুমাত্র একবার ব্যবহৃত হয়, কিন্তু ifবিবৃতি প্রকাশগুলি গ্রহণ করে না)
  • lউপরের উল্লম্ব বর্ণের সারি বা 0অনুভূমিক সাজসজ্জার জন্য
  • uনীচের উল্লম্ব বর্ণের সারি বা 0অনুভূমিক সাজসজ্জার জন্য
  • h অনুভূমিক সাজসজ্জার সারি (উল্লম্ব সজ্জা দ্বারা ওভাররাইট করা হয়)
  • d প্রসাধন উপসর্গ সজ্জা সূচক (অনুভূমিক জন্য 0/1 বা উল্লম্ব জন্য 1/3)
  • cn-3স্পেসের স্ট্রিং
  • s প্রতিটি সারির জন্য আউটপুট স্ট্রিং
  • %1সারি সংখ্যা, তবে nপ্রথম সারির জন্যও সেট করা হয়েছে, যাতে প্রথম এবং শেষের উভয় সারি @ফাঁকা জায়গাগুলির পরিবর্তে গুলি ব্যবহার করে ।

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

গল্ফিং কৌশল:

  • এর স্ট্যাবি স্ট্রিং ইন্টারপোলেশন সহ পদ্ধতি ঘোষণাকে প্রতিস্থাপন করুন
  • b গ্লোবালগুলির # {গ্লোবাল} প্রয়োজন হয় না, কেবল # $ বিশ্বব্যাপী
  • === ব্যাপ্তির চেয়ে রেঞ্জের চেয়ে কম?

পাঠযোগ্য সংস্করণ

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)

আমি অ্যারে ব্যবহার করে ডাব্লু / ও-র পুনর্বিবেচনা করেছি, দেখে মনে হচ্ছে সবাই এটি করছে।
রব

1

আমি বিরক্ত হয়ে গেলাম ... এখানে আরও দুটি সংস্করণ রয়েছে:

পিএইচপি, 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´ উত্তর একটি বন্দর

পিএইচপি, 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 বাইট

ডিজেএমসিএমহেমের সহায়তায় 17 বাইট ছিটকে গেল

Mbomb007 ধন্যবাদ 4 বাইট ছিটকে

ডিজেএমসিমেহেমকে ধন্যবাদ জানিয়ে আরও 12 বাইট ছিটকে গেল

আরও 13 টি বাইট ছুঁড়েছে এমবম্ব007 এর জন্য ধন্যবাদ

আমার প্রথম গল্ফ, তাই এটি এত দুর্দান্ত কিছু নয়। আমি ব্যবহার করেছি: 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)))

অবরুদ্ধ সংস্করণ (পৃথক আমদানি, কোনও উপকরণ এবং কোনও বিটওয়াইজ অপারেশন):

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

মজার বিষয় হচ্ছে এর নন-বিটওয়াইজ সংস্করণটি ব্যবহার করে এখনও সঠিক আউটপুট পাওয়া যায়, তবে, আউটপুটটি ভিন্ন:

অ Bitwise:

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

bitwise:

(@@@@@@@)
(@ 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 বাইট সংক্ষিপ্ত।
ডিজেএমসিএমহেম

@ ডিজেএমসিমেহেম অনেক ধন্যবাদ! আমি আমার উত্তর আপডেট।
এল। স্টিয়ার

আমি সাহায্য করতে পেরে আনন্দিত! আর একটি জিনিস যা আপনি সম্ভবত করতে পারতেন তা হ'ল উপন্যাস হ'ল formatযেহেতু আপনি এটিকে অনেক বেশি কল করেছেন। সমস্যাটি হ'ল, কোনও সদস্যের ফাংশন (পছন্দ করা str.format) করার জন্য কীভাবে উপন্যাস দিতে হয় তা আমি ঠিক জানি না তাই আপনাকে কিছুটা পরীক্ষা করতে হবে। আমি ইতিবাচক নই যদিও এটি আরও কম হবে।
ডিজেএমসিএমহেম

4
চমৎকার কাজ! আমি আনন্দিত যে আপনি এই অনুশীলনটি থেকে কিছু পেয়েছেন :) তবে আমি স্পষ্ট করে বলতে চাই যে চ্যালেঞ্জের নির্দিষ্টকরণের সাথে সজ্জাটি কেন্দ্রীভূত করতে হবে। এটি প্রতিবিম্বিত করার জন্য আপনি নিজের কোড পরিবর্তন করার সিদ্ধান্ত নিচ্ছেন বা না করুন - আমি কি জিজ্ঞাসা করতে পারি যে আপনি বর্তমান কোডটি আপনার পোস্টেও রেখেছেন? পালন করার উপযুক্ত প্রচেষ্টা, যদিও এটি কোনও নিয়মের অবহেলা করে।
চাঁদ খরগোশ

0

সি # 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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.