Tạo một Favicon trao đổi ngăn xếp


25

Bạn có nhận ra logo PPCG không? Nó trông như thế này, khi bạn làm một nghệ thuật ascii của nó.

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

Bây giờ, trong Code Golf này, Bạn sẽ tạo một mã, tạo logo cho các trang web khác, tương tự như logo PPCG.

Bạn nên làm gì

Chuỗi "Rút gọn" sẽ là chuỗi, với tất cả các chữ cái và số in hoa trong chuỗi đầu vào. (Sẽ là PPCGkhi chuỗi đầu vào là Programming Puzzles & Code Golf)

Cái hộp" (

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

) phải phù hợp với chuỗi Rút gọn một cách hoàn hảo. (Không lớn hơn hoặc nhỏ hơn)

Ngoài ra vphần nên chính xác 1 xuống và 1 trái sang phải xuống +.

Sau đó xuất hộp có chuỗi rút ngắn trong đó.

Thí dụ

Stack Overflow:

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

Area 51:

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

Quy tắc

Bạn có thể giả sử rằng đầu vào chứa ít nhất một chữ số hoặc chữ in hoa.

Tiêu chuẩn quy tắc áp dụng.



@MartinEnder Có, Liên quan rất chặt chẽ, nhưng không trùng lặp.

1
@MatthewRoh Mục đích của các liên kết là để các thách thức hiển thị trong thanh bên, nó không phải là một phiếu bầu. Điều đó nói rằng, cá nhân tôi nghĩ rằng việc loại bỏ các ký tự không mong muốn và cũng in ^không thêm nhiều so với thử thách thứ hai mà tôi đã liên kết, nhưng tôi sẽ không ném búa vào đó mà để cho cộng đồng quyết định xem họ có coi đó là lừa bịp hay không không phải.
Martin Ender

4
Nếu có 99 Bottles Of Beer, nó sẽ là 99BOB.

1
@MatthewRoh nó vẫn còn lỗi, hãy để tôi xem liệu tôi có thể nhận được câu trả lời bf không
Rohan Jhunjhunwala

Câu trả lời:


23

Vim, 42 nét

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

Thay thế <DOWN>bằng , <LEFT>với , <ESC>bằng esc<C-V>bằng CTRL+ V.

Đây là hình ảnh động của tập lệnh này đang chạy (phiên bản cũ sử dụng Vthay vì a v):

Hoạt hình

Giải thích về kịch bản:

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

chữ thường V, không phải chữ hoa V

Thêm một nhân vật nữa, nhưng tránh các nhân vật trốn thoát đặc biệt: r | y uP ​​$ pYPVr-r + $. YjppVr $ hrV
Bryce Wagner

Bạn có thể thay thế i+↓←|␛␖ky$pbằng A+↓|␛␖ky0Pđể lưu một byte.
Lynn

Ngoài ra, thay thế tám nét đầu tiên trong cách tiếp cận của Bryce bằngI|<END>|␛
Lynn

Tôi tự hỏi nếu điều này có nhiều upvote vì hình ảnh mát mẻ.
Joe

10

V 34 byte

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

Lưu ý rằng điều này hoạt động trong phiên bản cũ hơn, nhưng không hoạt động trong phiên bản hiện tại khi thử trực tuyến. Tôi đã thay đổi Äthành YPtương đương về chức năng.

Hãy thử trực tuyến!

Giải trình:

Ó[^A-Z0-9]

Xóa mọi thứ trừ chữ số và ký tự viết hoa.

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

Bây giờ, bộ đệm trông như thế này:

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

Và con trỏ của chúng tôi ở cột đầu tiên của dòng cuối cùng.

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

Phiên bản không cạnh tranh: (31 byte)


Tôi chỉ nhận thấy rằng đầu vào Programming Puzzles & Code Golftạo ra chuỗi không chính xác PP&CGtrong đầu ra. Các &cần được loại bỏ
Luis Mendo

@LuisMendo Aww, chết tiệt! Cảm ơn đã chỉ ra điều đó, tôi sẽ sửa nó vào hôm nay.
DJMcMayhem

@DrGreenEggsandIronMan Vì vậy, bạn đã sửa nó, phải không? [khi nào? sẽ? bạn? cuối cùng? sửa chữa? nó?]
Erik the Outgolfer

Tôi không nhận được bất kỳ đầu ra nào trên TIO?
Hạ cấp

@Downgoat V vừa mới có một bản cập nhật lớn, và thật không may, nó đã làm hỏng một số thứ tôi đang xem xét, nhưng tôi không chắc sẽ mất bao lâu để sửa.
DJMcMayhem

7

Mã máy 16 bit x86, 72 byte

Trong hex:

565789F731C9FCAC84C074143C5A77F73C4173083C3977EF3C3072EBAA41EBE75F5EE81500B07CAA51F3A4AB59E80A00B020F3AAB076AA91AAC351B02BAAB02DF3AAB82B10AB59C3

Tham số: SI= chuỗi đầu vào, DI- bộ đệm đầu ra.

Xuất ra một chuỗi kết thúc NULL với các dòng được phân tách bằng dòng mới. Sử dụng chuỗi đầu vào như một bộ đệm tạm thời.

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 .. Tôi đã không thực hiện mã lắp ráp trong một thời gian.

3
Tôi cũng vậy. Bắt đầu lại khoảng một tuần trước chỉ để chơi gôn
meden

3c 41 cmp al,a' không nên nó được 3c 41 cmp al,'a' ?
rav_kr

@rav_kr, chắc chắn, cảm ơn vì đã chú ý. Bỏ lỡ một trích dẫn trong khi thay thế mã hex bằng các ký tự để dễ đọc.
meden

4

Võng mạc , 43 byte

[^A-Z\d]

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

Hãy thử trực tuyến!

Đây là thử thách hoàn hảo để thể hiện Retina, ngôn ngữ chơi gôn của Martin Ender.

Giải pháp này được chia thành hai bước (cái mà chúng ta gọi là giai đoạn), cả hai giai đoạn là giai đoạn thay thế.

Giai đoạn đầu tiên:

[^ AZ \ d]

Điều này khớp với các chuỗi trùng khớp [^A-Z\d], đó là các ký tự không phải chữ hoa và không phải chữ số, và sau đó thay thế chúng bằng không có nghĩa là xóa chúng.

Giai đoạn thứ hai:

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

Các .+phù hợp với toàn bộ kết quả, và sau đó thay thế nó với dòng thứ hai.

Trong dòng thứ hai:

  • $& đề cập đến toàn bộ trận đấu
  • $.& đề cập đến độ dài của toàn bộ trận đấu
  • $*nghĩa là lấy số nguyên trước đó, lặp lại ký tự tiếp theo nhiều lần. Ở đây $.&$*-có nghĩa là lặp lại -tuy nhiên trận đấu kéo dài.
  • đề cập đến một dòng mới.

Thật tuyệt, tôi đã thử điều này sớm hơn, nhưng kết thúc với 54 byte. Một sự thay thế cho giai đoạn đầu tiên là T`dLp`dL_không may, nó có cùng độ dài.
Martin Ender

@MartinEnder 54 byte của bạn là gì?
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";}

nhân số ký tự là khủng khiếp trong C #. đề nghị đánh giá cao

cảm ơn rất nhiều về aloisdg cho -18 byte


Bạn có thể thay thế | |bằng|
aloisdg nói Phục hồi

Bạn có thể sử dụng phép nội suy chuỗireturn$"+{x}+\n|{s}|\n+{x}+\n{new string(' ',m+1)}v";}
aloisdg nói Phục hồi lại

1
Đó là một phương pháp ngọt ngào!
downrep_nation

Bạn có thể thay thế string.Join("", bằngstring.Concat(
aloisdg nói Phục hồi

1
Bạn có thể xóa khoảng trống sau khireturn
aloisdg nói Phục hồi Monica

4

VBA Excel, 375 359 358 byte:

Nó hoạt động, tôi từ bỏ việc cố gắng làm cho nó ngắn hơn ...

Chỉnh sửa: Đã chuyển sang câu lệnh case từ câu lệnh if, -16 byte

Chỉnh sửa2: Loại bỏ u và thay thế bằng 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
Mặc dù nó tốt, xem xét rằng VBA đôi khi là rác rưởi.

Tôi chỉ làm những điều này cho thử thách, tôi biết tôi không thể cạnh tranh với VBA. Thường kết thúc siêu bối rối ở cuối sau khi thay đổi tất cả các biến từ tên thành chữ cái duy nhất.
tjb1

Vâng ikr Thật vậy

Bạn có thể loại bỏ khoảng trắng xung quanh các toán tử?
Morgan Thrapp

3
Cười vào "Đã thoát khỏi u"
Cốc Cốc

4

Lua, 145 99 byte

Không có gì nhiều để nói, thao tác các chuỗi luôn dài dòng trong lua :). Đưa ra một đối số dòng lệnh và đầu ra thông qua STDOUT

Cảm ơn @LeakyNun đã tiết kiệm cho tôi 45 Byte!

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

100 byte được đề xuất bởi @LeakyNun

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

TUỔI 145 byte

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

Bị đánh cắp

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, bạn có nghĩa là đầu ra thông qua STDOUT? Nhưng tôi không bận tâm vì NGÀY NAY OPPOSITE !!!

1
@MatthewRoh Ý tôi là xuất ra STDIN của thiết bị đầu cuối của bạn! (đã sửa ... xấu hổ ....)
Katenkyo

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

@LeakyNun sử dụng mẫu %uchúng ta thu được thêm một số byte. Dù sao, cảm ơn :) (sẽ cập nhật thông tin sau)
Katenkyo

3

2sable , 36 34 33 32 31 byte

Trình bày 2sable :). Mặc dù nó có nhiều điểm tương đồng với 05AB1E, nhưng cái này thực sự tự động tham gia vào ngăn xếp thay vì xuất ra đỉnh của ngăn xếp. Mã số:

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

Sử dụng mã hóa CP-1252 .


2
_ಠ Không còn chơi golf hay chuyển đổi ngôn ngữ! Để nó ở nơi hiện tại! : P
DJMcMayhem

@DrGreenEggsandIronMan Hahaha, vẫn còn 3 byte đau đớn khác với câu trả lời của bạn: P.
Ad Nam

1
Haha, tôi đã ăn mừng khi thấy nó dài hơn 7 byte, và rồi từ từ nhìn khoảng cách biến mất, từng cái một ...
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 byte

Câu trả lời này chủ yếu dựa trên câu trả lời của Zylviij và các bình luận của nimi . Tôi đã có thêm ý kiến ​​cho câu trả lời đó, nhưng than ôi, tôi không có đủ đại diện.

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

Thủ thuật bổ sung được sử dụng:

  • Thay thế intersectbằng cách thực hiện của nó để nhập khẩu có thể được bỏ. (Lưu ý bên lề: việc triển khai gần như nguyên văn thư viện, tôi không thể tìm thấy phiên bản ngắn hơn.)
  • Đã chuyển các chức năng của trình trợ giúp vào where mệnh đề để các hàm có thể sử dụng ntham số bên trong.
  • Sau đó, (#) đủ ngắn để được nội tuyến.
  • Đặt mọi thứ trên một dòng để giới hạn khoảng trắng thêm.

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

Một chương trình đầy đủ. Về cơ bản sử dụng một biểu thức chính quy để khớp tất cả các lần xuất hiện của chữ cái và số, sau đó tạo hộp có kích thước chính xác dựa trên độ dài của danh sách các trận đấu và cuối cùng đặt danh sách các kết quả khớp "bên trong" nó.

Dùng thử trực tuyến! (Ý)


5
Nó thiếu đáy 'v'.
Công ty Carles

@CarlesCompany Nó đã được sửa, với chi phí thêm 19 byte.
R. Kap

2

Python 3, 121 124 byte

Sửa lỗi ngu ngốc

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

không nhập thư viện như câu trả lời python khác.



@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Đã sửa. Cảm ơn bạn
Lemon phá hủy

Trên thực tế, liên kết đã đánh gôn một số mã, và đó là lý do tại sao tôi đặt nó ở đó.
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";}

Hãy thử trực tuyến.

Giải trình:

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

Bạn có thể sử dụng ascii trong Python không? Nếu có, bạn có thể sử dụng 47<x<58|64<x<91:)
aloisdg nói Phục hồi

@aloitorg Không giống như C / C ++, Python không sử dụng charloại tích phân - tất cả các ký tự trong chuỗi Python đều là chuỗi và không thể so sánh trực tiếp với số nguyên. Nó sẽ cần phải được 47<ord(x)<58or 64<ord(x)<91.
Mego

[x for x in n if x.isupper()^x.isdigit()]ngắn hơn một byte so vớifilter(lambda x:x.isupper()^x.isdigit(),n)
Leaky Nun

@LeakyNun: bộ lọc sẽ trả về một chuỗi, nhưng việc hiểu danh sách sẽ trả về một danh sách, điều này sẽ không thể sử dụng được trong biểu thức giá trị trả về.
Nikita Borisov

Tại sao lại là XOR? Bạn không thể sử dụng HOẶC thay vào đó? XOR phức tạp hơn và do đó AFAIK chậm hơn. x.isupper()^x.isdigit()->x.isupper()|x.isdigit()
Erik the Outgolfer

1

Jolf, 35 byte

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

Tôi cần một cách ngắn hơn để loại bỏ tất cả trừ mũ & số ...


1

C, 171 163

Chức năng f()sửa đổi đầu vào của nó và in ra kết quả.

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

Chương trình kiểm tra

Yêu cầu một tham số, chuỗi để sử dụng trong 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;
}

Tại sao bạn sao chép phần tử argv?
mame98

Bởi vì chức năng sửa đổi đầu vào của nó. Tôi không chắc chắn sửa đổi các tham số tại chỗ được xác định hành vi.
owacoder

không bao giờ nghĩ về điều này ... theo câu trả lời SO này, nó sẽ ổn thôi: 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"

Sử dụng

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

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

1
Bạn đang sử dụng replicate, lengthfđộc quyền trong sự kết hợp này, vì vậy bạn có thể ghép lại thành một chức năng: r=replicate.length.fvà gọi nó như thế r n '-'. Bạn có thể lưu nhiều byte hơn bằng cách sử dụng toán tử infix: (#)=replicate.length.fn#'-'/ n#' '. Ngoài ra, replicate.length>>(với một chuỗi singleton thay vì char), vì vậy, đó là: (#)=(>>).fn#"-"/ n#" ", cả hai đều không có ( )xung quanh nó.
nimi

1
... cũng: không cần ( )xung quanh t nf n. "|"++'|':. Tất cả trong tất cả : 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"

Cách sử dụng: Chạy lệnh trên, nhập tên trang web, nhấn enter và sau đó Ctrl+ D(gửi 'cuối tệp').



1

R, 108 byte

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

Giải trình

Đi từ trong ra ngoài (vì ai không thích gán biến toàn cục từ bên trong regex), giả sử slà chuỗi đầu vào của chúng tôi:

y<-gsub("[^A-Z0-9]","",s) giữ thủ đô và số, gán giá trị kết quả cho y.

gsub(".","-",y<-...) thay thế tất cả các ký tự bằng dấu gạch nối ở trên.

x<-gsub("(.*)","+\\1+\n",gsub(...))chọn một +ở hai đầu của hàng dấu gạch nối và dòng mới và chúng tôi lưu trữ dưới dạng x.

Phần còn lại khá đơn giản, xuất ra theo thứ tự phù hợp và sử dụng thực tế là số lượng khoảng trắng trước vsẽ giống với độ dài của y.


1

Brachylog , 61 byte

Liên kết với kho lưu trữ vào ngày 7 tháng 7 để đảm bảo khả năng tương thích ngược.

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

Không cạnh tranh, 53 byte

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

Hãy thử trực tuyến!


1

APL, 52 49 byte

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

(giảm xuống 49 nhờ bình luận).


{x⍪2⌽'v'↑⍨≢⍉x←⍉z⍪⍨(z←'+|+')⍪'-','-',⍨⍪⍵/⍨⍵∊⎕D,⎕A}(Bạn không bao giờ ngoặc đơn cho một trong các đối số trong hàm đối số đảo ngược khi chơi gôn. Luôn luôn có thể theo thứ tự bình thường để lưu một byte.)
Zacharý

1

Perl, 57 byte

Mã 56 byte + 1 cho -p.

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

Ban đầu tôi đã cố gắng thực hiện điều này chỉ bằng cách sử dụng biểu thức chính quy, nhưng nó lớn hơn nhiều so với tôi mong đợi, vì vậy tôi đã sử dụng một số lần lặp lại chuỗi thay thế.

Hãy thử trực tuyến!


1

MATL , 34 byte

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

Hãy thử trực tuyến!

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

1

J , 52 byte

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

Hãy thử trực tuyến!

   [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 byte ( -pcờ 78 + )

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

0

Lisp thông thường (Lispworks), 159 byte byte

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

vô dụng:

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

Sử dụng:

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

CL-USER 3 > (f "pcg")
+---+
|pcg|
+---+
   v
NIL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.