संचालक ASCII कला


22

चुनौती

नीचे दी गई सूची से एक ASCII ऑपरेटर और एक नंबर n को देखते हुए , उस ऑपरेटर का उपयोग करके ऑपरेटर के ASCII प्रतिनिधित्व को आकर्षित करें, जिसमें लंबाई n वाले ऑपरेटर के लाइन सेगमेंट के साथ चरित्र है ।

इनपुट

सूची से एक ASCII चरित्र = + - x /और एक पूर्णांक nजहां n >= 1। (मैं xइसके बजाय *और के /बजाय उपयोग कर रहा हूं ÷, लेकिन आप दोनों में से किसी एक का उपयोग कर सकते हैं, जो भी आसान हो)। के लिए +और x, आप केवल विषम संख्या को संभालने के लिए संरेखण के साथ मुद्दों से बचने के लिए किया है।

उत्पादन

लंबाई के सेगमेंट वाले कैरेक्टर से बना ऑपरेटर का एक ASCII ड्राइंग। क्षैतिज भाग में ऊर्ध्वाधर / क्षैतिज दूरी अंतर को ऑफसेट करने के लिए वर्णों के बीच रिक्त स्थान होना चाहिए।

नियम

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है। मानक खामियों को मना किया जाता है।

उदाहरण

इनपुट: + 3

  +
+ + +
  +

इनपुट: = 4

= = = =
= = = =

इनपुट: = 10

= = = = = = = = = =
= = = = = = = = = =

इनपुट: - 2

- -

इनपुट: / 10

         /
        /
       /
      /
     /
    /
   /
  /
 /
/

इनपुट: x 7

x     x
 x   x
  x x
   x
  x x
 x   x
x     x

आप के लिए परीक्षण मामले जोड़ सकते हैं = 10?
रॉड

1
मुझे लगता है कि "x" और "+" विषम संख्याएं हैं? (मैंने अभी देखा DrMcMoylex ने लगभग एक ही सवाल पूछा।)
मार्टिन

1
@MartinRosenau हाँ, इनपुट अनुभाग से: "+ और x के लिए, आपको केवल संरेखण वाले मुद्दों से बचने के लिए विषम संख्या को संभालना होगा।"
corvus_192

क्यों X और / नहीं हैं?
Adám

1
अग्रणी व्हाट्सएप की अनुमति है?
Adám

जवाबों:


5

पिप , 62 59 56 बाइट्स

-Sध्वज के लिए कोड के 55 बाइट्स, +1 ।

[sXbRA_AEv-_aM,b(Y^aWR_Xb/2s)MyRVsX,b.aYaXbJsxyRL2x]@Aa

ध्यान दें कि यह समाधान ÷विभाजन के लिए और *गुणन के इनपुट के साथ काम करता है, हालांकि यह उन वर्णों का उपयोग क्रमशः ASCII-art /और x, करने के लिए करता है। ओपी ने स्पष्ट किया है कि यह ठीक है। इसे ऑनलाइन आज़माएं!

कैसे?

यहां आंशिक रूप से स्थान दिया गया है और टिप्पणी संस्करण है । ध्यान दें कि aऔर bकमांड-लाइन आर्ग्स हैं, अर्थात् ऑपरेटर और आकार क्रमशः। -Sझंडा नियंत्रण कैसे सूचियों उत्पादन कर रहे हैं: यह पहली बार नई-पंक्तियों पर मिलती है, लेकिन रिक्त स्थान पर किसी भी नीडिंत सूचियों मिलती है।

[                 Build a list of all possible figures:
 sXbRA_AEv-_aM,b   0 - Multiplication
 (Y^aWR_Xb/2s)My   1 - Addition
 RVsX,b.a          2 - Division
 YaXbJs            3 - Subtraction
 x                 4 - Empty
 yRL2              5 - Equals
 x                 6 - Empty
] @ Aa            Index, mod 7, with ASCII value of a

और यहाँ व्यक्तिगत खंड हैं:

गुणन

आंकड़े में प्रत्येक पंक्ति के लिए, हम रिक्त स्थान की एक स्ट्रिंग उत्पन्न करते हैं और फिर उनमें से दो को इनपुट चरित्र से बदल देते हैं। पंक्ति के लिए i, हम इंडेक्स पर रिक्त स्थान बदलना चाहते हैं iऔर b-1-i; लेकिन ध्यान दें कि बाद वाला नकारात्मक सूचकांक का उपयोग कर सकता है -1-i। (यह और भी छोटा है क्योंकि परिवर्तनीय vको ऋणात्मक v e 1. से पूर्वनिर्मित किया गया है )

sXbRA_AEv-_aM,b
            M,b  Map this function to range(b):
sXb                Space, repeated b times
     _             Function arg
      AE           (Implicitly) convert to list and append element...
        v-_        -1 minus function arg
   RA              Replace the characters at those indices...
           a       ... with input character
                 The resulting list is output with one item per line

इसके अलावा

मेरे ड्रा से एक खोखले वर्ग उत्तर की रणनीति का उपयोग करते हुए , हम एक फ़ंक्शन को परिभाषित करते हैं जो अपने तर्क की प्रतियों +में लपेटता है b/2और परिणाम को वर्णों की सूची के रूप में लौटाता है। (पूर्णांक विभाजन //आवश्यक नहीं है क्योंकि स्ट्रिंग पुनरावृत्ति ऑपरेटर Xस्वचालित रूप से पूर्णांक में छोटा हो जाता है।) सबसे पहले, हम इस फ़ंक्शन को एक स्थान पर, देते हुए कहते हैं [" ";" ";"+";" ";" "]; फिर, हम उस परिणाम [" ";" ";"+";" ";" "]पर उसी फ़ंक्शन को मैप करते हैं, जो अधिकांश लाइनों ["+";"+";"+";"+";"+"]पर लेकिन केंद्र रेखा पर देता है। यह नेस्टेड सूची तब आउटपुट होती है, क्योंकि -Sध्वज के कारण, पंक्ति के सभी वर्णों के बीच रिक्त स्थान और पंक्तियों के बीच की नई सीमा होती है।

(Y^aWR_Xb/2s)My
                 Anonymous function:
      _Xb/2        Function arg, repeated b/2 times (implicitly rounded down)
   aWR             Wrap a in two copies of the above
  ^                Split resulting string into list of chars
 Y               Yank that function into y
(          s)    Apply function y to space
             My  Map y to that result

विभाजन

प्रत्येक पंक्ति के बीच b-1और 0रिक्त स्थान होते हैं, उसके बाद इनपुट चरित्र होता है a

RVsX,b.a
    ,b    Range(b)
  sX      Space, repeated that many times (works itemwise)
      .a  Concatenate a (itemwise)
RV        Reverse (puts the larger number of spaces at the beginning)
          Outputs newline-separated

घटाव

इनपुट चरित्र की एक अलग-अलग पंक्ति बनाएं। बाद के लिए एक प्रति सहेजें।

YaXbJs
 aXb    b copies of a
    Js  Join on space
Y       Yank into y (overwrites the function from earlier, but we're done using it anyway)
        This is a string, so it just gets output

बराबर

घटाव का चरण जो हमें चाहिए होता है उसका आधा संग्रहित करता है y- अन्याय इसे दोगुना कर देता है।

yRL2  (Implicitly) convert y to list and repeat it twice
      Outputs newline-separated

डमी xमान मुख्य सूची को पैड करने के लिए हैं ताकि मॉड्यूलर अनुक्रमण प्रत्येक इनपुट चरित्र के लिए एक अद्वितीय सूचकांक देता है +-*÷=


13

वी , 78, 72, 71, 68, 65, 63, 62 , 61 बाइट्स

Ç=ü-/Àé X
ç^Ó/é Àä$
ç+/ÀÄM|ÀR+ 
ç=/Ä
ç¯/lòhYpX
çx/rxòl3Äjxlrx

इसे ऑनलाइन आज़माएं!

हमेशा की तरह, 05AB1E के साथ गर्दन और गर्दन की लड़ाई वास्तव में मजेदार है!

चूंकि इसमें गैर-एएससीआईआई अक्षर शामिल हैं, यहाँ एक हेक्सडंप है:

0000000: c73d fc2d 2fc0 e920 580a e75e d32f e920  .=.-/.. X..^./. 
0000010: c0e4 240a e72b 2fc0 c44d 7cc0 522b 200a  ..$..+/..M|.R+ .
0000020: e73d 2fc4 0ae7 af2f 6cf2 6859 7058 0ae7  .=/..../l.hYpX..
0000030: 782f 7278 f26c 33c4 6a78 6c72 78         x/rx.l3.jxlrx

यह =और के लिए आउटपुट में अग्रणी स्थान बनाता है -, लेकिन इसकी अनुमति दी गई है । यदि यह अनुमति नहीं है, तो टिप्पणी करने के लिए स्वतंत्र महसूस करें और मैं इसे वापस लाऊंगा।

व्याख्या

"ग्लोबल कमांड" (जैसे ç) एक निश्चित रेक्स से मेल खाने वाली हर लाइन के लिए कुछ निश्चित कमांड को लागू करता है। वाक्य-विन्यास है

ç<compressed regex>/<commands>

यह सशर्त / स्विच स्टेटमेंट का अनुकरण करने का सबसे आसान तरीका है। अपने मूल उत्तर में, मैंने बस प्रत्येक अलग-अलग चरित्र के लिए दाईं ओर की पूरी ASCII- कला बनाई, जिसे हमें खोजना होगा। हालाँकि, इनमें से बहुत से आउटपुट में समान कमांड की आवश्यकता होती है। इसलिए मैंने उन्हें जोड़ दिया। पहला कमांड ('Ç') वास्तव में ग्लोबल कमांड का उलटा है, यह रीजैक्स से मेल खाने वाली हर लाइन पर कमांड को लागू करता है । तो पहला आदेश है:

Ç=ü-        " On every line not containing an '=' or an '-' (e.g. inputs '/', '+', and 'x'):
    /Àé     "   Insert *n* spaces
        X   "   Delete one of them

निम्नलिखित कमांड इनपुट '=' और '-' के लिए है। ये दोनों आसानी से आसान और समान हैं। इस आदेश के बाद, हमें और अधिक प्रसंस्करण की आवश्यकता नहीं है -

ç^Ó         " On every line that starts with non-whitespace (e.g. every line not affected by our previous command):
   /é       "   Insert one space
            "   Move back a character
      À     "   Make *n* copies
       ä$   "   Of every character on this line

यहाँ से हम प्रत्येक व्यक्तिगत इनपुट के लिए कुछ अतिरिक्त कमांड करते हैं। के लिए +:

ç+/         " On every line containing a '+':
   ÀÄ       "   Make *n* copies of this line
     M|     "   Move to the first character of the middle line
       À    "   *n* times:
        R+  "   Replace the next two characters with '+ '

बराबरी के लिए आदेश बहुत सीधा है। हम सिर्फ इसके साथ नकल करते हैं Ä। के लिए /:

ç¯          " On every line containing a '/':
  /l        "   Move one character to the right
    ò       "   Recursively:
     h      "     Move one character to the left
      Yp    "     Make a copy of this line
        X   "     Delete one character
         ò  "   End loop (implicit)

आखिरी सबसे जटिल है। यह मूल रूप से इस उत्तर का एक बंदरगाह है ।

çx              " On every line containing a 'x':
  /rx           "   Replace the first character with an 'x'
     ò          "   Recursively:
      l         "     Move one char to the right
       3Ä       "     Make 3 copies of this line
         j      "     Move down one line
          x     "     Delete one char
           l    "     Move one char to the right
            rx  "     Replace this char with an 'x'

तो यह है कि कई लाइनों का उपयोग किस लिए किया जाता है?
कॉनर ओ'ब्रायन

@ कोरोनोब्रिएन हाँ। çआदेश (और साथ ही खोज और की जगह, /और ?) vim के कमांड लाइन, आप वास्तव में आदेश को चलाने के लिए प्रवेश हिट करने के लिए है जहां के सभी अनुकरण हिस्सा
DJMcMayhem

13

05AB1E , 81 76 74 73 70 69 68 65 64 62 60 59 57 56 बाइट्स

वर्तमान में V उत्तर के साथ युद्ध में । मैं आपके लिए आ रहा हूँ डॉ। मैकमोलेक्स: पी।

पिप उत्तर के साथ युद्ध में भी । मैं तुम्हें श्री DLosc देख रहा हूँ।


कोड:

Ç6&"¹s<ú.s.Bívy¹'xQiÂðñ}, ¹×S)»¹'=Qƒ= ;ƒ¹})D¦»»Rû.c"#è.V

या अधिक पठनीय रूप में:

  Ç6&
"¹s<ú.s.Bívy¹'xQiÂðñ},
 ¹×S)»¹'=Qƒ=
 ;ƒ¹})D¦»»Rû.c"
#è.V

CP-1252 एन्कोडिंग का उपयोग करता है । इसे ऑनलाइन आज़माएं!


1
यहाँ हम फिर से जाना ...: पी
DJMcMayhem

1
@DrMcMoylex Hahaha, अच्छा पुराना समय :)।
अदनान

30
अधिक पठनीय ... पूरी तरह से ...
ऑलिवर नी

1
"पठनीय" की दी गई परिभाषा के लिए।
मैट लेसी


7

पायथन 3, 304 283 278 बाइट्स

पर्याप्त सरल, बस वर्णों का एक मैट्रिक्स बनाता है और इसके आधार पर विभिन्न कार्यों को लागू करता है। =और -रिक्त स्थान अनुगामी है कि अगर बहुत बुरा नहीं है।

संपादित करें: 21 बाइट्स को बचाने के लिए उनके सुझावों के लिए @ शेबंग और @ रोड का धन्यवाद!

EDIT2: @ बायर को 5 बाइट बचाने के लिए धन्यवाद!

t,s=input().split()
s=int(s)
r=range(s)
b=[[' ']*s for x in r]
exec(['for x in r:b[s//2][x]=b[x][s//2]=t','b=[t*s]'+'*2'*(t=='='),'for x in r:b[x][s-x-1]='+'b[x][x]='*(t=='x')+'t'][(t>'+')+(t in'x/')])
if t in'-=+':b=[[x+' 'for x in l]for l in b]
print(*map(''.join,b),sep='\n')

आप 8 बाइट्स बचा सकते हैं if'-'==tहालत लाइन को हटाकर और इसके ऊपर वाले व्यक्ति को प्रतिस्थापित करें if t in'=-':b=[[t+' ']*s]*(2*(t>'-'))(मुझे लगता है)।
केड

आप एक सूची के अंदर कार्यों को लपेट सकते हैं और निष्पादन का उपयोग करके चला सकते हैं: exec(['+ block','/ block','x block','= block','- block']['+/x=-'.find(t)])~ 18 बाइट्स बचाने के लिए
रॉड

हां, अनुगामी रिक्त स्थान / न्यूलाइन्स स्वीकार्य हैं।
योडल

पहली पंक्ति के लिए, करें .split()(व्हाट्सएप पर कोई आर्ग्ल स्प्लिट्स नहीं)। लाइन 6 पर, आप एक स्थान ( b=[[x+' 'for) से चूक गए । आप print(*map(''.join,b),sep='\n')1 कम बाइट्स के लिए अंतिम पंक्ति बना सकते हैं ।
Artyer

7

जावास्क्रिप्ट (ईएस 6), 238 225 215 202 196 बाइट्स

(c,n)=>[...Array(i=n*(c=="="?4:c+1-1?2:c<"-"?n+n:n+1))].map(_=>--i%(n+(c=='/'|c>'w'||n))?c>'w'?i%n&&~-i%(n+2)?" ":c:c<'-'?i%(n*2)-n&&(~i&1|(n/2^i/n/2))?" ":c:c=="/"?i%n?" ":c:i%2?c:" ":`
`).join``

शायद गोल्फ हो सकता है, लेकिन यह एक शुरुआत है।


6

स्काला, 275 बाइट्स

(i,c)=>if(c<44){val b=(" "*(i-1)+"+\n")*((i-1)/2)
b+"+ "*i+"\n"+b}else
if(c<46)"- "*i else
if(c<48)i-1 to(0,-1)map(" "*_+"/\n")mkString else
if(c<62)"= "*i+"\n"+"= "*i
else{val a=0 to i/2-1 map(x=>" "*x+"x"+" "*((i/2-x)*2-1)+"x"+" "*x+"\n")mkString;a+" "*(i/2)+"x"+a.reverse}

उपयोग:

val f:((Int,Char)=>String)=...
print(f(10, '/'))

स्पष्टीकरण:

छवि बनाने के सही तरीके को चुनने के लिए कोड का एससीआई मान के लिए परीक्षण करता है। विचाराधीन ऑपरेटरों के ascii मूल्य हैं: ('+' -> 43), ('-' ->45), ('/' -> 47), ('=' -> 61), ('x' -> 120)

(i,c)=>                              //define a function
  if(c<44){                            //if c is a plus
    val b=(" "*(i-1)+"+\n")*((i-1)/2)    //define the top/bottom part b as (i-1)/2 times (i-1) spaces, a plus sign and a newlineine
    b+"+ "*i+"\n"+b                      //return b, i times a plus and a space, a newline and b
  }else if(c<46)                       //if c is a '-'
    "- "*i                               //return "- " repeated i times
  else if(c<48)                        //if c is a '/'
    i-1 to(0,-1)                         //create a range from i-1 to 0 in steps of -1
    map(" "*_+"/\n")                     //map each number to that number of spaces plus a "/" and a newline
    mkString                             //join them together
  else if(c<62)                        //if c is '='
    "= "*i+"\n"+"= "*i                   //return "= " repeated i times, a newline and "= " repeated i times again
  else{                                //if c if 'x'
    val a=                               //define a, which will be the top part, as...
      0 to i/2-1                         //a range from 0 to i/2-1
      map(n=>                            //map each number n to
        " "*n                              //n spaces
        +"x"                               //plus an "x"
        +" "*((i/2-n)*2-1)                 //plus ((i/2)-n)*2-1 spaces
        +"x"                               //plus an "x"
        +" "*n                             //plus n spaces
        +"\n"                              //and a newline
      )mkString;                         //join them
    a+" "*(i/2)+"x"+a.reverse          //return a, i/2 spaces, "x" and the reverse of a 
  }

5

जावास्क्रिप्ट (ईएस 6), 156 बाइट्स

(c,n)=>[...Array(n--)].map((_,i,a)=>a.map((_,j)=>({'/':a=i+j-n,x:a&&i-j,'-':a=i+i-n,'+':a&&j+j-n,'=':a+2&&a-2}[c]?' ':c)).join(c=='='|c<'/'?' ':'')).join`\n`

जहां \nशाब्दिक न्यूलाइन चरित्र का प्रतिनिधित्व करता है।


फ़ायरफ़ॉक्स 49 में, SyntaxError: invalid property idजैसा कि वर्तमान में लिखा गया है , मैं प्राप्त करता हूं , लेकिन स्लैश के चारों ओर बैकस्टिक्स को बदलकर एपोस्ट्रोफ़्स में तय किया गया है। (आप
धर्मत्यागियों के

इसके अलावा, के लिए आउटपुट +, -और =चुनौती कॉल की तुलना में अलग दिखते हैं: "ऊर्ध्वाधर / क्षैतिज दूरी के अंतर को ऑफसेट करने के लिए क्षैतिज भागों में वर्णों के बीच रिक्त स्थान होना चाहिए।"
ETHproductions

@ETHproductions ए) टाइपो बी) क्षमा करें, मैंने इस बात को नजरअंदाज कर दिया कि बाद में ठीक हो जाएगा।
नील

हालांकि यह हास्यास्पद है। मुझे आशा है कि इसे ठीक करने से बहुत सारे बाइट नहीं जुड़ेंगे।
ETHproductions

@ETHproductions धन्यवाद। मुझे लगता है कि यह 19 बाइट्स की कीमत पर करता है।
नील

4

डायलॉग एपीएल , 91 86 बाइट्स

जरूरत है ⎕IO←0, जो कई प्रणालियों पर डिफ़ॉल्ट है। N को बाएं तर्क के रूप में लेता है, और सही तर्क के रूप में + - × as = में से एक है।

{s←⌈⍎⍕32
t' '
d←⌽∘.=⍨⍺
s2 6:t[d∨⌽d6=s]
5=s:t[↑,/2↑¨∨/¨(⌊⍺÷2)=⍳⍺ ⍺]
(2-s)(2×⍺)⍴t}

व्याख्या

{
    s     3  2              calculate ceil(3 f 2), where f is the given symbol
    t  ' '                     create a string with a space before the symbol
    d   ∘.=⍨                  Boolean \ diagonal
    s  2 6: t[d   d  6 = s]  if ÷ or × index t with one or both diagonals
 find coordinates that are in the middle of at least one dimension
 pad with zeros for spacing
 use that to index into t
    5 = s: t[  ,/ 2↑¨ ∨/¨ (⌊  ÷ 2) =   ⍺]
 - or =:
    (2 - s) (2 × ⍺)  t        one or two rows of double-spaced symbols
}

3

मैथेमेटिका, 191 बाइट्स

e=#~Mod~2==1&;StringRiffle[Normal@SparseArray[{a_,b_}/;(a+b==d+1||a==b)[e@b&&a<3,,e@b&&(a==⌈d/2⌉||b==d),,e@b&&a<2,,a+b==d+1][[Last@ToCharacterCode@#~Mod~10]]:>#,{d=#2,2d-1}," "],"
"," "]&

अनाम फ़ंक्शन। इनपुट के रूप में एक स्ट्रिंग और एक संख्या लेता है, और आउटपुट के रूप में एक स्ट्रिंग लौटाता है। दूर से छोटा नहीं है, लेकिन फिर भी लिखने में मज़ा आता है।


3

सी, 396 बाइट्स

#define p(x) printf(x);
i,j,k,m;f(char s,int n){i=k=0;if(s==45)for(;i<n;++i)p("- ")m=n/2;if(s==43)for(;i<n;++i)for(j=0;j<=m;++j)if(i-m)p(j-m?"  ":"+\n")else{for(;k<n;++k)p("+ ")p("\n")j+=m;}if(s==61)for(;i<2;++i){for(k=0;k<n;++k)p("= ")p("\n")}j=n;if(s==47)for(;i<n;++i){--j;for(k=0;k<j;++k)p(" ")p("/\n")}if(s==120)for(;i<n;++i){k=m-abs(m-i);for(j=0;j<n-k;++j)p(j-k?" ":"x")p(i-m?"\bx\n":"\n")}}

के साथ बुलाना:

int main()
{
   f('x', 5);
   return 0;
}

2

एसओएमएल , 104 100 बाइट्स (गैर-प्रतिस्पर्धात्मक)

    Cd³³b»E +=?ce*d+e{t}bd*Oe{t}} ==?b*tt} -=?b*t} /=?bc*b{j:d+p}} x=?"”cb*e{jj⁴⁴d;d+++tGG;c+;}XOdoe{O

यह इस तरह की प्रतिस्पर्धा है, क्योंकि मुझे पूरा यकीन है कि मैंने यहां जो कुछ भी इस्तेमाल किया है, वह इस प्रश्न को पोस्ट करने की तारीख से पहले github पर डॉक्स है, लेकिन पार्सर के पास कुछ कार्यों के लिए समर्थन नहीं है, जिनका मैंने उपयोग किया था।


2

PHP, 306 292 281 282 281 275 275 बाइट्स

$r=str_pad("",2*$n=$argv[2],($c=$argv[1])." ")."\n";if(",">$c)$r=($m=str_repeat(str_pad($c,$n," ",0)."\n",$n/2))."$r$m";if(9<$c)$r.=$r;if(w<$c)for($r=$c;$i<$n;$r[$i*(2+$n)]=$r[++$i*$n-1]=x)$r[$i*$n+$i+$n]="\n";if("/"==$c)for($r=$s="";$i++<$n;$s.=" ")$r="$s/\n$r";echo$r;

ऊह यह भारी है ... आगे गोल्फ की जरूरत है।
मैं 4 बाइट्स को भौतिक लाइनब्रीक या एक बाइट के साथ "\ n" एक चर में डालकर बचा सकता था।


1
Nice.for "+", मुझे लगता है कि आपको ऊंचाई से मेल खाने की ज़रूरत है और हमेशा 3 नहीं। इसके अलावा, यदि आप केस / ब्रेक के बजाय () का उपयोग करने के लिए अधिक सक्षम गोल्फ होना चाहिए;
क्रिप्टो

2

सी #, 744 बाइट्स

यह 1 मिलियन पात्रों की तरह लंबा है, मुझे लगता है, लेकिन मुझे परवाह नहीं है, मैं बस इतना खुश हूं कि मैंने इसे हल किया ...

golfed:

string A(string s,int n){string O="";Func<string,int,string>R=(a,b)=>{return string.Join("",Enumerable.Repeat(a,b))+"\r\n";};switch(s){case"+":for(int i=0;i<n;i++){if(i==n/2){O+=R("+",n);}else{O+="+".PadLeft(n-n/2,' ').PadRight(n-n/2,' ')+"\r\n";}}return O;case"=":return R("=",n)+R("=",n);case "-":return R("-",n);case "/":for(int i=n;i>0;i--){O+="/".PadLeft(i)+"\r\n";}return O;case "x":int x=0;string[]r=new string[n];for(int i=n;i>0;i--){if(n-x-x<0){O+="x".PadLeft(x+1)+"\r\n";break;}string row=string.Join("",Enumerable.Repeat(" ",x))+"x"+string.Join("",Enumerable.Repeat(" ",n-x-x))+"x"+"\r\n";O+=row;x++;r[x]=row;if(i==n/2)break;}for(int i=r.Length-1;i>0;i--){if(string.IsNullOrEmpty(r[i]))continue;O+=r[i];}return O;default:return "";}}

Ungolfed:

public string A(string s, int n)
{
  string O = "";

  Func<string, int, string> R = (a, b) =>
  {
    return string.Join("", Enumerable.Repeat(a, b)) + "\r\n";
  };

  switch (s)
  {
    case "+":
      for (int i = 0; i < n; i++)
      {
        if (i == n / 2)
        {
          O += R("+", n);
        }
        else
        {
          O += "+".PadLeft(n - n / 2, ' ').PadRight(n - n / 2, ' ') + "\r\n";
        }
      }
      return O;
    case "=":
      return R("=", n) + R("=", n);
    case "-":
      return R("-", n);
    case "/":
      for (int i = n; i > 0; i--)
      {
        O += "/".PadLeft(i) + "\r\n";
      }
      return O;
    case "x":
      int x = 0;
      string[] r = new string[n];
      for (int i = n; i > 0; i--)
      {
        if (n - x - x < 0)
        {
          O += "x".PadLeft(x + 1) + "\r\n";
          break;
        }
        string row = string.Join("", Enumerable.Repeat(" ", x))
          + "x"
          + string.Join("", Enumerable.Repeat(" ", n - x - x)) + "x" + "\r\n";
        O += row;
        x++;
        r[x] = row;
        if (i == n / 2)
          break;
      }
      for (int i = r.Length - 1; i > 0; i--)
      {
        if (string.IsNullOrEmpty(r[i]))
          continue;
        O += r[i];
      }
      return O;
    default:
      return "";
  }
}

परिक्षण:

+: 3, 5, 7, 9, 11
/: 7, 8, 9, 10
-: 3, 4, 5, 6
=: 3, 4, 5, 6, 7
x: 5, 7, 9, 11

यहां पेस्ट और प्रारूप करने के लिए बहुत ज्यादा, मैंने एक पास्टबिन बनाया:

pastebin


कृपया इसे गोल्फ करें और बाइट काउंट प्रदान करें।
mbomb007

2

सी, 331 बाइट्स

i,j;f(o,n){if(47==o)for(i=n;i;puts("")){for(j=i--;j--;putchar(j?32:o)){}}
if(43==o)for(i=n;i--;puts("")){for(j=n;j--;printf(i==n/2||!j?"+ ":" ")){}}
if(45==o)for(i=n;i--;putchar(o)){}
if(61==o)for(i=3;i--;puts("")){for(j=n;j--;putchar(i&1?32:o)){}}
if(120==o)for(i=n;i;puts("")){for(j=0;j++<n;putchar(j==i||j==n-i+1?o:32)){}i--;}}

ऑपरेटर को ASCII कोड के रूप में पारित किया जाता है oऔर चरित्र की गणना की जाती है n। मैंने केवल प्लस साइन में क्षैतिज रूप से लगातार वर्णों के बीच रिक्त स्थान जोड़ा है, क्योंकि यह एकमात्र ऐसा था जहां आउटपुट विकृत हो जाता था अगर मैं नहीं था और कार्य में यह केवल "चाहिए"। मैं दो नीडिंत छोरों की गिनती का उपयोग करता हूं ( -जहां मुझे केवल एक पंक्ति की आवश्यकता है) को छोड़कर ।

= तीन लाइनें, उनमें से एक खाली, सीधे आगे

+printfरिक्त स्थान के कारण उपयोग करना

- सीधे आगे

/ आंतरिक लूप प्रिंट शून्य पर है और बाहरी लूप काउंटर पर शुरू करें

xबाहरी लूप काउंटर और इसके "उलटा" पर आंतरिक लूप प्रिंट है n-i। अभी भी यह देखने की जरूरत है कि यहां आई-ऑफ-वन क्यों आता हूं।

नमूना कॉल:

#include <stdio.h>
/*  =       61
    +       43
    -       45
    /       47
    Space   32
    x       120
*/
int main(int argc, char **argv){
    printf("%s\n%s\n",argv[1], argv[2]);
    f(*argv[1],strtol(argv[2],NULL,10));
}

1

लुआ, 402 344 312 बाइट्स

312:

r,p,b,x=string.rep,print,' ','x'function d(s,n)h,l=(n+1)/2,s..b;e=r(l,n)if s=='-'then p(e)elseif s=='='then p(e)p(e)else for f=1,n do p(s=='/'and(r(b,n-f)..s)or s=='+'and(f~=h and r(' ',n-1)..'+'or r('+ ',n))or f<h and r(b,f-1)..x..r(b,n-2*f)..x or f>h and r(b,n-f)..x..r(b,2*f-2-n)..x or r(b,f-1)..x)end end end

344:

r,p,b,x=string.rep,print,' ','x'function d(s,n)h,l=(n+1)/2,s..b;e=r(l,n)if s=='-'then p(e)elseif s=='='then p(e)p(e)else for f=1,n do if s=='/'then p(r(b,n-f)..s)elseif s=='+'then p(f~=h and r(' ',n-1)..'+'or r('+ ',n))elseif s=='x'then p(f<h and r(b,f-1)..x..r(b,n-2*f)..x or f>h and r(b,n-f)..x..r(b,2*f-2-n)..x or r(b,f-1)..x)end end end end

402:

r,p,b,x=string.rep,print,' ','x'function d(s,n)h=(n+1)/2;if s=='-'then p(r(s..b,n))end;if s=='='then p(r(s..b,n))p(r(s..b,n))end;if s=='/'then for i=1,n do p(r(b,n-i)..s)end end;if s=='+'then for i=1,n do p(i~=h and r(' ',n-1)..'+'or r('+ ',n))end end;if s=='x'then for i=1,n do if i<h then p(r(b,i-1)..x..r(b,n-2*i)..x)elseif i>h then p(r(b,n-i)..x..r(b,-n+2*i-2)..x)else p(r(b,i-1)..x)end end end end

90 वर्ण कम हो गए और अब विस्तारित होने पर भी यह देखना दर्दनाक है। : |


"यह भी दिखता है कि यह एक पुरानी चुनौती है। उफ़" पुरानी चुनौतियों का जवाब देने में कुछ भी गलत नहीं है।
स्टेडीबॉक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.