এএসসিআইআই আর্ট অফ দি ডে # 2 - ফ্লো সাপ


32

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

1 প্রবাহ সাপ অর্ডার করুন :

____
\__ \
__/

অর্ডার 2 ফ্লো সাপ :

      ____
 ____ \__ \
 \__ \__/ / __
 __/ ____ \ \ \
/ __ \__ \ \/
\ \ \__/ / __
 \/ ____ \/ /
    \__ \__/
    __/

অর্ডার 3 ফ্লো সাপ :

                 ____
            ____ \__ \
            \__ \__/ / __
            __/ ____ \ \ \    ____
           / __ \__ \ \/ / __ \__ \
      ____ \ \ \__/ / __ \/ / __/ / __
 ____ \__ \ \/ ____ \/ / __/ / __ \ \ \
 \__ \__/ / __ \__ \__/ / __ \ \ \ \/
 __/ ____ \ \ \__/ ____ \ \ \ \/ / __
/ __ \__ \ \/ ____ \__ \ \/ / __ \/ /
\ \ \__/ / __ \__ \__/ / __ \ \ \__/
 \/ ____ \/ / __/ ____ \ \ \ \/ ____
    \__ \__/ / __ \__ \ \/ / __ \__ \
    __/ ____ \ \ \__/ / __ \/ / __/ / __
   / __ \__ \ \/ ____ \/ / __/ / __ \/ /
   \/ / __/ / __ \__ \__/ / __ \/ / __/
   __/ / __ \ \ \__/ ____ \ \ \__/ / __
  / __ \ \ \ \/ ____ \__ \ \/ ____ \/ /
  \ \ \ \/ / __ \__ \__/ / __ \__ \__/
   \/ / __ \/ / __/ ____ \ \ \__/
      \ \ \__/ / __ \__ \ \/
       \/      \ \ \__/ / __
                \/ ____ \/ /
                   \__ \__/
                   __/

নির্মাণ

7 প্রান্ত এবং 8 টি শীর্ষ কোণ (নীচে লেবেলযুক্ত।

4____5____6
 \         \
 3\____2   7\
       /
0____1/

এখন প্রতিটি পরবর্তী অর্ডারের জন্য, আপনি কেবলমাত্র মূল মূল 1 প্যাটার্নের ঘোরানো সংস্করণ দিয়ে প্রান্তগুলি প্রতিস্থাপন করুন। প্রান্তগুলি প্রতিস্থাপনের জন্য নিম্নলিখিত 3 টি নিয়ম ব্যবহার করুন:

1 একটি অনুভূমিক প্রান্তের জন্য, এটি মূল আকারের সাথে প্রতিস্থাপন করুন:

________
\       \
 \____   \
     /
____/

2 একটি /প্রান্তের জন্য ( 12উপরের নির্মাণে), নিম্নলিখিত ঘোরানো সংস্করণ দিয়ে এটি প্রতিস্থাপন করুন:

 /
/   ____
\  /   /
 \/   /
     /
____/

3 একটি \প্রান্তের ( 34এবং 67উপরে) জন্য, এটি নীচের ঘোরানো সংস্করণ দিয়ে প্রতিস্থাপন করুন:

 /
/   ____ 
\   \   \
 \   \   \
  \  /
   \/

সুতরাং উদাহরণস্বরূপ, 1 লেবেলযুক্ত অর্ডার থেকে শীর্ষ 2 দিয়ে অর্ডার 2 এর মতো দেখাবে

            ________
            \       \
  ________   \____   \6
  \       \      /   /
   \____   \5___/   /   ____
       /            \   \   \
  4___/   ________   \   \   \7
 /        \       \   \  /
/   ____   \____   \2  \/
\   \   \      /   /
 \   \   \3___/   /   ____
  \  /            \  /   /
   \/   ________   \/   /
        \       \      /
         \____   \1___/
             /
        0___/

এখন যে কোনও উচ্চতর অর্ডারের জন্য, আপনি কেবলমাত্র বর্তমান স্তরটি 1 /, 1 \বা 2 দৈর্ঘ্যের প্রান্তে বিভক্ত করুন _এবং প্রক্রিয়াটি পুনরাবৃত্তি করুন। মনে রাখবেন যে প্রতিস্থাপনের পরেও, যে কোনও দুটি ধারাবাহিক প্রান্তের মধ্যে সাধারণ উল্লম্বগুলি এখনও মিলছে।

চ্যালেঞ্জ

  • আপনাকে একটি সম্পূর্ণ প্রোগ্রামের একটি ফাংশন লিখতে হবে যা NSTDIN / ARGV / ফাংশন আর্গুমেন্ট বা নিকটতম সমতুল্য হয়ে একটি একক পূর্ণসংখ্যা পায় এবং STDOUT এ অর্ডার Nফ্লো সাপ প্রিন্ট করে ।
  • ইনপুট পূর্ণসংখ্যা সবসময় এর চেয়ে বড় 0
  • এমন কোনও শীর্ষস্থানীয় স্থান থাকা উচিত যা প্যাটার্নের অংশ নয়।
  • সর্বনিম্ন বাউন্ডিং আয়তক্ষেত্রটি সম্পূর্ণরূপে পূরণ করার জন্য প্যাটার্নটি প্যাড করার জন্য কোনও ট্রেলিং স্পেস বা পর্যাপ্ত পরিমাণ ট্রেলিং স্পেস থাকতে হবে না।
  • ট্রেলিং নিউলাইন optionচ্ছিক।

মজার ঘটনা

  • ফ্লো সাপ হ'ল স্নো ফ্লেক্সের একটি শব্দ খেলা, যা এই প্যাটার্নটি 2 বা তদুর্ধের ক্রমের সাথে সাদৃশ্যপূর্ণ
  • প্যাটার্নটি জুড়ে প্রবাহিত একক পথ দিয়ে তৈরি হওয়ায় প্রকৃতপক্ষে প্রবাহ এবং সাপগুলি প্যাটার্নে একটি অংশ খেল।
  • আপনি যদি যত্ন সহকারে লক্ষ্য করেন, ক্রম 2 (এবং উচ্চতর পাশাপাশি) প্যাটার্নটিতে ক্রম 1 এবং প্যাটার্নের ঘূর্ণনগুলি বর্তমান এবং পূর্ববর্তী প্রান্তের সাধারণ ভার্টেক্সে আঁকা রয়েছে।
  • ফ্লো সাপের একটি নন এএসসিআইআই বৈকল্পিক রয়েছে যা এখানে এবং অন্যান্য বেশ কয়েকটি স্থানে পাওয়া যাবে

এটি তাই বাইট জিতে সংক্ষিপ্ততম কোড!


লিডারবোর্ড

সিরিজের প্রথম পোস্টটি লিডারবোর্ড উত্পন্ন করে।

আপনার উত্তরগুলি প্রদর্শিত হবে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে প্রতিটি উত্তর শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আমি সঠিকভাবে বুঝতে পারি, 1,2,3 আকারগুলি 2x বড় করা হয়েছে, সুতরাং 2 এর নীচের সারিটি 3 নয়, 4 টি অনস্ক্রোর দিয়ে তৈরি করা উচিত
edc65

@ edc65 উদাহরণগুলিতে আকারগুলি পুরোপুরি আকারযুক্ত। যদি আপনি কনস্ট্রাকশন অংশের কথা বলছেন, হ্যাঁ, এটি প্রসারিত এবং সেখানে 3 টি আন্ডারস্কোর রয়েছে যাতে প্রান্ত সংখ্যাটি 4 র্থ স্থানটি গ্রহণ করে
অপটিমাইজার

তবে আকার 2 এর কোন প্রান্ত সংখ্যা নেই (নির্মাণ অংশে হ্যাঁ)। আকার 2 এর নীচের
অংশটি

@ edc65 ওহ, আছে! সংশোধন করা হয়েছে!
অপ্টিমাইজার

3
আমি "স্নো ফ্লেক্স" হিসাবে শিরোনামটি পড়েছি এবং আপনি যতক্ষণ না পার্থক্যের দিকে নজর না দিয়ে আসল শিরোনামটি লক্ষ্য করেননি।
mbomb007

উত্তর:


4

সিজেম, 144 বাইট

0_]0a{{_[0X3Y0_5]f+W@#%~}%}ri*{_[YXW0WW]3/If=WI6%2>#f*.+}fI]2ew{$_0=\1f=~-
"__1a /L \2,"S/=(@\+\~.+}%_2f<_:.e>\:.e<:M.-:)~S*a*\{M.-~3$3$=\tt}/zN*

স্ক্রোলিং এড়াতে নিউলাইন যুক্ত হয়েছে। এটি অনলাইনে চেষ্টা করুন

প্রোগ্রামটি বিভিন্ন পদক্ষেপে কাজ করে:

  1. প্রাথমিক ফ্র্যাক্টাল (ক্রম 1 )টি 7 টি কোণের ক্রম হিসাবে এনকোড করা হয়েছে (ধারণাগতভাবে, 60 ° এর গুণক) আন্দোলনের দিকটি উপস্থাপন করে
  2. ফ্র্যাক্টাল একটি অনুভূমিক বিভাগে "প্রয়োগ" করা হয় (ক্রম 0 ফ্র্যাক্টাল) N বারের সমস্ত "গতিবিধি" উত্পন্ন করতে N বার এন ক্র্যাক্টাল
  3. [0 0] থেকে শুরু করে, নড়াচড়াগুলি [xy] স্থানাঙ্কের সাথে পয়েন্টের ক্রমগুলিতে অনুবাদ করা হয়
  4. প্রতিটি বিভাগ (পয়েন্টের জোড়) 1 বা 2 [xyc] ট্রিপল্টে রূপান্তরিত হয়, x, y স্থানাঙ্কে অক্ষরকে উপস্থাপন করে
  5. সীমাবদ্ধ আয়তক্ষেত্রটি নির্ধারিত হয়, স্থানাঙ্কগুলি সামঞ্জস্য করা হয় এবং স্পেসগুলির একটি ম্যাট্রিক্স উত্পন্ন হয়
  6. প্রতিটি ত্রিপলিটের জন্য অক্ষর সি ম্যাট্রিক্সে x, y পজিশনে এবং চূড়ান্ত ম্যাট্রিক্স আউটপুট জন্য সামঞ্জস্য করা হয়

এই উত্তরটি বাইট এনকোডিং থেকে উপকৃত হওয়ার জন্য যথেষ্ট দীর্ঘ: goo.gl/D1tMoc
ডেনিস

@ ডেনিস আমি নিশ্চিত না যে আমি এটি গল্ফ করেছিলাম ... এবং কেন আপনি এটি একটি ব্লকে রেখেছিলেন?
অদিতসু

আমি সত্যিই নিশ্চিত নই ... আপনার উত্তরটি বেশ চিত্তাকর্ষক। আমি পুরো দিনটি এই অধিকার পেতে চেষ্টা করে কাটিয়েছি।
ডেনিস

@ ডেনিস ধন্যবাদ; বিটিডব্লিউ, আপনি কি নন-প্রিন্টেবল / কন্ট্রোল অক্ষর ব্যবহার করা ভাল বলে মনে করেন? আমি সাধারণত
এগুলি

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

16

পাইথন 2, 428 411 388 বাইট

এই এক বেশ কৌতূহলী ছিল। নিদর্শনগুলি প্রতিটি পদক্ষেপের পরে তাদের অনুপাত ধরে রাখে না যার অর্থ এটি পূর্বসূরির থেকে পদ্ধতিগতভাবে কোনও চিত্র তৈরি করা খুব কঠিন। এই কোডটি কী করে, যদিও কিছু তীব্র গণিতের গল্ফিংয়ের পরে এটি বেশ অপঠনযোগ্য, আসলে পুনরাবৃত্তভাবে সংজ্ঞায়িত Dফাংশনটি ব্যবহার করে শুরু থেকে লাইনটি অঙ্কন করা হয়।

আকারটিও একটি সমস্যা ছিল এবং আমি 5*3**nএকদিকের স্কোয়ারের মাঝামাঝি থেকে শুরু করে ফসলের জিনিসগুলি পরে শেষ করেছি, যদিও আমি যদি আকারটি গণনা করার আরও ভাল উপায় সম্পর্কে ভাবতে পারি তবে আমি এটি পরিবর্তন করতে পারি।

n=input();s=5*3**n
r=[s*[" "]for i in[0]*s]
def D(n,x,y,t=0):
 if n<1:
    x-=t%2<1;y+=t%3>1;r[y][x]='_/\\'[t/2]
    if t<2:r[y][x+2*t-1]='_'
    return[-1,2,0,1,0,1][t]+x,y-(2<t<5)
 for c in[int(i)^t%2for i in"424050035512124224003"[t/2::3]][::(t^1)-t]:x,y=D(n-1,x,y,c)
 return x,y
D(n,s/2,s/2)
S=[''.join(c).rstrip()for c in r]
for l in[c[min(c.find('\\')%s for c in S):]for c in S if c]:print l

বাহ, এটা দুর্দান্ত। AAoD # 1 এ শট দিতে চান?
অপ্টিমাইজার

r=[s*[" "]for i in range(s)]-> r=[[" "]*s]*s]কয়েকটি বাইট শেভ করবে
সর্পর্সিভিল

1
@ সির্পারসিভিল দুর্ভাগ্যক্রমে এটি কার্যকর হবে না কারণ কীভাবে *পরিবর্তনযোগ্য বস্তুর পুনরাবৃত্তি ঘটে ।
grc

ওহ, ঠিক আছে, আমি ভুলে গেছি
সর্পারসিভিল

আপনি কিছুটা বাইট ইনলাইন করে l, print'\n'.join()লুপের জন্য প্রিন্টিং-এ লুপের জন্য স্যুইচ করে, ব্যবহার করে return[...][t]+x,এবং এর মাধ্যমে প্রথম বন্ধনগুলি সংরক্ষণ করতে পারেন (t%2)। এছাড়াও, আপনি min(c.find('\\')%s for c in S)যদি তালিকাটির নাম পরিবর্তন করেন তবে Sএটির প্রাথমিক মানটি ওভাররাইট না করে আপনি ব্যবহার করতে পারেন s
grc

12

জাভাস্ক্রিপ্ট ( ES6 ), 356 362 370

এটি একটি কঠিন ...

প্রতিটি আকৃতি একটি পথ হিসাবে সংরক্ষণ করা হয়। এখানে 6 টি বেসিক বিল্ডিং ব্লক (3 + 3 পিছিয়ে) রয়েছে

  • 0বাম থেকে নীচে ডান 4দিকে তির্যক ( পিছনে)
  • 1তির্যক নীচে বাম থেকে ডানদিকে ( 5পিছনে)
  • 2অনুভূমিক বাম থেকে ডান ( 6পিছনে)

প্রত্যেকের জন্য, ক্রম বাড়ানোর সময় প্রয়োগ করার জন্য একটি প্রতিস্থাপন পদক্ষেপ রয়েছে:

  • 0-> 0645001(পিছিয়ে 4-> 5441024)
  • 1-> 2116501(পিছিয়ে 5-> 5412556)
  • 2-> 2160224(পিছিয়ে 6-> 0664256)

hঅ্যারেতে পূর্বনির্ধারিত মানগুলি , এমনকি যদি 4.2 উপাদানগুলি 0..2 ব্যবহার করে পাওয়া যায়

;[...h[n]].reverse().map(x=>x^4).join('')

প্রদত্ত অর্ডারটির জন্য আকৃতিটি পেতে, বার বার বিকল্পগুলি প্রয়োগ করে পি চলকটিতে পথটি তৈরি করা হয়। তারপরে মূল লুপটি পি ভেরিয়েবলের উপরে পুনরাবৃত্তি করে এবং জি [] অ্যারের ভিতরে আকৃতিটি আঁকেন, যেখানে প্রতিটি উপাদান একটি সারি থাকে।
অবস্থান থেকে শুরু করে (0,0), প্রতিটি সূচক নেতিবাচক হয়ে উঠতে পারে (উচ্চ আদেশে ওয়াই সূচক)। আমি যখনই নেতিবাচক y মান পাই তখন আমি সমস্ত জি অ্যারে স্থানান্তরিত নেতিবাচক y সূচকগুলি এড়িয়ে চলি। জেএস নেতিবাচক সূচকগুলি যেমন ম্যানেজ করা সহজতর হয় সে হিসাবে এক্স সূচকটি নেতিবাচক হয়ে ওঠে কিনা সে বিষয়ে আমি চিন্তা করি না।
শেষ ধাপে, আমি। ম্যাপ ব্যবহার করে মূল অ্যারেটি স্ক্যান করি, তবে প্রতিটি সারির জন্য আমি (;;) লুপের জন্য স্বল্প ব্যবহার করতে হবে bযা সর্বনিম্ন এক্স সূচককে ধরে রাখে (যা <0 হবে) holds
মধ্যেconsole.log সংস্করণটিতে একটি সুবিধাজনক নেতৃস্থানীয় নিউলাইন রয়েছে, যা স্নিপেট সংস্করণ হিসাবে সহজেই 2 টি সারি অদলবদল করে একটি চলন্ত নিউলাইন তৈরি করা যেতে পারে।

f=o=>{
  g=[],x=y=b=0,
  h='064500192116501921602249954410249541255690664256'.split(9);
  for(p=h[2];--o;)p=p.replace(/./g,c=>h[c]);
  for(t of p)
    z='\\/_'[s=t&3],
    d=s-(s<1),
    t>3&&(x-=d,y+=s<2),
    y<0&&(y++,g=[,...g]),r=g[y]=g[y]||[],
    s?s>1?r[x]=r[x+1]=z:r[x]=z:r[x-1]=z,
    t<3&&(x+=d,y-=s<2),
    x<b?b=x:0;
  g.map(r=>
  {
    o+='\n';
    for(x=b;x<r.length;)o+=r[x++]||' '
  },o='');
  console.log(o)
}

পরীক্ষার জন্য হ্যান্ডি স্নিপেট (ফায়ারফক্সে):

f=o=>{
  g=[],x=y=b=0,
  h='064500192116501921602249954410249541255690664256'.split(9);
  for(p=h[2];--o;)p=p.replace(/./g,c=>h[c]);
  for(t of p)
    z='\\/_'[s=t&3],
    d=s-(s<1),
    t>3&&(x-=d,y+=s<2),
    y<0&&(y++,g=[,...g]),r=g[y]=g[y]||[],
    s?s>1?r[x]=r[x+1]=z:r[x]=z:r[x-1]=z,
    t<3&&(x+=d,y-=s<2),
    x<b?b=x:0;
  g.map(r=>
  {
    for(x=b;x<r.length;)o+=r[x++]||' ';
    o+='\n'
  },o='');
  return o
}

// TEST

fs=9;
O.style.fontSize=fs+'px'

function zoom(d) { 
  d += fs;
  if (d > 1 && d < 40)
    fs=d, O.style.fontSize=d+'px'
}
#O {
  font-size: 9px;
  line-height: 1em;
}
<input id=I value=3><button onclick='O.innerHTML=f(I.value)'>-></button>
<button onclick="zoom(2)">Zoom +</button><button onclick="zoom(-2)">Zoom -</button>
<br>
<pre id=O></pre>


6

হাস্কেল, 265 বাইট

(?)=div
(%)=mod
t[a,b]=[3*a+b,2*b-a]
_#[0,0]=0
0#_=3
n#p=[352,6497,2466,-1]!!((n-1)#t[(s+3)?7|s<-p])?(4^p!!0%7)%4
0&_=0
n&p=(n-1)&t p+maximum(abs<$>sum p:p)
n!b=n&[1,-b]
f n=putStr$unlines[["__ \\/   "!!(2*n#t[a?2,-b]+a%2)|a<-[b-n!2+1..b+n!2+0^n?3]]|b<-[-n!0..n!0]]

(দ্রষ্টব্য: GHC উপর 7.10 আগে, আপনি যোগ করতে হবে import Control.Applicativeবা প্রতিস্থাপন abs<$>সঙ্গে map abs$।)

আইডিয়ন.কম এ অনলাইনে চালান

f n :: Int -> IO ()স্তরটি nপ্রবাহিত করে। অঙ্কনটি বক্ররেখার পরিবর্তে বিটম্যাপ ক্রমে গণনা করা হয়, যা অ্যালগরিদমকে ও (এন) স্পেসে চালানোর অনুমতি দেয় (যা অঙ্কনের আকারে লোগারিদমিক)। আমার প্রায় বাইটের প্রায় অর্ধেকটি কোন আয়তক্ষেত্র আঁকতে কম্পিউটিংয়ে ব্যয় করেছে!


আমি লগ ইন করেছি এবং এটি এখন কাজ করে! নিস!
অপ্টিমাইজার

এটি Ideone.com এ আগে চালিত হয়নি তা প্রমাণিত হয়েছে কারণ আমি 64৪-বিট ইন্ট গ্রহণ করছিলাম। এখনই স্থির (2 বাইটের ত্যাগ)।
অ্যান্ডারস কাসরগ

লগইন জিনিসটির জন্য এটি ঠিক আছে কেবলমাত্র নিশ্চিতকরণের জন্য আমার ইমেল আইডি প্রয়োজন ..
অপ্টিমাইজার

5

পার্ল, 334 316 309

$_=2;eval's/./(map{($_,"\1"x7^reverse)}2003140,2034225,4351440)[$&]/ge;'x($s=<>);
s/2|3/$&$&/g;$x=$y=3**$s-1;s!.!'$r{'.qw($y--,$x++ ++$y,--$x $y,$x++ $y,--$x
$y--,--$x ++$y,$x++)[$&]."}=$&+1"!eeg;y!1-6!//__\\!,s/^$x//,s/ *$/
/,print for
grep{/^ */;$x&=$&;$'}map{/^/;$x=join'',map$r{$',$_}||$",@f}@f=0..3**$s*2

স্ট্যান্ডার্ড ইনপুট নিয়ে নেওয়া প্যারামিটার। আমাকে পরীক্ষা করুন


5

হাস্কেল, 469 419 390 385 365 বাইট

এফ :: ফাংশন: অন্তঃ-> আইও () ইনপুট হিসাবে পূর্ণসংখ্যা নেয় এবং প্রবাহ সাপ মুদ্রণ করে

e 0=[0,0];e 5=[5,5];e x=[x]
f n=putStr.t$e=<<g n[0]
k=map$(53-).fromEnum
g 0=id
g n=g(n-1).(=<<)(k.(words"5402553 5440124 1334253 2031224 1345110 2003510"!!))
x=s$k"444666555666"
y=s$k"564645554545"
r l=[minimum l..maximum l]
s _[]=[];s w(x:y)=w!!(x+6):map(+w!!x)(s w y)
t w=unlines[["_/\\\\/_ "!!(last$6:[z|(c,d,z)<-zip3(x w)(y w)w,c==i&&d==j])|i<-r.x$w]|j<-r.y$w]

এটি 2 × বর্ধিত পরিসংখ্যান তৈরি করে। আমি মনে করি যে প্রশ্নটি শীর্ষে ছোট পরিসংখ্যানগুলির জন্য জিজ্ঞাসা করছে, এবং প্রবাহনক কীভাবে নির্মিত হয় তা বোঝাতে কেবল 2 × বর্ধিত পরিসংখ্যান ব্যবহার করেছেন।
অ্যান্ডারস ক্যাসরগ

তুমি ঠিক. আমি এটি সংশোধন করেছি
ড্যামিয়েন

আপনি ব্যবহার করতে পারে $সংজ্ঞা k, এবং প্রতিস্থাপন (!!)aসঙ্গে (a!!)যা কিছু প্রথম বন্ধনী থেকে পরিত্রাণ পেতে পারেন। তা ছাড়া, আপনি নিজের দ্বারা প্রচুর কৌশল অবগত হন বলে মনে হয়। দুর্দান্ত
গর্বিত হাসেল্লার

4

সি, 479 474 468 427 বাইট

আমার অনুমান পার্ল এবং হাস্কেল ছেলেদের কোনও মারধর করা হয়নি, তবে এখনও এখানে কোনও সি জমা দেওয়া নেই:

#define C char
C *q="053400121154012150223433102343124450553245";X,Y,K,L,M,N,i,c,x,y,o;F(C*p,
int l,C d){if(d){l*=7;C s[l];for(i=0;i<l;i++)s[i]=q[(p[i/7]%8)*7+i%7];return F
(s,l,d-1);}x=0;y=0;o=32;while(l--){c=*p++%8;for(i=!(c%3)+1;i--;) {K=x<K?x:K;L=
y<L?y:L;M=x>M?x:M;N=y>N?y:N;y+=c&&c<3;x-=c%5>1;if(x==X&y==Y)o="_\\/"[c%3];y-=c
>3;x+=c%5<2;}}return X<M?o:10;}main(l){F(q,7,l);for(Y=L;Y<N;Y++)for(X=K;X<=M;X
++)putchar(F(q,7,l));}

একটি আটাই () কলটিতে নম্বর সংরক্ষণ করুন প্রোগ্রামটিতে পাস হওয়া আর্গুমেন্টের স্তরের জন্য ব্যবহৃত হয়।

প্রোগ্রামটি ও (এন ^ 3) বা এর চেয়ে খারাপ অবস্থায় চলে; সর্বনিম্ন নূন্যতম / সর্বাধিক স্থানাঙ্কগুলি খুঁজতে পাথটি একবার গণনা করা হয়, তারপরে প্রতিটি (x, y) জোড়ার জন্য নির্দিষ্ট স্থানের অক্ষরটি খুঁজতে এটি একবার গণনা করা হয়। মারাত্মকভাবে ধীর, কিন্তু মেমরি প্রশাসনের উপর সঞ্চয় করে।

উদাহরণটি http://codepad.org/ZGc648Xi এ রান করুন


এর X,Y,K,L,M,N,i,j,c;পরিবর্তে int X,Y,K,L,M,N,i,j,c;এবং main(l)পরিবর্তে ব্যবহার করুনvoid main(int l)
স্পিক্যাট্রিক্স

হ্যাঁ, ধন্যবাদ, আমি ইতিমধ্যে সেগুলি এবং আরও কিছু ছাঁটাই করেছি, আমি একটি নতুন সংস্করণ স্থাপন করব।
Zevv

সর্বশেষতম সংস্করণে আউটপুটটি ছাঁটা এবং শেষের দিকে কিছুটা বন্ধ বলে মনে হচ্ছে।
অপ্টিমাইজার

আমি ভুল ব্লব আপলোড করেছি, এই এক ভাল করা উচিত।
Zevv

4

পাইথন 2, 523 502 475 473 467 450 437 বাইট

l=[0]
for _ in l*input():l=sum([map(int,'004545112323312312531204045045050445212331'[t::6])for t in l],[])
p=[]
x=y=q=w=Q=W=0
for t in l:T=t|4==5;c=t in{2,4};C=t<3;q=min(q,x);Q=max(Q,x+C);w=min(w,y);W=max(W,y);a=C*2-1;a*=2-(t%3!=0);b=(1-T&c,-1)[T&1-c];x+=(a,0)[C];y+=(0,b)[c];p+=[(x,y)];x+=(0,a)[C];y+=(b,0)[c]
s=[[' ']*(Q-q)for _ in[0]*(W-w+1)]
for t,(x,y)in zip(l,p):x-=q;s[y-w][x:x+1+(t%3<1)]='_/\_'[t%3::3]
for S in s:print''.join(S)

পিএফফ্ট, আমাকে ২ ঘন্টাের মতো কাষ্ট করেছে, তবে মজা করতে পেরেছে!

কাজটি একাধিক পদক্ষেপে বিভক্ত করার ধারণা:

  1. উপস্থিতির ক্রমে সমস্ত প্রান্ত (0-5 হিসাবে এনকোডড) গণনা করুন (সুতরাং সাপের শুরু থেকে শেষ অবধি)
  2. প্রতিটি প্রান্তের জন্য অবস্থান গণনা করুন (এবং x এবং y এর জন্য সর্বনিম্ন এবং সর্বোচ্চ মানগুলি সংরক্ষণ করুন)
  3. এতে থাকা স্ট্রিংগুলি তৈরি করুন (এবং অফসেট করার জন্য ন্যূনতম মানগুলি ব্যবহার করুন, যাতে আমরা নেতিবাচক সূচকগুলি না পাই)
  4. স্ট্রিংগুলি মুদ্রণ করুন

নিরবচ্ছিন্ন আকারে কোড এখানে:

# The input
n = int(input())

# The idea:
# Use a series of types (_, /, \, %), and positions (x, y)
# Forwards:   0: __  1: /  2: \
# Backwards:  3: __  4: /  5: \

# The parts
pieces = [
    "0135002",
    "0113451",
    "4221502",
    "5332043",
    "4210443",
    "5324551"
]
# The final types list
types = [0]
for _ in range(n):
    old = types
    types = []
    for t in old:
        types.extend(map(int,pieces[t]))

# Calculate the list of positions (and store the mins and max')
pos = []
top = False
x = 0
y = 0
minX = 0
minY = 0
maxX = 0
maxY = 0
for t in types:
    # Calculate dx
    dx = 1 if t < 3 else -1
    if t%3==0:
        dx *= 2         # If it's an underscore, double the horizontal size
    # Calculate dy
    top = t in {1, 5}
    dy = 0
    if top and t in {0, 3, 1, 5}:
        dy = -1
    if not top and t in {2, 4}:
        dy = 1
    # If backwards, add dx before adding the position to the list
    if t>2:
        x += dx
    # If top to bottom, add dy before adding the position to the list
    if t in {2,4}:
        y += dy
    # Add the current position to the list
    pos += [(x, y)]
    # In the normal cases (going forward and up) modify the x and y after changing the position
    if t<3:
        x += dx
    if t not in {2, 4}:
        y += dy
    # Store the max and min vars
    minX = min(minX, x)
    maxX = max(maxX, x + (t<3)) # For forward chars, add one to the length (we never end with __'s)
    minY = min(minY, y)
    maxY = max(maxY, y)

# Create the string (a grid of charachters)
s = [[' '] * (maxX - minX) for _ in range(maxY - minY + 1)]
for k, (x, y) in enumerate(pos):
    x -= minX
    y -= minY
    t = types[k]
    char = '/'
    if t % 3 == 0:
        char = '__'
    if t % 3 == 2:
        char = '\\'
    s[y][x : x + len(char)] = char

# Print the string
for printString in s:
    print("".join(printString))

সম্পাদনা করুন: আমি # 3 এর উত্তরটির সাথে সামঞ্জস্য রাখতে আমি অজগর 2 তে ভাষা পরিবর্তন করেছি (এবং এটি আরও 6 টি বাইট সংরক্ষণ করে)


সুন্দর কাজ; একটি সাধারণ উন্নতি আপনি করতে পারেন তা পরিবর্তন l.extend(x)করা হবে l+=x। এছাড়াও আপনি সম্ভবত কোডগলফ.স্ট্যাকেক্সেঞ্জার.কম / সেকশনস / ৫৪/২ ব্যবহার .split()করতে পারেন আপনার ব্যবহারের পরিবর্তে (আমি আমার উত্তরে অনুরূপ কিছু করেছি)
কেএসব

@ কেস্যাব ধন্যবাদ, আমি এখন ব্যবহার করার জন্য সত্যিই বোকা বোধ করিextend
ম্যাটি

0

পরী / জিপি, 395

এক্স, ওয়াই অক্ষরের অবস্থানের উপরে লুপিং এবং কোন চরটি মুদ্রণ করা হবে তা গণনা করা হচ্ছে। কমাতে মাঝারি প্রচেষ্টা, সাদা স্থান এবং মন্তব্যগুলি ছিনিয়ে নেওয়া সহ স্কোর করা।

k=3;
{
  S = quadgen(-12);  \\ sqrt(-3)
  w = (1 + S)/2;     \\ sixth root of unity
  b = 2 + w;         \\ base

  \\ base b low digit position under 2*Re+4*Im mod 7 index
  P = [0, w^2, 1, w, w^4, w^3, w^5];
  \\ rotation state table
  T = 7*[0,0,1,0,0,1,2, 1,2,1,0,1,1,2, 2,2,2,0,0,1,2];
  C = ["_","_",  " ","\\",  "/"," "];

  \\ extents
  X = 2*sum(i=0,k-1, vecmax(real(b^i*P)));
  Y = 2*sum(i=0,k-1, vecmax(imag(b^i*P)));

  for(y = -Y, Y,
     for(x = -X+!!k, X+(k<3),  \\ adjusted when endpoint is X limit
        z = (x- (o = (x+y)%2) - y*S)/2;
        v = vector(k,i,
                   z = (z - P[ d = (2*real(z) + 4*imag(z)) % 7 + 1 ])/b;
                   d);
        print1( C[if(z,3,
                     r = 0;
                     forstep(i=#v,1, -1, r = T[r+v[i]];);
                     r%5 + o + 1)]) );  \\ r=0,7,14 mod 5 is 0,2,4
     print())
}

প্রতিটি চর হেক্সাগন ঘরের প্রথম বা দ্বিতীয়। একটি ঘর অবস্থান হল একটি জটিল সংখ্যা z কে বেস বি = 2 + ডব্লুতে 0, 1, ডাব্লু ^ 2, ..., ডাব্লু ^ 5, যেখানে ডাব্লু = ই ^ (2 পিআই / 6) unityক্যের ষষ্ঠ মূল। এই অঙ্কগুলি কেবল 1 থেকে 7 এর মতো আলাদা হিসাবে রাখা হয় তারপরে নেট ঘোরানোর জন্য একটি রাষ্ট্রের টেবিলের মাধ্যমে উচ্চ থেকে নীচে নেওয়া হয়। এটি এর স্টাইলে রয়েছে এড শাউটেন দ্বারা প্রবাহিত কোডের (xytoi) তবে কেবল নেট ঘোরানোর জন্য, পথ ধরে "এন" সূচকে অঙ্ক তৈরি করে না। আকারগুলি কেন্দ্রে আকৃতির 0 এর সাথে সম্পর্কিত। যতক্ষণ না সীমা কোনও শেষ বিন্দু না হয় এগুলি 2-বর্ণের ষড়ভুজগুলির মাঝামাঝি এবং এই অক্ষরের মধ্যে কেবল 1 টি প্রয়োজন। তবে যখন সাপটি শুরু হয় এবং / বা শেষ হয় তখন এক্স সীমা 2 টি অক্ষর প্রয়োজন হয়, যা কে = 0 শুরু এবং কে <3 শেষ। পরীর স্কয়ার্ট -১-এর মতো "কোয়াডস" রয়েছে (-৩) তবে এটি বাস্তব এবং কাল্পনিক অংশগুলি আলাদাভাবে করা যায়।


1
এটি শীর্ষস্থানীয় এবং অনুসরণীয় সাদা স্থান সম্পর্কিত নিয়মগুলিকে পুরোপুরি সন্তুষ্ট করে না।
অ্যান্ডারস কাসের্গ

ধন্যবাদ, আমি সংশোধন করেছি। আপনার হ্যাশেল আমাকে এক ঘন্টা এক x এর কাছে মারবে, ওয়াই লুপ এটি করেছে। আরও অনুপ্রেরণা আসবে কিনা তা অপেক্ষা করার আগে পোস্ট করা উচিত ছিল :-)।
কেভিন রাইডে

এখন সাপের শেষ ট = 0, 1 জন্য ছিন্ন করা 2. (Math যে জ্বালাময় হয় পথ-আমি এটা দিয়ে খুব মোকাবেলা করতে ছিল।)
অ্যান্ডার্স Kaseorg

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