ASCII 예술에서 옛 친구의 그림


36

이 사진이 당신에게 익숙해지기를 바랍니다.

여기에 이미지 설명을 입력하십시오

팩맨이 파워 필을 먹은 후 "취약한"상태팩맨 유령 중 하나입니다 .

도전

ASCII 아트를 사용하여 유령을 작은 프레임으로 그려보십시오. 보통 크기 (나중에 자세히 설명)에서 위 이미지의 각 정사각형은 하나의 문자와 일치해야하며 프레임은 위아래로 한 문자 분리되어야하고 유령의 왼쪽과 오른쪽으로 두 문자 분리되어야합니다. :

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

그러나 이것은 매우 예쁘지 않습니다. #활성 픽셀에 가장 적합하지 않을 수 있습니다. 게다가, 문자 세포는 정사각형이 아니기 때문에 우리 친구가 이미보다 유령처럼 보입니다.

따라서 유연성을 높이기 위해 그림은 세 가지 입력 매개 변수에 따라 변경됩니다.

  • 활성 픽셀에 사용되는 문자.
  • 수평 스케일 팩터;
  • 수직 스케일 팩터.

예를 들어,와 %, 4, 2OUPUT 더 나은 찾고 그림 것

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%                                                                        %%%%
%%%%                                                                        %%%%
%%%%                            %%%%%%%%%%%%%%%%                            %%%%
%%%%                            %%%%%%%%%%%%%%%%                            %%%%
%%%%                    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                    %%%%
%%%%                    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                    %%%%
%%%%                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                %%%%
%%%%                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                %%%%
%%%%            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%            %%%%
%%%%            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%            %%%%
%%%%            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%            %%%%
%%%%            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%            %%%%
%%%%            %%%%%%%%%%%%        %%%%%%%%        %%%%%%%%%%%%            %%%%
%%%%            %%%%%%%%%%%%        %%%%%%%%        %%%%%%%%%%%%            %%%%
%%%%        %%%%%%%%%%%%%%%%        %%%%%%%%        %%%%%%%%%%%%%%%%        %%%%
%%%%        %%%%%%%%%%%%%%%%        %%%%%%%%        %%%%%%%%%%%%%%%%        %%%%
%%%%        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        %%%%
%%%%        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        %%%%
%%%%        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        %%%%
%%%%        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        %%%%
%%%%        %%%%%%%%        %%%%%%%%        %%%%%%%%        %%%%%%%%        %%%%
%%%%        %%%%%%%%        %%%%%%%%        %%%%%%%%        %%%%%%%%        %%%%
%%%%        %%%%    %%%%%%%%        %%%%%%%%        %%%%%%%%    %%%%        %%%%
%%%%        %%%%    %%%%%%%%        %%%%%%%%        %%%%%%%%    %%%%        %%%%
%%%%        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        %%%%
%%%%        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        %%%%
%%%%        %%%%%%%%    %%%%%%%%%%%%        %%%%%%%%%%%%    %%%%%%%%        %%%%
%%%%        %%%%%%%%    %%%%%%%%%%%%        %%%%%%%%%%%%    %%%%%%%%        %%%%
%%%%        %%%%            %%%%%%%%        %%%%%%%%            %%%%        %%%%
%%%%        %%%%            %%%%%%%%        %%%%%%%%            %%%%        %%%%
%%%%                                                                        %%%%
%%%%                                                                        %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

규칙

모든 내장이 허용됩니다.

입력은 합리적인 형식과 순서로 수행됩니다. 위의 첫 번째 입력 (활성 픽셀의 문자)은 인쇄 가능한 ASCII 문자 (코드 32-126)임을 보증합니다.

각 줄 뒤에 오는 공백이나 마지막 줄 뒤에 오는 줄 바꿈이 허용됩니다.

코드 골프, 가장 적은 바이트가 이깁니다.


몇 초 동안 그림을주의해서보십시오. 그렇다면 어떻게되는지보십시오! ...
sergiol 1

지금까지 숯 제출이 없다고 믿을 수 없습니다.
Weijun Zhou

답변:


34

CJam, 53 51 49 바이트

q~"ǟ #/?Y__Fy_Nf ǟ"f{'Ƞ^2b_W%+S@+f=}fe*e*N*

세 문자는 인쇄 할 수 없습니다. 온라인으로 사용해보십시오!

배경

스케일링되지 않은 출력의 오른쪽 절반은 왼쪽 출력과 동일하므로 그 중 하나를 인코딩하면 충분합니다. 공백을 0으로 바꾸고 공백이 아닌 것을 1로 바꾸면

1111111111
1000000000
1000000011
1000001111
1000011111
1000111111
1000111111
1000111001
1001111001
1001111111
1001111111
1001100110
1001011001
1001111111
1001101110
1001000110
1000000000
1111111111

각 줄은 이진수로 해석 될 수 있습니다. 이 결과

1023 512 515 527 543 575 575 569 633 639 639 614 601 639 622 582 512 1023

이 정보를 인코딩하는 가장 쉬운 방법은 해당 정수에서 각 정수를 유니 코드 문자로 바꾸는 것이지만 UTF-8로 인코딩하려면 2 바이트가 필요합니다.

정수를 544로 XOR하면 두 정수를 제외한 128을 128 이하로 유지하고 널 바이트를 피합니다.

결과는

479 32 35 47 63 31 31 25 89 95 95 70 121 95 78 102 32 479

정수 또는

ǟ #/?\x1f\x1f\x19Y__Fy_Nf ǟ

이스케이프 된 문자열로.

작동 원리

q~                e# Read and evaluate all input. This pushes the vscale factor V,
                  e# the hscale factor H, and the character C.
"ǟ #/?Y__Fy_Nf ǟ" e# Push that string.
f{                e# For each character, push C and the character; then:
'Ƞ^               e#   XOR the character with '\u0220' (544), casting to integer.
 2b               e#   Convert from integer to base 2.
 _W%              e#   Push a reversed copy of the binary digits.
 +                e#   Concatenate.
 S@+              e#   Append C to " ".
 f=               e#   Replace each binary digit with ' ' or C.
}                 e#
fe*               e# Repeat each character in each string H times.
e*                e# Repeat each string V times.
N                 e# Join the strings, separating by linefeeds.

7
얼마나 빠르고 짧은 코드! 감동적인!
Luis Mendo

10

113 105 104 100 97 96

에 +2 추가 -ap

dev-null에 의한 제안은 9 바이트를 저장합니다

를 사용하여 실행 echo "2 4 %" | perl -ap pacman.pl

pacman.pl:

}for(map+(unpack(aXBXB8Xb8XBXa),$/)x"@F","\xff\x00\x03\x0f\x1f\x3f\x3f\x39\x79\x7f\x7f\x66\x59\x7f\x6e\x46\x00\xff"=~/./g){s%%($&?$F[2]:$")x$F[1]%ge

문자열 "\xff\x00\x03\x0f\x1f\x3f\x3f\x39\x79\x7f\x7f\x66\x59\x7f\x6e\x46\x00\xff"은 작은 따옴표로 이진 형식으로 작성해야합니다.

대체 문자로서의 공백은 빈 문자열이되고 짧은 줄로 이어집니다. 하지만 어쨌든 모두 비워 보일 것입니다


9

Dyalog APL, 64 바이트

{/∘⍉/⍺,⊂' '⍵[1+,∘⌽⍨1⍪⍨1⍪1,0⍪⍨0⍪0,0,⍉(7/2)⊤⎕AV⍳'Äâ\⊥⊥∘)⍞⍞┬#⍞`⍒']}

스케일 인수를 왼쪽 인수로, 캐릭터를 오른쪽 인수로 사용합니다.

      2 1{/∘⍉/⍺,⊂' '⍵[1+,∘⌽⍨1⍪⍨1⍪1,0⍪⍨0⍪0,0,⍉(7/2)⊤⎕AV⍳'Äâ\⊥⊥∘)⍞⍞┬#⍞`⍒']}'%'
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 %%                                    %% 
 %%              %%%%%%%%              %% 
 %%          %%%%%%%%%%%%%%%%          %% 
 %%        %%%%%%%%%%%%%%%%%%%%        %% 
 %%      %%%%%%%%%%%%%%%%%%%%%%%%      %% 
 %%      %%%%%%%%%%%%%%%%%%%%%%%%      %% 
 %%      %%%%%%    %%%%    %%%%%%      %% 
 %%    %%%%%%%%    %%%%    %%%%%%%%    %% 
 %%    %%%%%%%%%%%%%%%%%%%%%%%%%%%%    %% 
 %%    %%%%%%%%%%%%%%%%%%%%%%%%%%%%    %% 
 %%    %%%%    %%%%    %%%%    %%%%    %% 
 %%    %%  %%%%    %%%%    %%%%  %%    %% 
 %%    %%%%%%%%%%%%%%%%%%%%%%%%%%%%    %% 
 %%    %%%%  %%%%%%    %%%%%%  %%%%    %% 
 %%    %%      %%%%    %%%%      %%    %% 
 %%                                    %% 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

설명:

  • ⍉(7/2)⊤⎕AV⍳'Äâ\⊥⊥∘)⍞⍞┬#⍞`⍒': 귀신의 왼쪽 절반, 테두리 없음. (대칭입니다.) 각 문자에는 높은 비트 세트가 있으므로에서 비 인쇄 문자를 선택하지 ⎕AV못하지만 처음 7 바이트 만 사용됩니다.

  • 0,⍪⍨0⍪0,0,: 왼쪽, 위쪽 및 아래쪽에 공백 테두리를 추가하십시오.

  • 1⍪⍨1⍪1,: 왼쪽, 위쪽 및 아래쪽에 프레임 추가
  • ,∘⌽⍨: 수직 거울과 결합
  • 1+: 배열은 기본적으로 1 인덱싱되므로 1을 추가하십시오.
  • ' '⍵[... ]: 해당 행렬을 문자열의 인덱스로 사용 ' '⍵하므로 각 0은 공백으로 매핑되고 1은 각각 매핑됩니다 .
  • ⍺,⊂: 행렬을 묶고 스케일 팩터에 결합
  • /: 다음 기능으로 오른쪽 접기 :
  • /∘⍉: 수평으로 조옮김

7

MATL , 71 바이트

32hO511-3-12-16-32O6-64-6O25 13-38 17 40 70-511Nq$hYs10H$Bt!P!hi1$lX*Q)

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

설명

이미지는 수평 대칭이므로 왼쪽 절반 만 코딩하면됩니다. 각 10 픽셀 행은 0에서 1023 사이의 숫자로 이진 코딩됩니다. 활성 픽셀은 1이 아닌 0으로 코딩되므로 첫 번째 행은 1023이 아닌 숫자 0입니다.

연속 행은 몇 픽셀 만 다르기 때문에 숫자는 차등 적으로 더 인코딩됩니다. 따라서 각 행은 해당 행까지의 모든 숫자의 누적 합계로 디코딩 된 다음 이진으로 변환됩니다.

필요한 숫자는

0 511 -3 -12 -16 -32 0 6 -64 -6 0 25 13 -38 17 40 70 -511

O함수를 사용하여 MATL에 0이 도입되어 인접 숫자가있는 구분 기호를 피할 수 있습니다. 또한 음수 부호는 분리 자로 사용되므로 여분의 바이트를 의미하지 않습니다.

어레이가 생성되면 누적 합산, 이진 디코딩 및 수평 미러링됩니다. 결과 2D 배열은 결과를 생성하기 위해 2 자 문자열을 인덱싱하는 데 사용됩니다. 이 문자열은 형식 '% '이며 여기서 '%'입력 문자는입니다.

@Conor에서 언급했듯이 코드는 두 문자를 입력으로 사용합니다. 이 경우 색인이 생성 된 최종 문자열은 형식이 '%_ '되며 여기서 입력은 2 자 문자열 '%_'입니다. 인덱싱 배열은 처음 두 문자 만 처리하므로 공백은 무시됩니다.

32                                             % space (ASCII)
h                                              % concat horizontally with 1st input: char
O511-3-12-16-32O6-64-6O25 13-38 17 40 70-511   % push these numbers
Nq$h                                           % concat all those numbers
Ys                                             % cumulative sum
10H$B                                          % convert to 10-digit binary numbers
                                               % gives 2D array, each number in one row
t                                              % duplicate
!P!                                            % flip horizontally
h                                              % concat horizontally
i                                              % take 2nd input: array [V H]
1$l                                            % matrix oh V×H ones  
X*                                             % Kronecker product to increase vertical
                                               % and horizontal scales by V and H resp.
Q                                              % add 1. Converts array of 0,1 into 1,2
)                                              % uses those 1,2 as indices into string


1
언어 버전 16.0.0부터는 쉼표를 공백으로 바꾸십시오.
Luis Mendo

3

C (gcc) , 199 197 바이트

@JonathanFrech 덕분에 -2 바이트

n,j;f(c,h,v){for(char t[20],i=18;i--;){for(n=10;n--;)t[n]=t[19-n]=((("\xff\0""1;\x7fM3\x7f\x7fON~~|x`\0\xff"[i]<<3)|(i&&i^17?1:7))>>n)&1?c:32;for(j=v;j--;puts(""))for(n=20*h;n--;)putchar(t[n/h]);}}

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

188 바이트 (인쇄 불가능)

@JonathanFrech의 의례.

n,j;f(c,h,v){for(char t[20],i=18;i--;){for(n=10;n--;)t[n]=t[19-n]=((("\xff\0001;M3ON~~|x`\0\xff"[i]<<3)|(i&&i^17?1:7))>>n)&1?c:32;for(j=v;j--;puts(""))for(n=20*h;n--;)putchar(t[n/h]);}}

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

놀라운 일이 없습니다. 다른 사람들이 알고 있듯이, 유령은 매우 대칭 적입니다. 이미지 자체의 너비는 20 단위이지만 맨 위와 맨 아래 행을 제외하고 맨 오른쪽 세 열은 동일합니다. 이를 통해 정수를 사용하지 않고 이미지의 절반을 문자로 저장할 수 있습니다.

#######  127     \x7f
           0     \0
##        96     `
####     120     x
#####    124     |
######   126     ~
######   126     ~
#  ###    78     N
#  ####   79     O
#######  127     \x7f
#######  127     \x7f
 ##  ##   51     3
#  ## #   77     M
#######  127     \x7f
 ### ##   59     ;
 ##   #   49     1
           0     \0
#######  127     \x7f

결과 문자열은 내림차순 for 루프 (16 진수 이스케이프와 관련된 성가신 문제도 해결)에 대한 몇 바이트를 없애기 위해 반대로 바뀌 었습니다. 대칭으로 인해 다른 루프는 문제없이 뒤집어 질 수 있습니다.

각 문자는 왼쪽으로 이동하고 테두리를 제공합니다 (첫 번째 행과 마지막 행에 특별한주의를 기울임). 그런 다음 문자열을 올바르게 스케일링하는 것입니다.

모든 for 루프는 더 나은 방법이 있다고 생각합니다.



@JonathanFrech 아, 감사합니다!
gastropner


@JonathanFrech 하나는 단정하지만 인쇄 할 수없는 것들에 너무 열중하지는 않습니다.
gastropner

( TIO ) \xff로 대체 할 수없는 이유 가 있습니까? ÿ
Jonathan Frech

2

정말 116 바이트

╩' "3ff 200 203 20f 21f 23f 23f 239 279 27f 27f 266 259 27f 26e 246 200 3ff"s`24╙(¿¡╜'1(Æ' '0(Æ"╛*"£M;R@+εj2└@n`M'
j

그 줄 바꿈이 중요합니다. 16 진 덤프 :

00000000: ca27 2022 3366 6620 3230 3020 3230 3320  .' "3ff 200 203
00000010: 3230 6620 3231 6620 3233 6620 3233 6620  20f 21f 23f 23f
00000020: 3233 3920 3237 3920 3237 6620 3237 6620  239 279 27f 27f
00000030: 3236 3620 3235 3920 3237 6620 3236 6520  266 259 27f 26e
00000040: 3234 3620 3230 3020 3366 6622 7360 3234  246 200 3ff"s`24
00000050: d328 a8ad bd27 3128 9227 2027 3028 9222  .(...'1(.' '0(."
00000060: be2a 229c 4d3b 5240 2bee 6a32 c040 6e60  .*".M;R@+.j2.@n`
00000070: 4d27 0d0a 6a                             M'..j

Dennis의 CJam 답변 과 같은 전략 이지만 값은 544로 XOR되지 않고 16 진으로 인코딩되며 문자열 조작은 심각하게 훨씬 어렵습니다.

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


2

BBC BASIC, 239 236 232 214 바이트

0DEFPROCM(A,B,C)C=C-32:FORU=0TO18*A-1:FORV=0TO20*B-1:Y=U DIVA:X=V DIVB:V.32-C*FNC((X<10)*-X-(X>9)*(19-X),Y):N.:P.:N.:E.
1DEFFNC(X,Y)Z=Y*10+X:=((ASCMI."#Cb^2aC*[#1CF<;)C$;I9I$;EYLb&#",Z/6+1)-35)AND(2^(Z MOD6)))=0

호출 PROCM(1,1,35)하면 # 기호로 구성된 고스트가 생성됩니다. PROCM에 대한 인수는 수평 스케일, 수직 스케일, ASCII 문자 값입니다.

이 프로그램은 Brandy Basic과 BASIC 2 모두 오리지널 모델 B에서 작동합니다.


2

배치, 740 722 720 바이트

@echo off
setlocal enabledelayedexpansion
set h=%3
set w=
set s=
for /l %%a in (1,1,%2)do set w=%1!w!&set s= !s!
call:l ####################
call:l #                  #
call:l #       ####       #
call:l #     ########     #
call:l #    ##########    #
call:l #   ############   #
call:l #   ############   #
call:l #   ###  ##  ###   #
call:l #  ####  ##  ####  #
call:l #  ##############  #
call:l #  ##############  #
call:l #  ##  ##  ##  ##  #
call:l #  # ##  ##  ## #  #
call:l #  ##############  #
call:l #  ## ###  ### ##  #
call:l #  #   ##  ##   #  #
call:l #                  #
call:l ####################
exit/b
:l
set l=%*
set l=!l: =%s%!
for /l %%a in (1,1,%h%)do echo !l:#=%w%!

편집 : 불필요한 공간을 제거하여 18 20 바이트를 절약했습니다 .


2

Stax , 45 바이트

àÄÅ╣>u°↨2ö|dτÅbn╦─▀:ΣFúÇz?⌂É\!n▄§V0Ncó╤½8|δò_

실행 및 디버깅

설명:

"<long string>"!E' x+:BA/s|*mn|*:m Full program, implicit input.
"<long string>"!E                  Push 1531747987795407832964332490922049710271411270772589567
                 ' x+              Push a space plus the given character
                     :B            Interpret the number in binary, replacing 0 with ' ' and 1 with the given char
                       A/          Group into pieces of length 10.
                                   Gives the first half of each line.
                         s|*       Repeat each line <vertical scale factor> times
                            m      For each line:
                             n|*     Repeat each character <horizontal scale factor> times
                                :m   Mirror
                                     Implicit output with newline

세 번째는 화면에 약간의 색상으로 표시됩니다. 아주 좋은 :-)
Luis Mendo

1

자바 스크립트 (ES6), 167 바이트

(s,w,h)=>[...`NJ56:*

\fLJJSlJ[s5NJ`].map(c=>`${t=(c.charCodeAt()^565).toString(2)}${[...t].reverse().join``}
`.replace(/./g,b=>` ${s}`[b].repeat(w)).repeat(h)).join``

@Dennis의 답변을 기반으로합니다. 대신 리터럴 FF를 사용하여 다른 바이트를 제거 할 수는 \f있지만 여기에 붙여 넣을 수는 없습니다. 이것을 시도 할 때 캐릭터 \u01CA대신에 사용할 수도 있습니다 NJ.

슬프게도 문자 인수에 공백을 추가하면 전체 6 바이트가 필요합니다.


1

파이썬 2, 838 828 618 바이트

그 제안에 대한 Dennis 덕분에 배열 대신 문자열을 사용하여 210 바이트를 절약 할 수 있었으므로 더 나아질 수 있지만 지금은 개선되었습니다.

이것은 내가 할 수있는 최선의 일이며 명령 줄의 그래픽에는 좋지 않습니다.

나는 작은 유령을 기초로 삼았습니다.

나는 기본적으로 ascii 219를 사용하고 있습니다.

골프

def g(c,s,w,h,l=""):
 x="c-20,c-1,s-18,c-1,c-1,s-7,c-4,s-7,c-1,c-1,s-5,c-8,s-5,c-1,c-1,s-4,c-10,s-4,c-1,c-1,s-3,c-12,s-3,c-1,c-1,s-3,c-12,s-3,c-1,c-1,s-3,c-3,s-2,c-2,s-2,c-3,s-3,c-1,c-1,s-2,c-4,s-2,c-2,s-2,c-4,s-2,c-1,c-1,s-2,c-14,s-2,c-1,c-1,s-2,c-14,s-2,c-1,c-1,s-2,c-2,s-2,c-2,s-2,c-2,s-2,c-2,s-2,c-1,c-1,s-2,c-1,s-1,c-2,s-2,c-2,s-2,c-2,s-1,c-1,s-2,c-1,c-1,s-2,c-14,s-2,c-1,c-1,s-2,c-2,s-1,c-3,s-2,c-3,s-1,c-2,s-2,c-1,c-1,s-2,c-1,s-3,c-2,s-2,c-2,s-3,c-1,s-2,c-1,c-1,s-18,c-1,c-20"
 for r in x.split(","):
  d=r.split("-");l+=d[0].replace("s",s).replace("c",c)*int(d[1])*w
  if len(l)==20*w:print(l+"\n")*h,;l=""

repl.it에서 사용해보십시오

언 골프

def pacmanGhost(char = "█", sep = " ", width = 1, height = 1):
    coords = [[[char, 20]], [[char, 1], [sep, 18], [char, 1]],[[char, 1], [sep, 7], [char, 4], [sep, 7], [char, 1]], [[char, 1], [sep, 5], [char, 8], [sep, 5],
         [char, 1]], [[char, 1], [sep, 4], [char, 10], [sep, 4], [char, 1]], [[char, 1], [sep, 3], [char, 12], [sep, 3], [char, 1]], [[char, 1], [sep, 3],
         [char, 12], [sep, 3], [char, 1]], [[char, 1], [sep, 3], [char, 3], [sep, 2], [char, 2], [sep, 2], [char, 3], [sep, 3], [char, 1]], [[char, 1],
         [sep, 2], [char, 4], [sep, 2], [char, 2], [sep, 2], [char, 4], [sep, 2], [char, 1]], [[char, 1], [sep, 2], [char, 14], [sep, 2], [char, 1]],
         [[char, 1], [sep, 2], [char, 14], [sep, 2], [char, 1]], [[char, 1], [sep, 2], [char, 2], [sep, 2], [char, 2], [sep, 2], [char, 2], [sep, 2],
         [char, 2], [sep, 2], [char, 1]], [[char, 1], [sep, 2], [char, 1], [sep, 1], [char, 2], [sep, 2], [char, 2], [sep, 2], [char, 2], [sep, 1], [char, 1],
         [sep, 2], [char, 1]], [[char, 1], [sep, 2], [char, 14], [sep, 2], [char, 1]], [[char, 1], [sep, 2], [char, 2], [sep, 1], [char, 3], [sep, 2],
         [char, 3], [sep, 1], [char, 2], [sep, 2], [char, 1]], [[char, 1], [sep, 2], [char, 1], [sep, 3], [char, 2], [sep, 2], [char, 2], [sep, 3],
         [char, 1], [sep, 2], [char, 1]], [[char, 1], [sep, 18], [char, 1]], [[char, 20]]]
    for coord in coords:
        line = ""
        for element in coord:
            line = "{}{}".format(line, element[0] * element[1] * width)
        for i in range(height):
            print(line)
    return

테스트

여기에 이미지 설명을 입력하십시오


압축되지 않은 크기 조정되지 않은 이미지를 문자열에 간단히 저장하면 훨씬 더 나은 점수를 얻을 수 있습니다. 또한 기본 인수와 return 문에 바이트를 낭비하고 있습니다.
Dennis

ASCII 코드 219와 같은 것은 없습니다.
mbomb007

1

파이썬 2, 244 바이트

p,w,h=raw_input().split()
for i in range(18): mystr=''.join([(p if i=='1'else' ')*int(w)for i in str(10+(i%17==0))+format(ord('\xff\x00\x03\x0f\x1f??9y\x7f\x7ffY\x7fnF\x00\xff'[i]),'08b')]);print'\n'.join([mystr+mystr[::-1]for j in[1]*int(h)])

1

파이썬 2, 169 바이트

def a(s,x,y):
    z=[]
    for c in u'\u01df #/?\x1f\x1f\x19Y__Fy_Nf \u01df':
        b="".join((s if d=="1"else" ")*x for d in bin(ord(c)^544)[2:]);z+=[b+b[::-1]]*y
    print"\n".join(z)

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

설명:

u'\u01df #/?\x1f\x1f\x19Y__Fy_Nf \u01df'

Dennis 의 답변 에서와 같이이 문자열의 각 문자는 "이미지"왼쪽 절반의 한 줄의 이진 표현을 나타냅니다 (XOR 544).

for c in <unicode string>:

문자열의 각 문자에 대해 다음을 수행하십시오.

    bin(ord(c)^544)

문자를 정수 표현으로 변환 한 다음 544로 이진 XOR을 수행하십시오. 그런 다음이 정수를 '0xb1111111111'과 같은 이진 표현의 문자열로 변환하십시오.

    for d in <string>[2:]

2 번 위치에서 시작하여 (처음에는 0b를 건너 뛰는) 찌르는 각 문자에 대해 다음을 수행하십시오.

    (s if d=="1"else" ")*x

문자 == "1"인 경우 제공된 문자로 바꾸고 그렇지 않으면 공백으로 바꾸십시오. 그런 다음이 문자를 x 번 복사하십시오. (x = 0은 빈 문자열이됩니다.)

    b="".join(<previously generated list of strings>)

빈 문자열 ""으로 구분하여 모든 문자열을 하나의 긴 문자열로 연결합니다.

    z+=[b+b[::-1]]*y

b +의 문자열을 b의 반대 방향으로 만든 다음이 문자열의 y 인스턴스를 포함하는 배열을 생성하고 (y = 0은 빈 목록 []을 생성 함)이 목록을 목록 z에 추가합니다.

print"\n".join(z)

마지막으로, 줄 바꿈으로 구분하여 생성 된 각 문자열을 스크리닝하려면 인쇄하십시오.

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