รูปภาพของเพื่อนเก่าในงานศิลปะ ASCII


36

ฉันหวังว่ารูปนี้จะคุ้นเคยกับคุณ

ป้อนคำอธิบายรูปภาพที่นี่

มันเป็นหนึ่งในPacmanผีในเขารัฐ 'ความเสี่ยง'หลังจาก Pacman ได้กินยาพลังงาน

ความท้าทาย

นึกภาพผีของเราในกรอบเล็ก ๆ โดยใช้ศิลปะ ASCII ในระดับปกติ (เพิ่มเติมเกี่ยวกับเรื่องนี้ในภายหลัง) แต่ละตารางในภาพด้านบนควรตรงกับตัวละครตัวหนึ่งและกรอบควรมีการแยกตัวละครหนึ่งตัวขึ้นและลงและตัวแยกสองตัวไปทางซ้ายและขวาของผี :

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

แต่นี่ดูไม่สวยมาก #อาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับพิกเซลที่ใช้งานอยู่ นอกจากนี้เซลล์ตัวละครไม่ได้เป็นรูปสี่เหลี่ยมจัตุรัสซึ่งทำให้เพื่อนของเราดูน่ากลัวกว่าที่เป็นอยู่แล้ว

ดังนั้นเพื่อให้มีความยืดหยุ่นมากขึ้นรูปภาพจะเปลี่ยนไปตามพารามิเตอร์การป้อนสามพารามิเตอร์:

  • ตัวละครที่จะใช้สำหรับพิกเซลที่ใช้งานอยู่;
  • ตัวประกอบสเกลแนวนอน
  • ตัวประกอบสเกลแนวตั้ง

ตัวอย่างเช่นกับ%, 4, 2ouput จะเป็นภาพที่ดีขึ้นมอง

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

กฎระเบียบ

อนุญาตบิวอินได้ทั้งหมด

อินพุตถูกนำมาในรูปแบบที่เหมาะสมและคำสั่งใด ๆ อินพุตแรกข้างต้น (อักขระสำหรับพิกเซลที่ใช้งานอยู่) รับประกันว่าจะเป็นอักขระ ASCII ที่พิมพ์ได้ (รหัส 32 ถึง 126)

พื้นที่ต่อท้ายหลังแต่ละบรรทัดหรือขึ้นบรรทัดใหม่หลังจากบรรทัดสุดท้ายเป็นที่ยอมรับ

รหัสกอล์ฟน้อยที่สุดที่จะชนะ


ดูรูปภาพอย่างตั้งใจสักสองสามวินาที จากนั้นดูว่าเกิดอะไรขึ้น! ...
sergiol

ไม่อยากเชื่อเลยว่าไม่มีการส่ง Charcoal แล้ว
Weijun Zhou

คำตอบ:


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

โดย XOR จำนวนเต็มกับ 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 ǟ

เป็นสตริงที่ใช้ Escape

มันทำงานอย่างไร

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

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 ถึง 1,023 พิกเซลที่ใช้งานอยู่จะถูกเข้ารหัสเป็น 0 มากกว่า 1 ดังนั้นแถวแรกคือหมายเลข 0 มากกว่า 1023

เนื่องจากแถวที่ต่อเนื่องกันมีความแตกต่างกันเพียงไม่กี่พิกเซลเท่านั้นจึงมีการเข้ารหัสตัวเลขเพิ่มเติมแตกต่างกัน ดังนั้นแต่ละแถวจะถูกถอดรหัสเป็นผลรวมสะสมของตัวเลขทั้งหมดจนถึงแถวนั้นตามด้วยการแปลงเป็นไบนารี

ตัวเลขที่ต้องการนั้น

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

0 ถูกนำเสนอใน MATL โดยใช้Oฟังก์ชั่นซึ่งจะหลีกเลี่ยงตัวคั่นที่มีตัวเลขใกล้เคียง นอกจากนี้สัญญาณเชิงลบไม่ได้หมายถึงไบต์พิเศษเนื่องจากทำหน้าที่เป็นตัวคั่น

เมื่อสร้างอาร์เรย์แล้วจะได้รับผลรวมลบด้วยการถอดรหัสแบบไบนารีและสะท้อนในแนวนอน อาร์เรย์ 2D ที่เป็นผลลัพธ์ถูกใช้เพื่อทำดัชนีสตริงสองอักขระเพื่อสร้างผลลัพธ์ สายนี้เป็นรูปแบบ'% 'ที่'%'เป็นตัวป้อนข้อมูล

ตามที่ระบุไว้โดย @Conor รหัสยังสามารถใช้งานได้กับสองตัวอักษรเป็นอินพุต ในกรณีนี้การจัดทำดัชนีสตริงสุดท้ายเข้าจะอยู่ในรูปแบบที่ใส่เป็นสตริงสองถ่าน'%_ ' '%_'พื้นที่จะถูกละเว้นเพียงเพราะอาร์เรย์การจัดทำดัชนีที่อยู่สองตัวอักษรแรกเท่านั้น

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 ไบต์

-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

สายอักขระผลลัพธ์ถูกย้อนกลับเพื่อ eke ออกสองสามไบต์ในการวนรอบสำหรับการวนรอบ (ยังแก้ไขปัญหาน่ารำคาญกับการหลบหนีฐานสิบหก) วงอื่น ๆ สามารถพลิกได้โดยไม่มีปัญหาต้องขอบคุณสมมาตร

อักขระแต่ละตัวถูกเลื่อนไปทางซ้ายและกำหนดเส้นขอบ (ด้วยความระมัดระวังเป็นพิเศษในแถวแรกและแถวสุดท้าย) จากนั้นเป็นเพียงเรื่องของการแสดงผลสตริงอย่างถูกต้อง

ห่วงสำหรับห่วงทำให้ฉันรู้สึกว่ามีวิธีที่ดีกว่า


1
197 ไบต์
Jonathan Frech

@JonathanFrech อ่าขอบคุณ!
Gastropner

188 ไบต์
Jonathan Frech

@JonathanFrech เรียบร้อยแล้ว แต่ไม่กระตือรือร้นเกินกว่าที่จะพิมพ์ได้
Gastropner

คุณมีความคิดว่าทำไม\xffไม่สามารถแทนที่ด้วยÿ( TIO )
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

บรรทัดใหม่นั้นมีความสำคัญ 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

กลยุทธ์เดียวกับคำตอบ CJamของเดนนิสแต่ค่านั้นถูกเข้ารหัสในรูปแบบเลขฐานสิบหกแทนที่จะเป็น XORed ที่มี 544 และการจัดการสตริงนั้นยากขึ้นอย่างมากในซีเรียส

ลองออนไลน์!


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

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 เป็นค่าเริ่มต้นเพราะด้วยตัวละครตัวนั้นผีมันเจ๋งมาก !!!

แข็งแรงเล่นกอล์ฟ

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

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

ทดสอบ

ป้อนคำอธิบายรูปภาพที่นี่


คุณจะได้คะแนนที่ดีขึ้นมากถ้าคุณบันทึกภาพที่ไม่บีบอัดและไม่ถูกปรับสัดส่วนในสตริง นอกจากนี้คุณยังสูญเสียไบต์บนอาร์กิวเมนต์เริ่มต้นและคำสั่งส่งคืน
Dennis

ไม่มีสิ่งดังกล่าวเป็นรหัส ASCII 219
45432 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)

แปลงอักขระเป็นการแทนจำนวนเต็มจากนั้นดำเนินการ XOR แบบไบนารีด้วย 544 จากนั้นแปลงจำนวนเต็มนี้เป็นสตริงอักขระของการแทนแบบไบนารีเช่น '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.