कोड गोल्फ एबीसी: एएससीआईआई बॉक्स चैलेंज


14

दो सकारात्मक पूर्णांकों को देखते हुए, 'a' और 'b', एक ascii- कला "बॉक्स" का निर्माण करते हैं जो कि एक वर्ण चौड़ा और b वर्ण लंबा होता है। उदाहरण के लिए, '4' और '6':

****
*  *
*  *
*  *
*  *
****

सरल सही? यहाँ ट्विस्ट है: बॉक्स की बॉर्डर को "ए" और "बी" अल्टरनेटिंग के अक्षर होने चाहिए। यह शीर्ष बाएं कोने से शुरू होता है, और एक दक्षिणावर्त सर्पिल में जारी रहता है। उदाहरण के लिए, 4 और 6 के साथ पिछला उदाहरण होना चाहिए

4646
6  4
4  6
6  4
4  6
6464

A और B दो अंकों की संख्या हो सकती है। उदाहरण के लिए, इनपुट "10" और "3" को इसका उत्पादन करना चाहिए:

1031031031
1        0
3013013013

आउटपुट को अपेक्षाकृत कम रखने के लिए, आपको तीन या अधिक अंकों की संख्या का समर्थन करने की आवश्यकता नहीं है। इसके अलावा, चूंकि इनपुट सकारात्मक पूर्णांक तक सीमित हैं, इसलिए '0' एक अमान्य इनपुट है, जिसे आपको संभालना नहीं है।

यहाँ कुछ और परीक्षण मामले हैं:

Input: (3, 5)
Output:

353
5 5
3 3
5 5
353

Input: (1, 1)
Output:

1

Input: (4, 4)
Output:

4444
4  4
4  4
4444

Input: (27, 1)
Output:

271271271271271271271271271

Input: (1, 17)
Output:

1
1
7
1
1
7
1
1
7
1
1
7
1
1
7
1
1

Input: (12, 34):
Output:

123412341234
4          1
3          2
2          3
1          4
4          1
3          2
2          3
1          4
4          1
3          2
2          3
1          4
4          1
3          2
2          3
1          4
4          1
3          2
2          3
1          4
4          1
3          2
2          3
1          4
4          1
3          2
2          3
1          4
4          1
3          2
2          3
1          4
432143214321

आप किसी भी उचित प्रारूप में इनपुट और आउटपुट ले सकते हैं, और मानक कमियां प्रतिबंधित हैं। चूंकि यह कोड-गोल्फ है, बाइट्स जीत में सबसे छोटा जवाब!



क्या मुझे बाएं हाथ के कोने से घड़ी की दिशा में पैटर्न शुरू करना चाहिए?
लीक

@LeakyNun हां, यह आवश्यक है।
जेम्स

यदि a1 है तो यह बाईं दीवार है या दाईं दीवार है?
लीक

7
क्या पहला उदाहरण गलत नहीं है? (3,5) 3 चौड़ा और 5 लंबा होना चाहिए
ब्रायन

जवाबों:



4

सी #, 301 बाइट्स

मुझे यकीन है कि बहुत अधिक गोल्फिंग है जो यहां किया जा सकता है लेकिन मुझे खुशी है कि मुझे एक समाधान मिला जो काम किया।

मुझे एक बग मिला जहां नीचे की रेखा गलत क्रम में थी, लानत है!

a=>b=>{var s=new string[b];int i=4,c=b-2,k=a;var t="";for(;i++<2*(a+b);)t+=t.EndsWith(a+"")?b:a;s[0]=t.Substring(0,a);if(b>2){for(i=0;++i<b-1;)s[i]=(a<2?t.Substring(1,c):t.Substring(2*a+c))[c-i]+(a>1?new string(' ',a-2)+t.Substring(a,c)[i-1]:"");for(;--k>=0;)s[b-1]+=t.Substring(a+c,a)[k];}return s;};

पुराना संस्करण: 280 बाइट्स

a=>b=>{var s=new string[b];int i=4,c=b-2;var t="";for(;i++<2*(a+b);)t+=t.EndsWith(a+"")?b:a;s[0]=t.Substring(0,a);if(b>2){for(i=0;++i<b-1;)s[i]=(a<2?t.Substring(1,c):t.Substring(2*a+c))[c-i]+(a>1?new string(' ',a-2)+t.Substring(a,c)[i-1]:"");s[b-1]=t.Substring(a+c,a);}return s;};

2

पायथन 2, 199 बाइट्स

w,h=input()
s=(`w`+`h`)*w*h
r=[s[:w]]+[[" "for i in[0]*w]for j in[0]*(h-2)]+[s[w+h-2:2*w+h-2][::-1]]*(h>1)
for y in range(1,h-1):r[y][w-1],r[y][0]=s[w+y-1],s[w+h+w-2-y]
print"\n".join(map("".join,r))

2

रूबी, 128 बाइट्स

->w,h{s="%d%d"%[w,h]*q=w+h;a=[s[0,w]];(h-2).times{|i|a<<(s[2*q-5-i].ljust(w-1)+s[w+i,1])[-w,w]};puts a,h>1?(s[q-2,w].reverse):p}

ऊँचाई 1 होने पर न्यूलाइन को आउटपुट करता है।

Ideone लिंक: https://ideone.com/96WYHt


1
आप 4 बाइट्स के [w,h]*""बजाय कर सकते हैं "%d%d"%[w,h], और आपको चारों ओर कोष्ठक की आवश्यकता नहीं है s[q-2,w].reverse, लेकिन तब आपको एक जगह की आवश्यकता होगी :, इसलिए -1 बाइट।
जॉर्डन

2

जावास्क्रिप्ट, 213 212 202

c=>a=>{for(a=$=a,c=_=c,l=c*a*2,b=0,s=Array(l+1).join(c+""+a),O=W=s.substr(0,a),W=W.substr(0,a-2).replace(/./g," ");--_;)O+="\n"+s[l-c+_]+W+s[$++];return O+"\n"+[...s.substr(l-a-c+1,a)].reverse().join``}

निश्चित रूप से सुधार की गुंजाइश है।

संपादित करें: TheLethalCoder के लिए एक बाइट धन्यवाद सहेजा गया


मुझे लगता है कि `${c}${a}`.repeat(l+1)आप एक बाइट बचा सकते हैं।
नील

ओह, और ' W=W.substr(0,a-2).replace(/./g," ")के रूप में ही नहीं है W=" ".repeat(a-2)? (क्या आपका कोड वास्तव में काम करता है a=1?)
नील

2

सी, 311 बाइट्स

char s[5];sprintf(s,"%d%d",a, b);int z=strlen(s);int i=0;while(i<a){printf("%c",s[i++%z]);}if(b>2){i=1;while(i<b-1){char r=s[(a+i-1)%z];char l=s[(2*a+2*b-i-4)%z];if(a>1){printf("\n%c%*c",l,a-1,r);}else{printf("\n%c",l);}i++;}}printf("\n");if(b>1){i=0;while(i<a){printf("%c",s[(2*a+b-i-3)%z]);i++;}printf("\n");}

उपयोग में स्वचालित रूप से शामिल लाइब्रेरीज़ stdio.hऔर हैं string.h


2

जावास्क्रिप्ट (ईएस 6), 171 बाइट्स

(w,h)=>[...Array(h)].map((_,i)=>i?++i<h?(w>1?s[p+p+1-i]+` `.repeat(w-2):``)+s[w+i-2]:[...s.substr(p,w)].reverse().join``:s.slice(0,w),s=`${w}${h}`.repeat(p=w+h-2)).join`\n`

जहां \nशाब्दिक न्यूलाइन चरित्र का प्रतिनिधित्व करता है। एक दोहराया अंक स्ट्रिंग बनाता है, फिर यह तय करता है कि हम किस पंक्ति पर आधारित हैं; शीर्ष पंक्ति बार-बार आने वाले अंक स्ट्रिंग का प्रारंभिक टुकड़ा है, नीचे की पंक्ति (यदि कोई हो) स्ट्रिंग के बीच से एक उलट टुकड़ा है, जबकि स्ट्रिंग के अन्य भागों से लिए गए वर्णों का उपयोग करके हस्तक्षेप करने वाली पंक्तियां बनाई जाती हैं।


आप बाइट को बचाने के (w,h)=>लिए बदलकर करी का उपयोग कर सकते हैंw=>h=>
TheLethalCoder

0

TSQL, 291 बाइट्स

golfed:

DECLARE @ INT=5,@2 INT=4

,@t INT,@z varchar(max)SELECT @t=iif(@*@2=1,1,(@+@2)*2-4),@z=left(replicate(concat(@,@2),99),@t)v:PRINT iif(len(@z)=@t,left(@z,@),iif(len(@z)>@,right(@z,1)+isnull(space(@-2)+left(@z,1),''),reverse(@z)))SET @z=iif(len(@z)=@t,stuff(@z,1,@,''),substring(@z,2,abs(len(@z)-2)))IF @<=len(@z)goto v

Ungolfed:

DECLARE @ INT=5,@2 INT=4

,@t INT,@z varchar(max)
SELECT @t=iif(@*@2=1,1,(@+@2)*2-4),@z=left(replicate(concat(@,@2),99),@t)

v:
  PRINT
    iif(len(@z)=@t,left(@z,@),iif(len(@z)>@,right(@z,1)
      +isnull(space(@-2)+left(@z,1),''),reverse(@z)))
  SET @z=iif(len(@z)=@t,stuff(@z,1,@,''),substring(@z,2,abs(len(@z)-2)))
IF @<=len(@z)goto v

बेला


0

पायथन 3, 155 148 बाइट्स

7 और बाइट्स से दूर गोल्फ:

p=print
def f(w,h):
 s=((str(w)+str(h))*w*h)[:2*w+2*h-4or 1];p(s[:w])
 for i in range(h-2):p(['',s[-i-1]][w>1]+' '*(w-2)+s[w+i])
 p(s[1-h:1-h-w:-1])

के 2*w+2*h-4or 1लिए max(1,2*w+2*h-4)और के ['',s[-i-1]][w>1]लिए प्रतिस्थापित (s[-i-1]if w>1else'')

पिछला संस्करण:

p=print
def f(w,h):
 s=((str(w)+str(h))*w*h)[:max(1,2*w+2*h-4)];p(s[:w])
 for i in range(h-2):p((s[-i-1]if w>1else'')+' '*(w-2)+s[w+i])
 p(s[1-h:1-h-w:-1])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.