ASCII पोडियम बनाएँ


26

खेल प्रतियोगिताओं में, अक्सर ऐसा होता है कि विजेताओं को पोडियम पर प्रस्तुत किया जाता है, जिसमें पहले स्थान पर सबसे ऊंचा व्यक्ति होता है, दूसरे स्थान पर सबसे ऊंचा व्यक्ति बाईं ओर और तीसरे स्थान पर सबसे नीचे वाला व्यक्ति होता है। दांई ओर। हम यहाँ कुछ विशेष ट्वीक्स के साथ फिर से बनाने जा रहे हैं।

पोडियम को नीचे प्रस्तुत किया गया है:

     @---@
     | @ |
@---@| | |
| @ || | |
| | || | |@---@
| | || | || @ |

यह इस चुनौती का आधार बनेगा। अगला कदम उन लोगों पर फिट करने के लिए पोडियम को व्यापक बनाने के लिए है (उन पर मुद्रण योग्य ASCII तार)। हालांकि, हम सौंदर्य सौंदर्य सुनिश्चित करना चाहते हैं (क्योंकि यह एक शानदार फोटो अवसर है), इसलिए प्रत्येक पोडियम को एक ही चौड़ाई की आवश्यकता है, और चौड़ाई विषम होनी चाहिए। इसके अतिरिक्त, लोग (जाहिर है) पोडियम के केंद्र में खड़े होना चाहते हैं, इसलिए स्ट्रिंग्स को यथासंभव सर्वोत्तम रूप से केंद्रित करना होगा। (आप या तो बाएं या दाएं से संरेखित कर सकते हैं, और इसे लगातार करने की आवश्यकता नहीं है।) उपरोक्त पोडियम न्यूनतम आकार हैं, और 3व्यापक माने जाते हैं ।

उदाहरण के लिए, ["Tom", "Ann", "Sue"]क्रमशः पहले-, दूसरे- और तीसरे स्थान का प्रतिनिधित्व करने वाले इनपुट को देखते हुए, निम्न पोडियम का उत्पादन करें:

      Tom
     @---@
 Ann | @ |
@---@| | |
| @ || | | Sue
| | || | |@---@
| | || | || @ |

हालांकि, अगर हमारे पास Anneइसके बजाय Ann, हमें अगले आकार तक जाने की आवश्यकता होगी 5, और जितना संभव हो सके स्ट्रिंग्स को केंद्र में रखना चाहिए । यहाँ, मैं "अतिरिक्त" अक्षर Anneको केंद्र के बाईं ओर संरेखित कर रहा हूँ , लेकिन आप संरेखित करने के लिए किस पक्ष को चुन सकते हैं।

         Tom
       @-----@
 Anne  |  @  |
@-----@|  |  |
|  @  ||  |  |  Sue
|  |  ||  |  |@-----@
|  |  ||  |  ||  @  |

चलो कुछ लंबे नामों के लिए चलते हैं। कैसे के बारे में ["William", "Brad", "Eugene"]:

          William
         @-------@
  Brad   |   @   |
@-------@|   |   |
|   @   ||   |   | Eugene
|   |   ||   |   |@-------@
|   |   ||   |   ||   @   |

यहां हम देख सकते हैं कि Bradबहुत सारे व्हाट्सएप हैं, Eugeneकम हैं, और Williamबस सही है।

लंबे समय तक परीक्षण के मामले में, कैसे ["A", "BC", "DEFGHIJKLMNOPQRSTUVWXYZ"]:

                                     A
                         @-----------------------@
           BC            |           @           |
@-----------------------@|           |           |
|           @           ||           |           | DEFGHIJKLMNOPQRSTUVWXYZ
|           |           ||           |           |@-----------------------@
|           |           ||           |           ||           @           |

अंत में, हमारे पास सबसे छोटा संभव इनपुट है, जैसे कुछ ["A", "B", "C"]:

       A
     @---@
  B  | @ |
@---@| | |
| @ || | |  C
| | || | |@---@
| | || | || @ |

  • इनपुट और आउटपुट किसी भी सुविधाजनक विधि द्वारा दिया जा सकता है ।
  • इनपुट गैर-रिक्त की गारंटी है (यानी, आप कभी भी ""नाम के रूप में प्राप्त नहीं करेंगे)।
  • आप इसे STDOUT में प्रिंट कर सकते हैं या इसे फ़ंक्शन परिणाम के रूप में वापस कर सकते हैं।
  • या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं।
  • विलुप्त हो रही व्हाट्सएप की कोई भी राशि स्वीकार्य है, इसलिए जब तक पात्र उचित रूप से पंक्तिबद्ध न हो जाएं।
  • मानक खामियों को मना किया जाता है।
  • यह इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड (बाइट्स में) जीतता है।

क्या सभी समान लंबाई वाले नामों को एक ही दिशा में संरेखित करना है?
शुक्राणु

1
अंतिम उदाहरण आउटपुट में पोडियम की लंबाई 1 के बजाय लंबाई 3 क्यों होती है?
bruderjakob17

3
@bruderjakob वह शुरुआत में कहते हैं "उपरोक्त पोडियम न्यूनतम आकार के हैं और उन्हें 3 विस्तृत माना जाता है"
rtpax

जवाबों:



7

ग्रूवी , 187 , 176 , 156 , 150 बाइट्स

f={n->m=n*.size().max()|1;h=' '*(m/2);'30734715746756276647665'*.toLong().sum{(n*.center(m+2)+[' '*(m+2),"@${'-'*m}@","|$h@$h|","|$h|$h|",'\n'])[it]}}

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

(नोट: टियो ग्रूवी इंटरप्रेटर लॉन्ग वैल्यू का उपयोग करते हुए इंडेक्सिंग लिस्ट को संभाल नहीं सका, जबकि ग्रोवी 2.5.6 कैन। इस प्रकार टीआईओ उत्तर का उपयोग कर रहा *.toShort()है *.toLong()जिसके बजाय बाइट जोड़ता है)

एक बंद को परिभाषित करता fहै जिसे इसके माध्यम से बुलाया जा सकता है:

println(f(['tom','ann','sue']))

जहां fएक स्ट्रिंग देता है।

स्पष्टीकरण:

कोड को अनसब्सक्राइब करना, हमारे पास है:

f={n->
  m=n*.size().max()|1
  h=' '*(m/2)
  a=n*.center(m+2)+[' '*(m+2),"@${'-'*m}@","|$h@$h|","|$h|$h|",'\n']
  '30734715746756276647665'*.toLong().sum{a[it]}
}
  • f={n-> - एक-परम के साथ क्लोजर एफ को परिभाषित करें n
  • m=n*.size().max()|1 - अधिकतम नाम लेन, बाइनरी-या विषम संख्या में खोजें
  • h=' '*(m/2) - h में बाद में उपयोग की जाने वाली मंजिल (m / 2) स्थान होंगे
  • a=...- तत्वों के साथ एक एन्कोडिंग सूची बनाता है:
    • अनुक्रमित 0,1,2 - अधिकतम लेन पर केंद्रित नाम
    • सूचकांक 3 - एम + 2 रिक्त स्थान
    • सूचकांक 4 - @---@पैटर्न, लेन करने के लिए गद्देदार
    • सूचकांक 5 - | @ |पैटर्न, लेन करने के लिए गद्देदार
    • सूचकांक 6 - | | |पैटर्न, लेन करने के लिए गद्देदार
    • इंडेक्स 7 - न्यूलाइन
  • '307...'*.toLong().sum{a[it]}- परिणाम बनाने के लिए एन्कोडिंग सूची में संकेतों का उपयोग करें। .sumइस तथ्य का उपयोग करता है कि groovy में string + string मान्य है।
  • ध्यान दें कि अभिव्यक्ति प्रत्येक वर्ण पर कॉल करने के '3073...'*.toLong()लिए *.प्रसार ऑपरेटर का उपयोग toLong()करती है, संख्याओं की सूची लौटाती है।
  • उत्तर में नोट किया गया है कि वैरिएबल aको इनलाइन किया गया है, निकल्स को हटा दिया गया है आदि।

6

कैनवस , 45 बाइट्स

r351⁰{|*@;∔;J└l2M2%±├ ××l⇵╷-×└+-α∔k+│∔⇵;}┐++⇵

यहाँ कोशिश करो!

स्पष्टीकरण:

r    Center the input, preferring left. Converts to an ASCII-art object
     which pads everything with spaces. This is the bulk of the magic.

 251⁰{ .... }            for each number in [2, 5, 1]:
      |*                 repeat "|" vertically that many times
        @;∔              prepend an "@" - a vertical bar for later
           ;             swap top 2 stack items - put the centered art on top
            J            push the 1st line of it (removing it from the art)
             └           order the stack to [remaining, "@¶|¶|..", currentLine]
              l          get the length of the current line
               2M        max of that and 2
                 2%      that % 2
                   ±├    (-that) + 2
                      ×× prepend (-max(len,2)%2) + 2 spaces
l                 get the length of the new string
 ⇵╷               ceil(len / 2) -1
   -×             repeat "-" that many times - half of the podiums top
     └            order stack to [art, currLine, "@¶|¶|..", "----"]
      +           append the dashes to the vertical bar = "@-----¶|¶|.."
       -α∔        vertically add "-" and the original vertical bar - "-¶@¶|¶|.."
          k       remove the last line of that to make up for the middles shortness
           +      and append that horizontally - half of the podium without the name
            │     palindromize the podium
             ∔    and prepend the name
              ⇵   reverse vertically so the outputs could be aligned to the bottom
               ;  and get the rest of the centered input on top
Finally, 
┐     remove the useless now-empty input
 ++   join the 3 podium parts together
   ⇵  and undo the reversing

दुर्व्यवहार "और इसे लगातार करने की आवश्यकता नहीं है", यह बहुत ही अचूक है।


उम्म ... एक स्पष्टीकरण का कोई मौका?
मत्तीस बजरलैंड

1
@MatiasBjarland हालांकि यह ज्यादातर स्टैक हेरफेर है और बाकी मैं मुश्किल से समझता हूं।
dzima

4

पायथन 2 , 197 190 बाइट्स

n=input()
w=max([3]+map(len,n))
w+=~w%2;W=w+2
S=('{:^%d}'%w).format
x,y,s='@| '
a,b,c=map(S,n);A,B,C=x+'-'*w+x,y+S(x)+y,y+S(y)+y
for l in-~W*s+a,s*W+A,s+b+s+B,A+C,B+C+s+c,C+C+A,C+C+B:print l

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

-6 बाइट्स, एंड्रयू दुनाई को धन्यवाद


आप 5 बाइट्स को लाइन 5 से बदलकर x,y,p='@| 'और pइसके बजाय का उपयोग करके बचा सकते हैं' '
एंड्रयू दुनाई

1
@andrewdunai धन्यवाद :)
TFeld


3

चारकोल , 63 बाइट्स

≔÷⌈EθLι²ηF³«J×ι⁺³⊗η⊗﹪⁻¹ι³⟦◧§θι⁺⊕η⊘⊕L§θι⟧≔⁻⁷ⅉιP↓ι@ηP↓ιP↓@@¹ηP↓ι@

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

≔÷⌈EθLι²η

एक पोडियम के प्रत्येक आधे में रिक्त स्थान की संख्या की गणना करें।

F³«

प्रत्येक स्थान पर लूप। ध्यान दें कि इनपुट 2, 1, 3 के क्रम में होने की उम्मीद है।

J×ι⁺³⊗η⊗﹪⁻¹ι³

पंक्ति की शुरुआत के लिए स्थिति जिसमें पाठ होगा।

⟦◧§θι⁺⊕η⊘⊕L§θι⟧

टेक्स्ट को केंद्र में रखने के लिए पर्याप्त लेफ्ट पैडिंग के साथ आउटपुट करें।

≔⁻⁷ⅉι

पोडियम की ऊंचाई प्राप्त करें।

P↓ι@ηP↓ιP↓@@¹ηP↓ι@

पोडियम ड्रा करें।

वैकल्पिक दृष्टिकोण, 63 बाइट्स:

≔÷⌈EθLι²ηF³«J×ι⁺³⊗η⊗﹪⁻¹ι³⟦◧§θι⁺⊕η⊘⊕L§θι⪫@-@×-η⟧E⁻⁷ⅉ⪫⪫||§|@¬κ× η

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

≔÷⌈EθLι²η

एक पोडियम के प्रत्येक आधे में रिक्त स्थान की संख्या की गणना करें।

F³«

प्रत्येक स्थान पर लूप। ध्यान दें कि इनपुट 2, 1, 3 के क्रम में होने की उम्मीद है।

J×ι⁺³⊗η⊗﹪⁻¹ι³

पंक्ति की शुरुआत के लिए स्थिति जिसमें पाठ होगा।

⟦◧§θι⁺⊕η⊘⊕L§θι

टेक्स्ट को केंद्र में रखने के लिए पर्याप्त लेफ्ट पैडिंग के साथ आउटपुट करें।

⪫@-@×-η⟧

सही चौड़ाई तक पहुंचने -के लिए स्ट्रिंग के पात्रों के बीच एस डालकर पोडियम के शीर्ष को भी आउटपुट करें @-@

E⁻⁷ⅉ⪫⪫||§|@¬κ× η

|उपयुक्त रूप से एस को रिक्ति पर रखकर पोडियम के शेष को प्रिंट करें , सिवाय इसके कि मध्य चरित्र @पहली पंक्ति में है।


3

आर 308 302 299

-6 बाइट्स @JAD
-3 बाइट्स की बदौलत @Guiseppe की बदौलत, अब मैं 300 के नीचे हूं

function(a){i=max(1,nchar(a)%/%2)
e=2*i+1
`~`=rep
g=' '
s=g~e+2
b='@'
p='|'
t=c(b,'-'~e,b)
x=c(p,g~i,b,g~i,p)
h=sub(b,p,x)
a=lapply(a,function(q){r=nchar(q);l=(e-r)/2+1;if(r%%2<1)c(g~l,q,g~l+1)else c(g~l,q,g~l)})
cat(s,a[[1]],s,s,t,s,a[[2]],x,s,t,h,s,x,h,a[[3]],h,h,t,h,h,x,fill=length(t)*3,sep='')}

लेआउट बनाने के लिए शायद एक बेहतर तरीका है; मुझे कोशिश करनी चाहिए कि डेटा फ्रेम के लिए मेरे पास क्या विकल्प हैं।

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



2
आर में एक चर ascii- कला चुनौती करने के लिए फिर से नफरत करता है ... करने के लिए मज़ा कभी नहीं। आप 3 बाइट्स का उपयोग करके बचा सकते हैं i=max(1,nchar(a)%/%2)। उत्पन्न करना matrixऔर उपयोग writeकरना कम (बल्कि data.frame) हो सकता है । मैं उपयोग करने का सुझाव formatके साथ j="c"स्वत: का औचित्य साबित करने के लिए बातें, और strrepसाथ ही इस मामले में एक सहायक से एक है। शायद विचारों को उछालने के लिए गोल्फर चैटरूम की कोशिश करें ?
ग्यूसेप

हाँ, मुझे एहसास नहीं था कि इसमें कितना मुश्किल होगा। मैंने थोडा सीखा, ज्यादातर मुझे पायथन को बेहतर तरीके से सीखना चाहिए, या पर्ल सीखना शुरू करना चाहिए :)। मैं भूल गया था strrep; मुझे उस पर गौर करना होगा।
सीटी हॉल



2

PHP, 147 बाइट्स

मेरे आरंभिक विचार को एक सीधे आगे बढ़ाते हुए 93 बाइट्स घेरे <?=:

for(;~$v=_616606256046543440445[++$i];)echo$b="@   || "[$v],str_pad(($v&4?"|@":$argv)[$v&3],max(array_map(strlen,$argv))," -"[!$v],2),$b,"
"[$i%3];

कमांड लाइन तर्कों से नाम लेता है। इसे ऑनलाइन चलाएं -nrया इसके लिए प्रयास करें
PHP 7 की आवश्यकता है; PHP 7.2 (और बाद में, संभवतः) में चेतावनी देता है। +5 बाइट फिक्स के लिए TiO देखें।

मानचित्रण:

0:@---@     = top border
1,2,3       = $argv with spaces
4: "| | |"  = default
5: "| @ |"  = below top
6: "     "  = empty

टूट - फूट:

for(;~$v=_616606256046543440445[++$i];)echo # loop through map:
    $b="@   || "[$v],                       # print left border
    str_pad(                                # print padded string:
        ($v&4?"|@":$argv)[$v&3],                # string to be padded
        max(array_map(strlen,$argv)),           # pad length = max argument length
        " -"[!$v],                              # pad with: dashes if top border, spaces else
        2                                       # option: center text (pad on both sides)
    ),
    $b,                                     # print right border
    "\n"[$i%3]                              # add linebreak every three items
;

$iमेरे लिए पूर्व वेतन वृद्धि मुझे न्यूलाइन्स के लिए किसी भी चाल से बचाती है।
के लिए रिक्त 6भी खाली हो सकता है; तो मैंने ऐसा ही किया।
लेकिन $argv[0]शीर्ष सीमा स्ट्रिंग के लिए उपयोग -करना सबसे अच्छा गोल्फ था। (और 9 बाइट्स बचाए!)


2

जाओ, 436 बाइट्स

गो गोल्फ के लिए भयानक है। परंतु:

package main;import ("fmt";"os");func main(){;z:=os.Args;f:=3;for i:=1;i<4;i++{;if len(z[i])>f{;f=len(z[i]);};};f+=1-f%2;p:=(f-1)/2+1;b:="@";for j:=0;j<f;j++{;b+="-";};b+="@";x:=fmt.Sprintf("|%*v%*v",p,"@",p,"|");y:=fmt.Sprintf("|%*v%[1]*v",p,"|");fmt.Printf("%*v%*v\n%*v%v\n%*v%*v\n%v%v\n%v%v%*v\n%v%v%v\n%v%v%v",f+2,"",p+1+len(z[1])/2,z[1],f+2,"",b,p+1+len(z[2])/2,z[2],2*f+3-p-len(z[2])/2,x,b,y,x,y,p+1+len(z[3])/2,z[3],y,y,b,y,y,x)}

टूटा:

package main
import (
  "fmt"
  "os"
)
func main() {
  z:=os.Args
  f:=3
  for i:=1;i<4;i++{
    if len(z[i])>f{
      f=len(z[i])
    }
  }
  f+=1-f%2
  p:=(f-1)/2+1
  b:="@"
  for j:=0;j<f;j++{
    b+="-"
  }
  b+="@"
  x:=fmt.Sprintf("|%*v%*v",p,"@",p,"|")
  y:=fmt.Sprintf("|%*v%[1]*v",p,"|")

  fmt.Printf("%*v%*v\n%*v%v\n%*v%*v\n%v%v\n%v%v%*v\n%v%v%v\n%v%v%v",
  f+2,"",p+1+len(z[1])/2,z[1],
  f+2,"",b,
  p+1+len(z[2])/2,z[2],2*f+3-p-len(z[2])/2,x,
  b,y,
  x,y,p+1+len(z[3])/2,z[3],
  y,y,b,y,y,x)
}

1

जावा 8, 399 394 373 बाइट्स

यह समाधान शायद रास्ता बहुत लंबा है, लेकिन यह एक समाधान है :)

static String r(String[]p){String s="";int l[]=new int[]{p[0].length(),p[1].length(),p[2].length()},m=Math.max(l[0],Math.max(l[1],l[2]))+2,i,q,j,a,k,t;if(m%2==0)m++;if(m==3)m=5;for(i=0;i<7;i++){for(q=0;q<3;q++)for(j=0;j<m;j++){a=(2*q+1)%3;k=2*a;t=(m-l[a])/2;s+=i==k?j>=t&j<t+l[a]?p[a].charAt(j-t):" ":i==k+1?j%(m-1)==0?"@":"-":i>=k+2?j%(m-1)==0?"|":j==m/2?i==k+2?"@":"|":" ":" ";}s+="\n";}return s;}

5 बाइट्स को सीधे क्रम में पुनरावृत्त करके सहेजा गया (q = 0,1,2 के बजाय a = 1,0,2; a = f (q))

static String r(String[]p){String s="";int l[]=new int[]{p[0].length(),p[1].length(),p[2].length()},m=Math.max(l[0],Math.max(l[1],l[2]))+2,i,j,a,k,t;if(m%2==0)m++;if(m==3)m=5;for(i=0;i<7;i++){for(a=1;a<4;a=a==1?0:a+2)for(j=0;j<m;j++){k=2*a;t=(m-l[a])/2;s+=i==k?j>=t&j<t+l[a]?p[a].charAt(j-t):" ":i==k+1?j%(m-1)==0?"@":"-":i>=k+2?j%(m-1)==0?"|":j==m/2?i==k+2?"@":"|":" ":" ";}s+="\n";}return s;}

सहेजे गए 21 बाइट्स @KevinCruijssen को धन्यवाद:

static String r(String[]p){String s="";int l[]=new int[3],m=0,i,j,a,k,t;for(String x:p)l[m++]=x.length();m=Math.max(l[0],Math.max(l[1],l[2]))+2;m+=m%2<1?1:m==3?2:0;for(i=0;i<7;i++,s+="\n")for(a=1;a<4;a=a==1?0:a+2)for(j=0,k=2*a,t=(m-l[a])/2;j<m;j++)s+=i==k?j>=t&j<t+l[a]?p[a].charAt(j-t):" ":i==k+1?j%~-m<1?"@":"-":i>=k+2?j%~-m<1?"|":j==m/2?i==k+2?"@":"|":" ":" ";return s;}

जैसा कि @KevinCruijssen ने सुझाव दिया था, कोई भी जावा 10+ varकी जगह उपयोग कर सकता है Stringऔर कुछ अतिरिक्त बाइट्स बचा सकता है। मैं यह सरल कारण के लिए नहीं करता हूं कि मेरे पास अभी तक जावा 10 नहीं है: डी भी, लैम्ब्डा का उपयोग किया जा सकता है। लेकिन यह केवल बाइट्स की मात्रा को कम करेगा यदि हम इसे एक Function<String[],String>चर में असाइन करना छोड़ देंगे ।

विस्तारित रूप में:

static String r(String[]p){
    String s=""; //The string that will be returned
    int l[]=new int[3], //An array containing the lengths of our three names
            m=0, //tmp variable for filling l
            i,j,a,k,t; //some declarations to save a few bytes lateron
    for(String x:p) l[m++]=x.length();
    m=Math.max(l[0],Math.max(l[1],l[2]))+2;
    m+=m%2<1? //ensure odd length of the podests
        1
        :m==3?2:0; //ensure the length is at least 3 (in my code, m is the length of the podests + 2)
    for(i=0;i<7;i++,s+="\n") //iterate by row
        for(a=1;a<4;a=a==1?0:a+2) //iterate by place: a=1,0,2
            for(j=0,k=2*a,t=(m-l[a])/2;j<m;j++) //iterate by column
                //k is the row number from top in which the a-th name goes
                //t is the column at which the name starts
                //now, append the right char:
                s+=i==k? //write the name
                    j>=t&j<t+l[a]?
                        p[a].charAt(j-t)
                        :" "
                    :i==k+1? //write the top of the podest ("@---@")
                        j%~-m<1?
                            "@"
                            :"-"
                    :i>=k+2? //write the bottom of the podest ("|  |@  |")
                        j%~-m<1? //the left and right edge of the podest
                            "|"
                            :j==m/2? //the center of the podest
                                i==k+2? //are we at the first row of the bottom?
                                    "@" //the case where we have to write "| @ |"
                                    :"|" //the case "| | |"
                                :" "
                        :" "
                ;
    return s;
}

इनपुट Stringलंबाई के रूप में दिया जाना है 3. एक उदाहरण इस तरह दिखता है:

public static void main(String[] args){
    System.out.print(r(new String[]{"Anthony", "Bertram", "Carlos"}));
}

आउटपुट:

          Anthony          
         @-------@         
 Bertram |   @   |         
@-------@|   |   |         
|   @   ||   |   | Carlos  
|   |   ||   |   |@-------@
|   |   ||   |   ||   @   |

1
अच्छा जवाब, और PPCG में आपका स्वागत है! मुझ से +1! यहाँ गोल्फ के लिए कुछ बुनियादी बातें यह 342 बाइट्स बनाने के लिए : नियमित विधि के बजाय जावा 8+ लंबोदा; जावा 10+ के varबजाय String; प्रत्येक लूप के साथ लंबाई-सरणी भरा; बदल if(m%2==0)m++;if(m==3)m=5;करने के लिए m+=m%2<1?m==2?3:1:0एक ही प्रभाव के लिए; सभी %nr==0को बदल दिया %nr<1; बदल %(m-1)करने के लिए %~-m; लूप के अंदर ही सब कुछ डाल दिया ताकि कोष्ठक {}हटाया जा सके।
केविन क्रूज़सेन

अगर आपने इसे अभी तक नहीं देखा है, तो जावा में गोल्फिंग के लिए टिप्स और गोल्फिंग के लिए टिप्स <सभी भाषाओं में> दोनों को पढ़ना दिलचस्प हो सकता है। यहां रहने का आनंद!
केविन क्रूज़सेन

@KevinCruijssen ठीक है, बहुत बहुत धन्यवाद! मैं पोस्ट अपडेट कर दूंगा!
bruderjakob17

के m-l[a]>>1बजाय (m-l[a])/2और के i<k+2?" ":j%~-m<1?"|":j==m/2?i==k+2?"@":"|"बजायi>=k+2?j%~-m<1?"|":j==m/2?i==k+2?"@":"|":" "
छत का सुझाव दें

1

सी (जीसीसी) 302 293 292 289 287 बाइट्स

-6 बाइट सीटिंगकैट के लिए धन्यवाद

#define P(h,n)r=w+2-L[n];i/h?printf("%*s%*s%*s",-~r/2,D,L[n],i>h?D:N[n],r/2,D):printf(~i/h?"@%s@":"|%*s%c%*s|",~i/h?D+1:w/2,D,i>h-3?64:'|',w/2,D);
f(int**N){char L[3],w=3,i=3,r,D[99]={};for(;i--;)w=w<(L[i]=strlen(N[i]))?L[i]|1:w;memset(D+1,45,w);for(i=7;i--;puts(D)){P(4,1)P(6,0)P(2,2)}}

इसे यहां चलाएं

Ungolfed और समझाया (तकनीकी रूप से आपके पास मैक्रो में वापस स्लैश के बाद टिप्पणियां नहीं हो सकती हैं, इसलिए यह नहीं चलेगा)

#define P(h,n)\
    r=w+2-L[n];\ //get leftover width
    i/h?\ //if i >= h
        printf("%*s%*s%*s",-~r/2,D,L[n],i>h?D:N[n],r/2,D):\//if too high print all spaces, otherwise center the name
        printf(~i/h?"@%s@":"|%*s%c%*s|",~i/h?D+1:w/2,D,i>h-3?64:'|',w/2,D);
//if (i == h - 1) print top row using D calculated if row right below top, else print '@'(64) in center, otherwise '|'
f(int**N){
    char
        L[3],//lengths of each string
        w=3,//width (init to minimum)
        i=3,//index, used in for loops
        l,//left padding
        r,//right padding
        D[99]={};//string of '-' of correct length (max 99) but first char is null for empty string
    for(;i--;)//i was set to 3 before, i will be {2,1,0}
        w=w<(L[i]=strlen(N[i]))?//set length to str len and compare to longest width so far
            L[i]|1://set it to length if longer, but make sure it is odd
            w;//do not replace
    memset(D+1,45,w); //set the first w bits of D to '-', leaves a null terminator
    for(i=7;i--;puts(D)){//i will be {6...0}
        P(4,1)//print second place, 4 high
        P(6,0)//print first place, 6 high
        P(2,2)//print thrid place, 2 high
    }
}

यहाँ कॉलिंग कोड है

int main()
{
  char* N[3] = {"Tom", "Anne", "Sue"} ;
  f(N);
}

और उत्पादन

         Tom         
       @-----@       
  Anne |  @  |       
@-----@|  |  |       
|  @  ||  |  |  Sue  
|  |  ||  |  |@-----@
|  |  ||  |  ||  @  |

सुझाएँ for(;i--;memset(D+1,45,w))w=w<(L[i]=strlen(N[i]))?L[i]|1:w;बजायfor(;i--;)w=w<(L[i]=strlen(N[i]))?L[i]|1:w;memset(D+1,45,w);
ceilingcat

1

PowerShell विंडोज के लिए, 231 223 बाइट्स

param($a)$w=($a|% le*|sort)[-1]
if(3-gt$w){$w=3}$w+=1-$w%2
0..6|%{$r=$_
-join($a|%{$m=' -'[5-eq($o=$r+2*(++$i%3))]
$e='     @|||||'[$o]
$x=(,''*4+$_,'','@'+,'|'*4)[$o]
"$e$($x|% *ft(($x.Length+$w)/2-.1)$m|% *ht $w $m)$e"})}

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

इनपुट सरणी है @('second','first','third')। अनियंत्रित संस्करण:

param($arr)
$width=($arr|% length|sort)[-1]
if(3-gt$width){$width=3}
$width+=1-$width%2

0..6|%{ $row=$_                         # 7 rows
    -join($arr|%{                       # 3 joined columns. Each column array contains 11 lines.
        $offset = $row+2*(++$i%3)       # (2,4,0) -> offset in column array #   0:
        $middle = ' -'[5-eq$offset]                                         #   1:
        $edge   = '     @|||||'[$offset]                                    #   2:
        $center = ('','','','',$_,'','@','|','|','|','|')[$offset]          #   3:
                                                                            #   4:  name
        # pad $x to a center                                                #   5: @---@
        $center = $center|% PadLeft (($center.Length+$width)/2-.1) $middle  #   6: | @ |
        $center = $center|% PadRight $width $middle                         #   7: | | |
                                                                            #   8: | | |
        # add the $edge                                                     #   9: | | |
        "$edge$center$edge"                                                 #  10: | | |
    })
}

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