ASCII শিল্পের স্কোয়ার রুট


30

আপনি এমন একজন গণিতবিদের জন্য ইন্টার্ন হিসাবে কাজ করছেন যিনি টেক্স, ল্যাটেক্স ইত্যাদির পক্ষে সত্যই ঘৃণা করেন তাই তিনি সিদ্ধান্ত নিয়েছেন যে যাবতীয় টাইপসেটিং পরিত্যাগ করবেন এবং আপনাকে সমস্ত ফরম্যাটিং ASCII তে করতে বাধ্য করবেন। আপনি কিছুক্ষণ পরে এই ক্লান্ত হয়ে পড়েছেন এবং স্কোয়ার শিকড় দিয়ে শুরু করে এর কিছু অংশ স্বয়ংক্রিয়ভাবে শুরু করার সিদ্ধান্ত নিয়েছেন।

বর্গমূল কিভাবে তৈরি হয় তা এখানে:

###  this is the input
###
###

_____  put a row of underscores stretching one character off either side on top
 ### 
 ### 
 ### 

   _____  put a diagonal of slashes in front going the height of the input
  / ### 
 /  ### 
/   ### 

      _____ put a diagonal of backslashes in front of that, going up half of the input's height rounded up
     / ###
 \  /  ###
  \/   ###

এবং এটাই!

বিধি

আপনাকে এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করতে হবে যা একটি স্ট্রিং, স্ট্রিংগুলির তালিকা (যেমন লাইনগুলি) বা অক্ষরের অ্যারে নেবে এবং উপরের বর্ণনানুসারে ইনপুটটিকে রূপান্তরিত করবে (অগত্যা সঠিক ক্রম বা প্রক্রিয়া দ্বারা নয়)

আপনি ধরে নিতে পারেন ইনপুটটি আয়তক্ষেত্রাকার হলে পছন্দ হয়। শ্বেত স্পেস অনুসরণ করার প্রয়োজন হয় না বা অনুমোদিত নয়।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins

উদাহরণ:

Input:
40
Output:
  ____
\/ 40

Input:
  ____
\/ 40
Output:
   ________
  /   ____
\/  \/ 40 

Input:
/| 
 | 
 | 
_|_
Output:
      _____
     / /|
    /   |
\  /    |
 \/    _|_

Input:
#  # 
#  # 
#####
   # 
   # 
Output:
        _______
       / #  #  
      /  #  #  
\    /   ##### 
 \  /       #  
  \/        #  

3
ভি এই এক ভাল করতে পারে
কেয়ারড coinheringaahing

16
একজন গণিতবিদ যিনি টেক্সকে সত্যিই ঘৃণা করেন, ল্যাটেক্স ইত্যাদি আমি প্রায় সেখানেই পড়া বন্ধ করেছি
লুইস মেন্ডো

5
আপনি কাজ করছেন আমি ঠিক সেখানে পড়া বন্ধ করেছি
আর্নল্ড

উত্তর:


7

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

x=Q=input()
l=len(x)
k=(l+1)/2
q=l+k
x=[[' ']*(q+1)+list(y)for y in x]
for i in range(k):x[i+l/2][i]='\\'
for j in range(l):x[j][q-j-1]='/'
print'\n'.join([' '*q+'_'*(2+len(Q[0]))]+map(''.join,x))

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

-2 বাইটস স্টেপ হেনকে ধন্যবাদ

-13 বাইট জনাথন অ্যালান ধন্যবাদ


@ স্টেপহেন এইচএম এটি কাজ করে কিন্তু /কাজ করবে। ধন্যবাদ।
হাইপারনিউটারিনো

একই জন্যi+l//2
স্টিফেন 21

আন্ডারস্কোরগুলিকে দু'পাশে অতিরিক্ত একটি অক্ষর প্রসারিত করতে হবে।
নীল

আপনি স্ট্রিংগুলির তালিকা হিসাবে ইনপুট নিতে পারেন (পাইথন 2 এর input()কাঁচা ইনপুটটির মূল্যায়ন করে)। এছাড়াও '_'*len(Q[0])+'__'হয় '_'*(2+len(Q[0]))
জোনাথন অ্যালান


5

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

WS⊞υιP⪫υ¶↖P×_⁺²⌈EυLι↙↙Lυ↑↖÷⁺¹Lυ²

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। 29-বাইট সংস্করণ যা আয়তক্ষেত্রাকার ইনপুট ধরে নেয়:

WS⊞υιP⪫υ¶↖P×_⁺²Lθ↙↙Lυ↑↖÷⁺¹Lυ²

3
@ লুইসমেডো কাঠকয়লা বুড়ো হচ্ছে ...
এরিক দি আউটগল্ফার

@ এরিকথ আউটগল্ফার ডি: পুরানো কীভাবে
ASCII- কেবল

@ এএসসিআইআই-কেবল ওয়েল এসওজিএল আরও নতুন এবং আরও ভাল, সুতরাং ... চারকোলের পক্ষে কোনও অপরাধ নেই যদিও এটি এখনও অনেক জিতেছে।
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার তবে এটি আরও কীভাবে ভাল :(
ASCII- কেবল

আইএমও এটি পছন্দ করার মতো হাস্কেলকে আরও নতুন এবং আরও ভাল তাই হাস্কেল> সি # যদিও এটি এখনও অনেক কিছু জিতেছে
ASCII- কেবল

5

পাইথন 3 , 138 147 বাইট

def f(l):h=len(l);w=len(l[0]);c=int(h/2);print('\n'.join([(h*2-c)*' '+w*'_']+[(i*' '+'\\'+(h-i-1)*2*' '+'/'+i*' ')[c:]+s for(i,s)in enumerate(l)]))

ভেরিয়েবল 'l' স্ট্রিংগুলির তালিকা, প্রতিটি স্ট্রিংকে একটি লাইন। পঠনযোগ্য সংস্করণ:

def f(l):
  height = len(l)
  width = len(l[0])
  half_height_floor = int(height / 2)

  print((height * 2 - half_height_floor) * ' ' + width * '_')

  for (index, line) in enumerate(l):
    #build a V based on the location of the line
    #surrounding V whitespace
    outer_space = index * ' '

    #inner V whitespace
    inner_space = (height - index - 1) * 2 * ' ' #inner v space

    #complete V
    v = outer_space + '\\' + inner_space + '/' + outer_space

    #left half_height_floor chars removed
    v_chopped = v[half_height_floor:]

    print(v_chopped + line)

সম্পূর্ণ ভি দিয়ে বর্গমূলের প্রতীক গঠন করে তারপরে সেই অনুযায়ী বামে শেভ করে।

অনলাইনে চেষ্টা করে দেখুন!


2
হাই, পিপিসিজিতে আপনাকে স্বাগতম। প্রথম প্রথম উত্তর, তবে এটি একটি স্নিপেট, যেহেতু এটি ভেরিয়েবলটিকে lইনপুট হিসাবে ধরে নিচ্ছে । lফাংশন প্যারামিটার বা ইনপুট () ফাংশন ইত্যাদি হিসাবে ইনপুট রয়েছে সেই অংশটিও আপনাকে অবশ্যই অন্তর্ভুক্ত করতে হবে (পিএস আপনার উত্তরটিতে কিছু সাদা-স্থান-প্যাডিংয়ের অভাব রয়েছে বলে মনে হচ্ছে))
অফিসিয়ালাইম

2
@ আফিসিয়ালাইম, আপনাকে স্বাগত জানাতে ধন্যবাদ! ভবিষ্যতের সমস্যার জন্য অনুশীলনের জন্য আমি টিআইও লিঙ্কটি আপডেট করেছি এবং এতে অন্তর্ভুক্ত করেছি
কনার জনস্টন

3

পাইথন 2 ,  131  130 বাইট

x=input()
n=len(x)
s=" "
for v in[s*2*n+"_"*(2+len(x[0]))]+[s*i+"\\"+s*2*(n+~i)+"/"+s*-~i+r for i,r in enumerate(x)]:print v[n/2:]

আয়তক্ষেত্রাকার-কেবল ভাতা (প্রকৃতপক্ষে প্রথম লাইনটি দীর্ঘতমগুলির মধ্যে একটি) এর সাথে ইনপুট হিসাবে লাইনগুলির একটি তালিকা গ্রহণ করে একটি সম্পূর্ণ প্রোগ্রাম।

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


2

জাভা 8, 244 বাইট

একটি খুব দীর্ঘ সমাধান, তবে সম্ভবত জাভার সবচেয়ে সংক্ষিপ্ততম কাছে। এই ল্যাম্বদা একটি হিসাবে ইনপুট লাইন নেয় String[]এবং একটি প্রদান করে String। সমস্ত লাইনের দৈর্ঘ্য একই হতে হবে।

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

ধন্যবাদ জনাথন অ্যালান জন্য আমাকে স্মরণ সম্পর্কে ~অপারেটর।

l->{int h=l.length,w=l[0].length(),a=h/2,i=w+3,x=h+a+h%2;String s="",t=s;for(;--i>0;)t+="_";for(;i++<x;)s+=" ";t=s+t;for(i=0;i<h;)t+="\n"+s.substring(0,i<a?x+~i:i-a)+(i<a?"":"\\"+s.substring(0,(h+~i)*2))+"/"+s.substring(0,i+1)+l[i++];return t;}

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

Ungolfed

l -> {
    int
        h = l.length,
        w = l[0].length(),
        a = h / 2,
        i = w + 3,
        x = h + a + h % 2
    ;
    String
        s = "",
        t = s
    ;
    for (; --i > 0; )
        t += "_";
    for (; i++ < x; )
        s += " ";
    t = s + t;
    for (i = 0; i < h; )
        t +=
            "\n"
            + s.substring(0, i < a ? x + ~i : i - a)
            + (i < a ? "" : "\\" + s.substring(0, (h + ~i) * 2))
            + "/"
            + s.substring(0, i + 1)
            + l[i++]
        ;
    return t;
}

প্রাপ্তি স্বীকার

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

1
ভাল উত্তর +1। আপনি গলফ 2 একটি পরিবর্তনশীল জন্য তৈরি করে বাইট করতে পারেন h+a+h%2যা আপনি আপনার কোডে দুই বার ব্যবহার করুন: l->{int h=l.length,w=l[0].length(),a=h/2,i=w+3,x=h+a+h%2;String s="",t=s;for(;--i>0;)t+="_";for(;i++<x;)s+=" ";t=s+t;for(i=0;i<h;)t+="\n"+s.substring(0,i<a?x+~i:i-a)+(i<a?"":"\\"+s.substring(0,(h+~i)*2))+"/"+s.substring(0,i+1)+l[i++];return t;}। (আমি টিআইও লিঙ্কে শিরোলেখ এবং পাদচরণও ব্যবহার করেছি, যাতে আপনি পরীক্ষার কোড থেকে আপনার আসল গল্ফ কোডটি আলাদা করতে পারেন))
কেভিন ক্রুইজসেন

1

জাপট , 46 বাইট


l *2
£Vç hY'\ h~Y'/ +S+XÃuVç +'_p2+Ug l¹msV/4

শীর্ষস্থানীয় নিউলাইন প্রোগ্রামের অংশ। ইনপুট এবং আউটপুট হল স্ট্রিংগুলির প্রতিনিধিত্বকারী রেখার একটি অ্যারে।

এটি অনলাইন চেষ্টা করুন! -Rনতুন লাইনগুলি সহ ফলাফল অ্যারে যোগদানের জন্য পতাকা ব্যবহার করে ।


@ETH প্রোডাকশন দুঃখজনকভাবে যে কাজ করবে না যেহেতু Uএকটি অ্যারে এবং একটি স্ট্রিং নয়।
জাস্টিন মেরিনার

আহ, এটি
ঘৃণা করুন

1

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

স্ট্রিংগুলির অ্যারে হিসাবে ইনপুট নেয় / স্ট্রিংগুলির একটি অ্যারে প্রদান করে।

a=>[a[0].replace(/./g,'_'),...a].map((r,y)=>[...a,...a].map((_,x)=>x-y+1|y-.5<l/2?l*2-x-y?' ':'/':'\\',c=y?' ':'_').join``+c+r+c,l=a.length)

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


1

পার্ল 5 , 177 185 160 বাইট

$s=$f=int((@t=<>)*1.5+.5);print" "x$f;print"_"x length$t[0];print"_
";$b=-int(@t/2);for(0..$#t){--$s;print$_==$s?"/":$_==$b?"\\":" " for 0..$f;print$t[$_];++$b}

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

পরিবর্তণের:

  • বাগ ঠিক করতে আরও বাইটের প্রয়োজন (এটি প্রথমে একটি বর্গ ইনপুট ধরে নেওয়া হয়েছিল )
  • অন্য একটি ত্রুটি সংশোধন করেছে এবং মন্তব্যগুলি থেকে কিছু টিপস ব্যবহার করেছে (ধন্যবাদ দাদা!)

থেকে সংক্ষিপ্ত 132 বাইট । আমি আপনাকে কী করেছিলাম তা একবার দেখতে দিন। বড় লাইন: <>পরিবর্তে <STDIN>, print" "x$fপরিবর্তে for(1..$f){print" "}ব্যবহার xxx for yyyকরার পরিবর্তে for(yyy){xxx}ব্যবহার $_স্পষ্ট ভেরিয়েবল (পরিবর্তে লুপ জন্য for$i(..){..}) ...
দাদা

দীর্ঘদিন থেকে আমি পার্ল ব্যবহার করেছি, ধন্যবাদ! তবে আমি চেষ্টা করেছিলাম x$fএবং এটি কাজ করতে পারি না: ও এখন আবার চেষ্টা করছি ...
ফেলিক্স প্যালম্যান

উহ এবং আমি উভয় সংস্করণে একটি বাগ পেয়েছি ... এটি ঠিক করার জন্য আমাকে কিছু সময় দিন;)
ফেলিক্স প্যালম্যান

0

সি ++, 291 বাইট

ফাংশন ধরে নেওয়া হয় যে ভেক্টরের সমস্ত স্ট্রিং প্যারামিটার হিসাবে পাস হয়েছে একই দৈর্ঘ্য রয়েছে

#include<vector>
#include<string>
#define S std::string
#define T size()
void f(std::vector<S>&c){c.insert(c.begin(),S(c[0].T+1,'_'));int i,j=0;for(i=1;i<c.T;++i){c[i]='/'+S(i,' ')+c[i];if(i>=c.T/2)c[i]='\\'+S((c.T-i-1)*2,' ')+c[i];}for(auto&a:c)j=j>a.T?j:a.T;for(auto&a:c)a=S(j-a.T,' ')+a;}


0

সি, 485 বাইট

এই প্রোগ্রামটি স্ট্যান্ডার্ড ইনপুট থেকে 999 টি অক্ষর নেয় এবং এগুলি একটি অ্যারেতে পড়ে reads এটি আপনার চ্যালেঞ্জ নির্দেশিত পরিবর্তনের সাথে স্ট্যান্ডার্ড আউটপুটে একসাথে 1 টি মুদ্রণ করে। এটি ধরে নেয় ইনপুটটি আয়তক্ষেত্রাকার।

#include<stdio.h>
#define p(a)putc(a,stdout);
#define P j+j/2+1
a[999],i,j,k,l,m,n,q;char c;pad(a){m=P;if(a&&!k){m-=1;}for(n=0;n!=m;n++){q=32;if((!a||k)&&n==c){c--;q=47;}else if((P-c+1)>j/2+1&&(P)/2-n==c-2){q=92;}p(q);}}int main(){k=i=j=0;x:if(read(0,&c,1)){if('\n'==(a[i++]=c)){if(!j){l=i;}j++;}goto x;}i--;if('\n'==a[i-1]){i--;}else{j++;}c=P-2;for(;k!=i;k++){if(!k||a[k]==10){if(a[k]==10){p(10);}pad(1);if(!k){l++;while(l-->0){p(95);}p(10);pad(0);}if(a[k]==10){continue;}}p(a[k]);}}

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