Зображення старого друга в мистецтві ASCII


36

Я сподіваюся, що ця картина вам здається знайомою.

введіть тут опис зображення

Це один із привидів Пакмана у його "вразливому" стані , після того, як Пакман з'їв таблетку харчування.

Змагання

Зобразіть наш привид у невеликому кадрі, використовуючи арт ASCII. У нормальному масштабі (детальніше про це пізніше) кожен квадрат на наведеному вище зображенні повинен відповідати одному символу, і кадр повинен мати розділення в один символ вгору і вниз, і розділення з двох символів зліва і справа від привидів :

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

Але це виглядає не дуже красиво. #може бути не найкращим вибором для активних пікселів. Крім того, клітини символів не є квадратними, що робить нашого друга більш привидним, ніж він є.

Отже, щоб мати більшу гнучкість, зображення змінюватиметься відповідно до трьох вхідних параметрів:

  • Символ, який слід використовувати для активних пікселів;
  • Коефіцієнт горизонтального масштабу;
  • Коефіцієнт вертикальної шкали

Наприклад, з %, 4, 2висновок буде краще виглядають

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

Правила

Всі вбудовані дозволені.

Входи приймаються у будь-якому розумному форматі та в будь-якому порядку. Перший вхід вище (символ для активних пікселів) гарантовано буде друкованим символом ASCII (коди з 32 по 126).

Проміжки після кожного рядка або нові рядки після останнього рядка є прийнятними.

Код гольфу, виграє найменше байтів.


Погляньте уважно на малюнок кілька секунд. Тоді подивіться, що станеться! ...
сергіол

Не можу повірити, що поки що немає жодних матеріалів.
Вейджун Чжоу

Відповіді:


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 двома байтами.

За допомогою XORing цілих чисел з 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 save 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

Діалог 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+: add 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

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 мови замініть коми на пробіли
Луїс Мендо

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 я відчуваю, що є кращий спосіб.



@JonathanFrech Ах, дякую!
гастропнер


@JonathanFrech Акуратний, але не надто захоплений недрукованими видами.
гастропнер

Чи маєте ви ідею, чому \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

Цей новий рядок важливий. 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

Стакс , 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

Пітон 2, 838 828 618 байт

Збережено 210 байт, використовуючи рядок замість масиву, завдяки Деннісу за те, що я запропонував, я знаю, що можу зробити ще краще, але поки що це гарне вдосконалення.

Це найкраще, що я можу зробити, я не дуже добре графіка в командному рядку.

Я взяв малого привида за основу.

Я використовую 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)

Перетворіть символ у його ціле подання, а потім виконайте двійкове 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)

Нарешті, надрукуйте на екрані кожну із створених рядків, розділених перервами рядків.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.