Gambar seorang teman lama dalam seni ASCII

36

Saya harap gambar ini terlihat akrab bagi Anda.

masukkan deskripsi gambar di sini

Ini adalah salah satu hantu Pacman dalam keadaan "rentan" , setelah Pacman memakan pil kekuatan.

Tantangan

Bayangkan hantu kita dalam bingkai kecil, menggunakan seni ASCII. Pada skala normal (lebih lanjut tentang ini nanti), setiap kotak pada gambar di atas harus sesuai dengan satu karakter, dan frame harus memiliki pemisahan satu karakter ke atas dan ke bawah, dan pemisahan dua karakter ke kiri dan kanan hantu :

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

Tapi ini tidak terlihat sangat cantik. #mungkin bukan pilihan terbaik untuk piksel aktif. Selain itu, sel-sel karakter tidak persegi, yang membuat teman kita terlihat lebih seperti hantu daripada yang sudah ada.

Jadi, untuk memiliki lebih banyak fleksibilitas, gambar akan berubah sesuai dengan tiga parameter input:

  • Karakter yang akan digunakan untuk piksel aktif;
  • Faktor skala horisontal;
  • Faktor skala vertikal.

Misalnya, dengan %, 4, 2ouput akan menjadi gambar tampak lebih baik

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

Aturan

Semua bawaan diizinkan.

Masukan diambil dalam format apa pun yang masuk akal dan urutan apa pun. Input pertama di atas (karakter untuk piksel aktif) dijamin menjadi karakter ASCII yang dapat dicetak (kode 32 hingga 126).

Trailing space setelah setiap baris atau trailing newlines setelah baris terakhir dapat diterima.

Golf kode, byte paling sedikit menang.

Luis Mendo
sumber
Perhatikan gambar dengan seksama selama beberapa detik. Kemudian lihat apa yang terjadi! ...
sergiol
Tidak percaya tidak ada pengiriman Arang sejauh ini.
Weijun Zhou

Jawaban:

34

CJam, 53 51 49 byte

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

Perhatikan bahwa tiga karakter tidak dapat dicetak. Cobalah online!

Latar Belakang

Setengah bagian kanan dari keluaran yang tidak dikunci identik dengan yang kiri, sehingga cukup untuk menyandikan salah satunya. Jika kita mengganti spasi dengan nol dan bukan spasi dengan yang, kita dapatkan

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

di mana setiap baris dapat diartikan sebagai angka biner. Ini menghasilkan

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

Cara termudah untuk menyandikan informasi ini adalah mengganti setiap integer dengan karakter Unicode pada titik kode itu, tetapi mereka semua membutuhkan dua byte untuk dikodekan dengan UTF-8.

Dengan XORing integer dengan 544, kami menyimpan semua kecuali dua integer di bawah 128 dan menghindari byte nol.

Hasilnya adalah

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

sebagai bilangan bulat atau

ǟ #/?\x1f\x1f\x19Y__Fy_Nf ǟ

sebagai string yang lolos.

Bagaimana itu bekerja

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.
Dennis
sumber
7
Seberapa cepat, dan kode pendek! Impresif!
Luis Mendo
10

Perl, 113 105 104 100 97 96

Menambahkan +2 untuk -ap

Saran oleh dev-null, simpan 9 byte Memperbaiki hitungan yang salah seperti diketahui oleh Dennis

Jalankan menggunakan 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

kecuali bahwa string "\xff\x00\x03\x0f\x1f\x3f\x3f\x39\x79\x7f\x7f\x66\x59\x7f\x6e\x46\x00\xff"harus ditulis dalam bentuk biner dengan tanda kutip tunggal

Spasi sebagai karakter pengganti menjadi string kosong dan mengarah ke garis pendek. Tapi semuanya akan terlihat kosong

Ton Hospel
sumber
9

Dyalog APL, 64 byte

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

Ini mengambil faktor skala sebagai argumen kiri dan karakter sebagai argumen kanannya, yaitu:

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

Penjelasan:

  • ⍉(7/2)⊤⎕AV⍳'Äâ\⊥⊥∘)⍞⍞┬#⍞`⍒': Setengah kiri hantu, tanpa perbatasan. (Ini simetris.) Setiap karakter memiliki bit set yang tinggi, untuk mencegah pemilihan karakter yang tidak dicetak ⎕AV, tetapi hanya 7 byte pertama yang digunakan.

  • 0,⍪⍨0⍪0,0,: tambahkan batas kosong di kiri, atas, dan bawah

  • 1⍪⍨1⍪1,: tambahkan bingkai di sebelah kiri, atas, dan bawah
  • ,∘⌽⍨: gabung dengan cermin vertikal
  • 1+: tambahkan 1, karena array 1-diindeks secara default
  • ' '⍵[... ]: gunakan matriks itu sebagai indeks ke dalam string ' '⍵, sehingga setiap 0 dipetakan ke kosong dan masing-masing 1 dipetakan ke .
  • ⍺,⊂: lampirkan matriks dan gabungkan ke faktor skala
  • /: lipatan kanan dengan fungsi berikut:
  • /∘⍉: transpos dan skala secara horizontal
marinus
sumber
7

MATL , 71 byte

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

Cobalah online!

Penjelasan

Gambar simetris secara horizontal, sehingga hanya setengah bagian kiri yang perlu dikodekan. Setiap baris 10-pixel diberi kode biner sebagai angka antara 0 dan 1023. Pixel aktif dikodekan sebagai 0 bukan 1, jadi baris pertama adalah angka 0 daripada 1023.

Karena baris berturut-turut berbeda hanya dengan beberapa piksel, angka-angka selanjutnya disandikan berbeda. Jadi setiap baris akan diterjemahkan sebagai jumlah kumulatif dari semua angka hingga baris itu, diikuti oleh konversi ke biner.

Angka-angka yang dibutuhkan saat itu

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

0 diperkenalkan di MATL menggunakan Ofungsi, yang menghindari pemisah dengan angka tetangga. Juga, tanda-tanda negatif tidak menyiratkan byte tambahan karena berfungsi sebagai pemisah.

Setelah array telah dibuat, secara kumulatif dijumlahkan, didekodekan secara biner, dan dicerminkan secara horizontal. Array 2D yang dihasilkan digunakan untuk mengindeks string dua-char untuk menghasilkan hasilnya. String ini dari bentuk '% ', di mana'%' input char.

Seperti dicatat oleh @Conor, kode ini juga berfungsi dengan dua karakter sebagai input. Dalam hal ini string terakhir yang diindeks ke dalam akan berupa '%_ ', di mana inputnya adalah string dua-char '%_'. Ruang hanya akan diabaikan, karena array pengindeksan hanya membahas dua karakter pertama.

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
Luis Mendo
sumber
1
Pada versi 16.0.0 bahasa, ganti koma dengan spasi
Luis Mendo
3

C (gcc) , 199 197 byte

-2 byte terima kasih kepada @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]);}}

Cobalah online!

188 byte (tidak dicetak)

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

Cobalah online!

Tidak ada yang spektakuler yang terjadi. Seperti orang lain perhatikan, hantu itu sangat simetris. Gambar itu sendiri memiliki lebar 20 unit, tetapi kecuali untuk baris atas dan bawah, tiga kolom paling kanan adalah identik. Ini memungkinkan kami untuk menyimpan setengah dari gambar sebagai karakter daripada harus menggunakan bilangan bulat:

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

String yang dihasilkan dibalik untuk menambah beberapa byte pada memiliki descending for loop (juga memecahkan masalah yang mengganggu dengan heksadesimal lolos). Loop lain dapat dibalik tanpa masalah berkat simetri.

Setiap karakter digeser ke kiri dan diberi batas (dengan perhatian khusus pada baris pertama dan terakhir). Maka itu hanya masalah menghasilkan string dengan skala yang benar.

Semua untuk loop membuat saya merasa ada cara yang lebih baik.

gastropner
sumber
1
197 byte .
Jonathan Frech
@ JonathanFrech Ah, terima kasih!
gastropner
188 byte .
Jonathan Frech
@ JonathanFrech Rapi, tapi tidak terlalu tertarik pada yang tidak patut.
gastropner
Apakah Anda tahu mengapa \xfftidak dapat diganti dengan ÿ( TIO )?
Jonathan Frech
2

Serius, 116 byte

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

Baris baru itu penting. 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

Strategi yang sama dengan jawaban CJam Dennis , tetapi nilainya dikodekan dalam hex, bukan XOR dengan 544, dan manipulasi string jauh lebih sulit di Seriously.

Cobalah online!

Mego
sumber
2

BBC BASIC, 239 236 232 214 byte

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

Panggilan PROCM(1,1,35) menghasilkan hantu yang terbuat dari simbol #. Argumen untuk PROCM adalah: skala horizontal, skala vertikal, nilai karakter ASCII.

Program ini akan bekerja baik untuk Brandy Basic, dan BASIC 2 pada Model B. asli

Darzzr
sumber
2

Batch, 740 722 720 byte

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

Sunting: Disimpan 18 20 byte dengan menghapus spasi yang tidak perlu.

Neil
sumber
2

Stax , 45 byte

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

Jalankan dan debug itu

Penjelasan:

"<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
wastl
sumber
Yang ketiga menunjukkan dengan beberapa warna di layar saya. Sangat bagus :-)
Luis Mendo
1

JavaScript (ES6), 167 byte

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

Berdasarkan jawaban @ Dennis. Saya kira Anda bisa memotong byte lain dengan menggunakan FF literal bukan \f, tapi saya ragu saya bisa menempelkannya di sini. Ketika mencoba ini Anda juga mungkin ingin menggunakan \u01CAbukan NJkarakter.

Sedihnya, menambahkan spasi ke argumen karakter menghabiskan 6 byte.

Neil
sumber
1

Python 2, 838 828 618 byte

Disimpan 210 byte dengan menggunakan string daripada array, terima kasih kepada Dennis untuk saran itu, saya tahu saya bisa membuat lebih baik, tetapi untuk sekarang ini merupakan peningkatan yang baik.

Ini adalah yang terbaik yang bisa saya lakukan, saya tidak terlalu baik dengan grafik di baris perintah.

Saya mengambil hantu kecil sebagai basis.

Saya menggunakan ascii 219 secara default, karena dengan char itu, hantu itu terlihat sangat keren !!!

Golf

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

Cobalah repl.it

Tidak disatukan

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

Uji

masukkan deskripsi gambar di sini

Argenis García
sumber
Anda akan mencapai skor yang jauh lebih baik jika Anda hanya menyimpan gambar yang tidak dikompresi dan tidak dikompres dalam sebuah string. Juga, Anda membuang-buang byte pada argumen default dan pernyataan kembali.
Dennis
Tidak ada yang namanya kode ASCII 219.
mbomb007
1

Python 2, 244 byte

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)])
Naveen Arun
sumber
1

Python 2, 169 byte

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)

Cobalah online!

Penjelasan:

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

Seperti dalam jawaban Dennis , setiap karakter dalam string ini mewakili representasi biner dari satu baris setengah kiri "gambar", XOR 544.

for c in <unicode string>:

Untuk setiap karakter dalam string, lakukan hal berikut:

    bin(ord(c)^544)

Ubah karakter menjadi representasi integer, lalu lakukan biner XOR dengan 544. Kemudian ubah integer ini menjadi string karakter representasi binernya, seperti '0xb111111111111'.

    for d in <string>[2:]

Untuk setiap karakter dalam sengatan, mulai dari posisi 2 (yang melompati 0b di awal), lakukan hal berikut:

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

Jika karakter == "1", ganti dengan karakter yang disediakan, jika tidak gantilah dengan spasi. Kemudian salin karakter ini x kali. (x = 0 akan menghasilkan string kosong.)

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

Gabungkan semua string menjadi satu string panjang, dipisahkan dengan string kosong "".

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

buat string b + kebalikan dari b, lalu buat array yang berisi y instance dari string ini (y = 0 akan menghasilkan daftar kosong []), lalu tambahkan daftar ini ke daftar z.

print"\n".join(z)

Akhirnya, cetak untuk menyaring setiap string yang dihasilkan, dipisahkan oleh jeda baris.

Triggernometri
sumber