Wygeneruj Favicon wymiany stosu

25

Czy rozpoznajesz logo PPCG? wygląda to tak, kiedy tworzysz sztukę ascii.

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

Teraz, w tym Code Golf, stworzysz kod, który tworzy loga dla innych stron, podobne do logo PPCG.

Co powinieneś zrobić

„Skrócony” ciąg będzie ciągiem, w którym wszystkie duże litery i cyfry będą ciągiem wejściowym. (Który byłby, PPCGgdy ciągiem wejściowym jest Programming Puzzles & Code Golf)

Pudełko" (

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

) powinien idealnie pasować do Skróconego sznurka. (Nie większy ani mniejszy)

Również vczęść powinna być dokładnie 1 w dół i 1 w lewo w prawo w dół +.

Następnie wyślij pudełko zawierające skrócony ciąg.

Przykład

Stack Overflow:

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

Area 51:

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

Zasady

Możesz założyć, że wejście zawiera co najmniej jedną cyfrę lub wielką literę.

Obowiązują standardowe zasady .

Szalony
źródło
@MartinEnder Tak, bardzo ściśle powiązane, ale nie duplikowane.
1
@MatthewRoh Celem linków jest to, że wyzwania pojawiają się na pasku bocznym, a nie głosowanie dupe. To powiedziawszy, osobiście uważam, że usunięcie niechcianych postaci, a także wydrukowanie ^nie dodaje wiele w porównaniu do drugiego wyzwania, które podłączyłem, ale nie rzucę na to młotem dupe, ale pozwól gminom zdecydować, czy uważają to za dupe, czy nie.
Martin Ender
4
Gdyby tak było 99 Bottles Of Beer, byłoby 99BOB.
1
@MatthewRoh to wciąż błąd, pozwól mi zobaczyć, czy mimo wszystko mogę uzyskać odpowiedź od chłopaka
Rohan Jhunjhunwala

Odpowiedzi:

23

Vim, 42 uderzenia

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

Zamień <DOWN>z , <LEFT>z , <ESC>z esc, a <C-V>z CTRL+ V.

Oto animacja działania tego skryptu (stara wersja, która używa Vzamiast a v):

Animation

Objaśnienie skryptu:

: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.
Loovjo
źródło
mała litera V, a nie wielka litera V
Jeszcze jedna postać, ale unika specjalnych znaków ucieczki: r | yP $ pYPVr-r + $. YjppVr $ hrV
Bryce Wagner
Można wymienić i+↓←|␛␖ky$pz A+↓|␛␖ky0Pzapisać bajt.
Lynn
Ewentualnie zamień pierwsze osiem uderzeń w podejściu Bryce'a naI|<END>|␛
Lynn
Zastanawiam się, czy to ma najwięcej pozytywnych opinii ze względu na fajny obraz.
Joe
10

V 34 bajtów

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

Pamiętaj, że działało to w starszej wersji, ale nie działa w bieżącej wersji po wypróbowaniu online. ZmieniłamÄ na YPktóry jest funkcjonalnie równoważny.

Wypróbuj online!

Wyjaśnienie:

Ó[^A-Z0-9]

Usuń wszystko oprócz cyfr i wielkich liter.

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

Teraz bufor wygląda następująco:

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

Nasz kursor znajduje się w pierwszej kolumnie ostatniego wiersza.

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

Wersja niekonkurencyjna: (31 bajtów)

DJMcMayhem
źródło
Właśnie zauważyłem, że dane wejściowe Programming Puzzles & Code Golfgenerują niepoprawny ciąg znaków PP&CGw danych wyjściowych. &Powinny zostać usunięte
Luis Mendo
@LuisMendo Aww, do cholery! Dzięki, że mi to wskazałeś, kiedyś to naprawię.
DJMcMayhem
@DrGreenEggsandIronMan Więc to naprawiłeś, prawda? [kiedy? Wola? ty? Wreszcie? naprawić? it?]
Erik the Outgolfer
Nie otrzymuję żadnych wyników w TIO?
Downgoat 26.07.16
@Downgoat V niedawno miał ogromną aktualizację i niestety zawierał pewne rzeczy, które w nią przeglądam, ale nie jestem pewien, ile czasu zajmie naprawa.
DJMcMayhem
7

16-bitowy kod maszynowy x86, 72 bajty

W hex:

565789F731C9FCAC84C074143C5A77F73C4173083C3977EF3C3072EBAA41EBE75F5EE81500B07CAA51F3A4AB59E80A00B020F3AAB076AA91AAC351B02BAAB02DF3AAB82B10AB59C3

Parametry: SI= ciąg wejściowy, DI- bufor wyjściowy.

Zwraca ciąg zakończony znakiem NULL z wierszami oddzielonymi znakiem nowej linii. Używa ciągu wejściowego jako bufora tymczasowego.

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
meden
źródło
Uhh .. Przez pewien czas nie tworzyłem kodu asemblera.
3
Ja też. Znowu
zacząłem
3c 41 cmp al,a' nie powinno być 3c 41 cmp al,'a' ?
rav_kr
@rav_kr, jasne, dzięki za zauważenie. Pominął cytat, zastępując kody szesnastkowe znakami dla czytelności.
meden,
4

Siatkówka , 43 bajty

[^A-Z\d]

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

Wypróbuj online!

To idealne wyzwanie, aby zademonstrować Retinę, język golfowy Martina Endera.

To rozwiązanie jest podzielone na dwa etapy (tak zwane etapy), przy czym oba etapy są etapem zastępczym.

Pierwszy etap:

[^ AZ \ d]

Odpowiada to pasującym podciągom [^A-Z\d], czyli znakom, które nie są dużymi literami i nie są cyframi, a następnie zastępują je niczym, co oznacza ich usunięcie.

Drugi etap:

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

.+Dopasowuje cały efekt, a następnie zastępuje go z drugiej linii.

W drugiej linii:

  • $& odnosi się do całego meczu
  • $.& odnosi się do długości całego meczu
  • $*oznacza weź poprzednią liczbę całkowitą, powtórz kolejny znak tyle razy. Tutaj $.&$*-oznacza się powtórzyć- jednak długo trwa mecz.
  • odnosi się do nowej linii.
Leaky Nun
źródło
Fajnie, próbowałem tego wcześniej, ale skończyło się to 54 bajtami. Alternatywą dla pierwszego etapu jest T`dLp`dL_niestety ta sama długość.
Martin Ender
@MartinEnder Jakie były twoje 54 bajty?
Leaky Nun
4

C #, 183 177 165 bajtów

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

mnożenie znaków jest straszne w C #. sugestie mile widziane

wielkie dzięki dla aloisdg za -18 bajtów

downrep_nation
źródło
Można wymienić | |z|
aloisdg mówi dozbrojenie Monica
Możesz użyć interpolacji ciągówreturn$"+{x}+\n|{s}|\n+{x}+\n{new string(' ',m+1)}v";}
aloisdg mówi: Przywróć Monikę
1
to słodka metoda!
downrep_nation
Można wymienić string.Join("", zstring.Concat(
aloisdg mówi dozbrojenie Monica
1
Możesz usunąć to miejsce poreturn
aloisdg mówi Przywróć Monikę
4

Excel VBA, 375 359 358 bajtów:

Działa, rezygnuję z próby skrócenia ...

Edycja: Przełączono na instrukcję case z instrukcji if, -16 bajtów

Edycja2: Pozbyłem się u i zastąpiłem Len (b), -1 bajt

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
tjb1
źródło
3
Jest to dobre, biorąc pod uwagę, że VBA to czasami śmieci.
Po prostu robię to dla wyzwania, wiem, że nie mogę konkurować z VBA. Zwykle na końcu są bardzo zdezorientowani po zmianie wszystkich zmiennych z nazw na pojedyncze litery.
tjb1
Tak, ikr. Tak prawda
Czy potrafisz usunąć białe znaki wokół operatorów?
Morgan Thrapp,
3
Śmiał się z „Pozbyłem się”
CocoaBean,
4

Lua, 145 99 bajtów

Niewiele do powiedzenia, manipulowanie ciągami jest zawsze uciążliwe w lua :). Pobiera argument wiersza polecenia i wyprowadza go przez STDOUT

Dzięki @LeakyNun za uratowanie mnie 45 bajtów!

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

100 bajtów zaproponowanych przez @LeakyNun

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

STARY 145 bajtów

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

Nie golfił

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
Katenkyo
źródło
1
Uhh, masz na myśli wyjście przez STDOUT? Ale nie przeszkadza mi to, JEJ DZIEŃ PRZECIWKO !!!
1
@MatthewRoh Miałem na myśli wyjście do STDIN twojego terminala! (naprawiono ... wstyd ....)
Katenkyo
n=(...):gsub("[^A-Z%d]","")s="+"..("-"):rep(#n).."+\n"return s.."|"..n.."|\n"..s..(" "):rep(#n).."V"ma 100 bajtów
Leaky Nun
@LeakyNun za pomocą wzorca %uuzyskujemy więcej bajtów. W każdym razie dzięki :) (zaktualizuje nie golfowego później)
Katenkyo,
3

2sable , 36 34 33 32 31 bajtów

Prezentacja 2sable :). Chociaż ma to wiele wspólnego z 05AB1E, ten w rzeczywistości automatycznie dołącza do stosu, a nie wyprowadza jego wierzchu. Kod:

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

Wykorzystuje kodowanie CP-1252 .

Adnan
źródło
2
ಠ_ಠ Koniec z golfem i zmianą języka! Zostaw to tam, gdzie jest teraz! : P
DJMcMayhem
@DrGreenEggsandIronMan Hahaha, nadal są 3 bolesne bajty od twojej odpowiedzi: P.
Adnan
1
Haha, świętowałem, kiedy zobaczyłem 7 bajtów dłużej, a potem powoli patrzyłem, jak przerwa zanika, jeden po drugim ...
DJMcMayhem
3

JavaScript (ES6), 99 bajtów

(s,t=s.replace(/[^0-9A-Z]/g,``),g=c=>t.replace(/./g,c))=>`${s=`+${g(`-`)}+
`}|${t}|
${s}${g(` `))v`
Neil
źródło
3

Haskell, 107 bajtów

Ta odpowiedź jest mocno oparta na odpowiedź przez Zylviij i uwagami Nimi . Dodałbym więcej komentarzy do tej odpowiedzi, ale niestety nie mam wystarczającej liczby przedstawicieli.

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

Zastosowane dodatkowe sztuczki:

  • Zastąpiony intersectprzez jego implementację, aby można było usunąć import. (Uwaga dodatkowa: implementacja jest prawie dosłownie taka sama jak w bibliotece, nie mogłem znaleźć krótszej wersji)
  • Przeniesiono funkcje pomocnicze do whereklauzuli, aby funkcje mogły korzystać z nparametru wewnętrznie.
  • Potem (#)był na tyle krótki, że można go było wstawić.
  • Umieść wszystko w jednym wierszu, aby ograniczyć dodatkowe białe znaki.
MarLinn
źródło
2

Python 3.5, 114 93 112 bajtów:

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

Pełny program. Zasadniczo używa wyrażenia regularnego, aby dopasować wszystkie wystąpienia wielkich liter i cyfr, a następnie tworzy pole o dokładnym rozmiarze na podstawie długości listy dopasowań, a na koniec umieszcza połączoną listę dopasowań „wewnątrz”.

Wypróbuj online! (Ideone)

R. Kap
źródło
5
Brakuje dolnej litery „v”.
Carles Company,
@CarlesCompany Zostało naprawione, kosztem 19 kolejnych bajtów.
R. Kap
2

Python 3, 121 124 bajtów

Naprawiono głupi błąd

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

nie importuje bibliotek jak inne odpowiedzi w języku Python.

Zniszczalna cytryna
źródło
Nie działa poprawnie -1 Powiadom, jeśli naprawisz.
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Naprawiono. Dziękuję
Destructible Lemon
W rzeczywistości link grał w jakiś kod i dlatego go tam umieściłem.
Erik the Outgolfer
2

Java 8, 149 bajtów

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

Wypróbuj online.

Wyjaśnienie:

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"
Kevin Cruijssen
źródło
1

Pyke, 39 bajtów

cFDh~u{!Ih(sil\-*\+R\+sj\|i\|++jild*\v+

Wypróbuj tutaj!

12 bajtów tworzenia mini-ciągu, 20 bajtów formatowania. Radość!

niebieski
źródło
1

Pyth, 38 37 bajtów


Jj*\-lK@jrG1UTz"++"jK"||"JtXJ"-+"" v

Wypróbuj online.

Zwróć uwagę na nowy wiersz na początku.

PurkkaKoodari
źródło
1

Python 2, 113 bajtów

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'
atlasolog
źródło
Czy możesz używać ascii w Pythonie? Jeśli tak, możesz użyć 47<x<58|64<x<91:)
aloisdg mówi Przywróć Monikę
@aloisdg W przeciwieństwie do C / C ++, Python nie używa integralnego chartypu - wszystkie znaki w łańcuchach Pythona same są łańcuchami i nie można ich bezpośrednio porównywać z liczbami całkowitymi. Musiałoby tak być 47<ord(x)<58or 64<ord(x)<91.
Mego
[x for x in n if x.isupper()^x.isdigit()]jest o jeden bajt krótszy niżfilter(lambda x:x.isupper()^x.isdigit(),n)
Leaky Nun
@LeakyNun: filtr zwróci ciąg, ale zrozumienie listy zwróci listę, która nie będzie użyteczna w wyrażeniu wartości zwracanej.
Nikita Borisov
Dlaczego XOR? Nie możesz zamiast tego użyć OR? XOR jest bardziej złożony, a zatem wolniejszy AFAIK. x.isupper()^x.isdigit()->x.isupper()|x.isdigit()
Erik the Outgolfer
1

Jolf, 35 bajtów

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

Potrzebuję krótszego sposobu, aby usunąć wszystkie oprócz wielkich liter i cyfr ...

Conor O'Brien
źródło
1

C 171 163

Funkcja f()modyfikuje dane wejściowe i drukuje wynik.

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

Program testowy

Wymaga jednego parametru, ciągu znaków do użycia w favicon:

#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;
}
owacoder
źródło
Dlaczego kopiujesz element argv?
mame98,
Ponieważ funkcja modyfikuje dane wejściowe. Nie jestem pewien, czy modyfikowanie parametrów w miejscu jest zdefiniowanym zachowaniem.
owacoder
nigdy o tym nie myślałem ... zgodnie z tą SO odpowiedzią powinno być dobrze: stackoverflow.com/a/963504/3700391
mame98
1

Haskell, 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"

Stosowanie

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

o"Area 51"
+---+
|A51|
+---+
   V
Zylviij
źródło
1
Używasz replicate, lengthi fwyłącznie w tej kombinacji, dzięki czemu można połączyć je w jedną funkcję: r=replicate.length.fa jak nazwać r n '-'. Możesz zapisać jeszcze więcej bajtów za pomocą operatora infix: (#)=replicate.length.fi n#'-'/ n#' '. Dodatkowo replicate.lengthjest >>(z łańcuchem singletonowym zamiast znaku), więc jest: (#)=(>>).fi n#"-"/ n#" ", oba bez ( )niego.
nimi
1
... też: nie potrzeba ( )wokół t ni f n. "|"++jest '|':. W sumie: o n=t n++'|':f n++"|\n"++t n++n#" "++"V".
nimi
1

Bash, 99 74 bajtów

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

Usage: Run the above command, type the site name, press enter and then Ctrl + D (send 'end of file').

someonewithpc
źródło
1

R, 108 bytes

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

Explanation

Going from the inside out (because who doesn't love assigning global variables from inside a regex), assuming s is our input string:

y<-gsub("[^A-Z0-9]","",s) keeps capitals and numbers, assigns the resulting value to y.

gsub(".","-",y<-...) replaces all characters with hyphens in the above.

x<-gsub("(.*)","+\\1+\n",gsub(...)) chucks a + on either end of the row of hyphens, and a newline, and we store that as x.

The rest is pretty straightforward, output in the appropriate order, and use the fact that the number of spaces before the v will be the same as the length of y.

Barbarossa
źródło
1

Brachylog, 61 bytes

Linked to the repository at Jul 7 to ensure backward compatibility.

lybL:{,."-"}ac:"+"c:"+"rcAw@NNw"|"Bw?wBwNwAwNwL:{," "w}a,"v"w

Non-competing, 53 bytes

lL:"-"rjb:"+"c:"+"rcAw@NNw"|"Bw?wBwNwAwNw" ":Ljbw"v"w

Try it online!

Leaky Nun
źródło
1

APL, 52 49 bytes

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

(down to 49 thanks to the comment).

lstefano
źródło
{x⍪2⌽'v'↑⍨≢⍉x←⍉z⍪⍨(z←'+|+')⍪'-','-',⍨⍪⍵/⍨⍵∊⎕D,⎕A} (You never parenthesize one of the arguents in a reversed argument function when golfing. It always can be in normal order to save a byte.)
Zacharý
1

Perl, 57 bytes

56 bytes code + 1 for -p.

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

I originally tried to make this only using regexes, but it was much larger than I'd hoped, so I've used some string repetition instead.

Try it online!

Dom Hastings
źródło
1

MATL, 34 bytes

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

Try it online!

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'
Luis Mendo
źródło
1

JavaScript (ES6), 119 bytes

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");
Logern
źródło
1

J, 52 bytes

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

Try it online!

   [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
FrownyFrog
źródło
0

Ruby, 81 bytes (78 + -p flag)

gsub(/[^A-Z\d]/,'')
gsub(/.+/){"+#{k=?-*s=$&.size}+
|#{$&}|
+#{k}+
#{' '*s}v"}
Value Ink
źródło
0

Common Lisp (Lispworks), 159 bytes bytes

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

ungolfed:

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

Usage:

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

CL-USER 3 > (f "pcg")
+---+
|pcg|
+---+
   v
NIL
sadfaf
źródło