스택 교환 Favicon 생성


25

PPCG 로고를 인식합니까? 아스키 아트를 할 때 이렇게 보입니다.

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

이제이 코드 골프에서는 PPCG 로고와 유사한 다른 사이트의 로고를 만드는 코드를 작성합니다.

해야 할 일

"Shortened"문자열은 입력 문자열에 대문자와 숫자가 모두 포함 된 문자열입니다 ( PPCG입력 문자열이 다음과 같을 때).Programming Puzzles & Code Golf )

상자" (

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

) 단축 문자열에 완벽하게 맞아야합니다.

또한 v부품은 정확히 1 아래, 1은 왼쪽 아래+ .

그런 다음 줄이 짧아 진 상자를 출력하십시오.

Stack Overflow:

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

Area 51:

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

규칙

입력에 하나 이상의 숫자 또는 대문자가 포함되어 있다고 가정 할 수 있습니다.

표준 규칙이 적용됩니다.



@MartinEnder 예, 매우 밀접한 관련이 있지만 중복되지는 않습니다.

1
@MatthewRoh 링크의 목적은 사이드 바에 도전 과제가 나타나도록하는 것입니다. 즉, 개인적으로 원치 않는 문자를 제거하고 인쇄하는 ^것이 내가 연결 한 두 번째 도전과 비교할 때 많이 추가되지는 않지만 그에 대해 망치를 던지지는 않지만 Communitz가 문자를 속임수로 간주할지 여부를 결정하게합니다. 아니.
Martin Ender

4
만약 그렇다면 99 Bottles Of Beer, 그렇습니다 99BOB.

1
@MatthewRoh 여전히 버그, 내가 결국 BF 답변을 얻을 수 있는지 보자
Rohan Jhunjhunwala

답변:


23

Vim, 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대신 을 사용함 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.

대문자 V가 아닌 소문자 V

한 문자 이상이지만 특수 이스케이프 문자를 피하십시오. r | y uP ​​$ pYPVr-r + $. YjppVr $ hrV
Bryce Wagner

당신은 대체 할 수 i+↓←|␛␖ky$pA+↓|␛␖ky0P바이트를 저장합니다.
Lynn

또는 브라이스의 접근 방식에서 처음 8 개의 스트로크를I|<END>|␛
Lynn

멋진 그림으로 인해 이것이 가장 많은 찬사를 받았는지 궁금합니다.
Joe

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 그래서 당신은 그것을 고쳤습니다. [언제? 의지? 당신? 마침내? 고치다?
Outgolfer Erik

TIO에서 출력이 나오지 않습니까?
Downgoat

@Downgoat V는 최근에 엄청난 업데이트를 받았고 불행히도 내가보고있는 것들을 망 쳤지 만 수정하는 데 얼마나 오래 걸릴지 확신하지 못합니다.
DJMcMayhem

7

16 비트 x86 머신 코드, 72 바이트

16 진수로 :

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
나도. 약 1 주일 전에 골프 전용으로 다시 시작
2

3c 41 cmp al,a' 해서는 안 3c 41 cmp al,'a' 됩니까?
rav_kr

@rav_kr, 감사합니다. 감사합니다. 16 진수 코드를 가독성을 위해 문자로 바꾸는 동안 따옴표가 누락되었습니다.
meden

4

레티 나 , 43 바이트

[^A-Z\d]

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

온라인으로 사용해보십시오!

이것은 Martin Ender의 골프 언어 인 Retina를 보여주기위한 완벽한 도전입니다.

이 솔루션은 두 단계 (우리가 단계라고 함)로 나뉘며 두 단계는 모두 교체 단계입니다.

첫 단계 :

[^ AZ \ d]

일치하는 하위 문자열과 일치합니다. [^A-Z\d]대문자가 아닌 문자가 아닌 한 다음 아무것도 대체하지 않고 대체합니다.

두 번째 단계 :

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

그만큼 .+ 전체 결과와 일치하고 두 번째 줄로 대체합니다.

두 번째 줄에서 :

  • $& 전체 경기를 말합니다
  • $.& 전체 경기의 길이를 말합니다
  • $*즉, 이전 정수를 취하고 다음 문자를 여러 번 반복하십시오. 여기서 일치하는 시간이 길지만 $.&$*-반복한다는 의미 -입니다.
  • 줄 바꾸기를 나타냅니다.

니스, 나는 이것을 일찍 시도했지만 54 바이트로 끝났습니다. 첫 번째 단계의 대안은 T`dLp`dL_불행히도 길이는 같습니다.
마틴 엔더

@MartinEnder 54 바이트는 무엇입니까?
Leaky Nun


4

C #, 183177165 바이트

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 #에서 문자를 곱하면 끔찍합니다. 감사의 제안

-18 바이트를 aloisdg 해주셔서 감사합니다.


대체 할 수있는 당신 | |과 함께|
aloisdg는 분석 재개 모니카 말한다

문자열 보간을 사용할 수 있습니다return$"+{x}+\n|{s}|\n+{x}+\n{new string(' ',m+1)}v";}
aloisdg는 Reinstate Monica

1
그 달콤한 방법입니다!
downrep_nation

대체 할 수있는 당신 string.Join("", 과 함께string.Concat(
aloisdg는 분석 재개 모니카 말한다


4

엑셀 VBA, 375 359 358 바이트 :

그것은 효과가 있습니다. 나는 그것을 더 짧게하려고 노력하지 않습니다.

편집 : if 문에서 case 문으로 전환, -16 바이트

편집 2 : 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 So true

연산자 주위의 공백을 제거 할 수 있습니까?
Morgan Thrapp

3
"U의 제거"에 웃음
CocoaBean

4

루아, 145 99 바이트

말할 것도없이, 문자열 조작은 루아에서 항상 장황합니다. :). 명령 행 인수를 가져와 STDOUT을 통해 출력

저에게 45 바이트를 절약 해 준 @LeakyNun에게 감사드립니다!

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

@LeakyNun이 제안한 100 바이트

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을 통한 출력을 의미합니까? 그러나 ITS OPPOSITE DAY 때문에 마음에 들지 않습니다 !!!

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을 사용하면 더 많은 바이트를 얻습니다. 어쨌든, 감사합니다 :) (나중에 ungolfed를 업데이트합니다)
Katenkyo

3

2 세블 , 36 34 33 32 31 바이트

2sable 제시 :). 05AB1E와 공통점이 많지만 실제로는 스택의 맨 위를 출력하지 않고 스택에 자동 조인합니다. 암호:

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

CP-1252 인코딩을 사용합니다 .


2
ಠ_ಠ 더 이상 골프 또는 언어 스위치가 없습니다! 지금있는 그대로 두십시오! : P
DJMcMayhem

@DrGreenEggsandIronMan Hahaha, 여전히 답에서 3 고통스러운 바이트입니다.
Adnan

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 과로 의견 nimi . 나는 그 대답에 더 많은 의견을 추가했을 것이지만, 아쉽게도 충분한 담당자가 없습니다.

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 93112 바이트 :

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 Company

@CarlesCompany 19 바이트의 추가 비용으로 수정되었습니다.
R. Kap

2

파이썬 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")

다른 파이썬 답변과 같은 라이브러리를 가져 오지 않습니다.



@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 고정. 감사합니다
Destructible Lemon

실제로, 링크는 일부 코드를 골프화하고 있었기 때문에 거기에 넣었습니다.
Outgolfer 에릭

2

자바 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

파이썬 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를 사용할 수 있습니까? 그렇다면 다음을 사용할 수 있습니다 47<x<58|64<x<91:)
aloisdg는 Reinstate Monica

@aloisdg C / C ++와 달리 Python은 정수 char유형을 사용하지 않습니다 . Python 문자열의 모든 문자는 문자열이므로 정수와 직접 비교할 수 없습니다. 이어야 47<ord(x)<58or 64<ord(x)<91합니다.
Mego

[x for x in n if x.isupper()^x.isdigit()]1 바이트 더 짧은filter(lambda x:x.isupper()^x.isdigit(),n)
Leaky Nun

@LeakyNun : 필터는 문자열을 반환하지만 목록 이해는 목록을 반환하며 반환 값 식에는 사용할 수 없습니다.
Nikita Borisov

왜 XOR인가? 대신 OR을 사용할 수 없습니까? XOR은 더 복잡하므로 AFAIK가 느립니다. x.isupper()^x.isdigit()->x.isupper()|x.isdigit()
Outgolfer Erik

1

줄프, 35 바이트

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

대문자와 숫자를 제외한 모든 것을 제거하는 더 짧은 방법이 필요합니다 ...


1

C, 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.fn#'-'/ n#' '. 또한 replicate.length입니다 >>그것은, 그래서 (싱글 문자열 대신 문자로) (#)=(>>).fn#"-"/ n#" "모두없이 ( )주위.
nimi

1
... 또한 다음에 대한 필요 ( )주위 t nf n. "|"++입니다 '|':. 전체적으로 : o n=t n++'|':f n++"|\n"++t n++n#" "++"V".
nimi

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

펄, 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

자바 스크립트 (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

루비, 81 바이트 (78 + -p플래그)

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

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.