Generieren Sie ein Stack Exchange Favicon

25

Erkennen Sie das PPCG-Logo? es sieht so aus, wenn man eine ascii-kunst davon macht.

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

In diesem Code Golf erstellen Sie einen Code, der Logos für andere Sites erstellt, ähnlich dem PPCG-Logo.

Was du machen solltest

Die "verkürzte" Zeichenfolge ist die Zeichenfolge mit allen Großbuchstaben und Zahlen in der Eingabezeichenfolge. (Dies wäre, PPCGwenn die Eingabezeichenfolge ist Programming Puzzles & Code Golf)

Die Kiste" (

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

) sollte perfekt zur verkürzten Saite passen (nicht größer oder kleiner)

Auch das vTeil sollte genau 1 nach unten und 1 nach links nach rechts nach unten sein +.

Geben Sie dann das Feld aus, in dem sich die verkürzte Zeichenfolge befindet.

Beispiel

Stack Overflow:

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

Area 51:

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

Regeln

Sie können davon ausgehen, dass die Eingabe mindestens eine Ziffer oder einen Großbuchstaben enthält.

Es gelten die Standardregeln für .

Wahnsinnig
quelle
@MartinEnder Ja, sehr eng verwandt, aber nicht doppelt.
1
@MatthewRoh Der Zweck der Links ist, dass die Herausforderungen in der Seitenleiste angezeigt werden, es ist keine falsche Abstimmung. Das heißt, ich persönlich denke, dass das Entfernen der unerwünschten Zeichen und auch das Drucken der Zeichen im ^Vergleich zu der zweiten Herausforderung, die ich verknüpft habe, nicht viel bringt, aber ich werde darauf keinen blöden Hammer werfen, sondern die Kommunitz entscheiden lassen, ob sie es für einen blöden oder einen blöden halten nicht.
Martin Ender
4
Wenn es 99 Bottles Of Beerso wäre, würde es so sein 99BOB.
1
@MatthewRoh es ist immer noch fehlerhaft, lassen Sie mich sehen, ob ich eine Antwort bekommen kann
Rohan Jhunjhunwala

Antworten:

23

Vim, 42 Schläge

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

Ersetzen Sie <DOWN>mit , <LEFT>mit , <ESC>mit escund <C-V>mit CTRL+ V.

Hier ist eine Animation dieses Skripts (alte Version, die a Vanstelle von a verwendet v):

Animation

Erklärung des Skripts:

: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
quelle
Kleinbuchstaben V, nicht Großbuchstaben V
Ein Zeichen mehr, vermeidet aber die Sonderzeichen: r | y uP ​​$ pYPVr-r + $. YjppVr $ hrV
Bryce Wagner
Sie können ersetzen i+↓←|␛␖ky$pmit A+↓|␛␖ky0Peinem Byte zu speichern.
Lynn
Alternativ können Sie die ersten acht Schläge in I|<END>|␛
Lynn
Ich frage mich, ob dies wegen des coolen Bildes die meisten positiven Stimmen hat.
Joe
10

V 34 Bytes

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

Beachten Sie, dass dies in einer älteren Version funktioniert hat, in der aktuellen Version jedoch nicht, wenn Sie es online ausprobieren. Ich habe geändert Ä, YPwas funktional äquivalent ist.

Probieren Sie es online!

Erläuterung:

Ó[^A-Z0-9]

Entfernen Sie alles außer Ziffern und Großbuchstaben.

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

Der Puffer sieht nun so aus:

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

Und unser Cursor befindet sich in der ersten Spalte der letzten Zeile.

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

Nicht konkurrierende Version: (31 Bytes)

DJMcMayhem
quelle
Ich habe gerade bemerkt, dass die Eingabe Programming Puzzles & Code Golfdie falsche Zeichenfolge PP&CGin der Ausgabe erzeugt. Das &sollte entfernt werden
Luis Mendo
@ LuisMendo Aww, verdammt noch mal! Vielen Dank für den Hinweis, ich werde es heute irgendwann beheben.
DJMcMayhem
@ DrGreenEggsandIronMan Also, Sie haben es behoben, richtig? [wann? werden? Sie? endlich? Fix? es?]
Erik der Outgolfer
Ich bekomme keine Ausgabe auf TIO?
Downgoat
@Downgoat V hatte erst kürzlich ein riesiges Update, und leider hat es einige Dinge verdorben, die ich mir angeschaut habe, aber ich bin nicht sicher, wie lange es dauern wird, bis es behoben ist .
DJMcMayhem
7

16-Bit-x86-Maschinencode, 72 Byte

In hex:

565789F731C9FCAC84C074143C5A77F73C4173083C3977EF3C3072EBAA41EBE75F5EE81500B07CAA51F3A4AB59E80A00B020F3AAB076AA91AAC351B02BAAB02DF3AAB82B10AB59C3

Parameter: SI= Eingabezeichenfolge, DI- Ausgabepuffer.

Gibt eine NULL-terminierte Zeichenfolge mit Zeilen aus, die durch Zeilenvorschub getrennt sind. Verwendet die Eingabezeichenfolge als temporären Puffer.

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
quelle
Ähh .. Ich habe Assembler-Code für eine Weile nicht getan.
3
Ich auch. Begonnen vor ungefähr einer Woche wieder nur zum Golfen
meden
3c 41 cmp al,a' sollte es nicht sein 3c 41 cmp al,'a' ?
Rav_kr
@rav_kr, klar, danke, dass du es bemerkt hast. Verpasste ein Zitat beim Ersetzen von Hex-Codes durch Zeichen zur besseren Lesbarkeit.
Meden
4

Retina , 43 Bytes

[^A-Z\d]

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

Probieren Sie es online!

Dies ist die perfekte Herausforderung, um Retina, die Golfsprache von Martin Ender, zu demonstrieren.

Diese Lösung ist in zwei Schritte (sogenannte Stufen) unterteilt, wobei beide Stufen eine Ersatzstufe sind.

Die erste Stufe:

[^ AZ \ d]

Dies entspricht den übereinstimmenden Teilzeichenfolgen [^A-Z\d], dh den Zeichen, die keine Großbuchstaben und keine Ziffern sind, und ersetzt sie dann durch nichts, was bedeutet, dass sie gelöscht werden.

Die zweite Stufe:

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

Das .+stimmt mit dem gesamten Ergebnis überein und ersetzt es dann durch die zweite Zeile.

In der zweiten Zeile:

  • $& bezieht sich auf das ganze Spiel
  • $.& bezieht sich auf die Länge des gesamten Spiels
  • $*Bedeutet, dass Sie die vorherige Ganzzahl nehmen und das nächste Zeichen so oft wiederholen müssen. Hier $.&$*-bedeutet zu wiederholen, -wie lange das Spiel ist.
  • verweist auf eine neue Zeile.
Undichte Nonne
quelle
Nizza, ich habe es früher versucht, aber am Ende 54 Bytes. Eine Alternative für die erste Etappe ist T`dLp`dL_leider die gleiche Länge.
Martin Ender
@MartinEnder Was waren Ihre 54 Bytes?
Undichte Nonne
4

C #, 183 177 165 Bytes

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

Zeichen zu multiplizieren ist in C # furchtbar. Vorschläge geschätzt

vielen dank an aloisdg für -18 bytes

downrep_nation
quelle
Sie können ersetzen | |mit|
aloisdg sagt wieder einzusetzen Monica
Sie können String-Interpolation verwendenreturn$"+{x}+\n|{s}|\n+{x}+\n{new string(' ',m+1)}v";}
Aloisdg sagt Reinstate Monica
1
Das ist eine süße Methode!
Downrep_nation
Sie können ersetzen string.Join("", mitstring.Concat(
aloisdg sagt wieder einzusetzen Monica
1
Sie können das Leerzeichen entfernen, nachdem diereturn
Aloisdg sagt Reinstate Monica
4

Excel VBA, 375 359 358 Bytes:

Es funktioniert, ich gebe es auf, es kürzer zu machen ...

Bearbeiten: Von if -Anweisungen auf case -Anweisung umgestellt, -16 Byte

Edit2: Wurde u los und durch Len (b), -1 Byte ersetzt

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
quelle
3
Es ist jedoch gut, wenn man bedenkt, dass VBA manchmal Müll ist.
Ich mache das nur für die Herausforderung, ich weiß, dass ich nicht mit VBA mithalten kann. Normalerweise ist das Ende sehr verwirrt, nachdem alle Variablen von Namen in einzelne Buchstaben geändert wurden.
tjb1
Yeah ikr So wahr
Können Sie das Leerzeichen um Operatoren entfernen?
Morgan Thrapp
3
Gelacht über
4

Lua, 145 99 Bytes

Nicht viel zu sagen, das Manipulieren von Strings ist in lua immer wortreich :). Übernimmt ein Befehlszeilenargument und gibt es über STDOUT aus

Vielen Dank an @LeakyNun für die Rettung von 45 Bytes!

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

100 Bytes von @LeakyNun vorgeschlagen

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

ALTE 145 Bytes

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

Ungolfed

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
quelle
1
Ähh, meinst du die Ausgabe über STDOUT? Aber es macht mir nichts aus, denn sein gegenteiliger Tag !!!
1
@MatthewRoh Ich meinte die Ausgabe an die STDIN Ihres Terminals! (behoben ... schade ....)
Katenkyo
n=(...):gsub("[^A-Z%d]","")s="+"..("-"):rep(#n).."+\n"return s.."|"..n.."|\n"..s..(" "):rep(#n).."V"ist 100 Bytes
Leaky Nun
@LeakyNun mit dem Muster %ugewinnen wir noch ein paar Bytes. Wie auch immer, danke :) (wird die ungolfed später aktualisieren)
Katenkyo
3

2sable , 36 34 33 32 31 Bytes

Presenting 2sable :). Obwohl es viele Gemeinsamkeiten mit 05AB1E hat, wird dieser automatisch dem Stapel hinzugefügt, anstatt den oberen Teil des Stapels auszugeben. Code:

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

Verwendet die CP-1252- Codierung.

Adnan
quelle
2
ಠ_ಠ Nie mehr Golf spielen oder die Sprache wechseln! Lass es wo es jetzt ist! : P
DJMcMayhem
@DrGreenEggsandIronMan Hahaha, es sind noch 3 schmerzhafte Bytes von deiner Antwort entfernt: P.
Adnan
1
Haha, ich habe gefeiert, als ich es 7 Bytes länger sah, und dann sah ich langsam zu, wie die Lücke nacheinander verschwand ...
DJMcMayhem
3

JavaScript (ES6), 99 Byte

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

Haskell, 107 Bytes

Diese Antwort basiert stark auf der Antwort von Zylviij und den Kommentaren von nimi . Ich hätte dieser Antwort weitere Kommentare hinzugefügt, aber leider habe ich nicht genug Repräsentanten.

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

Zusätzliche Tricks:

  • Wird intersectdurch seine Implementierung ersetzt, sodass der Import abgebrochen werden kann. (Randnotiz: Die Implementierung ist fast wörtlich wie in der Bibliothek, ich konnte keine kürzere Version finden.)
  • Die Hilfsfunktionen wurden in die whereKlausel verschoben , damit Funktionen den nParameter intern verwenden können.
  • Danach (#)war kurz genug, um inliniert zu werden.
  • Fügen Sie alles in eine Zeile ein, um zusätzliche Leerzeichen zu vermeiden.
MarLinn
quelle
2

Python 3.5, 114 93 112 Bytes:

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

Ein volles Programm. Verwendet im Allgemeinen einen regulären Ausdruck, um alle Vorkommen von Großbuchstaben und Zahlen abzugleichen, erstellt dann das Feld mit der exakten Größe basierend auf der Länge der Übereinstimmungsliste und fügt schließlich die verknüpfte Übereinstimmungsliste "hinein".

Probieren Sie es online! (Ideone)

R. Kap
quelle
5
Es fehlt das untere "V".
Carles Company
@CarlesCompany Es wurde behoben und kostet 19 weitere Bytes.
R. Kap
2

Python 3, 121 - 124 Bytes

Fehler behoben

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

importiert keine Bibliotheken wie andere Python-Antworten.

Zerstörbare Zitrone
quelle
Funktioniert nicht richtig -1 Benachrichtigen, wenn Sie das Problem beheben.
Erik der Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Behoben. Vielen Dank
Destructible Lemon
Eigentlich hat der Link Code gespielt, und deshalb habe ich ihn dort abgelegt.
Erik der Outgolfer
2

Java 8, 149 Bytes

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

Probieren Sie es online aus.

Erläuterung:

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
quelle
1

Pyke, 39 Bytes

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

Probieren Sie es hier aus!

12 Bytes für die Erstellung von Mini-Strings, 20 Bytes für die Formatierung. Freude!

Blau
quelle
1

Python 2, 113 Bytes

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'
Atlasologe
quelle
Können Sie ASCII in Python verwenden? Wenn ja, können Sie verwenden 47<x<58|64<x<91:)
Aloisdg sagt Reinstate Monica
@aloisdg Im Gegensatz zu C / C ++ verwendet Python keinen ganzzahligen charTyp. Alle Zeichen in Python-Strings sind selbst Strings und können nicht direkt mit ganzen Zahlen verglichen werden. Es müsste sein 47<ord(x)<58or 64<ord(x)<91.
Mego
[x for x in n if x.isupper()^x.isdigit()]ist ein Byte kürzer alsfilter(lambda x:x.isupper()^x.isdigit(),n)
Leaky Nun
@LeakyNun: filter gibt eine Zeichenfolge zurück, aber das Listenverständnis gibt eine Liste zurück, die im Rückgabewertausdruck nicht verwendet werden kann.
Nikita Borisov
Warum XOR? Kannst du nicht stattdessen OR verwenden? XOR ist komplexer und damit langsamer AFAIK. x.isupper()^x.isdigit()->x.isupper()|x.isdigit()
Erik der Outgolfer
1

Jolf, 35 Bytes

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

Ich brauche einen kürzeren Weg, um alle bis auf Groß- und Kleinschreibung zu entfernen ...

Conor O'Brien
quelle
1

C 171 163

Die Funktion f()ändert ihre Eingabe und gibt das Ergebnis aus.

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

Testprogramm

Erfordert einen Parameter, den String, der im Favicon verwendet werden soll:

#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
quelle
Warum kopierst du das argv-Element?
Mame98
Weil die Funktion ihre Eingabe ändert. Ich bin nicht sicher, ob das Ändern der vorhandenen Parameter ein definiertes Verhalten ist.
Owacoder
nie darüber nachgedacht ... laut dieser SO-Antwort sollte es in Ordnung sein: 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"

Verwendung

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

o"Area 51"
+---+
|A51|
+---+
   V
Zylviij
quelle
1
Sie verwenden replicate, lengthund fausschließlich in dieser Kombination, so dass Sie sie in einer Funktion zusammenführen können: r=replicate.length.fund nennen Sie es wie r n '-'. Sie können noch mehr Bytes speichern, indem Sie einen Infix-Operator verwenden: (#)=replicate.length.fund n#'-'/ n#' '. Zusätzlich replicate.lengthist >>(mit einer Singleton-Zeichenfolge anstelle eines Zeichens), also ist es: (#)=(>>).fund n#"-"/ n#" ", beide ohne ( )um ihn herum.
nimi
1
... auch: keine Notwendigkeit für die ( )um t nund f n. "|"++ist '|':. Alles in allem: o n=t n++'|':f n++"|\n"++t n++n#" "++"V".
nimi
1

Bash, 99 74 Bytes

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

Verwendung: Führen Sie den obigen Befehl aus, geben Sie den Site-Namen ein, drücken Sie die Eingabetaste und dann Ctrl+ D(senden Sie 'Dateiende').

jemandemmitpc
quelle
1

R, 108 Bytes

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

Erläuterung

Von innen nach außen gehen (denn wer es nicht mag, globale Variablen innerhalb eines regulären Ausdrucks zuzuweisen) s:

y<-gsub("[^A-Z0-9]","",s) behält Groß- und Kleinschreibung bei und weist y den resultierenden Wert zu.

gsub(".","-",y<-...) Ersetzt alle Zeichen durch Bindestriche.

x<-gsub("(.*)","+\\1+\n",gsub(...)) chucks a + an jedem Ende der Reihe von Bindestrichen und eine neue Zeile, und wir speichern das als x.

Der Rest ist ziemlich unkompliziert, wird in der richtigen Reihenfolge ausgegeben und verwendet die Tatsache, dass die Anzahl der Leerzeichen vor vdem gleich der Länge von y ist.

Barbarossa
quelle
1

Brachylog , 61 Bytes

Wird am 7. Juli mit dem Repository verknüpft, um die Abwärtskompatibilität sicherzustellen.

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

Nicht konkurrierend, 53 Bytes

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

Probieren Sie es online!

Undichte Nonne
quelle
1

APL, 52 49 Bytes

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

(bis zu 49 dank des Kommentars).

lstefano
quelle
{x⍪2⌽'v'↑⍨≢⍉x←⍉z⍪⍨(z←'+|+')⍪'-','-',⍨⍪⍵/⍨⍵∊⎕D,⎕A}(Sie setzen beim Golfen niemals einen der Argumente in Klammern, wenn Sie eine umgekehrte Argumentationsfunktion verwenden. Das Speichern eines Bytes kann immer in der normalen Reihenfolge erfolgen.)
Zacharý
1

Perl, 57 Bytes

56 Byte Code + 1 für -p.

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

Ich habe ursprünglich versucht, dies nur mit regulären Ausdrücken zu machen, aber es war viel größer als ich gehofft hatte, also habe ich stattdessen einige Zeichenfolgenwiederholungen verwendet.

Probieren Sie es online!

Dom Hastings
quelle
1

MATL , 34 Bytes

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

Probieren Sie es 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
quelle
1

JavaScript (ES6), 119 Byte

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
quelle
1

J , 52 Bytes

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

Probieren Sie es 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
quelle
0

Ruby, 81 Bytes (78 + -pFlag)

gsub(/[^A-Z\d]/,'')
gsub(/.+/){"+#{k=?-*s=$&.size}+
|#{$&}|
+#{k}+
#{' '*s}v"}
Wert Tinte
quelle
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))))

Verwendung:

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

CL-USER 3 > (f "pcg")
+---+
|pcg|
+---+
   v
NIL
sadfaf
quelle