Піксельне мистецтво, епізод 1: показ Super Mario


47

це-я!

Сьогоднішнє завдання просте: написати програму або функцію, яка відображає непрацюючий малий спрайт Маріо, від Super Mario Bros, на NES, на синьому тлі.

Будь-яка запис є дійсною, доки вона відображає ці 12 * 16 пікселів де-небудь на екрані / вікні / браузері.

(EDIT: відображене зображення можна збільшити, якщо ваша мова не може робити піксельне зображення. Ви також можете виводити ASCII art або HTML art, але використовуючи потрібні кольори.)

Зображення (збільшення 400%):

Ви повинні використовувати такі кольори:

  • синій: # 6B8CFF
  • червоний: # B13425
  • зелений / коричневий: # 6A6B04
  • помаранчевий: # E39D25

Найкоротша програма (за кількістю символів) виграє!

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

Ось і ми!


Поточна таблиця лідерів

Найкоротший відповідь, використовуючи лише код:

Найкоротша відповідь, використовуючи якесь зображення з твердим кодом:


2
Також створення файлу заборонено? Це має бути відображено?
Мартін Ендер

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

20
Нитчікінг: Це Маріо, а не Супер Маріо.
Денніс

5
Яка весела ідея ... Ось ідея для подальшого виклику: візьміть зображення Маріо (будь-якого формату) та перетворіть його на образ Луїджі!
Zibbobz

3
Чи можемо ми скласти пієт-програму, схожу на нього?
Conor O'Brien

Відповіді:


36

HTML / JS, 206 158 153 102


102

Використовуваний трюк: збережіть стиснутий GIF-файл як HTML-файл, а в кінці додайте <img src = #>

Завдяки цьому запису: https://codegolf.stackexchange.com/a/39926/10732 від @NiettheDarkAbsol

GIF87a  ¡ kŒÿã%jk±4%,       6„‡héj„Af-ÕdÎy\%    …R˜0”ŒÈJ­³I©±²û“ú=ª$±p%i¸•¤ <img src=#>

Демонстрація: http://meuziere.free.fr/mario/gif.html


Старіші версії:

153

Використовуваний трюк: збережіть стиснутий файл PNG як HTML-файл, а в кінці додайте <img src = #>

‰PNG


IHDR         _v”   PLTEjkkŒÿ±4%ã%ó’V   IIDAT×c[ʵj%C€ÍUŸ?|ìíœÿ02„ÿÿÊÐÊàÐÄÈÀ°ŠáÓë~†«ö3üZµž!jÚR‡P x( s6ïåÇ<img src=#>


158

Використовуваний трюк: встановлення обрізаних данихURI стисненого PNG як SRC тегу IMG та упаковка всього в символи Unicode.


Виконайте це на консолі JS:

document.write(unescape(escape('🁩𫑧𘁳𬡣👤𨑴𨐺𪑭𨑧𩐻𨡡𬱥𝠴𛁩𥡂𣱒𭰰𢱇𩱯𠑁𠑁𣡓𥑨𡑕𩱁𠑁𠑷𠑁𠑁𤑁𩱍𠑁𠑂𩡄𜱡𥑁𠑁𠑄𡡂𣑖𡑖𬑡𭱒𬡪𤀫𮁎𠱘𪡮𤱘𮡫𩱨𥱁𠑁𠑓𥑬𡑑𥡑𢐱𜡍𢑗𮁘𢱅𣁖𬑊𥑏𠑺𥡕𡱮𮠹𛱇𦁺𬰷𤡭𨰯𮡁𮑨𤀯𛱹𪁄𤑅𣑲𩰰𣑔𢑷𣁃𢱧𩑈𥀶𜰶𡱦𝡶𜡍𛱸𨑴𦠴𪁡𭁰𤱂𫱤𤑯𢁧𫱁𭰾').replace(/uD./g,'')))


206

Розпаковано (206b):

<img src=data:image;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQAgMAAABfD3aUAAAADFBMVEVqawRrjP+xNCXjnSXzkghWAAAASUlEQVQI12MIWxXKELVqJUOAzVUGnz9/GXzs7Rmc/zAyhP//yhDQEMrg0MTIwLCKgeHT636Gf6v2M/xatZ4hatpSBodQoHgoAw>

Демо


Використовувані інструменти:


Теги вам не потрібні. Просто скористайтеся даними uri chrome та введіть їх у свій рядок URL. 200 символів
Оптимізатор

Гм ... Я вважав, що dataURI не є дійсною "програмою". Але ти маєш рацію. Усі веб-переглядачі дозволяють використовувати даніURI на адресній панелі.
xem

Тепер ви використовуєте лазівку як OP;). Ви завантажуєте всю роботу на зовнішнє / вбудоване стиснення формату GIF. Якщо це здорово, ми всі повинні піти на полювання на незрозумілі формати зображень із найкращою швидкістю стиснення зараз, і я міг би врятувати себе багато роботи над написанням власного стиснення. ;)
Мартін Ендер

2
@xem Ну, ваш виклик, ваш дзвінок. Але це здається трохи безглуздим, якщо ми зараз просто шукаємо найбільш стислий існуючий формат файлу. ;)
Мартін Ендер

1
Здається, посилання rawgit мертве.
Аддісон Кримп

27

Математика, 412 292 252 212 163 148 143 141 символів

f=FromDigits[ToCharacterCode@#,2^16]~IntegerDigits~#2&;Image@Partition[f["넴╫賿橫ӣ鴥",256][[3#+1;;3#+3]]/256&/@"吀啐^A媾핮﻽溿뽫ﺩ埿⩕樨ꦪª⿼?ཐᐅ橕ꦪ喪"~f~4,12]

При цьому використовується позначення каретки ^Aдля символу управління в кодовій точці 1. У Mathematica я фактично можу вставити персонажа буквально, хоча це призводить до різного роду потворності при копіюванні речей навколо. У будь-якому випадку, вищевказані на 2 символи коротші, ніж у моїй попередній версії, і я отримав таких символів, щоб використовувати кодування індексів палітри кольорів base-4 замість base-5. Зараз я не можу зафіксувати пояснення та знімок екрана нижче, тому я залишаю вас тут із оригінальною базовою версією моєї відповіді:


f=FromDigits[ToCharacterCode@#,2^16]~IntegerDigits~#2&;Image@Partition[f["넴╫賿橫ӣ鴥",256][[3#-2;;3#]]/256&/@"ᯱ曎㌟뱮䚻륏Σ襺ﺦ您汜豈塘ᙉ雬儥衰ꐰꃾ纔ㆯ쭴뫋澖ᕿ蓉"~f~5,12]

Я кодую пікселі символами Unicode (так, для підрахунку символів!).

Ось як це виглядає в Mathematica:

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

Ось як це працює:

Спочатку ми визначаємо функцію, fяка перетворює рядки Unicode (передані як перший аргумент #) у списки цілих чисел. Спочатку отримуємо коди символів. Це можна інтерпретувати як цифри базового числа 65536. А потім ми перетворюємо це число на іншу базу, передану як другий аргумент #2.

Тепер давайте зробимо це для довшого рядка Unicode. ToCharacterCodeдає цей список:

{7153, 26318, 13087, 48238, 18107, 47439, 931, 35194, 62191, 65190, \
 24744, 57782, 27740, 35912, 22616, 5705, 38636, 20773, 34928, 42032, \
 41214, 32404, 12719, 52084, 47819, 28566, 5503, 33993}

Трактуючи це як базу 65536:

7933607912575313477287527915733176998797205587959732019781370103381...
4831246938139171755469819519515972565671101475553962564506286523593

І перехід на базу 5:

{2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
 2, 2, 2, 3, 3, 3, 4, 4, 3, 4, 2, 2, 2, 2, 3, 4, 3, 4, 4, 4, 3, 4, 4, \
 4, 2, 2, 3, 4, 3, 3, 4, 4, 4, 3, 4, 4, 4, 2, 3, 3, 4, 4, 4, 4, 3, 3, \
 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 3, 1, 3, 3, 3, \
 2, 2, 2, 2, 2, 3, 3, 3, 1, 3, 3, 1, 3, 3, 3, 2, 3, 3, 3, 3, 1, 1, 1, \
 1, 3, 3, 3, 3, 4, 4, 3, 1, 4, 1, 1, 4, 1, 3, 4, 4, 4, 4, 4, 1, 1, 1, \
 1, 1, 1, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 1, \
 2, 2, 1, 1, 1, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 3, \
 2, 2, 2, 2, 3, 3, 3, 3}

Це кольорові індекси пікселів, в порядку синього, червоного, зеленого, помаранчевого. Ми використовуємо їх для індексації до списку чисел, який є кольоровою палітрою.

Тепер про палітру кольорів. Ось так "넴╫賿橫ӣ鴥". Ми використовуємо наведені вище індекси для вибору правильного рядка. Потім ми знову застосовуємо нашу функцію, але використовуючи базу 256. Це дає список з 12 цілих чисел:

{177, 52, 37, 107, 140, 255, 106, 107, 4, 227, 157, 37}

Ми використовуємо ;;індексацію діапазону, щоб витягнути відповідний фрагмент для поточного кольору.

Нарешті, ми просто використовуємо, Partitionщоб розділити це на рядки 12та подати Image. Вуаля!

Редагувати: З упаковкою Unicode RLE вже не вартувала. Видаливши його, збережено 50 символів.

Редагувати: Звичайно, без RLE також не потрібно їхати на базу 16.

Редагувати: І хоча ми це робимо, чому б і Unicode не упакувати кольорову палітру? (У мене є думка, що я можу трохи більше заощадити, зробивши всю палітру кольорів також однією струною і використовуючи Partitionтам теж. Спробую це пізніше.)

Редагувати: Так, це збрило ще 5 байт.


1
Ви б не хотіли додати скріншот результату? (не те, що я не довіряю вашому коду, але цікаво, як він відображається: у вікні? браузер? інше?)
xem

@xem Зробимо. Це середовище REPL, здатне графічно вводити та виводити.
Мартін Ендер

Не впевнені, але ви відображаєте нижню частину зображення?
Оптимізатор

1
@Optimizer Ні, я сумніваюся, що мені вдасться зробити це менше символів, ніж я б економив.
Мартін Ендер

Коли я дивлюся в документацію Mathematica, я не бачу жодного використання на тильді, але тут виявляється, що ви використовуєте його для передачі результату однієї функції в іншу, а потім застосуєте додатковий аргумент до цієї другої функції (IntegerDigits)? Також колірна палітра: дивлячись на зображення, здається, що є лише чотири кольори, але ваша палітра кольорів, мабуть, включає більше: {177, 52, 37, 107, 140, 255, 106, 107, 4, 227 , 157, 37}. Переглядаючи документацію для Image, схоже, вона друкує масштаб сірого, якщо не передбачені додаткові параметри, такі як ColorScale -> RGB.
CryptoCommander

20

Ява: 398 377

void s(){new java.awt.Frame(){public void paint(java.awt.Graphics g){int i=0,x,m[]={12226,44085194,467839834,0x5abea55a,0x5bbd5d50,0x5ffe9540,0x5ffe9540,0x5aee5d50,531408218,334277466,333492170,0xc02fc2},c[]={7048447,0xB13425,6974212,0xE39D25};for(setSize(99,99);i<192;g.setColor(new java.awt.Color(c[m[x]&3])),m[x]/=4,g.drawLine(x+40,60-i%16,x+40,60-i++%16))x=i/16;}}.show();}

Просто малює спрайт, розпаковуючи int для кожного стовпця. Показано в повній програмі:

class P{
    public static void main(String[]a){
        new P().s();
    }

    void s(){
        new java.awt.Frame(){           
            public void paint(java.awt.Graphics g){
                int i=0,x,m[]={12226,44085194,467839834,0x5abea55a,0x5bbd5d50,0x5ffe9540,
                               0x5ffe9540,0x5aee5d50,531408218,334277466,333492170,0xc02fc2},
                          c[]={7048447,0xB13425,6974212,0xE39D25};
                for(setSize(99,99);i<192;
                    g.setColor(new java.awt.Color(c[m[x]&3])),m[x]/=4,
                    g.drawLine(x+40,60-i%16,x+40,60-i++%16)
                )x=i/16;
            }
        }.show();
    }
}

Обов’язковий скріншот:

це я, Маріо


1
Ви можете зберегти 9 байт за допомогою import java.awt.*.
Кевін Кройсейсен

15

машинний код x86, 102 байти

Як це працює: Зображення зберігається у вигляді 2-бітного зображення за допомогою палітри. Кожен рядок зображення зберігається у вигляді 3-х байт, після чого 1 байт кольорової палітри. Це дозволяє завантажувати дані як єдине DWORD. Дванадцять пікселів виводяться шляхом маскування найнижчих 2 біт значення, записуючи їх у відеопам'ять, а потім зміщуючи все значення на два біта вправо. Після виведення пікселів для рядка байт палітри записується в палітру VGA. Коли зображення закінчено малювати, програма надходить у нескінченний цикл.

Код складання для створення двійкового:

org 100h
mov al,13h
int 10h
les ax,[bx]

mov si,image_data
draw:
add di,320-12
lodsd
xchg eax,ebx
mov cl,12
row:
mov ax,bx
and al,3
stosb
shr ebx,2
loop row
xchg ax,bx
mov dx,0x3c9
out dx,al
test al,al
jnz draw

image_data: db 21,0,85,0xb1/4, \
5,0,64,0x34/4,            \
165,190,87,0x25/4,        \
185,191,127,0x6b/4,       \
185,254,254,0x8c/4,       \
233,191,106,0xff/4,       \
213,255,95,0x6a/4,        \
165,168,85,0x6b/4,        \
169,40,106,0x4/4,         \
170,0,170,0xe3/4,         \
47,195,248,0x9d/4,        \
63,0,252,0x25/4,          \
15,0,240,111,             \
5,20,80,111,              \
169,85,106,111,           \  
170,85,170 

Base-64, кодований двійковим файлом, збережіть його як Mario.com, щоб запустити його: sBPNEMQHvigBgcc0AWatZpOxDInYJAOqZsHrAuL1k7rJA + 6EwHXiwxUAVSwFAEANpb5XCbm / fxq5 / v4j6b9qaqqq88qxq88Qqqhxq8xq8xq8FQ5Q5QPQ5QPQQQQQQQqqqqqx9xqxq8xq8qqqqqx9xqxq8qqqqqx9xq8xq8qqqqqx9xq8qqqqqx9xq8qqqqqqx9xq8qqqqqqx9xq8qqqqqqx9q

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


10

GIF - 93 байти

Жорстке кодування зображення, очевидно, нормально, так що ... так? : D

GIF87a  ¡ kŒÿã%jk±4%,       6„‡héj„Af-ÕdÎy\%    …R˜0”ŒÈJ­³I©±²û“ú=ª$±p%i¸•¤  ;

Як видно в Блокноті ++

скріншот у NP ++

Як PHP - 131 байт

<? header("Content-Type:image/gif");?>GIF87a  ¡ kŒÿã%jk±4%,       6„‡héj„Af-ÕdÎy\%  …R˜0”ŒÈJ­³I©±²û“ú=ª$±p%i¸•¤  ;

1
чи можете ви, будь ласка, десь завантажили свій gif (наприклад, ctrlv.in)? Я хотів би використати його у своєму записі замість PNG :)
xem


@NiettheDarkAbsol Я не впевнений, як ви порахували розмір, але я рахую 150 байт. Незважаючи на те, підрахунок балів за символами, і, здається, це 114 символів.
Мартін Ендер

2
Так, PHP-фрагмент для мене добре (навіть якщо ви могли видалити останні 2 байти). Але необроблений фрагмент gif - це не програма.
xem

1
@xem: Якщо браузер вважається "інтерпретатором" для HTML / javascript / тощо, і подавання його фрагмента
необмеженої

10

Bash + ImageMagick: 350 331 321 символ

(Palette безсовісно вкрадені у Мартіна Büttner «S відповідь .)

p=(B13425 6B8CFF 6A6B04 E39D25)
for c in 21 0 85 5 0 64 165 190 87 1{85,91,27,85} 254{,} 233 191 106 213 255 95 165 168 85 169 40 106 170 0 170 47 195 248 63 0 252 15 0 240 5 20 80 169 85 106 170 85 170;{
for j in 0 2 4 6;{
d+=(-fill \#${p[c>>j&3]} -draw point\ $[i%12],$[i++/12])
}
}
convert -size 12x16 xc: "${d[@]}" x:

Вибірка зразка:

Маріо

Для огляду його легко додайте -scale 120до convertпараметрів s, щоб отримати 10-кратну версію:

Маріо масштабував 10


2
s/185 191 127 185 254 254/1{85,91,27,85} 254{,}/; s/do/{/; s/done/}/
grawity

До. Я навіть upvoted DigitalTrauma пов'язаний «s рада , але я забуваю , що {.. }. Дякую, @grawity
манатура

8

Octo / XO-Chip , 70 байт

Octo - це мова складання високого рівня, яка компілює в байткодизовані інструкції для віртуальної машини CHIP-8 . Octo пропонує деякі спеціальні розширення під назвою "XO-Chip" до базового байтового коду CHIP-8, включаючи можливість малювати 4-кольорові растрові карти через накладені бітові площини.

Складені байти:

0xA2 0x08 0xF3 0x01 0xD0 0x00 0x1F 0x00 0x3F 0xC0 0x39 0x00 0x51 0x00 0x58 0x80
0x21 0xE0 0x00 0x00 0x3F 0x00 0x7F 0xE0 0xFF 0xF0 0x36 0xC0 0x1F 0x80 0x3F 0xC0
0x39 0xC0 0x70 0xE0 0xF0 0xF0 0x00 0x00 0x00 0x00 0x3F 0x80 0x7F 0xE0 0x7F 0xF0
0x3F 0xE0 0x1F 0xC0 0x37 0x00 0x76 0xE0 0xF0 0xF0 0xE9 0x70 0xE0 0x70 0xC0 0x30
0x00 0x00 0x70 0xE0 0xF0 0xF0

Маріо

Запустити його тут у своєму браузері: http://johnearnest.github.io/Octo/index.html?gist=33aa37d4717a425ccd4f

Напевно, більш освітлювальним є побачення мови складання Octo, яка виробляє цей байт-код:

: main
    i := mario
    plane 3
    sprite v0 v0 0

: mario
    0x1F 0x00 0x3F 0xC0 0x39 0x00 0x51 0x00 
    0x58 0x80 0x21 0xE0 0x00 0x00 0x3F 0x00 
    0x7F 0xE0 0xFF 0xF0 0x36 0xC0 0x1F 0x80 
    0x3F 0xC0 0x39 0xC0 0x70 0xE0 0xF0 0xF0 
    0x00 0x00 0x00 0x00 0x3F 0x80 0x7F 0xE0 
    0x7F 0xF0 0x3F 0xE0 0x1F 0xC0 0x37 0x00 
    0x76 0xE0 0xF0 0xF0 0xE9 0x70 0xE0 0x70 
    0xC0 0x30 0x00 0x00 0x70 0xE0 0xF0 0xF0 

Основна програма - це три двобайтові інструкції. Встановіть регістр індексу пам'яті iна початок сегмента даних, виберіть площину 3 малювання (3 - це бітова маска; це вказує на те, що ви хочете намалювати в 4 кольоровому режимі з обома бітовими площинами), а потім намалюйте спрайт у позиції x і y, заданої реєструвати v0(ініціалізовано до нуля). Остаточний 0 забезпечує розмір спрайта, який у наборах інструкцій SuperChip та XO-Chip буде малювати спрайт 16х16. У 4 кольоровому режимі за растровою картою для першої площини негайно йде растрова карта для другої площини.

Щоб побачити, як працюють літаки, розгляньте цю модифіковану програму, яка прокручує одну площину праворуч після малювання маріо:

mario2

: main
    i := mario
    plane 3
    sprite v0 v0 0
    plane 2
    scroll-right
    scroll-right
    scroll-right
    scroll-right

: mario
    0x1F 0x00 0x3F 0xC0 0x39 0x00 0x51 0x00 
    0x58 0x80 0x21 0xE0 0x00 0x00 0x3F 0x00 
    0x7F 0xE0 0xFF 0xF0 0x36 0xC0 0x1F 0x80 
    0x3F 0xC0 0x39 0xC0 0x70 0xE0 0xF0 0xF0 
    0x00 0x00 0x00 0x00 0x3F 0x80 0x7F 0xE0 
    0x7F 0xF0 0x3F 0xE0 0x1F 0xC0 0x37 0x00 
    0x76 0xE0 0xF0 0xF0 0xE9 0x70 0xE0 0x70 
    0xC0 0x30 0x00 0x00 0x70 0xE0 0xF0 0xF0 

Якщо вам сподобається це, можливо, вам сподобається одне з інших моїх рішень, написаних Octo. Насправді цей жовтень насправді починається ігрове варення на основі жовтня.


6

Гровий 417 386

Весело, як пекло, але зі страшним рахунком. GroovyFX потрібен

m=[b:'6B8CFF',r:'B13425',g:'6A6B04',o:'E39D25'];groovyx.javafx.GroovyFX.start{stage(visible:!0){scene(width:60,height:80){flowPane{"3b5r4b2b9r1b2b3g2o1g1o3b1b1g1o1g3o1g3o1b1b1g1o2g3o1g3o1b2g4o4g1b3b7o2b2b2g1r3g4b1b3g1r2g1r3g1b4g4r4g2o1g1r1o2r1o1r1g2o3o6r3o2o8r2o2b3r2b3r2b1b3g4b3g1b4g4b4g".toList().collate 2 each{l->(l[0]as int).times{rectangle(width:5,height:5,fill:"#"+m[l[1]])}}}}}}

неозорений:

m=[b:'6B8CFF',
   r:'B13425',
   g:'6A6B04',
   o:'E39D25']           

s=5

groovyx.javafx.GroovyFX.start {bd->
  stage(visible: !0) {
    scene(width:s*12, height:s*16) {
      flowPane {
        "3b5r4b 2b9r1b 2b3g2o1g1o3b 1b1g1o1g3o1g3o1b 1b1g1o2g3o1g3o 1b2g4o4g1b 3b7o2b 2b2g1r3g4b 1b3g1r2g1r3g1b 4g4r4g 2o1g1r1o2r1o1r1g2o 3o6r3o 2o8r2o 2b3r2b3r2b 1b3g4b3g1b 4g4b4g"
          .replaceAll(" ", "")
          .toList()
          .collate(2) 
          .each { l->
            t=l[0] as int
            cr=m[l[1]]
            t.times {
              rectangle(width:s, height:s, fill:"#"+cr) 
            }
          }
      }
    }
  }
}

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


grep()замістьtoList()
cfrick

5

HTML / JS, 427 408 264 256 239 226 символів

Obfuscatweet, 271 270 264 256 239 226 символів

Використовуючи obfuscatweet, вдалося скоротити це до <250: D

document.write(unescape(escape('🁳𨱲𪑰𭀾𨰽𦰢𝡂𞁃𡡆𘠬𘡂𜐳𝀲𝐢𛀢𝡁𝡂𜀴𘠬𘡅𜰹𡀲𝐢𧐻𨐽𙰰𜐵𝐰𜀰𝐵𝐵𝀰𠑂𡑃𜀲𡑆𡑆𠰲𡑂𡡂𡠲𠡆𡑁𞀰𜱆𡡆𜀰𠐶𠐰𜀲𠐶𞑁𞁁𠐵𝑁𠑆𞑄𝰶𡡆𡀵𝐷𡡆𝐵𝐵𡠰𝐴𜐵𜀲𠐰𜁁𞁁𠐰𜁁𠐧𞱷𪑴𪀨𩁯𨱵𫑥𫡴𚑦𫱲𚁩🐰𞱩🀹𝠻𭱲𪑴𩐨𙰼𨡲🠧𚐩𮱨🐨𙰰𜀰𙰫𬁡𬡳𩑉𫡴𚁡𛡳𫁩𨱥𚁩𛁩𚰽𝠩𛀱𝠩𛡴𫱓𭁲𪑮𩰨𝀩𚐮𬱬𪑣𩐨𛐱𜠩𞱦𫱲𚁪🐰𞱪🀱𜠻𭱲𪑴𩐨𙰼𬡰𘁳𭁹𫁥🐢𬁡𩁤𪑮𩰺𜐠𞀻𨡡𨱫𩱲𫱵𫡤𞠣𙰫𨱛𪁛𪠫𚱝𧐫𙰢🠼𛱲𬀾𙰩𚐻𯐼𛱳𨱲𪑰𭀾').replace(/uD./g,'')))

Нижче наведений код.

Використовуваний трюк: перетворене зображення на base4 Рядок кольорових плиток, перетворений у шістнадцятковий рядок. Індекс основи 4 позначає колір (0 = синій, 1 = червоний тощо). CSS з вбудованим p використовується, оскільки divs потребує вмісту для розширення (також p коротше). Оскільки CSS потрібно починати з літери, перед тегами CSS готується "A".

Прокладка з CSS дає пікселі. Ні в одному з цих знаків не використовуються символи Unicode, з якими я ніколи не надто знайомий, хоча в цьому випадку він, мабуть, перейде до суб-300. Відносна перевага використання прокладки полягає в тому, що ви можете, як і в цьому випадку, підірвати зображення до будь-якого розміру, який ви хочете, щоб був кожен піксель. Я використав 9 пікселів, але якщо ви витратите додатковий символ, ви можете отримати до 99 пікселів на представлений піксель.


CSS, 127 119 118 114 100 13 0 символів

Перехід від pдо rpзнімає необхідність display:inline, вартість +1 char, -15! символи!

Вилучили всі кольори та помістили їх у масив у символах JS -87. Тоді я просто видалив усі css

JS, 300 289 280 275 329 325 символів

c=["6B8CFF","B13425","6A6B04","E39D25"];a='0155000555540ABEC02EFEFC2EBFBF2BFEA803FFF00A6A002A69A8AA55AAF9D76FFD557FF5555F0541502A00A8AA00AA';with(document)for(i=0;i<96;write('<br>')){h=('000'+parseInt(a.slice(i,i+=6),16).toString(4)).slice(-12);for(j=0;j<12;write('<rp style="padding:1 8;background:#'+c[h[j++]]+'"></rp>'));}

Я намагався вирізати якомога більше з цієї простої JS, обробляючи шістнадцяткову рядок, але, враховуючи, що це моя перша спроба, це те, наскільки я отримав використання лише того, що знаю. Написання HTML було скорочено функцією, яка додає теги, і класи використовують базове значення 4 для визначення кольору для відображення.

Використовуючи додаткове скорочення, замінили charAt на дужках [], видалили клас A0 і встановили синій колір за умовчанням для p, заощадивши додаткові 10 символів. Додаткова вартість використання rpтегів компенсується величезними втратами в CSS.

Додатковий зсув - від видалення накладки циклу while до простого додавання "000" для випадку використання та відсікання -12 від нього.

Додав додатковий JS для кольорів, а потім поклав тампон. Помітив помилку з накладкою, для виправлення якої потрібні 2 зайві символи. Ущільнюється пучок петель

HTML-файл, 430 429 419 399 366 342 символів

Демо

<script>c=["6B8CFF","B13425","6A6B04","E39D25"];a='0155000555540ABEC02EFEFC2EBFBF2BFEA803FFF00A6A002A69A8AA55AAF9D76FFD557FF5555F0541502A00A8AA00AA';with(document)for(i=0;i<96;write('<br>')){h=('000'+parseInt(a.slice(i,i+=6),16).toString(4)).slice(-12);for(j=0;j<12;write('<rp style="padding:1 8;background:#'+c[h[j++]]+'"></rp>'));}</script>

Приємно! Я б радив вам видалити всі розриви рядків у своєму коді та надати демо-посилання ( c99.nl ). Як бонус, ви можете упакувати запис у таблицях Unicode, використовуючи xem.github.io/obfuscatweet . Це покращить ваш рахунок.
xem

також ви можете видалити свої теги & lt; html>, помістити тег & lt; style> в кінці та видалити / style та останній "}" останнього правила CSS.
xem

@xem Добре, я вирізав усі рядки і все накреслив. Я спробую розібратися в оптимальному способі розділити JS на obfuscatweet.
Компас

1
obfuscatweet приймає будь-який js-код (тому ви можете помістити туди свої 289 js-символів) або будь-який html-код (щоб ви могли скопіювати тут свій HTML-файл). Виведення obfuscatweet можна виконати на консолі браузера або у файлі HTML, використовуючи правильний метатег шаблона.
xem

psst, ви забули видалити останній "}" частини CSS. Це працює без нього.
xem

5

MATLAB, 194 193 байт

Код:

imagesc(dec2base(base2dec(reshape('5FVQL5VVVT50A4L4HA594GAHA45A015DAL551G2L41GO101VO0A7FMAANVVAAVVVQ5VLVL40L8100L80',5,[])',32),4)-48);colormap([106 107 4;107 140 255;227 157 37;177 52 37]/255)

І вихід:

Маріо

В основному я перетворив зображення Маріо так, щоб кожен піксель був 2-бітним числом. Потім я закодував це в базі 32, яка є рядком, показаним у коді. Спочатку цей рядок розміщується на 5 х 16 (кожен рядок (12 пікселів) 2-бітових чисел був закодований в базу 32), потім перетворюється назад в базу 10. Результат перетворюється ще раз, в цей раз в базу 4, отримуючи масив 12x16 2 бітові числа. Ці числа побудовані за допомогою використання imagesc(). Потім кольори призначаються за colormap()допомогою спеціальної карти кольорів необхідних шестигранних значень.

Приємно, що третина кількості байтів, що використовуються, полягає лише в тому, щоб MATLAB встановив правильні кольори після їх побудови. Код кольору майже така ж кількість байтів, як і весь рядок base32 !.

Не виправляючи колір (видаліть colormap()виклик), це 135 байт, і це вихід для кольорової карти за замовчуванням на MATLAB R2013a:

Маріо, карти немає


4

JavaScript / CSS / HTML 446 430 407 353 328 316

Я грав у гольфі настільки, наскільки міг, і закінчився якимось брудним HTML / JS, але все, що… це працює.

Редагувати : Це все ... Я закінчив.

Правка На цей раз серйозно зроблено.

JavaScript

for(i=0;i<192;)document.body.innerHTML+=(i%12?"":"<br>")+"<font color=#"+["6B8CFF","B13425","6A6B04","E39D25"]["000111110000001111111110002223323000023233323330023223332333022333322220000333333300002212220000022212212220222211112222332131131233333111111333331111111133001110011100022200002220222200002222"[i++]]+">█"

JSFiddle


Пов'язаний JSFiddle не містить тієї самої версії, що розміщена тут, і не працює (принаймні, не для мене у Firefox). До речі, для кращого виходу a *{line-height:1}допоможе.
манатура

@manatwork Спробуйте ще раз.
SomeShinyObject

Приємно. Але чому дів? Тільки для цікавості я спробував версію ECMAScript. Отримав 372 символи: jsfiddle.net/768h7brb
манатура

тому що <div></div>коротше, ніж document.createElement('div'). І JSFiddle не подобаєтьсяdocument.write
SomeShinyObject

1
Реверс стану потрійного оператора, щоб позбутися від правої частини порівняння : : i%12?"":"<br>".
манатура

4

Matlab - 449/332 305 байт

часткове стиснення + Використання нижньої симетрії зображення:

a=[0,0];b=[2,2];c=[3,3];d=[a,0];f=[b,2];g=[c,3];h=[b,b];i=[a,a];k=[1,1];l=[0,f,1,2;h,k;c,2,1,3,1;g,k,1;c,k,k;a,k,1,0;0,f,a;h,a];imshow(uint8([d,k,1,k,i;a,k,k,k,k,1,0;a,f,c,2,3,d;0,2,3,2,g,2,g,0;0,2,3,b,g,2,g;0,b,c,c,h,0;d,g,g,3,a;a,b,1,f,i;[l fliplr(l)]]),[107 140 255;177 52 37;106 107 4;227 157 37]/255)

- Частково стисла версія (332 байти):

a=[0,0]
b=[2,2]
c=[3,3]
d=[a,0]
e=[1,1,1]
f=[b,2]
g=[c,3]
h=[b,b]
i=[a,a]
imshow(uint8([d,e,1,1,i;a,e,e,e,0;a,f,c,2,3,d;0,2,3,2,g,2,g,0;0,2,3,b,g,2,g;0,b,c,c,h,0;d,g,g,3,a;a,b,1,f,i;0,f,1,b,1,f,0;h,e,1,h;c,2,1,3,1,1,3,1,2,c;g,e,e,g;c,e,e,1,1,c;a,e,a,e,a;0,b,2,i,f,0;h,i,h]),[107 140 255;177 52 37;106 107 4;227 157 37]/255)

Повністю нестиснута версія (449 байт):

imshow(uint8([0,0,0,1,1,1,1,1,0,0,0,0;0,0,1,1,1,1,1,1,1,1,1,0;0,0,2,2,2,3,3,2,3,0,0,0;0,2,3,2,3,3,3,2,3,3,3,0;0,2,3,2,2,3,3,3,2,3,3,3;0,2,2,3,3,3,3,2,2,2,2,0;0,0,0,3,3,3,3,3,3,3,0,0;0,0,2,2,1,2,2,2,0,0,0,0;0,2,2,2,1,2,2,1,2,2,2,0;2,2,2,2,1,1,1,1,2,2,2,2;3,3,2,1,3,1,1,3,1,2,3,3;3,3,3,1,1,1,1,1,1,3,3,3;3,3,1,1,1,1,1,1,1,1,3,3;0,0,1,1,1,0,0,1,1,1,0,0;0,2,2,2,0,0,0,0,2,2,2,0;2,2,2,2,0,0,0,0,2,2,2,2]),[107 140 255;177 52 37;106 107 4;227 157 37]/255)

Вихід у обох випадках (збільшений на екрані, очевидно, реальний - 12x16 пікселів):
MarioMagnified


Гей, я задумався, чи хтось якось експлуатуватиме симетрію. Я не міг знайти шлях із методом, з яким я нарешті пішов.
Бурхливий

4

C, 4999 байт

Це абсолютно не може конкурувати з деякими відповідями тут, але я подумав, що я дам відповідь на С. Код є одним єдиним довгим рядком, тому тут є посилання на пастину. Якщо ви хочете, ось базове кодування gzipped коду:

H4sICAzFGFYCA21hcmlvLmMA3Zc9DsIwDIXv0qndUqchkXwUurAgdYiFEEyIu4NYaZBI7PzNT3Lsz4mf408bjdPjct3odh6HVeujdgg4K4vzohCM8esdjHOpkrVoALUtIrBX8y1R04DKNCGZmTp85CVdAHifYuxO3mElIlju6xaRICOgCo4pD64PoiTzHnkZcHYnRhAYcEEpFznxB1mXP4TdS/KeVGYPZbmVaQHlnRVZFi65OkhoGodq+RHrby4xsTj8i6RmapXrPvfa0Q8ZWZY1/UPbSiC7Z2bYA7r0zla57Xmo8sOEzxdNYIXFhxMAAA==

Відмітний тим, що для запуску не потрібні зовнішні бібліотеки.

Потрібен xterm, Konsole або GNOME-термінал, оскільки він використовує розширення RGB на кольори відтворення кольорів ANSI для виведення правильних кольорів (ANSI не визначає помаранчевий). Зі зрозумілих причин, ідеон не працюватиме. Його можна запустити в Windows під Cygwin, який використовує xterm (насправді саме так я тестував). MSYS може працювати; Я не впевнений.

Вихід на мою машину (xterm):

це я, Маріо!


2
-1 не кратна 10
Конор О'Браєн

Вибачте, це було посиланням на рахунок
Conor O'Brien

4

Excel VBA, 310 307 295 байт

Функція анонімного вікна негайних VBE, яка виводить Маріо на об'єкт Activesheet у комірки A1:L16

o=2465251:Cells.RowHeight=48:a[A1:L16],-29589:a[C4:K5,D3:I7,J7,L5,A11:L13],o:a[C3:E3,H3:H4,B4:B6,C6,D4:D5,E5,I5,H6:K6,C8:H8,B9:K10,A10:L10,C11,J11,B15:D16,A16,I15:K16,L16],289642:a[D1:H1,C2:K2,E8:E10,F10:H10,H9,D11:I13,C13:E14,H13:J14],2438321:a[E11,H11],o

Помічник Subзвичайного a

Sub a(r,c):r.Interior.Color=c:End Sub

Безгольова версія

Public Sub b()
    o = 2465251
    Cells.RowHeight = 48
    a [A1:L16], -29589
    a [C4:K5,D3:I7,J7,L5,A11:L13], o
    a [C3:E3,H3:H4,B4:B6,C6,D4:D5,E5,I5,H6:K6,C8:H8,B9:K10,A10:L10,C11,J11,B15:D16,A16,I15:K16,L16], 289642
    a [D1:H1,C2:K2,E8:E10,F10:H10,H9,D11:I13,C13:E14,H13:J14], 2438321
    a [E11,H11], o
End Sub


Private Sub a(ByRef r As Range, ByVal c As Integer)
    r.Interior.Color = c
End Sub

-3 байти для видалення пробілів -12 байт для використання [...]позначень над Range(...)нотацією; перехід від шестигранних до інт-кольорів

Вихід

Це я


3

Bash 346

чистий баш з VT100, як послідовність втечі (вибачте, жоден помаранчевий у цій палітрі)

C="  "
B="\033[44m$C"
R="\033[41m$C"
G="\033[42m$C"
O="\033[43m$C"
N="\033[00m\n"
A="BBBRRRRRBBBBNBBRRRRRRRRRBNBBGGGOOGOBBBNBGOGOOOGOOOBNBGOGGOOOGOOONBGGOOOOGGGGBNBBBOOOOOOOBBNBBGGRGGGBBBBNBGGGRGGRGGGBNGGGGRRRRGGGGNOOGRORRORGOONOOORRRRRROOONOORRRRRRRROONBBRRRBBRRRBBNBGGGBBBBGGGBNGGGGBBBBGGGGN"
while read -n1 v
do
  printf "${!v}"
done <<< "$A"

1
Ви можете зменшити його, використовуючи масив для палітри замість окремих символів. Оскільки оголошення асоціативних масивів довге, краще перекодируйте його до цілих чисел. Версія вашого коду на 295 символів: pastebin.com/d0LW0HM1
manatwork

3

Pyth, 83 байти

Відмова від відповідальності: Це не є виграшним кандидатом, оскільки деякі мовні функції були створені після публікації запитання.

.wc16@Lc4CM"±4%kÿjkã%"jC"T\0UP\0Z¾Õnþýn¿¿kþ©WÿõZ*Uj(©ª\0ªøÃ/ü\0?ð\0PjU©ªUª"4

Ось шістнадцятковий дамп:

00000000   2E 77 63 31  36 40 4C 63  34 43 4D 22  B1 34 25 6B  .wc16@Lc4CM".4%k
00000010   8C FF 6A 6B  04 E3 9D 25  22 6A 43 22  54 5C 30 55  ..jk...%"jC"T\0U
00000020   50 5C 30 01  5A BE D5 6E  FE FD 6E BF  BF 6B FE A9  P\0.Z..n..n..k..
00000030   57 FF F5 5A  2A 55 6A 28  A9 AA 5C 30  AA F8 C3 2F  W..Z*Uj(..\0.../
00000040   FC 5C 30 3F  F0 5C 30 0F  50 14 05 6A  55 A9 AA 55  .\0?.\0.P..jU..U
00000050   AA 22 34                                            ."4

Ви також можете завантажити програму тут і запустити її

python3 pyth.py mario.pyth

При цьому створюється файл o.png:

Маріо

Пояснення:

Існує лише 4 різних кольори, тому для збереження кольору кожного пікселя мені потрібні лише 2 біти.

.wc16@Lc4CM"..."jC"..."4
                  "..."   the colors of the image, 2 bit per pixel
                 C        convert these bytes to a number
                j      4  and convert it to base 4 (extracting the colors)
           "..."          the hexcodes of the 4 colors (3 byte per color)
         CM               convert each byte into its number
       c4                 split into 4 lists
     @L                   for each pixel, pick the correct list of color-list
  c16                     split into 16 rows
.w                        save it as "o.png"

Чи працює це в останній версії Pyth перед публікацією виклику?
lirtosiast

@ThomasKwa Так, забув. Я відредагую інформацію.
Якубе

2

Обробка 2 - 359 символів

Я побачив це завдання і одразу подумав про функцію пікселя Processing []. Я сподівався, що це буде коротше, але я все ще досить задоволений результатом, вважаючи це моєю першою спробою кодового гольфу.

int i,l;i=l=0;size(12,16);loadPixels();for(char c:"3b5r6b9r3b3g2o1g1o4b1g1o1g3o1g3o2b1g1o2g3o1g3o1b2g4o4g4b7o4b2g1r3g5b3g1r2g1r3g1b4g4r4g2o1g1r1o2r1o1r1g5o6r5o8r2o2b3r2b3r3b3g4b3g1b4g4b4g".toCharArray()){while(l>0){pixels[i]=#6B8CFF;if(c=='r')pixels[i]=#B13425;if(c=='g')pixels[i]=#6A6B04;if(c=='o')pixels[i]=#E39D25;i++;l--;}if(c<58){l=c-48;}}updatePixels();

неозорений:

int i,l;i=l=0;
size(12,16);
loadPixels();
for(char c:"3b5r6b9r3b3g2o1g1o4b1g1o1g3o1g3o2b1g1o2g3o1g3o1b2g4o4g4b7o4b2g1r3g5b3g1r2g1r3g1b4g4r4g2o1g1r1o2r1o1r1g5o6r5o8r2o2b3r2b3r3b3g4b3g1b4g4b4g".toCharArray())
{
    while(l>0)
    {
        pixels[i]=#6B8CFF;
        if(c=='r')pixels[i]=#B13425;
        if(c=='g')pixels[i]=#6A6B04;
        if(c=='o')pixels[i]=#E39D25;
        i++;
        l--;
    }
    if(c<58){l=c-48;}
}
updatePixels();

ви можете завантажити тут


2

Javascript 515

str='';
"000111110000|001111111110|002223323000|023233323330|023223332333|022333322220|000333333300|002212220000|022212212220|222211112222|332131131233|333111111333|331111111133|001110011100|022200002220|222200002222"
.split("|").forEach(function(ov, ok) {
str += '<div>'
    ov.split("").forEach(function(iv, ik) {
    str += '<div style="width:1px;height:1px;background-color:' + ['#6B8CFF','#B13425','#6A6B04','#E39D25'][iv] + ';display:inline-block"></div>';
    });
    str+= '</div>';
});
document.write(str);

просто працював, все одно треба зайти і пограти в гольф


1
Ви можете замінити divs, які складають рядки, тегом, який за замовчуванням є вбудованим рядком. Я не перевіряв її, але використання aмає працювати. Ви також можете використовувати backgroundзамість background-color.
NinjaBearMonkey

2

Perl - Ungolfed 927

Пізніше мені доведеться займатися гольфом. Перший раз випробування Image::Magick.

#!/usr/local/bin/perl
use Image::Magick;
use strict;
use warnings;

my @p = (
[0,0,0,1,1,1,1,1,0,0,0,0],
[0,0,1,1,1,1,1,1,1,1,1,0],
[0,0,2,2,2,3,3,2,3,0,0,0],
[0,2,3,2,3,3,3,2,3,3,3,0],
[0,2,3,2,2,3,3,3,2,3,3,3],
[0,2,2,3,3,3,3,2,2,2,2,0],
[0,0,0,3,3,3,3,3,3,3,0,0],
[0,0,2,2,1,2,2,2,0,0,0,0],
[0,2,2,2,1,2,2,1,2,2,2,0],
[2,2,2,2,1,1,1,1,2,2,2,2],
[3,3,2,1,3,1,1,3,1,2,3,3],
[3,3,3,1,1,1,1,1,1,3,3,3],
[3,3,1,1,1,1,1,1,1,1,3,3],
[0,0,1,1,1,0,0,1,1,1,0,0],
[0,2,2,2,0,0,0,0,2,2,2,0],
[2,2,2,2,0,0,0,0,2,2,2,2],
);
my $image = Image::Magick->new;
$image->Set(size=>'12x16');
$image->ReadImage('canvas:white');
for my $i (0..$#p) {
    for (0..(@{$p[$i]} - 1)) {
        my $color;
        $color = ($p[$i][$_] < 1 ? "#6B8CFF" : $p[$i][$_] < 2 ? "#B13425" : $p[$i][$_] < 3 ? "#6A6B04" : "#E39D25");
        print "$i : $_ : $color \n";
       $image->Set("pixel[$_,$i]"=> $color);
    }
}
#$image->Write("mario.png");
$image->Display();

Я впевнений, що у нас їх багато, але ось моя: Маріо!


2

Друк Bash: 179 158 байт

Натхненний відповідь user2485710 ігрових .

Потрібно налаштувати свій термінал відповідно до кольорів.

eval "$(base64 -d<<</AD/8AAD9Wm/2amr2Wpq1qlX/qqv9RX/1RRXVQBVpIIaqAAqoAAK8DwP1f9XVf9V|xxd -b -c3 -g0|cut -c10-33|sed $'s/../\e[4$[2#&+1]m \e[0m/g;s/^/echo /')"

це те, що я бачу . чи я щось роблю не так?
ardnew

2
@ardnew: BSD base64 використовує -Dдля декодування і -dдля налагодження .
Денніс

2

Tcl 298

package require base64
set d [base64::decode AVUABVVUCr7ALv78Lr+/K/6oA//wCmoAKmmoqlWq+ddv/VV/9VVfBUFQKgCoqgCq]
binary scan $d B* z
set i 0
foreach {a b} [split $z ""] {
if {$i % 12 == 0} {puts "\033\[0m"}
puts -nonewline "\033\[4[string map {00 4 01 1 10 2 11 3} $a$b];m  "
incr i
}
puts "\033\[0m"

Це 2 біти на піксельне зображення в базовій 64. Пікселі відображаються в кодах аварійних програм.

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


Навіть не намагаючись, ваш код здається трохи пограбуючим: tio.run/…
sergiol

2

JavaScript - 256 символів (161 obfusc-a-tweeted)

d=v=>{for(i=v&15;i--;)O.innerHTML+=`<i style="color:#${'6B8CFF6A6B04B13425E39D25'.substr(x%4*6,6)}">█</i>`+(++f%12?'':'<br>');x++},f=x=0,[..."fhilsswsssuss££cgÓdcddc¤g£stcucds³c¹cefefcc¤c§"].map(v=>(d(v=v.charCodeAt(0)-99),d(v>>4)))
<p id=O>

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

Спосіб:

  1. Використовуючи бітмаскинг, рядок розміром 63x8 забезпечує масив значень 126x4, що складається з чисел у діапазоні 0-9. (Розчаровуєш ... врятував 63 символи, перейшовши на 4-бітні, але витратив 50 символів, розпаковуючи біти знову хаха. Ще 13 символів - це 13 символів! :-)
  2. 4 кольори фарби циклізовані в порядку: B, G, R, O. На кожній ітерації виводиться 0-9 знаків для поточного кольору (з розривом рядка кожні 12-й)

Щоб визначити оптимальний порядок кольорового циклу, я запустив алгоритм стиснення проти необроблених даних для кожної з 24 перестановок [R, G, B, O] і вибрав той, який дав найкоротший вихід (126 було найкращим, найменш оптимальним було близько 150-щось)

ETA виявила це лише після прочитання інших відповідей, використовуючи obfusca-tweet ...

eval(unescape(escape`𩀽𭠽🡻𩡯𬠨𪐽𭠦𜐵𞱩𛐭𞰩𣰮𪑮𫡥𬡈𥁍𣀫👠🁩𘁳𭁹𫁥🐢𨱯𫁯𬠺𘰤𮰧𝡂𞁃𡡆𝡁𝡂𜀴𠠱𜰴𜠵𡐳𞑄𜠵𙰮𬱵𨡳𭁲𚁸𙐴𚠶𛀶𚑽𘠾ﶈ�𛱩🡠𚰨𚰫𩠥𜐲🰧𙰺𙰼𨡲🠧𚐻𮀫𚱽𛁦👸🐰𛁛𛠮𛠢𩡨𪑬𬱳𭱳𬱳𭑳𬲣𸱣𩳓𩁣𩁤𨲤𩲣𬱴𨱵𨱤𬲳𨲹𨱥𩡥𩡣𨲤𨲧𘡝𛡭𨑰𚁶🐾𚁤𚁶👶𛡣𪁡𬡃𫱤𩑁𭀨𜀩𛐹𞐩𛁤𚁶🠾𝀩𚐩𒠼𬀠`.replace(/u../g,'')))

Подальші ідеї. - Спробуйте 3-розрядний діапазон даних 0-6, а рідкісні 7,8,9 отримують 4 додаткових кожен: 60000N. - перевірити перестановки кольорового циклу в усіх напрямках і швидкостях, окрім горизонтально одного пікселя. - спробуйте кілька пропускань, щоб кольори були шаруватими.


Так, це просто зрозуміло, що мова йде про символи, а не для байдів, тому, ймовірно, можна знову вдвічі зменшити дані, використовуючи 16-бітні символи.
Бурхливий

1

Javascript, 253 240 238 236

Obfuscatweet ed джерело - 253 240 238 236

document.write(unescape(escape('🁳𨱲𪑰𭀾𘠵𫐲𫰹𫑨𜰰𞐷𫁯𩰹𜐰𜑰𪰹𮡰𝱵𞑶𭁸𭰹𜱱𭐸𞐸𝡷𭰹𭑯𩱫𞐳𨱳𬁨𞐶𪡭𪡥𞐶𬁬𫡵𞐶𭠷𮐲𞑭𝐸𜀹𭁨𮡯𞐳𨡥𨰵𘠮𬱰𫁩𭀨𞐩𛡦𫱲𡑡𨱨𚁦𭑮𨱴𪑯𫠨𨰩𮱤👤𫱣𭑭𩑮𭀻𨰽𬁡𬡳𩑉𫡴𚁣𛀳𝠩𛡴𫱓𭁲𪑮𩰨𝀩𞱷𪁩𫁥𚁣𛡬𩑮𩱴𪀼𜐲𚑣🐢𜀢𚱣𞱣𛡳𬁬𪑴𚀢𘠩𛡦𫱲𡑡𨱨𚁦𭑮𨱴𪑯𫠨𭠩𮱤𛡷𬡩𭁥𚀢🁰𘁳𭁹𫁥🐧𩁩𬱰𫁡𮐺𪑮𫁩𫡥𞱰𨑤𩁩𫡧𞠹𞱢𨑣𪱧𬡯𭑮𩀺𘰢𚱛𘠶𠠸𠱆𡠢𛀢𝡁𝡂𜀴𘠬𘡅𜰹𡀲𝐢𛀢𠠱𜰴𜠵𘡝𦰫𭡝𚰢𙰾🀯𬀾𘠩𯐩𞱤𛡷𬡩𭁥𚀢🁢𬠾𘠩𯐩🀯𬱣𬡩𬁴🠠').replace(/uD./g,'')))

Беззаперечний - 395 370 365 361

<script>"5m2o9mh3097log9101pk9zp7u9vtxw93qu8986ww9uogk93csph96jmje96plnu96v7y29m5809thzo93bec5".split(9).forEach(function(c){d=document;c=parseInt(c,36).toString(4);while(c.length<12)c="0"+c;c.split("").forEach(function(v){d.write("<p style='display:inline;padding:9;background:#"+["6B8CFF","6A6B04","E39D25","B13425"][+v]+"'></p>")});d.write("<br>")})</script>

Завдяки @compass за <p>хитрості тегів та @xem за 2 (5) символів.

Демо

Він перетворює дані з бази 36 і перетворює в базу 4.


Я не можу його перевірити, але я не думаю, що padding:9робить щось без одиниці після нього. Ви також можете використовувати однобуквенний елемент на зразок aабо qякий неявно вбудований, а не p.
NinjaBearMonkey

@hsl Я оновив демонстраційне посилання, і воно добре працює принаймні у моїх Chrome, Firefox та Safari на Mac.
Закуска

-2 байти: замінити "|" на 9 у рядку та роздвоєнні. Крім того, ви використовуєте 3 рази "document.write", ви повинні помістити його у var, щоб зберегти, як, 24b)
xem

@xem Дякую, що нагадав мені трюк про розділення номера. А оскільки ми не можемо призначити document.writeзмінну (ми повинні використовувати document.write.bind(document)), я найкраще призначав documentзмінну.
Перекус

або, ви можете зробити це вперше: (d = документ) [w = "написати"] (/ * речі для запису * /), і просто зробити це після: d [w] ("Привіт")
xem

1

JavaScript ES6 (HTML + CSS), 199 307 3195 3630

Використання Obfusc-a-tweet :

eval(unescape(escape('𬰽𦱝𒠧𜰹𮡲𬀳𝁤𩡬𜱪𩱴𜐴𨡷𭐵𝁢𪱣𩠴𝱰𜡨𜱦𫁹𭀳𪑮𪀱𝀵𝀸𞐶𫑳𫱡𞑰𩡥𝰹𭁺𝑲𞑤𝁢𜰳𝁨𩁸𝀵𩀴𞐶𫠹𩱱𙰮𫑡𭁣𪀨𛰮𮰵𯐯𩰩𛡦𫱲𡑡𨱨𚀨𫠬𪐩🐾𦰮𛠮𬁡𬡳𩑉𫡴𚁮𛀳𝠩𛡴𫱓𭁲𪑮𩰨𝀩𧐮𩡯𬡅𨑣𪀨𚁭𛁪𚐽🡳𛡰𭑳𪀨𪠫𜐫𙱰𮀠𙰫𚀫𪐫𜐩𚰧𬁸𘀣𙰫𦰧𠠱𜰴𜠵𙰬𙰶𠠸𠱆𡠧𛀧𝡁𝡂𜀴𙰬𙱅𜰹𡀲𝐧𧑛𚱭𧐩𚐩𒡤𫱣𭑭𩑮𭀮𭱲𪑴𩐨𙰼𬀠𬱴𮑬𩐽𘡷𪑤𭁨𞠱𬁸𞱨𩑩𩱨𭀺𜑰𮀻𨡯𮀭𬱨𨑤𫱷𞠧𚱳𚰧𘠧𚐠').replace(/uD./g,'')))

Це відображає спрайт без використання зображень або декількох елементів; він просто зловживає box-shadowвластивістю CSS для створення кожного пікселя. Спробуйте це на веб-сайті http://jsbin.com/pozohiyezo/ . Ця безперебійна версія має 307 символів :

s=[]
'39zrp34dfl3jgt14bwu54bkcf47p2h3flyt3inh1454896msoa9pfe79tz5r9d4b334hdx45d496n9gq'.match(/.{5}/g).some((n,i)=>[...parseInt(n,36).toString(4)].forEach((m,j)=>s.push(j+1+'px '+(+i+1)+'px #'+['B13425','6B8CFF','6A6B04','E39D25'][+m])))
document.write('<p style="width:1px;height:1px;box-shadow:'+s+'"')

Це оригінальна, звичайна ванільна версія HTML. Дивіться це в дії на веб-сайті http://jsfiddle.net/gfeLn1ey/1/ .

<p style="width:1px;height:1px;box-shadow:4px 1px 0 #B13425,5px 1px 0 #B13425,6px 1px 0 #B13425,7px 1px 0 #B13425,8px 1px 0 #B13425,12px 1px 0 #6B8CFF,3px 2px 0 #B13425,4px 2px 0 #B13425,5px 2px 0 #B13425,6px 2px 0 #B13425,7px 2px 0 #B13425,8px 2px 0 #B13425,9px 2px 0 #B13425,10px 2px 0 #B13425,11px 2px 0 #B13425,12px 2px 0 #6B8CFF,3px 3px 0 #6A6B04,4px 3px 0 #6A6B04,5px 3px 0 #6A6B04,6px 3px 0 #E39D25,7px 3px 0 #E39D25,8px 3px 0 #6A6B04,9px 3px 0 #E39D25,12px 3px 0 #6B8CFF,2px 4px 0 #6A6B04,3px 4px 0 #E39D25,4px 4px 0 #6A6B04,5px 4px 0 #E39D25,6px 4px 0 #E39D25,7px 4px 0 #E39D25,8px 4px 0 #6A6B04,9px 4px 0 #E39D25,10px 4px 0 #E39D25,11px 4px 0 #E39D25,12px 4px 0 #6B8CFF,2px 5px 0 #6A6B04,3px 5px 0 #E39D25,4px 5px 0 #6A6B04,5px 5px 0 #6A6B04,6px 5px 0 #E39D25,7px 5px 0 #E39D25,8px 5px 0 #E39D25,9px 5px 0 #6A6B04,10px 5px 0 #E39D25,11px 5px 0 #E39D25,12px 5px 0 #E39D25,2px 6px 0 #6A6B04,3px 6px 0 #6A6B04,4px 6px 0 #E39D25,5px 6px 0 #E39D25,6px 6px 0 #E39D25,7px 6px 0 #E39D25,8px 6px 0 #6A6B04,9px 6px 0 #6A6B04,10px 6px 0 #6A6B04,11px 6px 0 #6A6B04,12px 6px 0 #6B8CFF,4px 7px 0 #E39D25,5px 7px 0 #E39D25,6px 7px 0 #E39D25,7px 7px 0 #E39D25,8px 7px 0 #E39D25,9px 7px 0 #E39D25,10px 7px 0 #E39D25,12px 7px 0 #6B8CFF,3px 8px 0 #6A6B04,4px 8px 0 #6A6B04,5px 8px 0 #B13425,6px 8px 0 #6A6B04,7px 8px 0 #6A6B04,8px 8px 0 #6A6B04,12px 8px 0 #6B8CFF,2px 9px 0 #6A6B04,3px 9px 0 #6A6B04,4px 9px 0 #6A6B04,5px 9px 0 #B13425,6px 9px 0 #6A6B04,7px 9px 0 #6A6B04,8px 9px 0 #B13425,9px 9px 0 #6A6B04,10px 9px 0 #6A6B04,11px 9px 0 #6A6B04,12px 9px 0 #6B8CFF,1px 10px 0 #6A6B04,2px 10px 0 #6A6B04,3px 10px 0 #6A6B04,4px 10px 0 #6A6B04,5px 10px 0 #B13425,6px 10px 0 #B13425,7px 10px 0 #B13425,8px 10px 0 #B13425,9px 10px 0 #6A6B04,10px 10px 0 #6A6B04,11px 10px 0 #6A6B04,12px 10px 0 #6A6B04,1px 11px 0 #E39D25,2px 11px 0 #E39D25,3px 11px 0 #6A6B04,4px 11px 0 #B13425,5px 11px 0 #E39D25,6px 11px 0 #B13425,7px 11px 0 #B13425,8px 11px 0 #E39D25,9px 11px 0 #B13425,10px 11px 0 #6A6B04,11px 11px 0 #E39D25,12px 11px 0 #E39D25,1px 12px 0 #E39D25,2px 12px 0 #E39D25,3px 12px 0 #E39D25,4px 12px 0 #B13425,5px 12px 0 #B13425,6px 12px 0 #B13425,7px 12px 0 #B13425,8px 12px 0 #B13425,9px 12px 0 #B13425,10px 12px 0 #E39D25,11px 12px 0 #E39D25,12px 12px 0 #E39D25,1px 13px 0 #E39D25,2px 13px 0 #E39D25,3px 13px 0 #B13425,4px 13px 0 #B13425,5px 13px 0 #B13425,6px 13px 0 #B13425,7px 13px 0 #B13425,8px 13px 0 #B13425,9px 13px 0 #B13425,10px 13px 0 #B13425,11px 13px 0 #E39D25,12px 13px 0 #E39D25,1px 14px 0 #6B8CFF,2px 14px 0 #6B8CFF,3px 14px 0 #B13425,4px 14px 0 #B13425,5px 14px 0 #B13425,6px 14px 0 #6B8CFF,7px 14px 0 #6B8CFF,8px 14px 0 #B13425,9px 14px 0 #B13425,10px 14px 0 #B13425,11px 14px 0 #6B8CFF,12px 14px 0 #6B8CFF,1px 15px 0 #6B8CFF,2px 15px 0 #6A6B04,3px 15px 0 #6A6B04,4px 15px 0 #6A6B04,5px 15px 0 #6B8CFF,6px 15px 0 #6B8CFF,7px 15px 0 #6B8CFF,8px 15px 0 #6B8CFF,9px 15px 0 #6A6B04,10px 15px 0 #6A6B04,11px 15px 0 #6A6B04,12px 15px 0 #6B8CFF,1px 16px 0 #6A6B04,2px 16px 0 #6A6B04,3px 16px 0 #6A6B04,4px 16px 0 #6A6B04,5px 16px 0 #6B8CFF,6px 16px 0 #6B8CFF,7px 16px 0 #6B8CFF,8px 16px 0 #6B8CFF,9px 16px 0 #6A6B04,10px 16px 0 #6A6B04,11px 16px 0 #6A6B04,12px 16px 0 #6A6B04,6px 6px 0 5px #6B8CFF"

TIL, ви не можете закрити <p тег :)
xem

цей код може мати дуже гарне стиснення в такому інструменті, як regpack. Ось приклад в 729b (JS використовується для написання HTML, хоча): goo.gl/7fF7kx
XEM

@xem Я насправді навіть не розглядав питання про генерацію коду за допомогою JS, але мені вдалося зробити набагато коротше придбання за схемою коду.
NinjaBearMonkey

1

Javascript, 256 або 245 252 або 241

256

document.write("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld".replace(/./g,function(x){return new Array((x=parseInt(x,36))&7).join("<li style=padding:4%;float:left;background:#"+['B13425','6A6B04','6B8CFF','E39D25'][x>>3]+">")}))

Сумно перекреслити 256, але 245 можливо, якщо використовувати недруковані символи:

document.write(btoa(">§ç©­ª¥j¦¬jÈÚ©»²&ív[-½ÍÙÈåÚÚÚ­êÙ«»»køÉ\\Ù]").replace(/./g,function(x){return new Array((x=parseInt(x,36))&7).join("<li style=padding:4%;float:left;background:#"+["B13425","6A6B04","6B8CFF","E39D25"][x>>3]+">")}))

Існує певна проблема з поданням рішення з недрукуваними символами. Аргумент btoaповинен бути результатом atob("ij6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld")додавання 1 символу довжини для уникнення нахилу.

Скоротіть обидва рішення на 4 символи: нам не потрібно нових для створення масиву.

252

document.write("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld".replace(/./g,function(x){return Array((x=parseInt(x,36))&7).join("<li style=padding:4%;float:left;background:#"+['B13425','6A6B04','6B8CFF','E39D25'][x>>3]+">")}))

241

document.write(btoa("©ùêG+j©Z©«²6ªnƬ»]Ëeog&sför'yv¶¶«z¶jîîçãâ>$rVÚÙ]").replace(/./g,function(x){return Array((x=parseInt(x,36))&7).join("<li style=padding:4%;float:left;background:#"+['B13425','6A6B04','6B8CFF','E39D25'][x>>3]+">")}))

У цій версії не потрібно виконувати жодну ескалацію. В btoaаргументі «S є результатомatob("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclbaidld")


Я помітив проблему, яка не надрукована, і на цьому, і на моєму останньому виклику. Я думав, що це лише знаки 8, 9 і 13, якщо це допоможе (хоча я можу легко помилитися)
Bumpy

1

Perl, 266 260 257 249 245 байт

$_="444111114444441111111114442223323444423233323334423223332333422333322224444333333344442212224444422212212224222211112222332131131233333111111333331111111133441114411144422244442224222244442222";s/\d/\033[4$&m  /g;s/.{84}/$&\033[00m\n/g;print

Використовує підхід, подібний до баш-рішення user2485710, щоб написати вихідний стиль VT100. Смугайте явний N для нового рядка, вставляючи новий рядок кожні 12 "vt100 пікселів", 12 * 7 = 84.


1

SmileBASIC, 147 136 символів

P$="xxxxxxxx
FOR I=0TO 191C=ASC("xxxxxxxxxxxxxxxxxxxxxxxx"[I/8])>>I MOD 8*2AND 3GPSET I/16,15AND I,ASC(P$[C*2])<<16OR ASC(P$[C*2+1])NEXT

Вихід (обрізаний): скріншот

Я замінив усі символи в рядках даних на x's, ось коди символів (в UCS-2):
P$(Палітра): FF6B,8CFF,FFB1,3425,FF6A,6B04,FFE3,D925
Дані зображення:0000,83F8,0A80,A3FA,8BE4,A5EA,BEA5,A55A,7EE5,0575,BFF5,0156,BFF5,0156,BBA5,0575,3AF4,A55A,3BC4,A5EA,0BC4,A3FA,0300,83F8

Палітра зберігається в рядку, кожен колір (32 біта) зберігається в два символи (16 біт кожен). Дані про зображення (2 біти на піксель) зберігаються в іншій рядку (8 пікселів на символ)
На щастя, виклик оцінюється символами, оскільки цей файл значно більший, якщо його збережено в UTF-8.


1

05AB1E , 87 байт ( неконкурентоспроможний )

•8,vkJíÝ1¢tt6,9XÂck$XSãõO©Ú"›qf®¸Ì#}„K0ÝCìxý}É~ð_áú•4BSvy•3«WKyÛòèz*Ðeb•16B6ôè'#ì})12ô»

Спробуйте в Інтернеті!

Виходи:

#B13425 #B13425 #B13425 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #B13425 #B13425 #B13425 #B13425
#B13425 #B13425 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #B13425
#B13425 #B13425 #6A6B04 #6A6B04 #6A6B04 #E39D25 #E39D25 #6A6B04 #E39D25 #B13425 #B13425 #B13425
#B13425 #6A6B04 #E39D25 #6A6B04 #E39D25 #E39D25 #E39D25 #6A6B04 #E39D25 #E39D25 #E39D25 #B13425
#B13425 #6A6B04 #E39D25 #6A6B04 #6A6B04 #E39D25 #E39D25 #E39D25 #6A6B04 #E39D25 #E39D25 #E39D25
#B13425 #6A6B04 #6A6B04 #E39D25 #E39D25 #E39D25 #E39D25 #6A6B04 #6A6B04 #6A6B04 #6A6B04 #B13425
#B13425 #B13425 #B13425 #E39D25 #E39D25 #E39D25 #E39D25 #E39D25 #E39D25 #E39D25 #B13425 #B13425
#B13425 #B13425 #6A6B04 #6A6B04 #6B8CFF #6A6B04 #6A6B04 #6A6B04 #B13425 #B13425 #B13425 #B13425
#B13425 #6A6B04 #6A6B04 #6A6B04 #6B8CFF #6A6B04 #6A6B04 #6B8CFF #6A6B04 #6A6B04 #6A6B04 #B13425
#6A6B04 #6A6B04 #6A6B04 #6A6B04 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6A6B04 #6A6B04 #6A6B04 #6A6B04
#E39D25 #E39D25 #6A6B04 #6B8CFF #E39D25 #6B8CFF #6B8CFF #E39D25 #6B8CFF #6A6B04 #E39D25 #E39D25
#6A6B04 #6A6B04 #6A6B04 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6A6B04 #6A6B04 #6A6B04
#6A6B04 #6A6B04 #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6B8CFF #6A6B04 #6A6B04
#B13425 #B13425 #6B8CFF #6B8CFF #6B8CFF #B13425 #B13425 #6B8CFF #6B8CFF #6B8CFF #B13425 #B13425
#B13425 #6A6B04 #6A6B04 #6A6B04 #B13425 #B13425 #B13425 #B13425 #6A6B04 #6A6B04 #6A6B04 #B13425
#6A6B04 #6A6B04 #6A6B04 #6A6B04 #B13425 #B13425 #B13425 #B13425 #6A6B04 #6A6B04 #6A6B04 #6A6B04

Тому що 05AB1E не може робити кольори чи графіку будь-якого типу ... Якщо це неприйнятно, я його видалю.


Ви можете написати обгортку Bash і сказати, що ваше рішенняBash + 05AB1E
Павел

1
@ Paavel, я думав це зробити, напевно, я підключу це рішення до чужого; P.
Magic Octopus Urn

Я не можу сказати, що він "перемагає", але будь ласка, зберігайте його, оскільки це чудовий показник стиснення :)
xem

0

Синклер BASIC - 573 байти

Гаразд, тому Spectrum не може відображати кольори RGB, як зазначено, тому використовували максимально близький.

10 let x=0:let y=0:let i=0
20 let a$="1c2e1f2i1c4c6b461d4646c46c1b464b6c46c14b6d4d1d6g1d4b24c1e4c24b24c14d2d4d6b4262b6246e2f6e2c1b2c6b1b2c1b2c1c4c1d4c14d1d4d"
30 let l=len a$
40 let i=i+1:let c=1:let p=0:let k=val a$(i)
50 if a$(i+1)>="a" then let c=code a$(i+1)-96:let i=i+1
60 print at y,x;ink k;"\::":let p=p+1:let x=x+1:if x=12 then let x=0:let y=y+1
70 if p<c then goto 60
80 if i<l then goto 40

Рядок - це колір (1 = синій, 2 = червоний тощо), за яким слідує літера, яка відображає, скільки разів цей блок повторюється (приймаючи значення ASCII мінус 96, щоб ставати 1,2,3 тощо). Число без літери після нього просто малює один блок.

"\::"у рядку 60 - як ввести графіку в текстовий редактор перед тим, як перетворитись у файл TAP, щоб завантажити його в емулятор запобіжника. (Показує як суцільний блок-графіку на екрані).

Кожне ключове слово є одним байтом у Sinclair BASIC, включаючи підрахунок команди PEEK після його генерування.

Це - Маріо


0

Perl - 399 171 байт

use MIME::Base64;$_='R0lGODdhDAAQAKEEAGuM/+OdJWprBLE0JSwAAAAADAAQAAACNoSHaAvpaoQMQQRmLdUXZM55XCUJDIVSmDCUjMhKrQSzSamxAbKP+5P6PQaqBiSxcCVpuJWkAAA7';
print decode_base64($_)

Записує файл gif в stdout.

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