ASCII कला का वर्गमूल


30

आप एक गणितज्ञ के लिए एक प्रशिक्षु के रूप में काम कर रहे हैं जो वास्तव में TeX, LaTeX इत्यादि से घृणा करता है। वह इतना अधिक है कि उसने सभी टाइपिंग को छोड़ देने का फैसला किया है और आपको 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
     / ###
 \  /  ###
  \/   ###

और बस!

नियम

आपको एक प्रोग्राम या फ़ंक्शन करना है जो एक स्ट्रिंग में लेता है, स्ट्रिंग्स की सूची (अर्थात लाइनें), या वर्णों की सरणी, और ऊपर वर्णित विवरण के अनुसार रूपांतरित इनपुट को आउटपुट करता है (आवश्यक रूप से सटीक उसी क्रम या प्रक्रिया द्वारा नहीं)

आप मान सकते हैं कि इनपुट आयताकार है अगर पसंद किया जाता है। ट्रेलिंग व्हाट्सएप की न तो आवश्यकता है और न ही अस्वीकृत।

यह , इसलिए बाइट्स में सबसे कम जवाब जीतता है।

उदाहरण:

Input:
40
Output:
  ____
\/ 40

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

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

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

3
V इसमें एक अच्छा प्रदर्शन करने वाला है
caird coinheringaahing

16
एक गणितज्ञ जो वास्तव में TeX, LaTeX आदि से नफरत करता है, मैंने लगभग वहीं पढ़ना छोड़ दिया है
लुइस मेंडू

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
स्टीफन

अंडरस्कोर को एक चरित्र को दोनों तरफ अतिरिक्त रूप से फैलाने की आवश्यकता होती है।
नील

आप इनपुट को स्ट्रिंग्स की सूची के रूप में ले सकते हैं (पायथन 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
@LuisMendo चारकोल पुराना हो रहा है ...
एरिक द आउटगॉल्फ

@EriktheOutgolfer D: पुराना कैसे
ASCII-only

@ ASCII- केवल वेल SOGL नया और बेहतर है, इसलिए ... चारकोल के लिए कोई अपराध नहीं है, हालांकि यह अभी भी बहुत कुछ जीतता है।
एर्ग आउटफोलर

@EriktheOutgolfer लेकिन यह कैसे बेहतर है :(
केवल

IMO यह थोमा कह रहा है जैसे हास्केल नया और बेहतर है इसलिए हास्केल> सी # हालांकि यह अभी भी बहुत जीतता है
ASCII-only

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)]))

चर 'एल' तार की एक सूची है, प्रत्येक स्ट्रिंग एक पंक्ति। पठनीय संस्करण:

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
नमस्ते, PPCG में आपका स्वागत है। अच्छा पहला उत्तर है, लेकिन यह एक स्निपेट है, क्योंकि यह चर lको इनपुट के रूप में मान रहा है । आपको वह हिस्सा भी शामिल करना चाहिए जहां lइनपुट है, या तो फ़ंक्शन पैरामीटर या इनपुट () फ़ंक्शन, आदि के रूप में (पीएस आपका उत्तर भी कुछ सफेद-स्पेस-पेडिंग की कमी लगता है।)
आधिकारिक

2
@officialaimm, स्वागत के लिए धन्यवाद! भविष्य की समस्याओं के लिए अभ्यास करने के लिए मैंने टीआईओ लिंक को शामिल किया है और शामिल किया है
कोनर जॉन्सटन

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;
}

स्वीकृतियाँ

  • -2 बाइट्स केविन क्रूज़सेन की बदौलत

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;}:। (मैंने TIO लिंक में हेडर और पाद लेख का भी उपयोग किया है, ताकि आप अपने वास्तविक गोल्फ कोड को परीक्षण कोड से अलग कर सकें।)
केविन क्रूज़सेन

1

जाप , 46 बाइट्स


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

लीडिंग न्यूलाइन कार्यक्रम का हिस्सा है। इनपुट और आउटपुट लाइनों का प्रतिनिधित्व करने वाले तार की एक सरणी है।

इसे ऑनलाइन आज़माएं! -Rन्यूलाइन के साथ परिणामी सरणी में शामिल होने के लिए ध्वज का उपयोग करना ।


@ETHproductions अफसोस की बात है कि Uएक सरणी नहीं एक स्ट्रिंग है क्योंकि काम नहीं करेगा ।
जस्टिन मेरिनर

आह, इसे रफ़ू करें ....
ETHproductions

1

जावास्क्रिप्ट (ईएस 6), 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 वर्णों तक ले जाता है और उन्हें एक सरणी में पढ़ता है। यह उन्हें आपकी चुनौती के संकेत के साथ मानक उत्पादन के लिए एक समय में 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]);}}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.