একটি ASCII প্রবণতা বক্ররেখা আঁকুন


19

এই প্রশ্নের উদ্দেশ্যে, একটি নমনীয় বক্ররেখা হ'ল যা বাঁ দিক থেকে ডানদিকে সাধারণ দিক অনুসরণ করে তবে বার বার n + 1 90 ডিগ্রি বাম দিকে ঘুরিয়ে তোলে এবং তারপরে n + 1 টি ডান দিকে ঘুরবে (n> 0 এর জন্য)।

প্রকৃতপক্ষে প্রবণতা নিজেই খণ্ড থাকবে n

বাঁকগুলি দিয়ে চিহ্নিত করা হয় +

মেন্ডার্সের প্রস্থ (দুইয়ের মধ্যকার দূরত্ব +) দিগন্তে 3 ( ---) এবং 1 টি উল্লম্ব ( |)

এখানে একক বিভাগগুলি 1 থেকে 5 পর্যন্ত আকারের এন সহকারে বক্ররেখা রয়েছে:

                                                           +-------------------+
                                                           |                   |
                                       +---------------+   |   +-----------+   |
                                       |               |   |   |           |   |
                       +-----------+   |   +-------+   |   |   |   +---+   |   |
                       |           |   |   |       |   |   |   |   |   |   |   |
           +-------+   |   +---+   |   |   +---+   |   |   |   +---+   |   |   |
           |       |   |   |   |   |   |       |   |   |   |           |   |   |
   +---+   +---+   |   +---+   |   |   +-------+   |   |   +-----------+   |   |
   |   | 1     |   | 2         |   | 3             |   | 4                 |   | 5
---+   +-------+   +-----------+   +---------------+   +-------------------+   +   

চ্যালেঞ্জ:

দুটি ধনাত্মক সংখ্যা দেওয়া হয়েছে nএবং m, mআকারের সাথে একটি সুস্পষ্ট বক্ররেখা আঁকুনn । আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন।

ইনপুট:

n > 0 বক্রের আকার

m > 0 অঙ্কনের অংশগুলির সংখ্যা

আউটপুট:

অপরিশোধিত বক্ররেখার একটি ASCII উপস্থাপনা।

উদাহরণ:

n = 3
m = 2
   +-----------+   +-----------+   
   |           |   |           |
   |   +---+   |   |   +---+   |
   |   |   |   |   |   |   |   |
   +---+   |   |   +---+   |   |
           |   |           |   |  
-----------+   +-----------+   +

n = 2
m = 5
   +-------+   +-------+   +-------+   +-------+   +-------+   
   |       |   |       |   |       |   |       |   |       |   
   +---+   |   +---+   |   +---+   |   +---+   |   +---+   |   
       |   |       |   |       |   |       |   |       |   |   
-------+   +-------+   +-------+   +-------+   +-------+   +

n = 4
m = 4
   +---------------+   +---------------+   +---------------+   +---------------+
   |               |   |               |   |               |   |               |
   |   +-------+   |   |   +-------+   |   |   +-------+   |   |   +-------+   |
   |   |       |   |   |   |       |   |   |   |       |   |   |   |       |   |
   |   +---+   |   |   |   +---+   |   |   |   +---+   |   |   |   +---+   |   |
   |       |   |   |   |       |   |   |   |       |   |   |   |       |   |   |
   +-------+   |   |   +-------+   |   |   +-------+   |   |   +-------+   |   |
               |   |               |   |               |   |               |   | 
---------------+   +---------------+   +---------------+   +---------------+   +

জয়ের মানদণ্ড:

এটি , তাই প্রতিটি ভাষার বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। আপনার কোডটি করার সময় থাকলে দয়া করে ব্যাখ্যা করুন।


1
ভবিষ্যতের চ্যালেঞ্জের জন্য পরামর্শ: গ্রাফিকাল আউটপুটকে মঞ্জুরি দিয়ে প্রথম চিত্রটি (ক্রমবর্ধমান মেন্ডার্স সহ একটি) প্লট করুন
লুইস মেন্ডো

3
nবাঁদিকের বাঁক কি না ?
লিফডেওয়েন

1
@ লুইসমেন্দো হ্যাঁ, আমি যখন 1-5 চিত্রটি রচনা করেছি তখন বুঝতে পেরেছিলাম যে এর মধ্যে একটি ভাল চ্যালেঞ্জ রয়েছে - ইতিবাচক পূর্ণসংখ্যার একটি তালিকা দেওয়া হয়েছে, এল (i) আকারের বিভাগগুলির সাথে একটি সুস্পষ্ট বক্ররেখার রচনা করুন
গ্যালেন ইভানোভ

@ লিফড ওয়েইন এটি নির্ভর করে আপনি কোথায় গণনা শুরু করবেন। আমি n+1উদাহরণগুলি বিশেষত একক বিভাগের মধ্যে দেখার সময় মনে করি ..
গ্যালেন ইভানোভ

উত্তর:


6

কাঠকয়লা , 52 34 33 বাইট

Nθ↶FNF⊗⊕θ«+⊖⊗×⊕﹪κ²∨↔⁻θ∧κ⊖κ¹¿›κθ↷↶

এটি অনলাইন চেষ্টা করুন!লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Nθ

মাইন্ডার আকারটি ইনপুট করুন।

ডানদিকে অঙ্কন শুরু হওয়ার সাথে সাথে বামে কাজ করার সাথে সাথে পিভট ot

FN

কাঙ্ক্ষিত সংখ্যার উপর লুপ করুন।

F⊗⊕θ«

মায়ান্দার অংশগুলি লুপ করুন।

+

মুদ্রণ a +

∨↔⁻θ∧κ⊖κ¹

kএন,এন,এন-1,এন-23,2,1,1,1,2,3,এন

⊖⊗×⊕﹪κ²...

অনুভূমিক রেখাগুলি দ্বিগুণ দীর্ঘ হওয়ায় দৈর্ঘ্য দ্বিগুণ করা এবং চতুর্থাংশের মধ্যে বিকল্প, তবে +সবেমাত্র মুদ্রিত ছিল তা বিবেচনা করার জন্য মুদ্রণের আগে ফলাফল হ্রাস করুন ।

¿›κθ↷↶

পরবর্তী বিভাগের জন্য যথাযথভাবে পিভট।



3

পাইথন 3 , 371 354 346 328 298 290 বাইট

import sys
v=sys.argv
s=int(v[1])
n=range
r="   |"
t="   +---"
h="-"*4
e=" "*4
def C(l):print(l*int(v[2]))
for i in n(-(-s//2)):q=s-i+~i;R=r*i;C(R+t+h*q+"+"+R);C(R+r+e*q+R+r)
for i in n(s//2):q=s//2-i;R=r*~-q;w=2*i+s%2;C(R+t+h*~-w+"+"+r*(q+((i>0)|s%2)));C(R+e*-~w+R+2*r)
C(h*~-s+"---+   +")

-20 বি সিলিংক্যাট ধন্যবাদ

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

প্রি-golfing:


import sys

import math

def draw_curve(curve_size, curve_count, out=sys.stdout):
    for i in range(math.ceil(curve_size / 2)):
        for j in range(curve_count):
            out.write("   |" * i)
            out.write("   +---")
            out.write("----" * (curve_size - 2 * i - 1))
            out.write("+")
            out.write("   |" * i)

        out.write("\n")

        for j in range(curve_count):
            out.write("   |" * (i + 1))
            out.write("    " * (curve_size - 2 * i - 1))
            out.write("   |" * (i + 1))

        out.write("\n")

    for i in range(curve_size // 2):
        for j in range(curve_count):
            out.write("   |" * (curve_size // 2 - i - 1))
            out.write("   +---")
            out.write("----" * (2 * i - (0 if curve_size % 2 else 1)))
            out.write("+")
            out.write("   |" * (curve_size // 2 - i + (1 if i or curve_size % 2 else 0)))

        out.write("\n")

        for j in range(curve_count):
            out.write("   |" * (curve_size // 2 - i - 1))
            out.write("    " * (2 * i + (2 if curve_size % 2 else 1)))
            out.write("   |" * (curve_size // 2 - i + 1))

        out.write("\n")

    for j in range(curve_count):
        out.write("----" * (curve_size - 1))
        out.write("---+   +")

if __name__ == "__main__":
    draw_curve(int(sys.argv[1]), int(sys.argv[2]))

2

সি (জিসিসি) , 559 540 523 511 494 484 476 468 456 447 443 বাইট

#define S memset
l,o,p,q,r;g(c,d,n)char*d;{q=~c;for(p=n*2;q%2*p;bcopy(n*2-p--?"|   |":"+---+",d-q*l*p,5));p=n-1;c--%2?S(S(d-~l-r*!q,45,r++)-2*l,45,r=n*4-1),d[r*=q-1]='|',d[r-l]=d[r+l]=43,p&&g(c%4,memcpy(q?d+p*4+l:d-l-n*4,q?"+   |":"|   +",5),p):p&&g(c%4,d,p,d[-q]=45,d[q*=l]=43,*(d-=q*(n*2*l-l-2)-2)=32);}f(n,m){char b[(o=n-~n)*(l=n*4+5)];g(0,strcpy(S(S(b,32,l*o),45,l)+l-6,"+   +"),n);for(o*=m;b[o/m*l-1]=0,o--;o%m||puts(""))printf(b+o/m*l);}

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

কিছুটা কম গল্ফ

#define S memset
l,o,p,q,r;
g(c,d,n)char*d;{
 q=~c;
 for(p=n*2;q%2*p;bcopy(n*2-p--?"|   |":"+---+",d-q*l*p,5));
 p=n-1;
 c--%2?
  S(S(d-~l-r*!q,45,r++)-2*l,45,r=n*4-1),
  d[r*=q-1]='|',
  d[r-l]=d[r+l]=43,
  p&&
   g(c%4,memcpy(q?d+p*4+l:d-l-n*4,q?"+   |":"|   +",5),p)
 :
  p&&
   g(c%4,d,p,d[-q]=45,d[q*=l]=43,*(d-=q*(n*2*l-l-2)-2)=32);
}
f(n,m){
 char b[(o=n-~n)*(l=n*4+5)];
 g(0,strcpy(S(S(b,32,l*o),45,l)+l-6,"+   +"),n);
 for(o*=m;b[o/m*l-1]=0,o--;o%m||puts(""))
  printf(b+o/m*l);
}

1

ড্যাশ - পসিক্স শেল স্ক্রিপ্ট, 528 বাইট

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

golfed:

Y=0;p(){ eval A${1}_${2}='$3';};for Z in `seq $2`;do case $1 in 1)L='r3 u1 r3 d1';;2)L='r7 u1 l3 u1 r7 d3';;3)L='r11 u3 l3 d1 l3 u3 r11 d5';;4)L='r15 u5 l7 d1 r3 d1 l7 u5 r15 d7';;5)L='r19 u7 l11 d3 r3 u1 r3 d3 l11 u7 r19 d9'
esac;for A in $L;do d(){ C=-;case "$1" in r*)X=$((X+1));;l*)X=$((X-1));;u*)Y=$((Y+1));C=\|;;d*)Y=$((Y-1));C=\|;;esac;p $X $Y $2 $C;};for I in `seq ${A#*[a-z]}`;do d $A;done;d $A +;done;done;for Y in `seq 20 -1 0`;do for X in `seq 0 99`;do eval F="\"\$A${X}_${Y}\"";L=${L}${F:- };done;echo "$L";L=;done

ungolfed:

#!/bin/sh

# helper function for emulating an array, the language does not know it
p(){ eval A${1}_${2}='$3';}
Y=0

for Z in `seq $2`;do

 # define the possible patterns:
 # list="direction+count direction+count ..."
 case $1 in
  1)L='r3 u1 r3 d1';;
  2)L='r7 u1 l3 u1 r7 d3';;
  3)L='r11 u3 l3 d1 l3 u3 r11 d5';;
  4)L='r15 u5 l7 d1 r3 d1 l7 u5 r15 d7';;
  5)L='r19 u7 l11 d3 r3 u1 r3 d3 l11 u7 r19 d9'
 esac

 for A in $L;do
  # helper function for going into needed direction
  # and plot char into array
  d(){
   C=-
   case "$1" in
    r*)X=$((X+1));;
    l*)X=$((X-1));;
    u*)Y=$((Y+1));C=\|;;
    d*)Y=$((Y-1));C=\|;;
   esac
   p $X $Y $2 $C
  }

  # write char as long as needed into array,
  # append in the same direction as last element the '+'
  for I in `seq ${A#*[a-z]}`;do
   d $A
  done
   d $A +
  done
 done

# echo the array linewise
for Y in `seq 20 -1 0`;do
 for X in `seq 0 99`;do
  eval F="\"\$A${X}_${Y}\"";L=${L}${F:- }
 done
 echo "$L";L=
done

1

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

n,m=input()
i=0;h,v,p,s=map(tuple,'hv+ ');k=p;R=[h+s]
exec"h,v=v,h;R=zip(*R)[::-1];R=[s+R[0][:-1]+k+h+p]+[s+r+s+v for r in R[1:]]+[h*2*i+h+p+s+p];i+=1;k=v;"*n
for r in[[(3-i%2*2)*{h[0]:'-',v[0]:'|'}.get(c,c)for i,c in enumerate(l)]*m for l in R]:print''.join(r)

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

5 থেকে বাইট এই ডগা দ্বারা Esolanging ফলের

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