Побудувати подіуми 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
Чому подіуми в останньому прикладі виходу мають довжину 3 замість довжини 1?
bruderjakob17

3
@bruderjakob на початку він заявляє, що "подіуми вище мінімального розміру і вважаються 3 широкими"
rtpax

Відповіді:



7

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

Спробуйте в Інтернеті!

(зауважте: інтерпретатор tio groovy не зміг обробити індексацію списків, використовуючи значення Long, навіть незважаючи на те, що groovy 2.5.6 може. Таким чином, використовується відповідь tio, *.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-> - визначте закриття f одним парамером n
  • m=n*.size().max()|1 - знайти максимальне ім'я len, двійкове або непарне число
  • h=' '*(m/2) - h буде містити проміжки підлоги (м / 2), використані пізніше
  • a=...- створює список кодування з елементами:
    • індекси 0,1,2 - імена, з центром до максимуму len
    • індекс 3 - m + 2 пробіли
    • індекс 4 - @---@візерунок, підкладений до лінзи
    • індекс 5 - | @ | візерунок, підкладений до лінзи
    • індекс 6 - | | |візерунок, підкладений до лінзу
    • індекс 7 - новий рядок
  • '307...'*.toLong().sum{a[it]}- використовувати індекси у списку кодування для створення результату. .sumвикористовує той факт, що string + string у groovy є дійсним.
  • зауважте, що вираз '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

Зловживання "і йому не потрібно бути послідовним", що робить його досить незрозумілим.


Гм ... якийсь шанс на пояснення?
Matias Bjarland

1
@MatiasBjarland, хоча це в основному маніпуляція стеками, а решта я ледве розумію, там.
dzaima

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 байт, завдяки Андрію Дунаю


Ви можете зберегти 6 байт, замінивши рядок 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§θι

Виведіть текст достатньою лівою накладкою, щоб відцентрувати його.

⪫@-@×-η⟧

Також виведіть верхню частину подіуму, вставивши -s між символами рядка, @-@щоб досягти потрібної ширини.

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

Надрукуйте решту подіуму, розставивши |s належним чином, за винятком того, що середній символ є а @на першому рядку.


3

R 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 в R ... ніколи не цікаво робити. Ви можете зберегти 3 байти за допомогою i=max(1,nchar(a)%/%2). Створення a matrixта використання writeможе бути коротшим (а не a data.frame). Я пропоную використовувати formatз j="c"до авто-виправдають речі, і strrepце корисно , один в цьому випадку. Може, спробувати гольф для спілкування GolfR, щоб відмовитись від ідей?
Джузеппе

Так, я не усвідомлював, як важко буде це вникати. Я навчився трохи тхо, в основному я повинен навчитися Python краще, або почати вчитися Perl :). Я забув про це 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 (і пізніше, імовірно). Див. TiO для виправлення байтів +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 байт завдяки @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, можна також скористатися var замість StringJava 10+ і зберегти зайві байти. Я цього не роблю з тієї простої причини, що у мене ще немає Java 10: D також можна використовувати лямбда. Але це зменшило б лише кількість байтів, якщо ми не віднесемо її до 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 байтами : Java 8+ лямбда замість звичайного методу; Java 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?"@":"|":" "
roofcat

1

C (GCC) 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);
roofcat

1

PowerShell для Windows, 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.