এএসসিআইআই পোডিয়ামগুলি তৈরি করুন


26

ক্রীড়া প্রতিযোগিতায়, প্রায়শই এমন হয় যে পডিয়ামগুলিতে বিজয়ীদের উপস্থাপিত হয়, মধ্যম স্থানে শীর্ষে প্রথম স্থান পাওয়া ব্যক্তি, মাঝের উচ্চতায় দ্বিতীয় স্থান এবং বাম দিকে তৃতীয় স্থান প্রাপ্ত ব্যক্তি ডানদিকে. আমরা এখানে কিছু বিশেষ টুইটের সাথে পুনরায় তৈরি করতে যাচ্ছি।

পডিয়ামগুলি নীচে উপস্থাপন করা হয়েছে:

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

এটি এই চ্যালেঞ্জের ভিত্তি তৈরি করবে। পরবর্তী পদক্ষেপটি হ'ল পডিয়ামগুলি তাদের উপরের লোকেদের (প্রিন্টযোগ্য এএসসিআইআই স্ট্রিং) ফিট করার জন্য পর্যাপ্ত প্রশস্ত করে তোলে। তবে, আমরা নান্দনিক সৌন্দর্য নিশ্চিত করতে চাই (কারণ এটি একটি দুর্দান্ত ছবির সুযোগ), তাই প্রতিটি পডিয়ামের একই প্রস্থ হওয়া দরকার এবং প্রস্থটি অবশ্যই বিজোড় হতে হবে। অতিরিক্তভাবে, লোকেরা (স্পষ্টতই) পডিয়ামের কেন্দ্রে দাঁড়াতে চাইবে, তাই স্ট্রিংগুলি যথাসম্ভব সর্বোত্তমভাবে কেন্দ্রীভূত করতে হবে। (আপনি বাম বা ডান উভয় দিকে প্রান্তিককরণ করতে পারেন এবং এটির সাথে সামঞ্জস্য করার দরকার নেই)) উপরের পডিয়ামগুলি সর্বনিম্ন আকার এবং এটিকে 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
@ ব্রুডেরজাকোব শুরুতে বলেছেন যে "উপরের পডিয়ামগুলি ন্যূনতম আকারের এবং 3 প্রশস্ত বলে মনে করা হয়"
আরটিপ্যাক্স

উত্তর:



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

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

(দ্রষ্টব্য: টায়ো গ্রোভী ইন্টারপ্রেটার লম্বা মানগুলি ব্যবহার করে সূচি তালিকাটি পরিচালনা করতে পারে না যদিও গ্রোভি ২..6. can পারে তাই এইভাবে টিও উত্তরটি ব্যবহার করছে যার *.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) - এইচটিতে ফ্লোর (মি / 2) স্পেস থাকবে, পরে ব্যবহার করা হবে
  • a=...- উপাদানগুলির সাথে একটি এনকোডিং তালিকা তৈরি করে:
    • সূচক 0,1,2 - নাম, সর্বোচ্চ লেনকে কেন্দ্র করে
    • সূচি 3 - মি + 2 স্পেস
    • সূচক 4 - @---@প্যাটার্ন, লেন থেকে প্যাডেড
    • সূচি 5 - | @ |প্যাটার্ন, ল্যাড প্যাডেড
    • সূচি 6 - | | |প্যাটার্ন, লেন থেকে প্যাড করা
    • সূচি 7 - নিউলাইন
  • '307...'*.toLong().sum{a[it]}- ফলাফল তৈরি করতে এনকোডিং তালিকায় সূচকগুলি ব্যবহার করুন। .sumগ্রোভির স্ট্রিং + স্ট্রিংটি বৈধ কিনা তা ব্যবহার করে।
  • নোট করুন যে এক্সপ্রেশনটি প্রতিটি অক্ষরে কল করতে স্প্রেড অপারেটরটি '3073...'*.toLong()ব্যবহার করে , সংখ্যার একটি তালিকা ফিরিয়ে দেয়।*.toLong()
  • উত্তরে নোটটি ভেরিয়েবলটি aইনলাইন করা হয়েছে, নালিকাগুলি সরানো হয়েছে ইত্যাদি etc.

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
@ মাতিয়াসবাজরল্যান্ড যদিও এটি বেশিরভাগ ক্ষেত্রে ম্যানিপুলেশন এবং স্ট্যাকের বাকীগুলি আমি খুব কমই বুঝতে পারি।
ডিজাইমা

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 বাইট, অ্যান্ড্রু ডুনাইকে ধন্যবাদ



1
@ অ্যান্ড্রুডুনাই ধন্যবাদ :)
টিফিল্ড


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§θι

এটিটিকে কেন্দ্র করে পর্যাপ্ত বাম প্যাডিং সহ পাঠ্যটিকে আউটপুট দিন।

⪫@-@×-η⟧

সঠিক প্রস্থে পৌঁছানোর জন্য -স্ট্রিংয়ের অক্ষরের মধ্যে গুলি inুকিয়ে পডিয়ামের শীর্ষস্থানটি আউটপুট করুন @-@

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

|মাঝের অক্ষরটি @প্রথম সারিতে একটি ব্যতীত যথাযথভাবে ফাঁক করে পডিয়ামের বাকী অংশটি মুদ্রণ করুন ।


3

আর 308 302 299

-জেডকে ধন্যবাদ -6 বাইটস -
3 গুয়েস্প্পকে 3 বাইট ধন্যবাদ, এখন আমি 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
আর তে পরিবর্তনশীল এসিআই-আর্ট চ্যালেঞ্জটি করায় ইয়া টুপি ... কখনই মজা করা যায় না। আপনি ব্যবহার করে 3 বাইট সংরক্ষণ করতে পারেন i=max(1,nchar(a)%/%2)। একটি তৈরি করা matrixএবং ব্যবহার writeকরা সংক্ষিপ্ত হতে পারে (এ এর পরিবর্তে data.frame)। আমি জিনিসগুলি স্বয়ংক্রিয়ভাবে ন্যায়সঙ্গত করার formatসাথে সাথে ব্যবহার করার পরামর্শ দিচ্ছি j="c"এবং এটিও strrepএই ক্ষেত্রে সহায়ক। ধারণাগুলি বন্ধ করতে গল্ফআর চ্যাটরুমটি চেষ্টা করতে পারেন ?
জিউসেপ

হ্যাঁ, আমি বুঝতে পারি নি যে এটির মধ্যে hardোকা কতটা কঠিন। আমি কিছুটা শিখেছি, বেশিরভাগ ক্ষেত্রে আমার পাইথন আরও ভালভাবে শিখানো উচিত, বা পার্ল শেখা শুরু করা উচিত :)। আমি ভুলে যাব strrep; আমি এটি খতিয়ে দেখতে হবে।
সিটি হল



2

পিএইচপি, 147 বাইট

golfed আমার প্রাথমিক ধারণা, সোজা এগিয়ে বন্ধ 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বা অনলাইনে চেষ্টা করুন
পিএইচপি 7 প্রয়োজন; পিএইচপি 7.2 (এবং পরে, সম্ভবত) এর মধ্যে সতর্কতা প্রদান করে। +5 বাইট ফিক্সের জন্য টিআইও দেখুন।

ম্যাপিং:

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 বাইট সংরক্ষণ করা হয়েছে (a = 1,0,2 q = 0,1,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 কেভিট ক্রুইজসেনকে ধন্যবাদ 21 বাইট সংরক্ষণ করা:

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

@ কেভিন ক্রুইজসেন প্রস্তাবিত হিসাবে, কেউ জাভা 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 দৈর্ঘ্যের অ্যারে হিসাবে দিতে হবে An উদাহরণটি এর মতো দেখায়:

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

আউটপুট:

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

1
উত্তম উত্তর, এবং পিপিসিজিতে আপনাকে স্বাগতম! আমার কাছ থেকে +1! এখানে গল্ফকে 342 বাইট তৈরি করতে কিছু বেসিক জিনিস রয়েছে : নিয়মিত পদ্ধতির পরিবর্তে জাভা 8+ ল্যাম্বদা; এর varপরিবর্তে জাভা 10+ 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; সমস্ত কিছু নিজেই লুপের ভিতরে রাখুন যাতে বন্ধনীগুলি {}সরানো যায়।
কেভিন ক্রুইজসেন

আপনি যদি এখনো দেখা যায় না পারেন, জাভা golfing জন্য টিপস এবং মধ্যে golfing জন্য টিপস <সমস্ত ভাষা> শক্তি উভয় মাধ্যমে পড়তে আকর্ষণীয় হতে। উপভোগকর তোমার থাকা!
কেভিন ক্রুইজসেন

কেভিন ক্রুজসেন ঠিক আছে, আপনাকে অনেক ধন্যবাদ! পোস্টটি আপডেট করব!
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?"@":"|":" "
ceilingcat

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

এটি এখানে চালান

অসম্পূর্ণ এবং ব্যাখ্যা করা হয়েছে (প্রযুক্তিগতভাবে ম্যাক্রোগুলিতে ব্যাক স্ল্যাশ করার পরে আপনি মন্তব্য করতে পারবেন না, সুতরাং এটি চলবে না)

#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);
সিলিংক্যাট

1

উইন্ডোজ জন্য পাওয়ারশেল , 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: | | |
    })
}

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