Створіть Favicon обміну стеками


25

Ви впізнаєте логотип PPCG? це виглядає так, коли ти робиш це мистецтво ascii.

+---+
|PCG|
+---+
   v

Тепер у цьому коді Golf ви зробите код, який робить логотипи для інших сайтів, подібні до логотипу PPCG.

Що ти повинен робити

Рядок "Скорочений" буде рядком із усіма великими літерами та цифрами у вхідному рядку. (Що було б, PPCGколи рядок введення Programming Puzzles & Code Golf)

Коробка" (

+---+
|   |
+---+
   v

) повинен ідеально відповідати скороченому рядку. (Не більший чи менший)

Також vдеталь повинна бути рівно 1 вниз і 1 зліва направо вниз +.

Потім виведіть поле, в якому є скорочена рядок.

Приклад

Stack Overflow:

+--+
|SO|
+--+
  v

Area 51:

+---+
|A51|
+---+
   v

Правила

Ви можете припустити, що вхід містить хоча б одну цифру чи велику літеру.

Діють стандартні правила .



@MartinEnder Так, дуже пов’язаний, але не дублікат.

1
@MatthewRoh Мета посилань полягає в тому, щоб виклики з'являлися на бічній панелі, а не голосовий голос. Це ^означає , що я особисто думаю, що видалення небажаних символів, а також друк не додають багато в порівнянні з другим завданням, з яким я пов’язаний, але я не буду кидати на це моторошний молоточок, але нехай комуніц вирішить, вважають вони це дупом чи ні.
Мартін Ендер

4
Якби це було 99 Bottles Of Beer, то було б 99BOB.

1
@MatthewRoh його ще глючить, дозвольте мені побачити , якщо я можу отримати бф відповідь після того, як всі
Рохан Jhunjhunwala

Відповіді:


23

Вим, 42 удари

:s/[^A-Z0-9]//g
YPVr-i+<DOWN><LEFT>|<ESC><C-V>ky$pYjppVr $xrv

Замінити <DOWN>з , <LEFT>з , <ESC>з escі <C-V>з CTRL+ V.

Ось анімація цього запущеного сценарію (стара версія, яка використовує Vзамість a v):

Animation

Пояснення сценарію:

:s/[^A-Z0-9]//g                               # Remove all the characters that are not uppercase or numbers using a Regex.
YPVr-                                         # Duplicate the current, and replace all the characters of the upper one with dashes.
     i+<DOWN><LEFT>|<ESC>                     # Insert a + on the upper line, and a | on the second line.
                         <C-V>ky$p            # Copy the + and | to the end of both lines.
                                  Yjpp        # Copy the upper line to the bottom two times.
                                      Vr $    # Replace the bottom most line with spaces and put the cursor on the last character.
                                          xrv # Remove the last character and replace the second last character with a v.


На один символ більше, але уникає спеціальних символів, що втекли: r | y uP ​​$ pYPVr-r + $. YjppVr $ hrV
Брайс Вагнер

Ви можете замінити i+↓←|␛␖ky$pз , A+↓|␛␖ky0Pщоб зберегти байти.
Лінн

Крім того, замініть перші вісім ударів у підході Брайса наI|<END>|␛
Лінн

Цікаво, чи це найбільше відгуків через класну картину.
Джо

10

V 34 байт

Ó[^A-Z0-9]
ys$|ÄVr-r+$.YLppVr x$rv

Зауважте, що це працювало в старій версії, але не працює в поточній версії, щоб спробувати його в Інтернеті. Я змінив Äна YPякий функціонально еквівалентні.

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

Пояснення:

Ó[^A-Z0-9]

Видаліть усе, крім цифр і великих літер.

ys$|              "Surround this line with '|' characters.
    Ä             "Duplicate this line
     Vr-          "Replace this whole duplicated line with '-' characters
        r+        "replace the first character with '+'
          $       "Move to the end of the line, and
           .      "Repeat our last command. This is the same as 'r+'
            Y     "Yank the current line
              pp  "and paste it twice
             L    "At the end of our text

Тепер буфер виглядає приблизно так:

+---+
|A51|
+---+
+---+

А наш курсор знаходиться у першому стовпчику останнього рядка.

Vr                 "Change the whole last line to spaces
   x               "Delete a character
    $rv            "And change the last character to a 'v'

Неконкурентна версія: (31 байт)


Я щойно помітив, що вхід Programming Puzzles & Code Golfвидає неправильний рядок PP&CGу висновку. &Повинні бути видалені
Луїс Mendo

@LuisMendo Aww, чорт! Дякую, що вказав на це, я виправлю це десь сьогодні.
DJMcMayhem

@DrGreenEggsandIronMan Отже, ви це виправили, правда? [коли? буде? ти? нарешті? виправити? це?]
Ерік Атголфер

Я не отримую ніяких результатів на TIO?
Пуховик

@Downgoat V нещодавно отримав величезне оновлення, і, на жаль, він заробив деякі речі, які я розглядаю, але я не впевнений, скільки часу це займе, щоб виправити.
DJMcMayhem

7

16-розрядний машинний код x86, 72 байти

У шістнадцятковій формі:

565789F731C9FCAC84C074143C5A77F73C4173083C3977EF3C3072EBAA41EBE75F5EE81500B07CAA51F3A4AB59E80A00B020F3AAB076AA91AAC351B02BAAB02DF3AAB82B10AB59C3

Параметри: SI= рядок введення, DI- вихідний буфер.

Виводить рядок, що закінчується NULL, рядками, розділеними новим рядком. Використовує вхідний рядок як тимчасовий буфер.

56           push   si
57           push   di
89 f7        mov    di,si    ;Using source string as a buffer
31 c9        xor    cx,cx    ;Counter
fc           cld
_loop:
ac           lodsb
84 c0        test   al,al    ;Test for NULL
74 14        jz     _draw    ;Break
3c 5a        cmp    al,'z'   ;\
77 f7        ja     _loop    ; |
3c 41        cmp    al,'a'    ; \
73 08        jae    _stor    ;  >[A-Z0-9]?
3c 39        cmp    al,'9'   ; /
77 ef        ja     _loop    ; |
3c 30        cmp    al,'0'   ;/
72 eb        jb     _loop
_stor:
aa           stosb           ;Store char in the source buffer
41           inc    cx
eb e7        jmp    _loop
_draw:
5f           pop    di
5e           pop    si
e8 15 00     call   _line    ;Output the first line
b0 7c        mov    al,'|'   ;This proc upon return leaves '\n' in AH
aa           stosb           ;First char of the second line
51           push   cx
f3 a4        rep    movsb    ;Copy CX logo characters from the source buffer
ab           stosw           ;Outputs "|\n", which is still in AX
59           pop    cx
e8 0a 00     call   _line    ;Output the third line
b0 20        mov    al,0x20  ;Space
f3 aa        rep    stosb    ;Output it CX times
b0 76        mov    al,'v'
aa           stosb           ;Output the final 'v'
91           xchg   cx,ax    ;CX == 0
aa           stosb           ;NULL-terminate the string
c3           retn            ;Return to caller
_line:
51           push   cx
b0 2b        mov    al,'+'
aa           stosb
b0 2d        mov    al,'-'
f3 aa        rep    stosb     ;'-'*CX
b8 2b 10     mov    ax,0x102b ;"+\n"
ab           stosw
59           pop    cx
c3           retn

Ух .. я ще не робив код складання.

3
Я також. Почався знову близько тижня тому лише для гри в гольф
meden

3c 41 cmp al,a' чи не повинно бути 3c 41 cmp al,'a' ?
rav_kr

@rav_kr, звичайно, дякую, помітивши. Пропущена цитата під час заміни шістнадцяткових кодів символами для читабельності.
меден

4

Сітківка , 43 байти

[^A-Z\d]

.+
+$.&$*-+¶|$&|¶+$.&$*-+¶$.&$* V

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

Це ідеальний виклик продемонструвати Retina, гольф-мову Мартина Ендера.

Це рішення ділиться на два етапи (що ми називаємо етапами), причому обидва етапи є етапом заміни.

Перший етап:

[^ AZ \ d]

Це відповідає підрядкам, які відповідають [^A-Z\d], це символи, які не є великими літерами та не цифрами, а потім замінюють їх нічим, а значить видаляють їх.

Другий етап:

.+
+$.&$*-+¶|$&|¶+$.&$*-+¶$.&$* V

.+Відповідає весь результат, а потім замінює його на другій лінії.

У другому рядку:

  • $& стосується всього матчу
  • $.& відноситься до довжини всього матчу
  • $*означає взяти попереднє ціле число, повторити наступний символ, що багато разів. Тут $.&$*-означає повторювати, як -би довго не було матчу.
  • посилається на новий рядок.

Приємно, я спробував це раніше, але закінчився 54 байтами. Альтернативою першого етапу є, T`dLp`dL_але, на жаль, однакова довжина.
Мартін Ендер

@MartinEnder Якими були 54 байти?
Leaky Nun


4

C #, 183 177 165 байт

string h(string s){s=string.Concat(s.Where(n=>n>47&n<58|n>64 &n<91));int m=s.Length;var x=new string('-',m);return$"+{x}+\n|{s}|\n+{x}+\n{new string(' ', m + 1)}v";}

множення знаків страшно в C #. пропозиції оцінено

дякую багато aloisdg за -18 байт


Можна замінити | |на|
aloisdg каже: Відновити Моніку

Ви можете використовувати струнну інтерполяціюreturn$"+{x}+\n|{s}|\n+{x}+\n{new string(' ',m+1)}v";}
aloisdg каже: Відновити Моніку

1
ось солодкий метод!
downrep_nation

Можна замінити string.Join("", наstring.Concat(
aloisdg каже: Відновити Моніку

1
Ви можете видалити пробіл після того, якreturn
aloisdg повідомляє про відновлення Моніки

4

Excel VBA, 375 359 358 байт:

Це працює, я відмовляюся від спроби скоротити його ...

Редагувати: перемикається на випадок з тестів, якщо оператори, -16 байт

Edit2: Позбувся U і замінено на Len (b), -1 байт

Function b(x)
For i = 1 To Len(x)
a = Mid(x, i, 1)
e = Asc(a)
If e > 64 And e < 91 Or e > 47 And e < 58 Then b = b & a
Next i
For Z = 1 To 4
y = ""
Select Case Z
Case 2
y = "|" & b & "|"
Case 4
For i = 1 To Len(b)
y = y & " "
Next i
y = y & "v"
Case Else
y = "+"
For i = 1 To Len(b)
y = y & "-"
Next i
y = y & "+"
End Select
Debug.Print y
Next Z
End Function

3
Це добре, якщо врахувати, що VBA іноді є сміттям.

Я просто роблю це для виклику, я знаю, що не можу змагатися з VBA. Зазвичай в кінці закінчується супер плутати після зміни всіх змінних від імен до однієї літери.
tjb1

Так ikr Так правда

Чи можете ви видалити пробіл навколо операторів?
Morgan Thrapp

3
Сміявся з "Позбавився від тебе"
CocoaBean

4

Луа, 145 99 байт

Мало що сказати, що маніпулювання струнами завжди в слові луа :). Бере аргумент командного рядка та виводить через STDOUT

Дякую @LeakyNun за те, що врятував мені 45 байт!

n=(...):gsub("[^%u%d]","")s="+"..("-"):rep(#n).."+\n"return s.."|"..n.."|\n"..s..(" "):rep(#n).."V"

100 байт, запропонованих @LeakyNun

n=(...):gsub("[^A-Z%d]","")s="+"..("-"):rep(#n).."+\n"return s.."|"..n.."|\n"..s..(" "):rep(#n).."V"

СТАРИЙ 145 байт

g="|"..(...):gsub("%a+",function(w)return w:sub(1,1)end):gsub("%s",'').."|"S="+"..g.rep("-",#g-2).."+"p=print
p(S)p(g)p(S)p(g.rep(" ",#g-2).."v")

Безумовно

g="|"                            -- g is the second, and starts with a |
  ..(...):gsub("%a+",            -- append the string resulting of the iteration on each word
    function(w)                  -- in the input, applying an anonymous function
      return w:sub(1,1)          -- that return the first character of the word
    end):gsub("%s",'')           -- then remove all spaces
  .."|"                          -- and append a |
S="+"..g.rep("-",#g-2).."+"      -- construct the top and bot of the box
p=print                          -- alias for print
p(S)p(g)p(S)                     -- output the box
p(g.rep(" ",#g-2).."v")          -- output #g-2 spaces (size of the shortened name), then v

1
Так, ти маєш на увазі вихід через STDOUT? Але я не заперечую, тому що його ОПОЗИТИ ДЕНЬ !!!

1
@MatthewRoh Я мав на увазі вихід на STDIN вашого терміналу! (виправлено ... сором ....)
Katenkyo

n=(...):gsub("[^A-Z%d]","")s="+"..("-"):rep(#n).."+\n"return s.."|"..n.."|\n"..s..(" "):rep(#n).."V"є 100 байт
Leaky Nun

@LeakyNun за допомогою шаблону %uми набираємо ще кілька байт. У будь-якому випадку, дякую :) (оновимо непільгованих пізніше)
Katenkyo

3

2able , 36 34 33 32 31 байт

Представляємо 2 користування :). Хоча він має багато спільного з 05AB1E, цей фактично автоматично приєднується до стеку, а не виводить верхню частину стека. Код:

žKA-ég'-×'+DŠJDU„
|®sX¶®gð×'v

Використовує кодування CP-1252 .


2
ಠ_ಠ Більше немає гольфу чи мовних перемикачів! Залиште його там, де зараз! : P
DJMcMayhem

@DrGreenEggsandIronMan Hahaha, це ще три болісні байти від вашої відповіді: P.
Аднан

1
Ха-ха, я святкував, коли побачив його на 7 байт довше, а потім повільно спостерігав за тим, як розрив зникає один за одним ...
DJMcMayhem

3

JavaScript (ES6), 99 байт

(s,t=s.replace(/[^0-9A-Z]/g,``),g=c=>t.replace(/./g,c))=>`${s=`+${g(`-`)}+
`}|${t}|
${s}${g(` `))v`

3

Хаскелл, 107 байт

Відповідь на це питання в значній мірі ґрунтуються на відповідь по Zylviij і коментарі Ними . Я би додав до цього відповіді більше коментарів, але, на жаль, мені не вистачає представників.

o n=t++'|':f++"|\n"++t++(f>>" ")++"v"where f=[c|c<-n,any(==c)$['0'..'9']++['A'..'Z']];t='+':(f>>"-")++"+\n"

Додаткові використовувані трюки:

  • Замінено intersectйого реалізацією, щоб імпорт можна було скинути. (Бічна примітка: реалізація майже дослівна у бібліотеці, я не могла знайти більш коротку версію.)
  • Переміщено допоміжні функції в whereпункт, щоб функції могли використовувати nпараметр внутрішньо.
  • Після цього він (#)був досить коротким, щоб його накреслити.
  • Розмістіть усе на одній лінії, щоб обмежити зайвий пробіл.

2

Python 3.5, 114 93 112 байт:

import re;Y=re.findall('[A-Z0-9]',input());I='+'+'-'*len(Y)+'+\n|';print(I+''.join(Y)+I[::-1]+'\n'+' '*len(Y)+'v')

Повна програма. В основному використовує регулярний вираз, щоб відповідати всім випадкам великих літер і цифр, потім створює поле точного розміру, виходячи з довжини списку збігів, і, нарешті, ставить об'єднаний список збігів "всередину" його.

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


5
У ньому відсутнє нижнє "v".
Компанія Carles

@CarlesCompany Це виправлено ціною ще 19 байт.
Р. Кап

2

Python 3, 121 124 байт

Виправлена ​​дурна помилка

s=''
for i in input():_=ord(i);s+=("",i)[91>_>64or 47<_<58]
x=len(s)
c='+'+"-"*x+'+'
print(c+"\n|"+s+"|\n"+c+"\n"+" "*x+"v")

не імпортує бібліотеки, як інші відповіді python.


Не працює правильно. -1 Повідомте, якщо ви виправите.
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Виправлено. Дякую
Зруйнований лимон

Насправді, посилання було гольф деяким кодом, і саме тому я поклав його туди.
Ерік Аутгольфер

2

Java 8, 149 байт

s->{s=s.replaceAll("[^A-Z0-9]","");String t="+",r;int l=s.length(),i=l;for(;i-->0;t+="-");for(r=(t+="+\n")+"|"+s+"|\n"+t;++i<l;r+=" ");return r+"v";}

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

Пояснення:

s->{                     // Method with String as both parameter and return-type
  s=s.replaceAll("[^A-Z0-9]","");
                         //  Leave only the uppercase letters and digits
  String t="+",          //  Temp-String, starting at "+"
         r;              //  Result-String
  int l=s.length(),      //  Amount of uppercase letters and digits `l`
  i=l;for(;i-->0;t+="-");//  Loop and append `l` amount of "-" to the temp-String
  for(r=(t+="+\n")       //  Append "+" and a new-line to the temp-String
        +"|"+s+"|\n"+t;  //  Set the result to `t`, "|", modified input, "|", new-line, `t`
                         //  all appended to each other
      ++i<l;r+=" ");     //  Loop and append `l` amount of spaces to the result
  return r+"v";}         //  Return the result-String with appended "v"



1

Python 2, 113 байт

def f(n):c=filter(lambda x:x.isupper()^x.isdigit(),n);L=len(c);h='+'+L*'-'+'+\n';return h+'|'+c+'|\n'+h+' '*L+'v'

Чи можете ви використовувати ascii в Python? Якщо так, ви можете скористатися 47<x<58|64<x<91:)
aloisdg каже: Відновіть Моніку

@aloisdg На відміну від C / C ++, Python не використовує інтегральний charтип - всі символи рядків Python самі є рядками, і їх не можна безпосередньо порівнювати з цілими числами. Треба було б 47<ord(x)<58or 64<ord(x)<91.
Мего

[x for x in n if x.isupper()^x.isdigit()]на один байт коротший заfilter(lambda x:x.isupper()^x.isdigit(),n)
Leaky Nun

@LeakyNun: фільтр поверне рядок, але розуміння списку поверне список, який не буде корисним у виразі повернення значення.
Микита Борисов

Чому XOR? Ви не можете використовувати АБО натомість? XOR є більш складним, і, отже, більш повільним для AFAIK. x.isupper()^x.isdigit()->x.isupper()|x.isdigit()
Ерік Аутгольфер

1

Джолф, 35 байт

Ά+,Alγ/x"[^A-Z0-9]"1'+'-'|γS*lγ" 'v

Мені потрібен коротший спосіб видалити всі, крім заголовків та номерів ...


1

С, 171 163

Функція f()змінює його вхід і виводить результат.

l;f(char*n){char*p=n,*s=n,c[99];for(;*n;++n)isupper(*n)+isdigit(*n)?*p++=*n:0;*p=0;memset(c,45,l=strlen(s));c[l]=0;printf("+%s+\n|%s|\n+%s+\n%*.cv\n",c,s,c,l,32);}

Тестова програма

Потрібен один параметр, рядок для використання у фавіконі:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, const char **argv)
{
    char *input=malloc(strlen(argv[1])+1);
    strcpy(input,argv[1]);
    f(input);
    free(input);
    return 0;
}

Чому ви копіюєте елемент argv?
mame98

Оскільки функція змінює свій вхід. Я не впевнений, що зміна параметрів на місці визначається поведінкою.
owacoder

ніколи не думав про це ... в Відповідно до цього SO відповідь він повинен бути в порядку: stackoverflow.com/a/963504/3700391
mame98

1

Хаскелл, 161

import Data.List
r=replicate
l=length
f n=intersect n$['0'..'9']++['A'..'Z']
t n='+':(r(l$f n)'-')++"+\n"
o n=(t n)++"|"++(f n)++"|\n"++(t n)++(r(l$f n)' ')++"V"

Використання

o"Stack Overflow"
+--+
|SO|
+--+
  V

o"Area 51"
+---+
|A51|
+---+
   V

1
Ви використовуєте replicate, lengthі fтільки в цій комбінації, так що ви можете об'єднати їх в одну функцію: r=replicate.length.fі назвати його як r n '-'. Ви можете зберегти ще більше байтів, скориставшись оператором infix: (#)=replicate.length.fі n#'-'/ n#' '. Додатково replicate.lengthє >>(з однорядним рядком замість знака), так що: (#)=(>>).fі n#"-"/ n#" ", обидва без ( )нього.
німі

1
... також: немає потреби в ( )оточуючих t nі f n. "|"++є '|':. Загалом і цілому: o n=t n++'|':f n++"|\n"++t n++n#" "++"V".
німі

1

Баш, 99 74 байт

s=$(sed s/[^A-Z0-9]//g);a=${s//?/-};echo -e "+$a+\n|$s|\n+$a+\n${s//?/ }v"

Використання: Виконайте вищевказану команду, введіть назву сайту, натисніть клавішу Enter, а потім Ctrl+ D(надішліть 'кінець файлу').



1

R, 108 байт

cat(x<-gsub("(.*)","+\\1+\n",gsub(".","-",y<-gsub("[^A-Z0-9]","",s))),"|",y,"|\n",x,gsub("."," ",y),"v",sep="")

Пояснення

Переходимо зсередини (бо хто не любить присвоювати глобальні змінні зсередини регулярного вираження), припустимо, що sце наш рядок введення:

y<-gsub("[^A-Z0-9]","",s) зберігає великі літери та цифри, присвоює отримане значення y.

gsub(".","-",y<-...) замінює всі символи дефісами у вищезазначеному.

x<-gsub("(.*)","+\\1+\n",gsub(...))патронник +на будь-якому кінці ряду дефісів та новий рядок, і ми зберігаємо це як x.

Решта досить просто, виведіть у відповідному порядку і використовуйте той факт, що кількість пробілів перед vволею буде такою ж, як і довжина y.



1

APL, 52 49 байт

{x⍪2⌽'v'↑⍨≢⍉x←⍉z⍪⍨(z←'+|+')⍪'-','-',⍨⍪⍵/⍨⍵∊⎕D,⎕A}

(до 49 завдяки коментарю).


{x⍪2⌽'v'↑⍨≢⍉x←⍉z⍪⍨(z←'+|+')⍪'-','-',⍨⍪⍵/⍨⍵∊⎕D,⎕A}(Ви ніколи не скористаєтеся дужками в арсеналі одного із аргументів у функції зворотного аргументу при гольфі. Це завжди може бути в звичайному порядку, щоб зберегти байт.)
Zacharý

1

Perl, 57 байт

56 байт код + 1 для -p.

y/a-z //d;$d="-"x y///c;$_="+$d+
|$_|
+$d+
".$"x y///c.v

Спочатку я намагався зробити це лише за допомогою регулярних виразів, але це було набагато більше, ніж я сподівався, тому замість цього я використав кілька повторень рядків.

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


1

MATL , 34 байти

t1Y24Y2hm)T45&Ya'+|+'!wy&h10M~'v'h

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

t        % Implicit input. Duplicate
1Y2      % Uppercase letters
4Y2      % Digit characters
h        % Concatenate horizontally: string with uppercase letters and digits
m        % True for input chars that are uppercase letters or digits
)        % Keep only those
T45&Ya   % Pad up and down with character 45, which is '-'. Gives three-row char array
'+|+'!   % Push this string and transpose into a column vector
wy       % Swap, duplicate the second array from the top. This places one copy of the
         % column vector below and one above the three-row char array
&h       % Contatenate all stack arrays horizontally. This gives the box with the text
10M      % Retrieve the string with selected letters
~        % Logical negate. Gives zeros, which will be displayes as spaces
'v'      % Push this character
h        % Concatenate horizontally with the zeros.
         % Implicitly display the box with the text followed by the string containing
         % the zero character repeated and the 'v'

1

JavaScript (ES6), 119 байт

h=a=>"+"+"-".repeat(a.length)+"+\n";j=a=>(a=a.replace(/[^A-Z0-9]/g,""),h(a)+"|"+a+"|\n"+h(a)+" ".repeat(a.length)+"v");

1

J , 52 байти

'v'(<3 _2)}4{.1":]<@#~2|'/9@Z'&I.[9!:7@'+++++++++|-'

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

   [9!:7@'+++++++++|-'            Set the box drawing characters.
        '/9@Z'&I.                 Interval index, 1 for numbers, 3 for 
                                  uppercase letters.
          ]  #~2|                 Mod 2, and filter
                                  the characters that correspond to 1s.
           <@                     Put them in a box.
           1":                    Convert to a character matrix, so we can do stuff to it.
           4{.                    Add a 4th line filled with spaces   
       'v'(<3 _2)}                Insert a “v” at 3,−2


0

Загальний Lisp (Lispworks), 159 байт

(defun f(s)(labels((p(c l)(dotimes(i l)(format t"~A"c))))(let((l(length s)))#1=(p"+"1)#2=(p"-"l)#3=(format t"+~%")(format t"|~A|~%"s)#1##2##3#(p" "l)(p"v"1))))

неозорений:

(defun f (s)
  (labels ((p (c l)
             (dotimes (i l)
               (format t "~A" c))))
    (let ((l (length s)))
      #1=(p "+" 1)
      #2=(p "-" l)
      #3=(format t "+~%")
      (format t "|~A|~%" s)
      #1#
      #2#
      #3#
      (p " " l)
      (p "v" 1))))

Використання:

CL-USER 2 > (f "so")
+--+
|so|
+--+
  v
NIL

CL-USER 3 > (f "pcg")
+---+
|pcg|
+---+
   v
NIL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.