বর্ণমালা বাইরে সর্পিল!


13

নিম্নলিখিত স্ট্রিং দেখুন। একটি প্যাটার্ন লক্ষ্য?

ABEFNOPEFGH
ডিসি জিকিউআই
MHRJ
এলকেজেআই এসকে
DTL
তথা
BAZYXWV এন
EO
ডিপি
CQ
BAZYXWVUTSR

কারও কারও নজরে থাকতে পারে, এটি মূলত বর্ণমালার সর্পিল, যেখানে সারি / কলামগুলির মধ্যে দূরত্বগুলি ক্রমান্বয়ে 1 স্পেস / নিউলাইন দ্বারা বাড়ছে।

কঠোর সংজ্ঞা

  • আসুন একটি কাউন্টার সি থাকি , যা প্রাথমিকভাবে 0।
  • আমরা প্রথম লিখতে গ + 1 টি বর্ণমালার অক্ষর বাঁ দিক থেকে ডানদিকে: A
  • তারপর, উপর থেকে নীচে পরবর্তী (গ + 1 টি) (C + 2) / 2 অক্ষর (অ্যাড B): AB

  • বাম থেকে ডানে, পরের (সি + 1) (সি + 2) / 2 (যুক্ত C):

    AB
     C
    
  • এবং নীচে থেকে উপরে, পরবর্তী সি + 1 টি বর্ণ (যুক্ত D):

    AB
    DC
    
  • চক্রের শেষে পৌঁছেছে। সুতরাং, আসুন বর্ধিত (যা 1 হয়)। তারপরে, এটি প্রথম পদক্ষেপ থেকে ফিরে শুরু হয়, কেবলমাত্র তফাতটি হ'ল বর্ণের প্রথম সি + 1 বর্ণ ব্যবহার না করে আমরা এই চক্রের শেষ উপাদানটি থেকে শুরু করে পরবর্তী সি + 1 বর্ণ ব্যবহার করি ( Dএই ক্ষেত্রে, তাই আমরা চালিয়ে যাচ্ছি EFG...)। Zপৌঁছে গেলে এটি চক্র থেকে ফিরে আসে A

কার্য

একটি পূর্ণসংখ্যা এন দেওয়া (যা 1-সূচকের জন্য ইতিবাচক বা 0-সূচকের জন্য অ-নেতিবাচক), সর্পিলটির প্রথম এন চক্র আউটপুট ।

বিধি

  • আপনি হয় ছোট হাতের বা বড় হাতের বর্ণমালা ব্যবহার করতে পারেন তবে আপনার পছন্দটি অবশ্যই সামঞ্জস্যপূর্ণ হবে (কেবলমাত্র তাদের মধ্যে একটি ব্যবহার করুন, মিশ্রণের অনুমতি নেই)।

  • আপনি কোনও প্রোগ্রামিং ভাষায় কোনও মানক পদ্ধতির মাধ্যমে ইনপুট নিতে এবং আউটপুট সরবরাহ করতে পারেন , যখন উল্লেখ করা হচ্ছে যে এই লুফোলগুলি ডিফল্টরূপে নিষিদ্ধ।

  • গ্রহণযোগ্য আউটপুট ফর্ম্যাটগুলি: মাল্টলাইন স্ট্রিং, রেখার প্রতিনিধিত্বকারী স্ট্রিংগুলির একটি তালিকা, অক্ষরের একাধিক তালিকাসমূহের তালিকা, প্রতিটি একটি লাইন উপস্থাপন করে বা অন্য যে কোনও কিছুকে আপনি উপযুক্ত বলে মনে করেন। আপনি যদি প্রথম ফর্ম্যাটটি না চয়ন করেন তবে আপনার কোডটির একটি প্রিন্ট-প্রিন্ট সংস্করণ অন্তর্ভুক্ত করা ভাল হবে।

  • এটি , তাই বাইটগুলির মধ্যে সংক্ষিপ্ততম কোড (প্রতিটি ভাষায়) যা প্রয়োজনীয়তা পূরণ করে!


পরীক্ষার মামলা

ইনপুট পূর্ণসংখ্যাটি একটি নতুন লাইনের মাধ্যমে তার সম্পর্কিত আউটপুট দ্বারা পৃথক করা হবে এবং ড্যাশগুলি ব্যবহার করে পরীক্ষাগুলি পৃথক করা হবে। নোট করুন যে এগুলি 1-সূচকযুক্ত।

1

এবি
ডিসি

--------

2

ABEF
ডিসি জি
এমএইচ
LKJI 

--------

3

ABEFNOP
ডিসি জিকিউ
MHR
এলকেজেআই এস
মোর্চা
চবি
BAZYXWV

-------

4

ABEFNOPEFGH
ডিসি জিকিউআই
MHRJ
এলকেজেআই এসকে
DTL
তথা
BAZYXWV এন
EO
ডিপি
CQ
BAZYXWVUTSR

-------
5

ABEFNOPEFGHFGHIJ
ডিসি জিকিউইকে
MHRJL
এলকেজেআই এসকেএম
DTLN
CUMO
BAZYXWV NP
EOQ
ডিপিআর
CQS
BAZYXWVUTSR টি
রাবি
QV
পি ডব্লিউ
বলদ
NMLKJIHGFEDCBAZY

------

6

ABEFNOPEFGHFGHIJSTUVWX
ডিসি জিকিউকি
MHRJLZ
এলকেজিআই এসকেএমএ
DTLNB
CUMOC
BAZYXWV এনপিডি N
EOQE
DPRF
CQSG
BAZYXWVUTSR TH
রুই
QVJ
PWK
OXL
NMLKJIHGFEDCBAZY এম
এস এন
রিটার্নিং
QP
PQ
অথবা 
NMLKJIHGFEDCBAZYXWVUTS

আমি মনে করি, পরীক্ষাগুলি n = 1,2,3,5,6 হওয়া উচিত।
টিফিল্ড

উত্তর:


9

কাঠকয়লা , 31 বাইট

F⮌…⁰NB⁺²⊘×ι⁺³ι⭆α§α⁺λ÷×ι⊕×ι⁺⁹⊗ι⁶

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। দ্রষ্টব্য: ডিভেরবোসিফায়ার কোনও কারণে একটি পিছনে বিভাজককে আউটপুট দেয়। ব্যাখ্যা:

F⮌…⁰NB

আকারের বিপরীত ক্রমে বাক্সগুলি আঁকুন (বৃহত্তম থেকে ক্ষুদ্রতম)।

⁺²⊘×ι⁺³ι

বাক্সের আকার গণনা করুন।

⭆α§α⁺λ

ঘোরানো বর্ণমালা ব্যবহার করে বাক্সের সীমানা আঁকুন।

÷×ι⊕×ι⁺⁹⊗ι⁶

বাক্সের উপরের বামে প্রদর্শিত চিঠিটি গণনা করুন (0-ইনডেক্সড)।


6

পাইথন 2 , 176 বাইট

n=input()
k=n*-~n/2+1
a=eval(`[[' ']*k]*k`)
x=y=z=0
for s in range(4*n+4):exec s/4*(s/4+1)/2*"if'!'>a[y][x]:a[y][x]=chr(z%26+65);z+=1\nx+=abs(2-s%4)-1;y+=s%2-s%4/3*2\n"
print a

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

আমরা ডান আকারের ফাঁকা অ্যারে তৈরি করি, তারপরে উপরের-বাম কোণে শুরু করে এটির মতো এটি সরিয়ে নিন:

  • 1 পদক্ষেপ 1, 1 পদক্ষেপ ↓, 1 পদক্ষেপ ←, 1 পদক্ষেপ ↑

  • 3 পদক্ষেপ 3, 3 পদক্ষেপ ↓, 3 পদক্ষেপ ←, 3 পদক্ষেপ ↑

  • 6 পদক্ষেপ →, 6 পদক্ষেপ ↓, 6 পদক্ষেপ ←, 6 পদক্ষেপ ↑

  • 10 পদক্ষেপ 10, 10 পদক্ষেপ ↓, 10 পদক্ষেপ ←, 10 পদক্ষেপ ↑ ↑

  • ...

যতবারই আমরা একটি ফাঁকা ঘর খুঁজে পাই, আমরা সেখানে একটি চিঠি রাখি এবং বর্ণমালাটির পরবর্তী অক্ষরে চক্রটি রেখেছি।

কোডটিতে, s%4দিকটি (→ ↓ ← ↑), এবং আমরা এটি বহুবার পদক্ষেপ নিই:

TriangularNumber(s/4) = s/4*(s/4+1)/2.

গল্ফের সুযোগ

  • সেখানে মানচিত্রে একটি খাটো উপায় আছে কি s%4করতে 1,0,-1,0চেয়ে abs(2-s%4)-1?

  • সেখানে মানচিত্রে একটি খাটো উপায় আছে কি s%4করতে 0,1,0,-1চেয়ে s%2-s%4/3*2?

ক্রেডিট

  • মিঃ এক্সকোডার একটি বাইট সংরক্ষণ করেছেন।

2
+1 বাহ, এটি কেবল উজ্জ্বল। এটি কীভাবে কাজ করে তা নির্ধারণ করতে আমাকে কিছুক্ষণ সময় নিল। আমি এর জন্য একটি শর্টহ্যান্ড পেয়েছি 21/(s%4+3)%3-1: s%2-2*(s%4>2)( 179 বাইট )। এটি এখনও গল্ফযোগ্য হতে পারে
মিস্টার এক্সকোডার

4

সি,  305  281 বাইট

@ মিঃ কে ধন্যবাদ চারটি বাইট সংরক্ষণের জন্য এক্সকোডার!

#define L(x,y)l[x][y]=a++%26+65;
#define F for(
c,i,j,a,p;f(n){char**l=calloc(8,i=a=n*n*4);F;i--;memset(l[i],32,a))l[i]=malloc(a);F c=a=p=i=0;c<n;++c){F i=p;i<c+p+!c;)L(j=0,c+i++)F p=i;j<=-~c*(c+2)/2;)L(j++,c+i)F;c+i-1;)L(j-1,c+--i)F i=0;i<=c;)L(j+~i++,0)}F i=0;i<j;)puts(l[i++]);}

এটি অনলাইন চেষ্টা করুন!


1
আমি দেখতে প্রথমবারের #defineজন্য for((যে আসলে বাইট সংরক্ষণ)। আমার কাছ থেকে +1 :)
কেভিন ক্রুইজসেন 15

2

পাইথন 2 , 262 260 254 245 বাইট

lambda n:[[[' ',chr(65+(4*(i<j)+sum((i<j)*8+2+I*[5,9][i<j]+sum(2*R(I))for I in R(S(i,j)-1))+[i+j,-i-j][i<j])%26)][max(i,j)==S(i,j)*-~S(i,j)/2or i*j<1]for i in R(1+n*-~n/2)]for j in R(1+n*-~n/2)]
R=range
S=lambda x,y:int((8*max(x,y)+1)**.5+.99)/2

এটি অনলাইন চেষ্টা করুন!

আরও গণিত সহ নতুন পদ্ধতি!

চর-তালিকার একটি তালিকা ফেরত দেয়।


পুরাতন রুপ:

পাইথন 2 , 322 321 308 298 বাইট

R=range
n=input()
w=1+n*-~n/2;r=[w*[' ']for _ in R(w)];r[0][0]='A';l=R(1,w*w*9);c=lambda:chr(65+l.pop(0)%26)
for i in R(n+1):
 w=1+i*-~i/2;W=w-i
 for x in R(W,w):r[0][x]=c()
 for y in R(1,w):r[y][w-1]=c()
 for x in R(1,w):r[w-1][w+~x]=c()
 for x in R(1,w-W):r[w+~x][0]=c()
for l in r:print`l`[2::5]

এটি অনলাইন চেষ্টা করুন!


@ মিঃ এক্সকোডার কেবলমাত্র .49সে ক্ষেত্রে পর্যাপ্ত পর্যাপ্ত নয় , নাকি এটি খুব বড় ইনপুটগুলির জন্য ব্যর্থ হয়?
কেভিন ক্রুইজসেন 14

1
@ কেভিন ক্রুজসেন নিশ্চিত নন, তবে এটি 260 বাইট নিশ্চিতভাবে কাজ করে ।
মিঃ এক্সকডার 14

পাইথনকে আমি সেভাবে ভালভাবে জানি না, তবে i<jআপনি চারবার ব্যবহার করার কারণে এটি কি কোনও ইনলাইন-ভেরিয়েবল তৈরি করা সম্ভব ?
কেভিন ক্রুইজসেন 14

1
+1==1+আমার আগের পদ্ধতিটি থেকে গল্ফ করে 245 বাইটস
মিঃ এক্সকডার

1

পার্ল 5, 177 +2 (-nl) = 179 বাইট

এক্সকালির জন্য 2 বাইট সংরক্ষণ করা হয়েছে

sub n{chr 65+$c++%26}@O=(n);while($,++<$_){$_.=$"x$,for@O;push@O,($"x length$O[0])x$,;$O[0]=~s/ /n/eg;s/ $/n/e for@O;1while$O[-1]=~s/.*\K /n/e;s/^ /n/e for reverse@O}print for@O

এটি অনলাইনে চেষ্টা করুন


-1পরিবর্তে ব্যবহার করে আপনি একটি বাইট সংরক্ষণ করতে পারেন $#O। এছাড়াও ব্যবহার $,পরিবর্তে $nআপনি স্থান সামনে অপসারণ করতে দেবে forমধ্যে$_.=$"x$n for@O
Xcali

ধন্যবাদ, আমি অন্যান্য উন্নতি খুঁজছিলাম কিন্তু মুহুর্তের জন্য খুঁজে
পাইনি

2 আরও বেশি বাইট Regex পরিবর্তন সংরক্ষিত s/ (?=\S)/n/eকরারs/.*\K /n/e
Nahuel Fouilleul

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