ASCII艺术中一位老朋友的照片


36

我希望这张照片对您来说很熟悉。

在此处输入图片说明

吃了强力药后,这是吃豆人处于“脆弱”状态的幽灵之一。

挑战

使用ASCII艺术作品在一个小帧中描绘我们的幽灵。在正常比例下(稍后会对此有更多介绍),上图中的每个正方形应对应一个字符,并且框架的上,下应具有一个字符的分隔,并且在虚影的左侧和右侧应具有两个字符的分隔:

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

但这看起来不是很漂亮。#可能不是有效像素的最佳选择。此外,字符单元不是正方形的,这使我们的朋友看起来比以前更加虚幻。

因此,为了具有更大的灵活性,图片将根据三个输入参数进行更改:

  • 用于有效像素的字符;
  • 水平比例因子;
  • 垂直比例因子。

例如,使用%42在输出中会是更好看图片

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

规则

允许所有内置。

输入采用任何合理的格式和顺序。上面的第一个输入(有效像素的字符)保证是可打印的ASCII字符(代码32至126)。

每行后的尾随空格或最后一行后的尾随换行符都是可以接受的。

代码高尔夫,最少的字节数获胜。


仔细观察图片几秒钟。然后看看会发生什么!...
sergiol

不能相信到目前为止没有木炭提交。

Answers:


34

CJam,53 51 49字节

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

请注意,三个字符不可打印。在线尝试!

背景

未缩放输出的右半部分与左半部分相同,因此对其中之一进行编码就足够了。如果我们用零代替空格,用零代替非空格,我们得到

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

编码此信息的最简单方法是在该代码点用Unicode字符替换每个整数,但是它们都需要两个字节才能用UTF-8编码。

通过将整数与544进行异或运算,我们将除两个整数之外的所有整数都保持在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
多快,短代码!令人印象深刻!
路易斯·门多

10

Perl,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之间的数字。有效像素被编码为0而不是1,因此第一行是数字0而不是1023。

由于连续的行仅相差几个像素,因此对数字进行了进一步的差分编码。因此,每一行将被解码为该行之前所有数字的累加和,然后转换为二进制。

然后需要的数字

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

使用该O功能在MATL中引入了0 ,这避免了带有相邻数字的分隔符。同样,负号并不表示多余的字节,因为它们用作分隔符。

创建阵列后,将对其进行累加,二进制解码和水平镜像。生成的2D数组用于索引两个字符的字符串以产生结果。此字符串的格式为'% ',其中'%'为输入字符。

如@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

3

C(GCC) 199个 197字节

-2个字节,感谢@JonathanFrech

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循环时消除出几个字节(还解决了十六进制转义的烦人问题)。由于对称性,其他循环可以毫无问题地翻转。

每个字符都向左移动并带有边框(在第一行和最后一行要格外小心)。然后,只需输出正确缩放的字符串即可。

所有的for循环使我感到有更好的方法。



@JonathanFrech啊,谢谢!
gastropner '18


@JonathanFrech整洁的一个,但不太喜欢不可打印的东西。
gastropner '18

您知道为什么\xff不能用ÿTIO)代替吗?
乔纳森·弗雷希

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

该换行符很重要。十六进制转储:

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运算,并且字符串操作在“严重”中要困难得多。

在线尝试!


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和原始模型B上的BASIC 2。


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

第三个显示我的屏幕上有一些颜色。非常好:-)
路易斯·门多

1

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

Python 2中,838个 828 618字节

通过使用字符串而不是数组节省了210个字节,这要归功于Dennis的建议,我知道我可以做得更好,但是到目前为止,它是一个很好的改进。

这是我所能做的最好的,我对命令行中的图形不是很好。

我以小鬼为基础。

我默认情况下使用的是ascii 219,因为使用该char,该鬼看起来非常棒!!!

打高尔夫球

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语句上浪费了字节。
丹尼斯

有ASCII码219没有这样的事
mbomb007

1

Python 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

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

就像丹尼斯的答案一样,此字符串中的每个字符代表“图像”左半部分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)

最后,打印以筛选每个产生的字符串,并用换行符分隔。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.