ASCII-Art 텍스트 읽기


34

Golf me에서 영감을받은 ASCII 알파벳 은이 도전이 (거의) 직접적인 역수입니다.


태스크:

ASCII 아트 텍스트 문자열을 사용하여 텍스트 내용을 일반 ASCII 텍스트로 출력하십시오.


입력:

ASCII 아트 텍스트의 문자열

입력에는 ASCII 문자 #, 공백 및 4-5 개의 줄 바꿈 만 포함됩니다 (후행 줄 바꿈은 선택 사항 임). 모든 줄의 길이는 같습니다. 즉, 마지막 ASCII 문자는 후행 공백으로 채워집니다. #원하는 경우 입력 대신 다른 인쇄 가능한 ASCII 문자를 사용할 수 있습니다 .

입력은 ASCII- 아트 문자 A-Z와 ASCII- 아트 공백 (공백의 5x5 블록)을 포함합니다. 문장 부호가 없습니다. ASCII 아트 텍스트는 한 줄만 있습니다 (실제 5 줄). 후행 또는 선행 ASCII 아트 공간도없고 인접한 ASCII 아트 공간도 없습니다.

글자 크기는 5x5 자입니다. 각 문자 사이에는 1x5 공백이 있습니다. 단어 사이의 공백은 5x5 블록의 공백입니다 (각면에 + 1x5 공백, 다른 문자이므로). 끝 부분이나 시작 부분에는 1x5 공간이 없으며 ASCII 문자 사이에만 있습니다.


산출:

텍스트를 ASCII 문자 A-Z+ 공백 으로 포함하는 문자열 솔루션이 더 쉬운 경우 출력도 소문자로 표시 될 수 있습니다. 대소 문자 혼합도 가능합니다.


ASCII 아트 문자 :

 ###  ####   ###  ####  ##### #####  ###  #   # ##### ##### #   # #     #   #
#   # #   # #   # #   # #     #     #     #   #   #     #   #  #  #     ## ##
##### ####  #     #   # ####  ####  #  ## #####   #     #   ###   #     # # #
#   # #   # #   # #   # #     #     #   # #   #   #   # #   #  #  #     #   #
#   # ####   ###  ####  ##### #      ###  #   # ##### ###   #   # ##### #   #

#   #  ###  ####   ###  ####   ###  ##### #   # #   # #   # #   # #   # #####
##  # #   # #   # #   # #   # #       #   #   # #   # #   #  # #   # #     # 
# # # #   # ####  #   # ####   ###    #   #   #  # #  # # #   #     #     #  
#  ## #   # #     #  #  #   #     #   #   #   #  # #  ## ##  # #    #    #   
#   #  ###  #      ## # #   #  ###    #    ###    #   #   # #   #   #   #####

우주:

     |
     | A 5x5 square of spaces.
     | (Padded with |s to make it appear in this post.)
     |
     |

예 :

입력:

#   # ##### #     #      ###        #   #  ###  ####  #     #### 
#   # #     #     #     #   #       #   # #   # #   # #     #   #
##### ####  #     #     #   #       # # # #   # ####  #     #   #
#   # #     #     #     #   #       ## ## #   # #   # #     #   #
#   # ##### ##### #####  ###        #   #  ###  #   # ##### #### 

산출: HELLO WORLD

입력:

 ###   ###   ###  ##### #####
#   # #     #   #   #     #  
#####  ###  #       #     #  
#   #     # #   #   #     #  
#   #  ###   ###  ##### #####

산출: ASCII

입력:

####  ####   ###   ### 
#   # #   # #   # #    
####  ####  #     #  ##
#     #     #   # #   #
#     #      ###   ### 

산출: PPCG


이것은 이므로 바이트 단위의 최단 답변이 이깁니다.


10
나는 이것에 대한 해결책이 일종의 해시 함수를 포함 할 수 있다고 생각하고있다 .
Neil

6
입력을 이미지로 변환하여 이미지를 처리하고 이미지 처리를 사용 하여이 문제를 해결하면 나에게 현상금이 발생합니다! (솔루션도 물론 골프를 쳐야합니다)
Stewie Griffin

3
누군가에게 도움이되는 경우 : 관련 정보를 잃지 않고 편지의 두 번째 행, 네 번째 행 또는 중간 열을 삭제할 수 있습니다.
Martin Ender

1
@JungHwanMin 흠. 나는 사람이 읽을 수있는 ASCII 아트 텍스트 가 아니기 때문에 그렇게 생각하지 않습니다 .
Steadybox

1
@JonathanAllan 그것도 괜찮을 것 같아요.
Steadybox

답변:


13

젤리 ,  50 44  42 바이트

ỴZ;6/UOḂḅ7‘ị“¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»

온라인으로 사용해보십시오! (인수에는 선행 줄 바꿈이 필요하지 않지만 선행 및 후행 줄 바꿈은 효과가 없으므로 여러 줄 문자열을 사람이 읽을 수 있도록 만들었습니다.)

결과는 대소 문자가 혼합됩니다 ( 주석 에서 OP가 허용 한대로 ).

어떻게?

새로운 줄로 나누고, 조옮김하고 (최대) 6의 하위 슬라이스를 함께 결합하여 문자 표현을 가져오고 각 문자를 뒤집습니다 (길이 25의 마지막 문자에 대한 후자의 기본 변환을 길이 30의 다른 모든 문자와 동일). 그런 매핑 '#'' '하나의 제로 점을 각각 이용 '#'하면서 홀수 서수를 갖는 ' '짝수 하나를 가진다. 기본 7 자리 인 것처럼 각각 읽습니다. 효과적으로 모듈로 81을 각각 27 개의 가능한 경우 27 개의 고유 한 값으로 생성하고 올바른 인덱스에서 올바른 문자를 사용하여 "마법 문자열"로 인덱스합니다 (모듈로 색인은 길이가 81 인 매직 문자열을 사용하여 저장함) 2 바이트).

다음은 일치시켜야 할 대소 문자를 구분하지 않는 정규 표현식 패턴과 함께 생성 한 "매직 문자열"입니다 (길이 81로 만들기 위해 "ed"를 추가했습니다).

 ' affectedly Azerbaijan rewaxed naganas jiujitsudankly pase UVB freqHaarlemcoacted'
'^ ..f...e.....z......a..r.w.x...n.g......iuj....d..kly.p.s...vb....qh.....m.o.ct.*'

따라서 압축되어 Jelly 사전의 단어로 11 개의 하위 슬라이스를 찾습니다 (대부분은 선행 공백 기본값을 사용합니다).

' affectedly Azerbaijan rewaxed naganas jiujitsudankly pase UVB freqHaarlemcoacted'
 ^          ^          ^       ^       ^        ^     ^    ^   ^    ^      ^

젤리 압축 문자열이 생성됩니다. “¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»

나머지 코드는 다음과 같이 작동합니다.

ỴZ;6/UOḂḅ7‘ị“...» - Main link: multi-line string, s   e.g. HI as the #s and spaces
Ỵ                 - split on new lines                     ["#   # #####","#   #   #  ","#####   #  ","#   #   #  ","#   # #####"] (each is actually a list)
 Z                - transpose                              ["#####","  #  ","  #  ","  #  ","#####","     ","#   #","#   #","#####","#   #","#   #"] (each is actually a list)
   6/             - six-wise reduce by
  ;               -     concatenation                      ["#####  #    #    #  #####     ","#   ##   #######   ##   #"] (each is actually a list)
     U            - upend (reverse each)                   ["     #####  #    #    #  #####","#   ##   #######   ##   #"] (each is actually a list)
                  -     note: all except the last will be length 30 and like "     ...", which will become [0,0,0,0,0,...], while the last will be length 25 without those five leading zeros.
      O           - cast to ordinals ('#' -> 35, ' '-> 32) [[32,32,...],[35,32,...]]
       Ḃ          - modulo 2 ('#' -> 1, ' ' -> 0)          [000001111100100001000010011111, 1000110001111111000110001] (each is actually a list)
        ḅ7        - convert from base 7 (vectorises)       [223498370543967315553, 191672428080864454753] (these are now integers)
          ‘       - increment                              [223498370543967315554, 191672428080864454754]
                  -  (modulo 81 these would be [68, 41])
           ị      - index into (modulo & 1-indexed):                        
            “...» -     the "magic string" described above ' affectedly Azerbaijan rewaxed naganas jiujitsudankly pase UVB freqHaarlemcoacted'
                                                           "Hi"                                   41^                        68^

14

파이썬 (2) , 405 (335) 234 182 171 바이트

lambda s,j=''.join:j(' QPVXU_O__FBLK_JMD_CSYZWIENH_AG___TR'[int(j(`ord(y)%2`for y in j(s.split('\n')[x][i:i+5]for x in range(5))),2)%13836%37]for i in range(0,len(s)/5,6))

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


마지막으로 JS보다 짧다


: 영리한 계수의 사용,하지만 난하지 도움이 생각 할 수있는 방법이있을 수 [0,2,3,7,...]' UBGOTA...그것을 분할 및 매핑의 일종을 사용합니다. 0:' ',2:'U',3:'V'...너무 길어 보입니다 :'',. 너무 많습니다 . (나는 당신이 원래 게시물에서 비슷한 것을 가지고 있지만 매우 긴 숫자를 알고 있음을 알고 있습니다.
Stewie Griffin

1
@StewieGriffin 더 좋아졌습니다
ovs

11

자바 스크립트 (ES6) 204 186 184 182 바이트

Neil 덕분에 18 바이트
절약 ETH 프로덕션 덕분에
2 바이트 절약 YairRand 덕분에 2 바이트 절약

고장:

  • 42 바이트 조회 테이블
  • 162 144 142 코드의 140 바이트
s=>(a=s.split`
`)[0].replace(/.{6}/g,(_,n)=>' H_JM__WDCSORLU___QKG_P_AFT_N_EI_XBV____YZ'[[0,1,2,4].reduce((p,r,i)=>p+='0b'+a[r].substr(n,5).replace(/./g,c=>1^1-c)<<i*6,0)%178%69%43])

데모


1
당신이 사용하는 바이트의 전체 무리를 절약 할 수 있습니다 (a=s.split`\n`)[0].replace(/......?/g,substr(n,5)하고 않고 join물론.
Neil

난 당신이 가진 바이트를 저장할 수 있다고 생각 c=>0|c>' '과, 또 다른p+='0b'+...
ETHproductions

도전 과제의 댓글 섹션에서 @Steadybox가 언급했듯이 \n입력을받는 것은 유효하지 않습니다. 그러나 split메서드 에서 수행하는 것처럼 실제 리터럴과 함께 템플릿 리터럴을 입력으로 사용할 수 있다고 생각합니다 .
Arjun

1
@ DobbyTheFree-Elf 실제로 템플릿 리터럴을 사용할 수 있습니다. 그러나 함수에 전달되기 전에 입력 데이터의 형식을 지정 하는 방식에 제약 조건을 추가하는 것은 실제 입력 내용 이 유효한 한 IMHO의 주제가 아닙니다 .
Arnauld

1
@ DobbyTheFree-Elf 나는 나의 의견이 약간 모호하여, 내가 대답하고있는 질문을 약간 오해했을지도 모른다. 사용하여 \n함수에 전달되는 실제 문자열 만 개행 문자, 둘 다 포함되어 있기 때문에 코드에서 호출 사이트에서 문자열 리터럴에서 것은 괜찮 \` and N을 . Passing a string that contains \ '와 n별도의 인접 문자는 괜찮을 않을 것 같은.
Steadybox

9

Bash + ImageMagick + Tesseract , 161 바이트

@ stewie-griffin이 제안한 접근법을 시도하고 bash + ImageMagick (문자열을 이미지로 변환)과 Tesseract (OCR을 수행)로갔습니다. 다음은 'HELLO WORLD'테스트 사례에서 작동하지만 다른 코드에서는 실패하는 코드입니다. 매개 변수 (글꼴, 글꼴 크기, 커닝, 간격)를 조정하면 도움이 될 수 있습니다.

convert -font Courier-Bold -pointsize 8 -interline-spacing -3 -kerning -3 label:"$(</dev/stdin)" -bordercolor White -border 5%x20% png:- | tesseract stdin stdout

명령을 실행 한 후 ASCII 아트를 명령 행에 복사하여 붙여 넣기 만하면됩니다. ^ d를 눌러 입력을 완료하십시오.

테스트 케이스의 전류 출력 :

  • 안녕하세요 세계 : 안녕하세요 세계
  • ASCII : H5511
  • PPCG : PPOG

6

스칼라, 184181 바이트

hashCode:)을 기반으로 한 매직 스트링 + 모듈러스 솔루션

(a:String)=>a.split("\n").map(_.grouped(6)map(_.take(5))toArray).transpose.map(l=>"Q__WLUY_XOI_ZN_GEFR_P__JKBMV_S__ __C__D__H_T__A"(Math.abs(l.mkString.hashCode)%106%79%47))mkString

온라인으로 사용해보십시오 (Scalafiddle)

더 읽기 쉬운 :

(a:String) => a.split("\n")
                .map(_.grouped(6)map(_.take(5))toArray)
                .transpose
                .map ( l => 
                    "Q__WLUY_XOI_ZN_GEFR_P__JKBMV_S__ __C__D__H_T__A"(
                        Math.abs(l.mkString.hashCode)%106%79%47
                    )
                )mkString

설명

  • 초기 문자열 (ASCII 아트)은 5 행 (ASCII 문자 높이)으로 분할됩니다.
  • 각 줄은 6 자 요소 (ASCII 문자 너비 + 1 공백)로 분할됩니다.
  • 처음 5 자만 유지됩니다 (끝의 공백은 쓸모가 없습니다)
  • 선이 전치된다 (각각 ASCII 문자를 포함하는, 25 자 (5 × 5)의 순서로 표현하거나 '#'또는 ' ')
  • 각 ASCII 문자 표시 (시퀀스)는 문자열로 변환되고 해당 문자열에 대해 절대 해시 코드가 계산됩니다 (다음 모듈러스로 인해 절대 필요)
  • 각 ASCII 문자에 % 106 % 79 % 47숫자 ∈를 연결하기 위해 3 개의 연속 계수 ( )가 적용됩니다 [0; 47[(아래 설명 참조).
  • 이 숫자는 매직 스트링의 인덱스로 사용됩니다

마법의 끈을 얻는 방법?

먼저 다음과 같이 모든 문자를 나타 냈습니다.

case class Letter(letter: Char, ascii: Seq[Char])

그런 다음 모든 문자의 ASCII 표현을 포함하는 알파벳을 만들었습니다.

예 :

 ### 
#   #  
#####  
#   #  
#   #

된다

Letter('A', " ### #   #######   ##   #") // 25 characters from top-left to bottom-right

각 문자에 대해 절대 해시 코드가 계산되었습니다 (모든 해시 코드는 고유합니다).

val codes = alphabet.map { case Letter(l, a) => (l, Math.abs(a.mkString.hashCode)) }
// codes: Seq[(Char, Int)] = List(( ,253243360), (A,380997542), (B,1221679148), (C,1573119535), (D,307929190), (E,858088672), (F,857996320), (G,750155628), (H,897290147), (I,1518088099), (J,928547488), (K,1184149391), (L,519601059), (M,741735953), (N,2139154001), (O,1625960980), (P,1307658950), (Q,92382816), (R,1221771494), (S,1689301359), (T,1515228067), (U,1390718627), (V,386730851), (W,733134481), (X,628338619), (Y,23919695), (Z,2081560145))

그런 다음 각 코드를 줄이려고했지만 항상 각 코드가 고유해야한다는 사실을 존중합니다 (코드별로 그룹화 된 목록에는 각 문자에 대해 27 개의 요소가 있어야 함). 그래서 처음 200 모듈러스를 시도했습니다.

val mod = (1 to 200).find(modulo => codes.map { case (a,b) => (a, b % modulo) }.groupBy(_._2).size==27).get

106적용 할 첫 번째 모듈로를 찾았습니다 .

val codes2 = codes.map { case (l, c) => (l, c%mod) }
val codes = codes2
// codes: Seq[(Char, Int)] = List(( ,32), (A,46), (B,104), (C,35), (D,38), (E,16), (F,96), (G,94), (H,41), (I,89), (J,102), (K,71), (L,83), (M,105), (N,13), (O,56), (P,20), (Q,0), (R,18), (S,29), (T,43), (U,5), (V,27), (W,3), (X,87), (Y,53), (Z,91))

가장 작은 모듈로가 될 때까지 이전 단계를 반복했습니다. 나는 발견했다 :

  • 79
  • 47
  • 44
  • 42

참고 : 내가 선택한 마지막 모듈러스 ( 47)는 여기에서 가장 작지 않습니다.

  • 44를 찾았지만 44를 선택한 경우 마술 문자열의 크기는 47 대신 44가 되지만 쓰지 않으면 안됩니다 %106%79%47%44( %106%79%47= 10 자 대신 13 자). 바이트 단위로, 코드는 내가 가진 것과 같은 크기 여야합니다.
  • 42도 있지만 코드는 내가 가진 것보다 1 바이트 더 있어야합니다.

다음으로, 연속적인 계수 ( % 79 % 47)를 last에 적용하여 codes각 문자와 관련된 명확한 코드를 얻었습니다.

codes: Seq[(Char, Int)] = List(( ,32), (A,46), (B,25), (C,35), (D,38), (E,16), (F,17), (G,15), (H,41), (I,10), (J,23), (K,24), (L,4), (M,26), (N,13), (O,9), (P,20), (Q,0), (R,18), (S,29), (T,43), (U,5), (V,27), (W,3), (X,8), (Y,6), (Z,12))

마지막으로, 마법의 문자열을 구성하려면 :

val initialMap = (0 until 47).map(i => (i, '_')).toMap
val codesMap = codes.map(i => (i._2, i._1)).toMap

val magicString = (initialMap ++ codesMap).toSeq.sortBy(_._1).map(_._2).mkString
// magicString: String "Q__WLUY_XOI_ZN_GEFR_P__JKBMV_S__ __C__D__H_T__A"

예 :A 위 의 문자 는 46 ( 380997542 % 106 % 79 % 47) 과 관련이 있으며, 매직 문자열의 46 번째 요소는 A :)

테스트 사례

// assign function to f
val f = (a:String)=>a.split("\n").map(_.grouped(6)map(_.take(5))toArray).transpose.map(l=>"Q__WLUY_XOI_ZN_GEFR_P__JKBMV_S__ __C__D__H_T__A"(Math.abs(l.mkString.hashCode)%106%79%47))mkString

안녕하세요 세계 :

val asciiArt = """|#   # ##### #     #      ###        #   #  ###  ####  #     #### 
                  |#   # #     #     #     #   #       #   # #   # #   # #     #   #
                  |##### ####  #     #     #   #       # # # #   # ####  #     #   #
                  |#   # #     #     #     #   #       ## ## #   # #   # #     #   #
                  |#   # ##### ##### #####  ###        #   #  ###  #   # ##### #### """.stripMargin

f(asciiArt)    // HELLO WORLD

ASCII :

val asciiArt = """| ###   ###   ###  ##### #####
                  |#   # #     #   #   #     #  
                  |#####  ###  #       #     #  
                  |#   #     # #   #   #     #  
                  |#   #  ###   ###  ##### #####""".stripMargin

f(asciiArt)    // ASCII

PPCG :

val asciiArt = """|####  ####   ###   ### 
                  |#   # #   # #   # #    
                  |####  ####  #     #  ##
                  |#     #     #   # #   #
                  |#     #      ###   ### """.stripMargin

f(asciiArt)    // PPCG

편집

  • 제거하여 3 바이트를 저장 .하기 전에 map, toArray그리고mkString

3

PHP, 294 바이트

<?$l=" 00000YE00G0000R000A0Q0000C0BW000K00000000000LT00000J00000000MU0000Z0000DI000000V0000000P00H0000ONF000S00X";preg_match_all("#(.{5})\s#s","$_GET[0] ",$t);for($i=0;$i<$c=count($a=$t[1])/5;$i++)$s.=$l[bindec(strtr($a[$i].$a[$i+$c].$a[$i+2*$c].$a[$i+3*$c].$a[$i+4*$c]," #","01"))%106];echo$s;

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

넓히는

$l=" 00000YE00G0000R000A0Q0000C0BW000K00000000000LT00000J00000000MU0000Z0000DI000000V0000000P00H0000ONF000S00X"; # search string mod 106
preg_match_all("#(.{5})\s#s","$_GET[0] ",$t); # Regex take each group of five chars followed by a whitespace
for($i=0;$i<$c=count($a=$t[1])/5;$i++)
  $s.=$l[bindec(strtr($a[$i].$a[$i+$c].$a[$i+2*$c].$a[$i+3*$c].$a[$i+4*$c]," #","01"))%106]; # join each groups make a binaray make a decimal mod 106  
echo$s; # Output

입력을 이미지 형식으로 변환

@Stevie Griffin 은 이미지에서 이것을 얻기 위해 솔루션을 검색합니다. 나는 그가 사용하고 있는 이미지 형식을 정말로 원하지 않는다고 생각 합니다.

echo'<svg xmlns="http://www.w3.org/2000/svg" width="100%"><switch><foreignObject x="0" y="0" width="100%" height="300"><body xmlns="http://www.w3.org/1999/xhtml"><pre>'.$_GET[0].'</pre></body></foreignObject></switch></svg>';

SVG는 foreignObject에 포함 된 경우 HTML 부분을 포함 할 수 있습니다. 그래서 SVG에 사전 요소를 넣었습니다.

이미지 출력

<svg xmlns="http://www.w3.org/2000/svg" width="100%"><switch><foreignObject x="0" y="0" width="100%" height="300"><body xmlns="http://www.w3.org/1999/xhtml"><pre>#   # ##### #     #      ###        #   #  ###  ####  #     #### 
#   # #     #     #     #   #       #   # #   # #   # #     #   #
##### ####  #     #     #   #       # # # #   # ####  #     #   #
#   # #     #     #     #   #       ## ## #   # #   # #     #   #
#   # ##### ##### #####  ###        #   #  ###  #   # ##### #### </pre></body></foreignObject></switch></svg>

이미지 변경으로부터 해결

SVG는 만 교체 필요 "i.svg"로 SVG를 저장 한 후 기계 판독 정도입니다 $_GET[0]으로 preg_replace("#(^.*e>)(.*)(</p.*$)#s","$2",join(file("i.svg")))정상 입력 + 55 바이트와 방법


2

파워 쉘, 152 146 바이트

-join$(for($t=$args-split'
';$c-lt$t[0].Length;$c+=6){$s=0;$t|% s*g $c,5|% t*y|%{$s+=$s+$_}
'_ISRJ_BK_HFQPL_MYNCE _TXDAO_VWUZ__G'[$s%578%174%36]})

테스트 스크립트 :

$f = {

-join$(for($t=$args-split'
';$c-lt$t[0].Length;$c+=6){$s=0;$t|% s*g $c,5|% t*y|%{$s+=$s+$_}
'_ISRJ_BK_HFQPL_MYNCE _TXDAO_VWUZ__G'[$s%578%174%36]})

}

&$f @"
#   # ##### #     #      ###        #   #  ###  ####  #     #### 
#   # #     #     #     #   #       #   # #   # #   # #     #   #
##### ####  #     #     #   #       # # # #   # ####  #     #   #
#   # #     #     #     #   #       ## ## #   # #   # #     #   #
#   # ##### ##### #####  ###        #   #  ###  #   # ##### #### 
"@

&$f @"
 ###   ###   ###  ##### #####
#   # #     #   #   #     #  
#####  ###  #       #     #  
#   #     # #   #   #     #  
#   #  ###   ###  ##### #####
"@

&$f @"
####  ####   ###   ### 
#   # #   # #   # #    
####  ####  #     #  ##
#     #     #   # #   #
#     #      ###   ### 
"@

&$f @"
       ###  ####   ###  ####  ##### #####  ###  #   # ##### ##### #   # #     #   # #   #  ###  ####   ###  ####   ###  ##### #   # #   # #   # #   # #   # #####
      #   # #   # #   # #   # #     #     #     #   #   #     #   #  #  #     ## ## ##  # #   # #   # #   # #   # #       #   #   # #   # #   #  # #   # #     # 
      ##### ####  #     #   # ####  ####  #  ## #####   #     #   ###   #     # # # # # # #   # ####  #   # ####   ###    #   #   #  # #  # # #   #     #     #  
      #   # #   # #   # #   # #     #     #   # #   #   #   # #   #  #  #     #   # #  ## #   # #     #  #  #   #     #   #   #   #  # #  ## ##  # #    #    #   
      #   # ####   ###  ####  ##### #      ###  #   # ##### ###   #   # ##### #   # #   #  ###  #      ## # #   #  ###    #    ###    #   #   # #   #   #   #####
"@

산출:

HELLO WORLD
ASCII
PPCG
 ABCDEFGHIJKLMNOPQRSTUVWXYZ

노트 :

  1. $t|% s*g $c,5|% t*y|%{$s+=$s+$_} 바로 가기 $t.substring($c,5).toCharArray()|%{$s+=$s+$_}
  2. ("abcd","efgh").substring(1,2) 배열을 돌려줍니다 ("bc","de")
  3. ("bc","de").toCharArray() 배열을 돌려줍니다 ('b','c','d','e')

2

C,  225  209 바이트

16 바이트를 절약 한 @ceilingcat에게 감사드립니다!

i,j,k,l,n,m;f(char*s){l=index(s,10)-s+1;for(i=0;i<l/6;++i){for(m=j=0;j<5;m+=n*(exp10(j++)+.1))for(n=k=0;k<5;)n+=(s[i*6+j+k*l]==35)<<k++;for(j=0;"Qi Y$>W);Xa%d^F4K-]7jcMAG="[j++]-32-m%77;);putchar(n?64+j:32);}}

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

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