Hasilkan Favicon Stack Exchange


25

Apakah Anda mengenali logo PPCG? sepertinya ini, ketika Anda melakukan seni ascii itu.

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

Sekarang, Di Golf Kode ini, Anda akan membuat kode, yang membuat logo untuk situs lain, mirip dengan logo PPCG.

Apa yang harus Anda lakukan

String "Dipendekkan" akan menjadi string, dengan semua huruf besar dan angka dalam string input. (Yang akan terjadi PPCGketika string input Programming Puzzles & Code Golf)

Kotak" (

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

) harus sesuai dengan string yang Dipendek dengan sempurna. (Tidak lebih besar atau lebih kecil)

Juga vbagian harus tepat 1 ke bawah dan 1 ke kiri ke kanan bawah +.

Kemudian output kotak yang memiliki string pendek di dalamnya.

Contoh

Stack Overflow:

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

Area 51:

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

Aturan

Anda dapat mengasumsikan bahwa input berisi setidaknya satu digit atau huruf besar.

Aturan standar berlaku.



@ MartinEnder Ya, Sangat terkait erat, tetapi tidak duplikat.

1
@MatthewRoh Tujuan tautan adalah agar tantangan muncul di bilah sisi, itu bukan suara dupe. Yang mengatakan, saya pribadi berpikir menghapus karakter yang tidak diinginkan dan juga mencetak ^tidak menambah banyak dibandingkan dengan tantangan kedua yang saya tautkan, tapi saya tidak akan melemparkan palu dupe pada itu tetapi membiarkan komunitz memutuskan apakah mereka menganggap itu bohong atau tidak.
Martin Ender

4
Jika ya 99 Bottles Of Beer, itu akan terjadi 99BOB.

1
@MatthewRoh masih buggy, biarkan saya melihat apakah saya bisa mendapatkan jawaban bf setelah semua
Rohan Jhunjhunwala

Jawaban:


23

Vim, 42 pukulan

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

Ganti <DOWN>dengan , <LEFT>dengan , <ESC>dengan escdan <C-V>dengan CTRL+ V.

Berikut ini adalah animasi dari skrip ini berjalan (versi lama yang menggunakan Vbukan a v):

Animasi

Penjelasan naskah:

: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.

huruf kecil V, bukan huruf besar V

Satu karakter lagi, tetapi hindari karakter-karakter khusus yang lolos: r | y uP ​​$ pYPVr-r + $. YjppVr $ hrV
Bryce Wagner

Anda dapat mengganti i+↓←|␛␖ky$pdengan A+↓|␛␖ky0Puntuk menyimpan byte.
Lynn

Atau, ganti delapan pukulan pertama dalam pendekatan Bryce denganI|<END>|␛
Lynn

Saya bertanya-tanya apakah ini memiliki paling banyak upvotes karena gambar keren.
Joe

10

V 34 byte

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

Perhatikan bahwa ini berfungsi di versi yang lebih lama, tetapi tidak berfungsi di versi saat ini saat mencobanya secara online. Saya berubah ÄmenjadiYP yang fungsional setara.

Cobalah online!

Penjelasan:

Ó[^A-Z0-9]

Hapus semuanya kecuali untuk digit dan huruf besar.

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

Sekarang, buffer terlihat seperti ini:

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

Dan kursor kami ada di kolom pertama dari baris terakhir.

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

Versi yang tidak bersaing: (31 byte)


Saya hanya memperhatikan bahwa input Programming Puzzles & Code Golfmenghasilkan string yang salah PP&CGdalam output. Itu &harus dihapus
Luis Mendo

@LuisMendo Aww, sial! Terima kasih telah menunjukkan itu, saya akan memperbaikinya hari ini.
DJMcMayhem

@DrGreenEggsandIronMan Jadi, Anda sudah memperbaikinya, bukan? [kapan? akan? kamu? akhirnya? memperbaiki? it?]
Erik the Outgolfer

Saya tidak mendapatkan output apa pun di TIO?
Downgoat

@Downgoat V baru-baru ini memiliki pembaruan besar, dan sayangnya itu merusak beberapa hal yang saya cari, tetapi saya tidak yakin berapa lama untuk memperbaikinya.
DJMcMayhem

7

Kode mesin x86 16-bit, 72 byte

Dalam hex:

565789F731C9FCAC84C074143C5A77F73C4173083C3977EF3C3072EBAA41EBE75F5EE81500B07CAA51F3A4AB59E80A00B020F3AAB076AA91AAC351B02BAAB02DF3AAB82B10AB59C3

Parameter: SI= string input, DI- buffer output.

Menghasilkan string yang diakhiri NULL dengan garis yang dibatasi oleh baris baru. Menggunakan string input sebagai buffer sementara.

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

Uhh .. Saya belum melakukan assembly code untuk sementara waktu.

3
Saya juga. Mulai lagi sekitar seminggu yang lalu hanya untuk bermain golf
meden

3c 41 cmp al,a' bukankah seharusnya begitu 3c 41 cmp al,'a' ?
rav_kr

@rav_kr, tentu, terima kasih atas perhatiannya. Tidak ada kutipan saat mengganti kode hex dengan karakter untuk dibaca.
meden

4

Retina , 43 byte

[^A-Z\d]

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

Cobalah online!

Ini adalah tantangan sempurna untuk mendemonstrasikan Retina, bahasa golf Martin Ender.

Solusi ini dibagi menjadi dua langkah (apa yang kita sebut tahap), kedua tahap menjadi tahap penggantian.

Tahap pertama:

[^ AZ \ d]

Ini cocok dengan substring yang cocok [^A-Z\d], yang merupakan karakter yang bukan huruf besar dan bukan digit, dan kemudian gantikan dengan apa-apa, artinya menghapusnya.

Tahap kedua:

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

Itu .+ cocok seluruh hasil, dan kemudian mengganti dengan baris kedua.

Di baris kedua:

  • $& mengacu pada seluruh pertandingan
  • $.& mengacu pada panjang seluruh pertandingan
  • $*artinya ambil bilangan bulat sebelumnya, ulangi karakter berikutnya yang berkali-kali. Di sini $.&$*-berarti mengulangi -seberapa lama pertandingan itu.
  • merujuk ke baris baru.

Bagus, saya sudah mencoba ini sebelumnya, tetapi berakhir dengan 54 byte. T`dLp`dL_Sayangnya, alternatif untuk tahap pertama adalah panjang yang sama.
Martin Ender

@ MartinEnder Apa 54 byte Anda?
Leaky Nun


4

C #, 183 177 165 byte

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

mengalikan karakter sangat buruk di C #. saran dihargai

terima kasih banyak untuk aloisdg untuk -18 byte


Anda dapat menggantinya | |dengan|
aloisdg kata Reinstate Monica

Anda dapat menggunakan interpolasi stringreturn$"+{x}+\n|{s}|\n+{x}+\n{new string(' ',m+1)}v";}
aloisdg mengatakan Reinstate Monica

1
itu metode yang manis!
downrep_nation

Anda dapat menggantinya string.Join("", denganstring.Concat(
aloisdg kata Reinstate Monica

1
Anda dapat menghapus spasi setelahreturn
aloisdg mengatakan Reinstate Monica

4

Excel VBA, 375 359 358 byte:

Berhasil, saya menyerah untuk mencoba membuatnya lebih pendek ...

Sunting: Beralih ke pernyataan kasus dari pernyataan if, -16 bytes

Sunting2: Singkirkan u dan diganti dengan Len (b), -1 byte

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
Itu bagus, mengingat bahwa VBA kadang-kadang sampah.

Saya hanya melakukan ini untuk tantangan, saya tahu saya tidak bisa bersaing dengan VBA. Biasanya akhirnya menjadi sangat bingung pada akhirnya setelah mengubah semua variabel dari nama menjadi huruf tunggal.
tjb1

Yeah ikr So true

Bisakah Anda menghapus spasi putih di sekitar operator?
Morgan Thrapp

3
Tertawa di "Singkirkan kamu"
CocoaBean

4

Lua, 145 99 Bytes

Tidak banyak bicara, memanipulasi string selalu bertele-tele di lua :). Mengambil argumen baris perintah dan output melalui STDOUT

Terima kasih kepada @LeakyNun karena telah menyelamatkan saya 45 Bytes!

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

100 Bytes yang diusulkan oleh @LeakyNun

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

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

Tidak disatukan

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
Uhh, maksud Anda keluaran melalui STDOUT? Tapi saya tidak keberatan karena HARI PELUANGNYA !!!

1
@ MatthewRoh maksud saya keluaran ke STDIN terminal Anda! (memperbaiki ... memalukan ....)
Katenkyo

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

@ LeakyNun menggunakan pola %ukita mendapatkan beberapa byte lagi. Bagaimanapun, terima kasih :) (akan memperbarui ungolfed nanti)
Katenkyo

3

2sable , 36 34 33 32 31 byte

Menghadirkan 2sable :). Meskipun memiliki banyak kesamaan dengan 05AB1E, yang satu ini sebenarnya otomatis bergabung dengan stack daripada mengeluarkan bagian atas stack. Kode:

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

Menggunakan pengkodean CP-1252 .


2
ಠ_ಠ Tidak perlu lagi bermain golf atau beralih bahasa! Biarkan di tempat sekarang! : P
DJMcMayhem

@DrGreenEggsandIronMan Hahaha, masih 3 byte menyakitkan dari jawaban Anda: P.
Adnan

1
Haha, saya merayakan ketika saya melihatnya 7 byte lebih lama, dan kemudian perlahan-lahan menyaksikan kesenjangan menghilang, satu per satu ...
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`

3

Haskell, 107 Bytes

Jawaban ini sangat didasarkan pada jawaban oleh Zylviij dan komentar oleh nimi . Saya akan menambahkan lebih banyak komentar untuk jawaban itu, tetapi sayangnya, saya tidak memiliki cukup perwakilan.

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

Trik tambahan yang digunakan:

  • Digantikan intersectoleh implementasinya sehingga impor bisa dibatalkan. (Catatan: implementasinya hampir sama dengan perpustakaan, saya tidak dapat menemukan versi yang lebih pendek.)
  • Memindahkan fungsi helper ke dalam whereklausa sehingga fungsi dapat menggunakan nparameter secara internal.
  • Setelah itu, (#)cukup pendek untuk diuraikan.
  • Letakkan semuanya di satu baris untuk membatasi spasi tambahan.

2

Python 3.5, 114 93 112 byte:

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

Program lengkap. Pada dasarnya menggunakan ekspresi reguler untuk mencocokkan semua kemunculan huruf besar dan angka, kemudian membuat kotak dengan ukuran yang tepat berdasarkan panjang daftar kecocokan, dan akhirnya menempatkan daftar kecocokan yang tergabung "di dalamnya".

Cobalah secara Online! (Ideone)


5
Tidak ada bagian bawah 'v'.
Perusahaan Carles

@CarlesCompany Sudah diperbaiki, dengan biaya 19 byte lebih.
R. Kap

2

Python 3, 121 124 byte

Memperbaiki kesalahan bodoh

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

tidak mengimpor perpustakaan seperti jawaban python lainnya.


Tidak berfungsi dengan benar. -1 Beri tahu jika Anda memperbaikinya.
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Diperbaiki. Terima kasih
Lemon Destructible

Sebenarnya, tautannya golf beberapa kode, dan itu sebabnya saya taruh di sana.
Erik the Outgolfer

2

Java 8, 149 byte

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

Cobalah online.

Penjelasan:

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

Pyke, 39 byte

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

Coba di sini!

12 byte penciptaan mini-string, 20 byte format. Kegembiraan!



1

Python 2, 113 byte

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'

Bisakah Anda menggunakan ascii dengan Python? Jika ya, Anda dapat menggunakan 47<x<58|64<x<91:)
aloisdg mengatakan Reinstate Monica

@aloisdg Tidak seperti C / C ++, Python tidak menggunakan chartipe integral - semua karakter dalam string Python adalah string itu sendiri, dan tidak dapat secara langsung dibandingkan dengan integer. Itu perlu 47<ord(x)<58or 64<ord(x)<91.
Mego

[x for x in n if x.isupper()^x.isdigit()]lebih pendek satu byte darifilter(lambda x:x.isupper()^x.isdigit(),n)
Leaky Nun

@ LeakyNun: filter akan mengembalikan string, tetapi pemahaman daftar akan mengembalikan daftar, yang tidak akan dapat digunakan dalam ekspresi nilai pengembalian.
Nikita Borisov

Mengapa XOR? Tidak bisakah Anda menggunakan ATAU sebagai gantinya? XOR lebih kompleks, dan karenanya AFAIK lebih lambat. x.isupper()^x.isdigit()->x.isupper()|x.isdigit()
Erik the Outgolfer

1

Jolf, 35 byte

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

Saya perlu cara yang lebih singkat untuk menghapus semua kecuali huruf & angka ...


1

C, 171 163

Function f()memodifikasi inputnya dan mencetak hasilnya.

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 Tes

Membutuhkan satu parameter, string untuk digunakan dalam 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;
}

Mengapa Anda menyalin elemen argv?
mame98

Karena fungsi memodifikasi inputnya. Saya tidak yakin memodifikasi parameter di tempat didefinisikan perilaku.
owacoder

tidak pernah memikirkan hal ini ... menurut jawaban SO ini seharusnya baik-baik saja: 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"

Pemakaian

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

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

1
Anda menggunakan replicate, lengthdan fsecara eksklusif dalam kombinasi ini, sehingga Anda dapat menggabungkannya menjadi satu fungsi: r=replicate.length.fdan menyebutnya seperti r n '-'. Anda dapat menyimpan lebih banyak byte dengan menggunakan operator infiks: (#)=replicate.length.fdan n#'-'/ n#' '. Selain replicate.lengthitu >>(dengan string tunggal bukan char), jadi: (#)=(>>).fdan n#"-"/ n#" ", keduanya tanpa ( )di sekitarnya.
nimi

1
... juga: tidak perlu untuk ( )sekitar t ndan f n. "|"++adalah '|':. Semua dalam semua: o n=t n++'|':f n++"|\n"++t n++n#" "++"V".
nimi

1

Bash, 99 74 byte

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

Penggunaan: Jalankan perintah di atas, ketikkan nama situs, tekan enter dan kemudian Ctrl+ D(kirim 'akhir file').



1

R, 108 byte

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

Penjelasan

Pergi dari dalam ke luar (karena siapa yang tidak suka menugaskan variabel global dari dalam sebuah regex), dengan asumsi sadalah string input kami:

y<-gsub("[^A-Z0-9]","",s) menyimpan kapital dan angka, memberikan nilai yang dihasilkan ke y.

gsub(".","-",y<-...) mengganti semua karakter dengan tanda hubung di atas.

x<-gsub("(.*)","+\\1+\n",gsub(...)) chuck a + di kedua ujung baris tanda hubung, dan baris baru, dan kami menyimpannya sebagai x.

Sisanya cukup mudah, menghasilkan dalam urutan yang sesuai, dan menggunakan fakta bahwa jumlah spasi sebelum vakan sama dengan panjang y.


1

Brachylog , 61 byte

Ditautkan ke repositori pada 7 Juli untuk memastikan kompatibilitas.

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

Non-bersaing, 53 byte

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

Cobalah online!


1

APL, 52 49 byte

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

(turun ke 49 berkat komentar).


{x⍪2⌽'v'↑⍨≢⍉x←⍉z⍪⍨(z←'+|+')⍪'-','-',⍨⍪⍵/⍨⍵∊⎕D,⎕A}(Anda tidak pernah mengurung salah satu argumen dalam fungsi argumen terbalik ketika bermain golf. Selalu bisa dalam urutan normal untuk menyimpan byte.)
Zacharý

1

Perl, 57 byte

56 byte kode +1 untuk -p.

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

Saya awalnya mencoba membuat ini hanya menggunakan regex, tapi itu jauh lebih besar dari yang saya harapkan, jadi saya telah menggunakan beberapa pengulangan string.

Cobalah online!


1

MATL , 34 byte

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

Cobalah 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'

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

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

0

Ruby, 81 bytes (78 + -p flag)

gsub(/[^A-Z\d]/,'')
gsub(/.+/){"+#{k=?-*s=$&.size}+
|#{$&}|
+#{k}+
#{' '*s}v"}

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.