ASCII sanatındaki eski bir dostun resmi


36

Umarım bu resim size tanıdık gelir.

görüntü tanımını buraya girin

Bu biri Pacman onun içinde 'ın hayaletler 'savunmasız' devlet Pacman bir güç hapı yemiş sonra.

Meydan okuma

ASCII sanatını kullanarak hayaletimizi küçük bir çerçevede hayal edin. Normal ölçekte (bundan daha fazlası hakkında), yukarıdaki görüntüdeki her kare bir karaktere karşılık gelmeli ve çerçeve, karakterin yukarı ve aşağı bir karakter ayrımı ve hayaletin soluna ve sağına iki karakterli bir ayrıma sahip olmalıdır. :

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

Ama bu pek hoş görünmüyor. #aktif pikseller için en iyi seçenek olmayabilir. Ayrıca, karakter hücreleri kare değildir, bu da arkadaşımızın olduğundan daha hayalet görünmesini sağlar.

Böylece, daha fazla esnekliğe sahip olmak için, resim üç giriş parametresine göre değişecektir:

  • Aktif pikseller için kullanılacak karakter;
  • Yatay ölçek faktörü;
  • Dikey ölçek faktörü.

Örneğin, birlikte %, 4, 2çıktıya iyi görünümlü resim olurdu

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

kurallar

Tüm yapılara izin verilir.

Girişler herhangi bir makul formatta ve herhangi bir sırada alınır. Yukarıdaki ilk girişin (aktif pikseller için karakter), yazdırılabilir bir ASCII karakteri olduğu garanti edilir (kodlar 32 ila 126).

Her satırdan sonraki boşluk veya son satırdan sonraki yeni satırlar kabul edilebilir.

Kod golf, en az bayt kazanır.


Birkaç saniye boyunca resme dikkatlice bakın. O zaman ne olacağını görün! ...
sergiol

Şu ana kadar Kömür gönderimi olmadığına inanamıyorum.
Weijun Zhou

Yanıtlar:


34

CJam, 53 51 49 bayt

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

Üç karakterin yazdırılamaz olduğuna dikkat edin. Çevrimiçi deneyin!

Arka fon

Ölçeklenmemiş çıktının sağ yarısı, soldaki ile aynıdır, bu nedenle bunlardan birini kodlamak yeterlidir. Boşlukları sıfırlarla, boşluksuzlarla değiştirirsek,

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

burada her satır bir ikili sayı olarak yorumlanabilir. Bu verim

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

Bu bilgiyi kodlamanın en kolay yolu, her tamsayı o kod noktasında Unicode karakteri ile değiştirmektir, ancak hepsinin UTF-8 ile kodlanması için iki bayt gerekir.

544 ile tamsayıları XOR yaparak, iki tamsayı dışındakileri 128 altında tutar ve boş baytları önleriz.

Sonuç

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

tamsayı olarak veya

ǟ #/?\x1f\x1f\x19Y__Fy_Nf ǟ

kaçan bir dize olarak.

Nasıl çalışır

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
Ne kadar hızlı ve kısa kod! Etkileyici!
Luis Mendo

10

Perl, 113 105 104 100 97 96

İçin +2 eklendi -ap

Dev-null tarafından yapılan öneriler 9 bayttan tasarruf etti Dennis tarafından fark edilen yanlış sayım düzeltildi

Kullanarak çalıştır 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

Bunun dışında dizenin "\xff\x00\x03\x0f\x1f\x3f\x3f\x39\x79\x7f\x7f\x66\x59\x7f\x6e\x46\x00\xff"tek tırnaklı ikili biçimde yazılması gerekir.

Değiştirme karakteri olarak boşluk boş dize haline gelir ve kısa çizgilere yol açar. Ama yine de hepsi boş görünecek


9

Dyalog APL, 64 bayt

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

Bu, ölçek faktörünü sol argümanı ve karakteri sağ argümanı olarak alır, yani:

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

Açıklama:

  • ⍉(7/2)⊤⎕AV⍳'Äâ\⊥⊥∘)⍞⍞┬#⍞`⍒': Hayaletlerin sol yarısı, sınırsız. (Simetriktir.) Her karakter, yazdırılamayan karakterlerin seçilmesini önlemek için yüksek bit kümesine sahiptir ⎕AV, ancak yalnızca ilk 7 bayt kullanılır.

  • 0,⍪⍨0⍪0,0,: sol, üst ve alt kısımlara bir kenar boşluk ekleyin

  • 1⍪⍨1⍪1,: çerçeveyi sola, üstüne ve altına ekleyin
  • ,∘⌽⍨: dikey aynasıyla birleştir
  • 1+: 1 ekleyin, çünkü diziler varsayılan olarak 1 dizinlidir.
  • ' '⍵[... ]: bu matrisi dizinin indeksi olarak kullanın ' '⍵, böylece her 0 boş olarak eşlenir ve her 1 eşlenir .
  • ⍺,⊂: matrisi içine alın ve ölçek faktörlerine ekleyin
  • /: aşağıdaki işlevle sağa katlayın:
  • /∘⍉: yatay çevirme ve ölçekleme

7

MATL , 71 bayt

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

Çevrimiçi deneyin!

açıklama

Görüntü yatay olarak simetriktir, bu nedenle sadece sol tarafın kodlanması gerekir. Her 10 piksellik satır, 0 ile 1023 arasında bir sayı olarak ikili kodlanır. Aktif pikseller 1 yerine 0 olarak kodlanır, bu nedenle ilk satır 1023 yerine 0 olur.

Ardışık satırlar yalnızca birkaç pikselden farklı olduğu için, sayılar farklı şekilde kodlanır. Böylece, her satır o satıra kadar tüm sayıların kümülatif toplamı olarak çözülecek ve ardından ikiliye dönüştürülecektir.

İhtiyaç duyulan numaralar

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

0, Okomşu sayılarla bir ayırıcıyı engelleyen işlev kullanılarak MATL'de tanıtılmıştır . Ayrıca, negatif işaretler ayırıcı olarak görev yaptıkları için fazladan bayt anlamına gelmez.

Dizi oluşturulduktan sonra, kümülatif olarak toplanır, ikili kod çözülür ve yatay olarak yansıtılır. Sonuçta elde edilen 2B dizi, sonucu üretmek için iki karakterli bir dize dizine almak için kullanılır. Bu dize formun olduğu '% ', '%'bir giriş Char olduğunu.

@Conor tarafından belirtildiği gibi, kod giriş olarak iki karakterle çalışır. Bu durumda, endekslenen son dize '%_ ', girişin iki karakterli bir dize olduğu formda olacaktır '%_'. Dizin oluşturma dizisi yalnızca ilk iki karakteri hedef aldığından, alan basitçe yoksayılır.

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
Dilin 16.0.0 sürümünden itibaren, virgüllerle boşlukları değiştirin
Luis Mendo

3

C (gcc) , 199 197 bayt

@JonathanFrech sayesinde -2 bayt

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

Çevrimiçi deneyin!

188 bayt (yazdırılamaz)

@JonathanFrech'in izniyle.

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

Çevrimiçi deneyin!

Muhteşem bir şey oluyor. Diğerlerinin de fark ettiği gibi, hayalet oldukça simetriktir. Görüntünün kendisi 20 birim genişliğindedir, ancak üst ve alt sıralar hariç, en sağdaki üç sütun aynıdır. Bu, tamsayı kullanmak yerine görüntünün yarısını karakter olarak kaydetmemizi sağlar:

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

Elde edilen dize, bir döngü için azalan (ayrıca onaltılık kaçışlarla sinir bozucu bir problemi çözme) üzerine birkaç bayt ekleyerek ters çevrildi. Simetri sayesinde diğer ilmekler sorunsuz şekilde çevrilebilir.

Her karakter sola kaydırılır ve kenarlık verilir (ilk ve son satırlarda özel dikkat gösterilerek). O zaman bu sadece dizinin doğru ölçeklenmesini sağlamaktır.

Tüm for döngüler daha iyi bir yol olduğunu hissetmemi sağlıyor.



@JonathanFrech Ah, teşekkürler!
gastropner


@JonathanFrech Düzgün bir, ama yazdırılamaz üzerinde çok hevesli değil.
gastropner

Neden ( TIO ) \xffile değiştirilemediğine dair bir fikrin var mı? ÿ
Jonathan Frech

2

Cidden, 116 bayt

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

Bu yeni hat önemlidir. HexDump:

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'in CJam cevabıyla aynı strateji , ancak değerler 544 ile XORed yerine onaltılık olarak kodlanıyor ve dize işleme ciddi olarak çok daha zor.

Çevrimiçi deneyin!


2

BBC BASIC, 239 236 232 214 bayt

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

Çağrılar PROCM(1,1,35)# sembollerinden oluşan hayaleti üretir. PROCM argümanları: yatay ölçek, dikey ölçek, karakterin ASCII değeri.

Bu program hem Brandy Basic hem de BASIC 2 için orijinal bir Model B'de çalışacaktır.


2

Toplu, 740 722 720 bayt

@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%!

Düzenleme: Gereksiz boşlukları kaldırarak 18 20 bayt kaydedildi .


2

Stax , 45 bayt

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

Koş ve hata ayıkla

Açıklama:

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

Üçüncüsü, ekranımda bazı renkler var. Çok güzel :-)
Luis Mendo

1

JavaScript (ES6), 167 bayt

(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'in cevabına dayanarak. Sanırım yerine gerçek bir FF kullanarak başka bir baytı tıraş edebilirsiniz \f, ancak buraya bir tane yapıştırabileceğimden şüpheliyim. Bunu denediğinizde \u01CA, NJkarakter yerine kullanmak da isteyebilirsiniz .

Ne yazık ki karakter bağımsız değişkenine bir boşluk hazırlamak, 6 baytlık bir ücrete mal oluyor.


1

Python 2, 838 828 618 bayt

Dizi yerine bir dize kullanarak 210 bayt kurtardı, bu öneri için Dennis sayesinde daha da iyisini yapabileceğimi biliyorum, ama şimdilik iyi bir gelişme.

Yapabileceğimin en iyisi bu, komut satırında grafiklerle çok iyi değilim.

Küçük hayaleti üs olarak aldım.

Ascii 219'u varsayılan olarak kullanıyorum, çünkü bu karakterle hayalet harika görünüyor !!!

golfed

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

Deneyin repl.it

Ungolfed

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

Ölçek

görüntü tanımını buraya girin


Sıkıştırılmamış, ölçeklenmemiş görüntüyü basitçe bir dizeye kaydederseniz daha iyi bir skor elde edersiniz. Ayrıca, varsayılan argümanlarda ve return deyiminde bayt harcıyorsunuz.
Dennis,

ASCII kod 219 diye bir şey yoktur.
mbomb007

1

Python 2,244 bayt

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 bayt

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)

Çevrimiçi deneyin!

Açıklama:

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

Olduğu gibi Dennis 'ın cevabı, bu dizedeki her karakterin 'resim' sol yarısında bir satır, XOR 544 ikili gösterimi temsil eder.

for c in <unicode string>:

Dizedeki her karakter için aşağıdakileri yapın:

    bin(ord(c)^544)

Karakteri tamsayı temsiline dönüştürün, ardından 544 ile bir ikili XOR yapın. Sonra bu tamsayıyı, '0xb1111111111' gibi ikili gösteriminin karakter dizisine dönüştürün.

    for d in <string>[2:]

Sokmadaki her karakter için, 2. pozisyondan başlayarak (başında 0b'yi atlayan), aşağıdakileri yapın:

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

Karakter == "1" ise, verilen karakterle değiştiriniz, aksi halde boşluk bırakınız. Sonra bu karakteri x kez kopyala. (x = 0, boş bir dizeyle sonuçlanır.)

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

Tüm dizeleri boş bir dize "" ile ayırarak tek bir uzun dizgede birleştirin.

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

b + 'nın b dizgini yapın, sonra bu dizgenin y örneklerini içeren bir dizi oluşturun (y = 0 boş bir liste üretecek []), ardından bu listeyi z listesine ekleyin.

print"\n".join(z)

Son olarak, üretilen satırların her birini satır sonları ile ayırarak ekrana yazdırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.