একটি দুর্দান্তভাবে ব্যবধানযুক্ত ASCII সর্পিল


13

এই সর্পিল বিবেচনা করুন

###########
#
# #######
# #     #
# # ### #
# # # # #
# # # # #
# #   # #
# ##### #
#       #
#########

কেন্দ্র থেকে শুরু:

  • প্রথম লাইনে (উপরের দিকে) 3 টি অক্ষর রয়েছে।
  • দ্বিতীয় লাইনে একই সংখ্যক অক্ষর রয়েছে (3)
  • এরপরে, আমরা পরবর্তী দুটি পক্ষের জন্য দুটি চর (5) যুক্ত করব।
  • এই প্যাটার্নটি চলতে থাকে, দুটি পক্ষ একই দৈর্ঘ্য পরে দৈর্ঘ্য 2 দ্বারা বাড়িয়ে দেয়।

আমি এন লাইনের জন্য এই সর্পিল উত্পন্ন করতে চাই।

  • যে কোনও ভাষায় লিখুন।
  • ইনপুট / যুক্তি ইত্যাদি আপনার সর্পিলের রেখার সংখ্যা।
  • প্রতিটি লাইন পূর্ববর্তী লাইনের শেষ বর্ণের সাথে শুরু হয় পূর্ববর্তী লাইনের 90 ডিগ্রি ঘড়ির কাঁটার দিকে।
  • যতক্ষণ না সর্পিল রেখার উপাদানগুলি লাইন করা থাকে ততক্ষণ প্রতিটি লাইনের আগে বা পরে কতটা শ্বেতস্পেস থাকে তা আমি বিবেচনা করি না।
  • আপনার চয়ন করা কোনও অ-হোয়াইটস্পেস অক্ষর দিয়ে সর্পিল আঁকতে আউটপুট পাঠ্য।
  • স্বল্প সংখ্যক বাইটে এটি করার চেষ্টা করুন।

পরীক্ষার কেস (আউটপুট হিসাবে একটি হ্যাশ ব্যবহার করে):

এন = 1

#
#
#

এন = 2

###
#
#

এন = 3

###
# #
# #
  #
  #

এন = 10

###########
#
# #######
# #     #
# # ### #
# # # # #
# # # # #
# #   # #
# ##### #
#       #
#########

@ শেগি "আপনার চয়ন করা কোনও অ-হোয়াইটস্পেস অক্ষর দিয়ে সর্পিল আঁকতে আউটপুট পাঠ্য।" হ্যাঁ, আপনি যা পছন্দ করেন
এজেফারাডে


3
প্রাথমিক চিত্রটির *পরিবর্তে একটি চিত্র রয়েছে #। প্রত্যাশিত?
ওয়ার্নিশ

@ ওয়ার্নিশ এটি একটি সহায়ক সূচনার পয়েন্ট হিসাবে লক্ষ্য করা হয়েছিল তবে আমি মনে করি এটি বিভ্রান্তিকর। আপনি নিজের পছন্দ মতো যে কোনও চরিত্র ব্যবহার করতে পারেন।
এজেফারাডে

উত্তর:


11

05 এ বি 1 ই , 13 11 বাইট

কোড:

দুটি বাইট সংরক্ষণের জন্য এমিগিনার ধন্যবাদ !

LDÈ-Ì'#3Ý·Λ

05AB1E এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

সর্পিল প্রতিটি পৃথক প্রান্ত দৈর্ঘ্য 3 দিয়ে শুরু হয় এবং ধীরে ধীরে প্রতিটি দুটি ধাপ দুই দ্বারা বৃদ্ধি করে:

3,3,5,5,7,7,9,...

প্রান্তযুক্ত একটি সর্পিলের জন্য , আমাদের কেবল এই তালিকাটি আকার ছাঁটাই করতে হবে । নিম্নলিখিত কোডের টুকরা দিয়ে এটি করা হয়:এনএনএন

L                # Create a list from [1 .. input]
 DÈ              # Duplicate and check for each number if even
   -             # Subtract that from the first list
    Ì            # Add 2

এটি মূলত আমাদের পছন্দসই দৈর্ঘ্যের তালিকা দেয়।

     '#          # Push the '#' character
       0246S     # Push the array [0, 2, 4, 6]
            Λ    # Write to canvas

ক্যানভাস একটি ফাংশন হিসাবে কাজ করে যা তিনটি পরামিতিগুলি পপ করে (যেখানে ডানদিকের প্যারামিটারটি প্রথমে পপ করা হয়): <দৈর্ঘ্য (গুলি)> , <চর (গুলি)> , <দিক (গুলি)> । দিকনির্দেশ পরামিতি এই ক্ষেত্রে সংখ্যার একটি তালিকা। দিকগুলির সাথে মিল থাকা সংখ্যাগুলি হ'ল:

[70162543]

এই ক্ষেত্রে, [0, 2, 4, 6] দিকনির্দেশের তালিকার সাথে সম্পর্কিত [↑, →, ↓, ←]। দৈর্ঘ্যের তালিকা থেকে প্রাপ্ত প্রতিটি দৈর্ঘ্যের উপর ক্যানভাস পুনরাবৃত্তি করে, '#' অক্ষর ব্যবহার করে এবং দিকনির্দেশের তালিকার উপর চক্রাকারে পুনরাবৃত্তি করে।


0246S=3Ý·
এমিগিনা

@ এমিগনা আহ আমি তা ভেবে দেখিনি, ধন্যবাদ!
আদনান

6

পাইথন 2 , 176 170 165 161 157 বাইট

g=lambda a,r:r and g(map(''.join,zip(*a))[::-1],r-1)or a
R=['#']
n=1
exec"R=g(['  '+l for l in g(R,n)][:-1]+[(n+2)*'#'],3*n);n+=1;"*input()
print'\n'.join(R)

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

পুনরাবৃত্তি: সর্পিলের তম পুনরাবৃত্তিকে একটি 'ক্যানোনিকাল' অবস্থানে (N = 3 বা N = 7 এর অনুরূপ) gআবর্তিত করার জন্য ব্যবহার করে n, প্রতিটি বিদ্যমান সারির বামে 2 স্পেস যুক্ত করে একটি নতুন বিভাগ যুক্ত করুন, তারপরে শেষ সারিটি প্রতিস্থাপন করুন সমস্ত '#'গুলি (যার ফলে এন = 4 বা এন = 8 এর সাথে তুলনীয় অবস্থানের ফলাফল হয়) এবং অবশেষে gআবার ব্যবহার করে এটিকে সঠিক অবস্থানে ফিরিয়ে আনতে হবে। হালকা, ধুয়ে ফেলা, পুনরাবৃত্তি।


4

কাঠকয়লা , 16 15 14 বাইট

↶FN«¶×#⁺³⊗÷ι²↷

-2 ধন্যবাদ বাইট @Neil

এটি অনলাইনে (ভার্বোজ) চেষ্টা করুন বা এটি অনলাইনে চেষ্টা করুন (খাঁটি)

ব্যাখ্যা:

মুদ্রণের দিকনির্দেশটি ডিফল্ট হিসাবে ডানদিকে হয় এবং আমরা উপরের দিকে শুরু করতে চাই, তাই আমরা ঘড়ির কাঁটার বিপরীতে 45 ​​ডিগ্রি ঘোরার মাধ্যমে শুরু করি:

PivotLeft();
↶

তারপরে iসীমার মধ্যে লুপ করুন [0, input):

For(InputNumber()){ ... }
FN« ...

একটি অবস্থানে ফিরে যাওয়ার প্রভাব নকল করতে একটি নতুন লাইন মুদ্রণ করুন:

Print("\n");
¶

"#" xবর্তমান দিকের পরিমাণ মুদ্রণ করুন :

Print(Times("#", ... ));
×# ...

কোথায় xহল: 3 + i // 2 * 2:

Add(3,Doubled(IntegerDivide(i,2))
⁺³⊗÷ι²

এবং তারপরে লুপের পরবর্তী পুনরাবৃত্তির জন্য 45 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরান:

PivotRight();
↷

আমি ধরে নিচ্ছি পিছনে যাওয়ার জন্য কাঠকয়ালে কোনও আদেশ নেই?
এমিগিনা

@ এমিগনা নিশ্চিত না, তবে আমি এটিও খুঁজে পেলাম না। আমি যখন এই উত্তরটি লিখছিলাম তখন সত্যিই একজনকে খুঁজছিলাম। কোনও প্রদত্ত দিকনির্দেশের সাথে একটি মুভ রয়েছে, পাশাপাশি প্রদত্ত স্থানাঙ্ক সহ একটি ঝাঁপ রয়েছে তবে দুর্ভাগ্যক্রমে একটি মুভব্যাক নয়।
কেভিন ক্রুইজসেন

1
⊗÷ι²চেয়ে বাইট খাটো ⁻ι﹪ι²। এছাড়াও, আপনি এর \nআগে একটি মুদ্রণ করে পিছনে সরে যাওয়ার প্রভাব পেতে পারেন #, যা আপনাকে »#অতিরিক্ত সামগ্রিক বাইট সাশ্রয়ের জন্য মুছে ফেলতে দেয় ।
নীল

@ নীল এর জন্য ধন্যবাদ ⊗÷ι², তবে এর \nআগে একটি মুদ্রণের জন্য পরিবর্তনগুলি কী হবে #? আমি যুক্ত করলে সর্পিলটি ভুলPrint("\n")
কেভিন ক্রুইজসেন

কারণ বাহুগুলি এখন আপনার ওভারল্যাপ করে এগুলি আরও #দীর্ঘতর করে তুলতে হবে ।
নীল

3

পাইথন 2 , 179 178 বাইট

কেভিন ক্রুইজসেন -1 বাইট জন্য ধন্যবাদ ।

n=input()
S,H=' #'
m=[S*n]*(n%2-~n)
x=n/4*2
y=0--n/4*2
k=2
m[y]=S*x+H+S*n
M=[1,0,-1,0]*n
exec'exec k/2*2*"x+=M[~k];y+=M[k];m[y]=m[y][:x]+H+m[y][x+1:];";k+=1;'*n
print'\n'.join(m)

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


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

এই পদ্ধতির মধ্যে সূত্রগুলি দেখার জন্য তালিকার পরিবর্তে xএবং yডেল্টাসের জন্য ব্যবহৃত হয় ।

n=input()
S,H=' #'
m=[S*n]*(n%2-~n)
x=n/4*2
y=0--n/4*2
k=2
m[y]=S*x+H+S*n
exec'exec k/2*2*"x+=k%-2+k%4/3*2;y-=(k%2or k%4)-1;m[y]=m[y][:x]+H+m[y][x+1:];";k+=1;'*n
print'\n'.join(m)

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


n+1+n%2থেকে n%2-~nজন্য -1 বাইট। আর আমার 0--n/4*2চেয়ে মনে রাখা দরকার তার চেয়ে 1 টি খাটো হোক -(-n/4*2)। ভাল উত্তর, আমার কাছ থেকে +1।
কেভিন ক্রুইজসেন 15'17 17 এ

1

জাভাস্ক্রিপ্ট (ES6), 185 বাইট

নিশ্চিত যে এটি আরও গল্ফ করা যেতে পারে, সম্ভবত তরকারী দিয়ে, তবে এখানে আমার অত্যন্ত বিনীত প্রচেষ্টা। পেনাল্টিমেট অক্ষর ব্যতীত পাঠযোগ্যতার জন্য লাইন ব্রেকগুলি যুক্ত হয়েছে

r=(a,n=1)=>n?r(a.reduce((_,c)=>c).map((_,i)=>a.map(e=>e[i])).reverse(),n-1):a,
s=n=>n?r(s(n-1)).map((r,i)=>[...r,w,w].map(x=>i?x:'#')):[[w=' ']],
d=n=>r(s(n),1-i).map(r=>r.join``).join`
`

ব্যবহার: d(10)এন = 10 চ্যালেঞ্জের উদাহরণ অনুসারে একটি স্ট্রিং প্রদান করে।

বাঁক দ্বারা r(a,n)একটি অ্যারে ঘোরানোর জন্য একটি ফাংশন সংজ্ঞায়িত ; পুনরাবৃত্তভাবে ঘোরানো এবং স্পেসিং এবং লাইনগুলি যোগ করে (প্রারম্ভিক অবস্থানে ফিরে ঘোরানো হয় না) আকারের একটি সর্পিলকে উপস্থাপন করে এমন একটি 2-মাত্রিক অ্যারে তৈরির একটি ক্রিয়াকলাপ ; এবং আকারের সর্পিল আঁকতে একটি ফাংশন , চ্যালেঞ্জ অনুযায়ী ধারাবাহিকভাবে আবর্তিত হয় এবং ফেরত স্ট্রিং হিসাবে রেন্ডার হয়।ans(n)nd(n)n

এটি সত্যিই মজাদার একটি চ্যালেঞ্জ ছিল: ¬)

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