Pixel-art, odcinek 1: pokaż Super Mario

47

to a-ja!

Dzisiejsze zadanie jest proste: napisać program lub funkcję wyświetlającą bezczynną małą duszkę Mario z Super Mario Bros na NES na niebieskim tle.

Każdy wpis jest ważny, o ile wyświetla te 12 * 16 pikseli w dowolnym miejscu ekranu / okna / przeglądarki.

(EDYCJA: wyświetlany obraz można przeskalować, jeśli Twój język nie potrafi tworzyć grafiki pikselowej. Możesz również wyświetlać grafikę ASCII lub grafikę HTML, ale używając odpowiednich kolorów.)

Obraz (powiększony 400%):

Musisz użyć następujących kolorów:

  • niebieski: # 6B8CFF
  • czerwony: # B13425
  • zielony / brązowy: # 6A6B04
  • pomarańczowy: # E39D25

Najkrótszy program (pod względem liczby znaków) wygrywa!

Obowiązują standardowe luki (zwłaszcza nie jest dozwolone połączenie sieciowe), ale dozwolone jest stałe kodowanie i wyświetlanie pliku obrazu w programie. (wpisy wykorzystujące tę sztuczkę będą oceniane osobno)

No to ruszamy!


Aktualny ranking

Najkrótsza odpowiedź przy użyciu samego kodu:

Najkrótsza odpowiedź przy użyciu jakiegoś zakodowanego obrazu:

Xem
źródło
2
Ponadto tworzenie pliku jest niedozwolone? To musi być wyświetlone?
Martin Ender
1
Nie widzę żadnego wzoru na tym obrazie. Wszystko sprowadza się więc do najlepszej kompresji, jaką można zastosować w języku.
Optymalizator
20
Nitpicking: To Mario, nie Super Mario.
Dennis
5
Cóż za fajny pomysł ... Oto pomysł na kolejne wyzwanie: weź obraz Mario (dowolny format) i zmień go w obraz Luigi!
Zibbobz
3
Czy możemy stworzyć program pieta, który wygląda jak on?
Conor O'Brien,

Odpowiedzi:

36

HTML / JS, 206 158 153 102


102

Zastosowana sztuczka: zapisz skompresowany plik GIF jako plik HTML i dodaj <img src = #> na końcu

Dzięki temu wpisowi: https://codegolf.stackexchange.com/a/39926/10732 autor: @NiettheDarkAbsol

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

Demo: http://meuziere.free.fr/mario/gif.html


Starsza wersja:

153

Zastosowana sztuczka: zapisz skompresowany plik PNG jako plik HTML i dodaj <img src = #> na końcu

‰PNG


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


158

Zastosowana sztuczka: ustawianie przyciętego dataURI skompresowanego PNG jako SRC znacznika IMG i pakowanie całości w znaki Unicode.


Wykonaj to w konsoli JS:

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


206

Rozpakowane (206b):

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

Próbny


Narzędzia użyte:

Xem
źródło
Nie potrzebujesz tagów. Wystarczy użyć identyfikatora URI Chrome i wprowadzić go w pasku adresu URL. 200 znaków
Optymalizator
Hm ... Uważałem, że dataURI nie jest prawidłowym „programem”. Ale masz rację. Wszystkie przeglądarki zezwalają na dataURI na pasku adresu.
xem.
Teraz sam używasz luki jako OP;). Odciążasz całą pracę do zewnętrznej / wbudowanej kompresji formatu GIF. Jeśli to fajne, wszyscy powinniśmy teraz szukać nieznanych formatów obrazów z najlepszym współczynnikiem kompresji i mógłbym zaoszczędzić sobie dużo pracy, pisząc własną kompresję. ;)
Martin Ender
2
@xem Cóż, twoje wyzwanie, twoje wezwanie. Ale wydaje się to trochę bezcelowe, jeśli szukamy teraz najbardziej skompresowanego istniejącego formatu pliku. ;)
Martin Ender
1
Wygląda na to, że łącze rawgit nie działa.
Addison Crump,
27

Mathematica, 412 292 252 212 163 148 143 141 znaków

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

Używa to notacji doczepnej ^Adla znaku kontrolnego w punkcie kodowym 1. W Mathematica mogę dosłownie osadzić postać, chociaż prowadzi to do różnego rodzaju brzydoty podczas kopiowania. W każdym razie powyższe jest o 2 znaki krótsze niż moja poprzednia wersja, i dostałem je dla postaci, używając base-4 zamiast base-5 do kodowania wskaźników palety kolorów. W tej chwili nie mogę zadać sobie trudu, aby naprawić wyjaśnienie i zrzut ekranu poniżej, więc zostawiam cię tutaj z oryginalną wersją mojej podstawowej wersji 5:


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

Koduję piksele w znakach Unicode (tak, aby liczyć według znaków!).

Oto jak to wygląda w Mathematica:

wprowadź opis zdjęcia tutaj

Oto jak to działa:

Najpierw definiujemy funkcję, fktóra zamienia ciągi Unicode (przekazane jako pierwszy argument #) na listy liczb całkowitych. Najpierw otrzymujemy kody znaków. Można je interpretować jako cyfry numeru podstawowego 65536. A następnie konwertujemy tę liczbę na inną bazę, przekazaną jako drugi argument #2.

Teraz zróbmy to dla dłuższego ciągu Unicode. ToCharacterCodedaje tę listę:

{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}

Traktując to jako bazę 65536:

7933607912575313477287527915733176998797205587959732019781370103381...
4831246938139171755469819519515972565671101475553962564506286523593

I konwersja do bazy 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}

Są to wskaźniki kolorów pikseli w kolejności niebieski, czerwony, zielony, pomarańczowy. Używamy ich do indeksowania do tej listy liczb, która jest paletą kolorów.

Teraz paleta kolorów. To "넴╫賿橫ӣ鴥". Korzystamy z powyższych wskaźników, aby wybrać prawidłowy ciąg. Następnie ponownie stosujemy naszą funkcję, ale przy użyciu bazy 256. Daje to listę 12 liczb całkowitych:

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

Używamy ;;indeksowania zasięgu, aby wyciągnąć odpowiedni wycinek dla bieżącego koloru.

Na koniec używamy tylko Partitiondo podzielenia tego na rzędy 12i do karmienia Image. Voilà!

Edycja: Z pakowaniem Unicode RLE nie było już tego warte. Usunięcie go uratowało 50 znaków.

Edycja: Oczywiście bez RLE nie ma też potrzeby przechodzenia do bazy 16.

Edycja: A skoro już nad tym pracujemy, dlaczego nie spakować także palety kolorów Unicode? (Mam przeczucie, że mogę zaoszczędzić trochę więcej, czyniąc całą paletę kolorów również jednym ciągiem i używając Partitiontam też. Spróbuję tego później.)

Edycja: Tak, to straciło kolejne 5 bajtów.

Martin Ender
źródło
1
czy mógłbyś dodać zrzut ekranu z rezultatem? (nie, że nie ufam swój kod, ale ciekaw jak to wyświetlanej:? w oknie przeglądarkę innego)
xem
@xem zrobi. Jest to środowisko REPL zdolne do graficznego wejścia i wyjścia.
Martin Ender
Nie jestem pewien, ale czy odzwierciedlasz dolną część obrazu?
Optymalizator
1
@Optimizer Nie, wątpię, czy byłbym w stanie to zrobić z mniejszą liczbą postaci, niż bym oszczędził.
Martin Ender
Kiedy przeglądam dokumentację Mathematica, nie widzę żadnego zastosowania na tyldy, ale wygląda na to, że używasz jej do podania wyniku jednej funkcji do drugiej, a następnie zastosujesz dodatkowy argument do drugiej funkcji (IntegerDigits)? Ponadto paleta kolorów: patrząc na obraz wydaje się, że są tylko cztery kolory, ale wydaje się, że paleta kolorów zawiera więcej: {177, 52, 37, 107, 140, 255, 106, 107, 4, 227 , 157, 37}. Patrząc na dokumentację obrazu, wygląda na to, że drukuje skalę szarości, chyba że zapewniono dodatkowe opcje, takie jak ColorScale -> RGB.
CryptoCommander
20

Java: 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();}

Po prostu rysuje duszka, rozpakowując int dla każdej kolumny. Pokazane w pełnym programie:

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

Obowiązkowy zrzut ekranu:

to ja, Mario

Geobity
źródło
1
Możesz zapisać 9 bajtów za pomocą import java.awt.*.
Kevin Cruijssen
15

Kod maszynowy x86, 102 bajty

Jak to działa: obraz jest zapisywany jako obraz 2-bitowy przy użyciu palety. Każdy wiersz obrazu jest przechowywany jako 3 bajty, a następnie jeden 1 bajt palety kolorów. Dzięki temu dane mogą być ładowane jako pojedynczy DWORD. Dwanaście pikseli jest wysyłanych przez maskowanie najniższych 2 bitów wartości, zapisywanie ich w pamięci wideo, a następnie przesunięcie w prawo dwóch bitów. Po wyprowadzeniu pikseli dla wiersza bajt palety jest zapisywany na palecie VGA. Po zakończeniu rysowania obrazu program wchodzi w nieskończoną pętlę.

Kod asemblera do wygenerowania pliku binarnego:

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 

Plik binarny zakodowany w formacie Base-64, zapisz go jako Mario.com, aby go uruchomić: sBPNEMQHvigBgcc0AWatZpOxDInYJAOqZsHrAuL1k7rJA + 6EwHXiwxUAVSwFAEANpb5XCbm / fxq5 / v4j6b9qPqQQAQWQQAQWQQA

Przykładowe dane wyjściowe: wprowadź opis zdjęcia tutaj

Sir_Lagsalot
źródło
10

GIF - 93 bajty

Zakodowanie obrazu jest teraz najwyraźniej w porządku, więc ... tak? :RE

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

Jak widać w Notepad ++

zrzut ekranu w NP ++

Jako PHP - 131 bajtów

<? header("Content-Type:image/gif");?>GIF87a  ¡ kŒÿã%jk±4%,       6„‡héj„Af-ÕdÎy\%  …R˜0”ŒÈJ­³I©±²û“ú=ª$±p%i¸•¤  ;
Niet the Dark Absol
źródło
1
czy możesz gdzieś przesłać swój gif (na przykład ctrlv.in)? Chciałbym użyć go w swoim wpisie zamiast PNG :)
xem
@xem adamhaskell.net/img/mario.gif
Niet the Dark Absol
@NiettheDarkAbsol Nie jestem pewien, jak policzyłeś rozmiar tego, ale liczę 150 bajtów. Niezależnie od tego, punktacja zależy od postaci i wydaje się, że wynosi 114 znaków.
Martin Ender
2
Tak, fragment kodu PHP jest dla mnie w porządku (nawet jeśli możesz usunąć ostatnie 2 bajty). Ale surowy fragment gif nie jest programem.
xem.
1
@xem: Jeśli przeglądarka jest uważana za „tłumacza” dla HTML / javascript / itp., a dostarczenie jej surowego fragmentu gif za pomocą tego samego mechanizmu daje pożądane wyniki ... różnica staje się niewielka
Mooing Duck
10

Bash + ImageMagick: 350 331 321 znaków

(Paleta bezczelnie skradziony od Martina Büttner „s odpowiedzi ).

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:

Przykładowe dane wyjściowe:

Mario

Aby sprawdzić go łatwo dodać -scale 120do convert„s parametry, aby uzyskać wersji 10x skalowany:

Mario skalował 10

człowiek w pracy
źródło
2
s/185 191 127 185 254 254/1{85,91,27,85} 254{,}/; s/do/{/; s/done/}/
grawity
Doh I nawet upvoted DigitalTrauma powiązany jest wskazówka , ale Ciągle zapominam, że {.. }. Dziękuję, @grawity.
manatwork
8

Układ Octo / XO , 70 bajtów

Octo jest językiem asemblera wysokiego poziomu, który kompiluje się w bajtowe instrukcje dla maszyny wirtualnej CHIP-8 . Octo zapewnia niestandardowe rozszerzenia o nazwie „XO-Chip” do podstawowego kodu bajtowego CHIP-8, w tym możliwość rysowania 4-bitowych map bitowych za pomocą nakładanych płaszczyzn bitowych.

Skompilowane bajty są następujące:

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

Mario

Uruchom tutaj w przeglądarce: http://johnearnest.github.io/Octo/index.html?gist=33aa37d4717a425ccd4f

Prawdopodobnie lepiej jest zobaczyć język asemblera Octo, który tworzy ten kod bajtowy:

: 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 

Program główny to trzy dwubajtowe instrukcje. Ustaw rejestr indeksu pamięci ina początku segmentu danych, wybierz płaszczyznę rysunkową 3 (3 jest maską bitową; oznacza to, że chcesz rysować w trybie 4 kolorów za pomocą obu płaszczyzn bitowych), a następnie narysuj duszka w pozycji xiy podanej przez rejestr v0(zainicjowany na zero). Ostatnie 0 oznacza rozmiar duszka, który w zestawach instrukcji SuperChip i XO-Chip narysuje duszka 16x16. W trybie 4 kolorów po mapie bitowej dla pierwszej płaszczyzny natychmiast następuje mapa bitowa dla drugiej płaszczyzny.

Aby zobaczyć, jak działają płaszczyzny, rozważ ten zmodyfikowany program, który przewija jedną płaszczyznę w prawo po narysowaniu mario:

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 

Jeśli ci się to podoba, możesz polubić jedno z moich innych rozwiązań napisanych z Octo. W październiku faktycznie odbywa się jam gry oparty na tym narzędziu.

JohnE
źródło
6

Groovy 417 386

Zabawa jak diabli, ale z okropną liczbą znaków. Potrzebny 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]])}}}}}}

bez golfa:

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

wprowadź opis zdjęcia tutaj

Will Lp
źródło
grep()zamiasttoList()
patrz
5

HTML / JS, 427 408 264 256 239 226 znaków

Obfuscatweet, 271 270 264 256 239 226 znaków

Za pomocą obfuscatweet udało się skrócić to do <250: D

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

Poniżej znajduje się kod.

Zastosowana sztuczka: przekonwertowany obraz na base4 Ciąg kolorowych kafelków, przekonwertowany na ciąg szesnastkowy. Indeks podstawy 4 oznacza kolor (0 = niebieski, 1 = CZERWONY itp.) CSS z wbudowanym p jest używany, ponieważ div potrzebuje rozszerzenia treści (również p jest krótszy). Ponieważ CSS musi zaczynać się od litery, „A” jest poprzedzane znacznikami CSS.

Wypełnienie z CSS daje piksele. Żadne z tych znaków nie korzysta ze znaków Unicode, których i tak nie znam, choć prawdopodobnie w takim przypadku byłby poniżej 300. Względną zaletą korzystania z wypełnienia jest to, że możesz, tak jak w tym przypadku, wysadzić obraz do rozmiaru, jaki chcesz mieć dla każdego piksela. Użyłem 9 pikseli, ale jeśli wydasz dodatkową postać, możesz uzyskać do 99 pikseli na reprezentowany piksel.


CSS, 127 119 118 114 100 13 0 znaków

Zmiana z pna rpusuwa potrzebę display:inline, kosztuje +1 char, -15! znaki!

Usunąłem wszystkie kolory i umieściłem w tablicy w znakach JS -87. Potem właśnie usunąłem wszystkie css

JS, 300 289 280 275 329 325 znaków

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

Próbowałem wyciąć jak najwięcej z tego prostego JS przetwarzającego ciąg heksadecymalny, ale biorąc pod uwagę, że to moja pierwsza próba, oto jak daleko posunąłem się wykorzystując tylko to, co wiem. Pisanie HTML zostało skrócone o funkcję, która dodaje tagi, a klasy używają wartości podstawowej 4 do określenia koloru do wyświetlenia.

Używając dodatkowego skrótu, zastąpiłem charAt nawiasami [] i usunąłem klasę A0 i ustawiłem niebieski jako domyślny kolor dla p, oszczędzając dodatkowe 10 znaków. Dodatkowy koszt używania rptagów jest równoważony ogromną stratą w CSS.

Dodatkowe przesunięcie od usunięcia podkładki while loop do dodania „000” dla przypadku użycia i wycięcia z niego -12.

Dodano dodatkowe JS dla kolorów, a następnie włóż tam wypełnienie. Zauważyłem błąd w wypełnieniu, który wymaga 2 dodatkowych znaków do naprawy. Kompaktował kilka pętli

Plik HTML, 430 429 419 399 366 342 znaków

Próbny

<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>
Kompas
źródło
Miły! Radzę usunąć wszystkie podziały wierszy w kodzie i podać link do wersji demonstracyjnej ( c99.nl ). Jako bonus możesz spakować swój wpis do znaków Unicode, używając xem.github.io/obfuscatweet . To poprawi twój wynik.
xem.
możesz także usunąć tagi <html>, umieścić tag <lt style> na końcu, a także usunąć / style i końcowe „}” ostatniej reguły CSS.
xem.
@ xem OK Wyciąłem wszystkie linie i wszystko wyciąłem. Spróbuję znaleźć optymalny sposób podziału JS na obfuscatweet.
Kompas
1
obfuscatweet akceptuje dowolny kod js (więc możesz tam umieścić swoje znaki 289 js) lub dowolny kod html (więc możesz skopiować tutaj plik html). Dane wyjściowe obfuscatweet można wykonać w konsoli przeglądarki lub w pliku HTML za pomocą odpowiedniego metatagu charset.
xem.
psst, zapomniałeś usunąć ostatnie „}” części CSS. Działa bez tego.
xem.
5

MATLAB, 194 193 bajtów

Kod:

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

A wynik:

Mario

Zasadniczo przekonwertowałem obraz Mario, aby każdy piksel był liczbą 2-bitową. Następnie zakodowałem to w bazie 32, która jest łańcuchem pokazanym w kodzie. Ten ciąg jest najpierw przekształcany do formatu 5 x 16 (każdy rząd (12 pikseli) liczb 2-bitowych został zakodowany w bazie 32), a następnie ponownie przekonwertowany na bazę 10. Wynik jest ponownie konwertowany, tym razem na bazę 4, co daje tablicę 12 x 16 2-bitowe liczby. Liczby te wykreślono za pomocą imagesc(). Następnie kolory są przypisywane za colormap()pomocą niestandardowej mapy kolorów wymaganych wartości szesnastkowych.

Zabawne jest to, że jedna trzecia użytych bajtów polega na tym, aby MATLAB ustawił prawidłowe kolory po wydrukowaniu. Kod koloru ma prawie taką samą liczbę bajtów jak cały ciąg base32 !.

Bez korekty koloru (usuń colormap()wywołanie), jest to 135 bajtów, i jest to wynik domyślnej mapy kolorów w MATLAB R2013a:

Mario, bez mapowania

Tom Carpenter
źródło
4

JavaScript / CSS / HTML 446 430 407 353 328 316

Grałem tak dużo, jak mogłem i skończyłem z jakimś brudnym HTML / JS, ale cokolwiek ... to działa.

Edycja : To jest to ... Skończyłem.

Edytuj Poważnie zrobione tym razem.

JavaScript

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

JSFiddle

SomeShinyObject
źródło
Połączony JSFiddle nie zawiera tej samej wersji, jak tutaj opublikowana i nie działa (przynajmniej nie dla mnie w Firefoksie). Nawiasem mówiąc, dla lepszej wydajności *{line-height:1}pomoże a.
manatwork
@manatwork Spróbuj ponownie.
SomeShinyObject,
Miły. Ale dlaczego div? Dla mojej ciekawości wypróbowałem wersję ECMAScript. Mam 372 znaków: jsfiddle.net/768h7brb
manatwork
ponieważ <div></div>jest krótszy niż document.createElement('div'). A JSFiddle nie lubidocument.write
SomeShinyObject
1
Odwrócić stan trójoperandowy operatora pozbyć porównanie jest po prawej stronie: i%12?"":"<br>".
manatwork
4

Matlab - 449/332 305 bajtów

częściowa kompresja + Korzystanie z dolnej symetrii obrazu:

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)

- Wersja częściowo skompresowana (332 bajty):

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)

Wersja w pełni nieskompresowana (449 bajtów):

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)

Wyjście w obu przypadkach (oczywiście powiększone na ekranie, prawdziwe to 12x16pix):
MarioMagnified

Hoki
źródło
Hej, zastanawiałem się, czy ktoś w jakiś sposób wykorzysta tę symetrię. Nie udało mi się znaleźć metody, którą w końcu wybrałem.
Wyboisty
4

C, 4999 bajtów

To absolutnie nie może konkurować z niektórymi odpowiedziami tutaj, ale pomyślałem, że dam szansę C odpowiedzi. Kod jest jedną długą linią, więc tutaj jest link do wklejania. Jeśli wolisz, oto kodowanie gzippowane w formacie base64:

H4sICAzFGFYCA21hcmlvLmMA3Zc9DsIwDIXv0qndUqchkXwUurAgdYiFEEyIu4NYaZBI7PzNT3Lsz4mf408bjdPjct3odh6HVeujdgg4K4vzohCM8esdjHOpkrVoALUtIrBX8y1R04DKNCGZmTp85CVdAHifYuxO3mElIlju6xaRICOgCo4pD64PoiTzHnkZcHYnRhAYcEEpFznxB1mXP4TdS/KeVGYPZbmVaQHlnRVZFi65OkhoGodq+RHrby4xsTj8i6RmapXrPvfa0Q8ZWZY1/UPbSiC7Z2bYA7r0zla57Xmo8sOEzxdNYIXFhxMAAA==

Godne uwagi jest to, że nie wymaga uruchamiania zewnętrznych bibliotek.

Wymaga terminala xterm, Konsole lub GNOME, ponieważ używa rozszerzenia RGB do kodów zmiany koloru ANSI w celu uzyskania prawidłowych kolorów (ANSI nie definiuje koloru pomarańczowego). Z oczywistych powodów ideone nie będzie działać. Można go uruchomić w systemie Windows pod Cygwinem, który używa xterm (tak właśnie to przetestowałem). MSYS może działać; Nie jestem pewny.

Dane wyjściowe na mojej maszynie (xterm):

to ja, Mario!

Mego
źródło
2
-1 nie jest wielokrotnością 10
Conor O'Brien
Przepraszamy, odnosiło się to do wyniku
Conor O'Brien
4

Excel VBA, 310 307 295 bajtów

Anonimowa funkcja VBE Immediates Window, która wysyła Mario do obiektu Activesheet w komórkach 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

Pomoc Subrutynowa a

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

Wersja bez golfa

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 bajty do usuwania białych znaków -12 bajtów do używania [...]notacji Range(...)zamiast notacji; zmiana z kolorów szesnastkowych na int

Wynik

It'sa Me

Taylor Scott
źródło
3

Bash 346

czysty bash z sekwencjami ucieczki podobnymi do VT100 (przepraszam, że nie ma pomarańczy w tej palecie)

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"
użytkownik2485710
źródło
1
Możesz to zmniejszyć, używając tablicy palety zamiast osobnych znaków. Ponieważ deklarowanie tablic asocjacyjnych jest długie, lepiej przekodować je na liczby całkowite. Wersja 295 znaków twojego kodu: pastebin.com/d0LW0HM1
manatwork
3

Pyth, 83 bajty

Oświadczenie: To nie jest zwycięski kandydat, ponieważ niektóre funkcje językowe zostały utworzone po opublikowaniu pytania.

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

Oto zrzut heksowy:

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

Możesz również pobrać program tutaj i uruchomić go

python3 pyth.py mario.pyth

Spowoduje to utworzenie pliku o.png:

Mario

Wyjaśnienie:

Istnieją tylko 4 różne kolory, dlatego potrzebuję tylko 2 bitów, aby zapisać kolor każdego piksela.

.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"
Jakube
źródło
Czy działa to w ostatniej wersji Pytha przed opublikowaniem wyzwania?
lirtosiast
@ThomasKwa Tak, zapomniałem. Zmienię informacje.
Jakube,
2

Przetwarzanie 2 - 359 znaków

Widziałem to wyzwanie i od razu pomyślałem o funkcji Processing pixel []. Miałem nadzieję, że będzie krótszy, ale nadal jestem dość zadowolony z wyniku, biorąc pod uwagę, że to moja pierwsza próba gry w golfa kodowego.

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();

bez golfa:

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();

możesz pobrać przetwarzanie tutaj

bubalou
źródło
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);

właśnie go uruchomiłem, wciąż muszę wejść i pograć w golfa

Profesor Allman
źródło
1
Możesz zastąpić divlitery składające się na wiersze domyślnie wstawionym znacznikiem. Nie testowałem tego, ale używanie apowinno działać. Możesz także użyć backgroundzamiast background-color.
NinjaBearMonkey
2

Perl - Ungolfed 927

Będę musiał zagrać w golfa później. Pierwszy raz próbuję 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();

Na pewno mamy ich mnóstwo, ale oto moje: Mario!

hmatt1
źródło
2

Bash do druku: 179 158 bajtów

Zainspirowany odpowiedzią user2485710 .

Musisz dostroić terminal, aby dokładnie pasował do kolorów.

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 /')"
hpsMouse
źródło
to właśnie widzę . czy robię coś źle?
nowy
2
@ardnew: BSD Base64 zastosowania -Ddo dekodowania i -ddo debugowania .
Dennis
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"

Jest to obraz 2-bitowy na piksel w podstawie 64. Piksele są odwzorowywane na kody specjalne Ansi.

wprowadź opis zdjęcia tutaj

wolfhammer
źródło
Nawet nie próbując, twój kod wydaje się nieco grywalny: tio.run/…
sergiol
2

JavaScript - 256 znaków (161 obfusc-a-tweetowany)

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>

wprowadź opis zdjęcia tutaj

Metoda:

  1. Przy użyciu maskowania bitów ciąg znaków 63 x 8 bitów zapewnia tablicę wartości 126 x 4 bity składającą się z liczb z zakresu 0–9. (Frustrująco ... uratowałem 63 znaki przechodząc na 4-bit, ale wydałem 50 znaków na rozpakowywanie bitów ponownie lol. Mimo to 13 znaków to 13 znaków! :-)
  2. 4 kolory farb są kolejno wyświetlane w kolejności: B, G, R, O. Przy każdej iteracji renderowane są 0-9 div dla bieżącego koloru (z przerwą co 12 linii)

Aby określić optymalną kolejność dla cyklu kolorów, uruchomiłem algorytm kompresji w stosunku do surowych danych dla każdej z 24 permutacji [R, G, B, O] i wybrałem tę, która daje najkrótszą wydajność (126 było najlepsze, najmniej optymalne było około 150-coś)

ETA odkryło to dopiero po przeczytaniu innych odpowiedzi za pomocą obfusca-tweet ...

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

Dalsze pomysły - Wypróbuj 3-bitowy zakres danych 0–6, z rzadkim 7,8,9, zyskując 4 dodatkowe: 60000N. - sprawdzaj permutacje cyklu kolorów we wszystkich kierunkach i prędkościach innych niż poziomo jeden piksel na raz. - wypróbuj wiele przejść renderowania, aby kolory można było układać warstwami.

Bumpy
źródło
D'oh właśnie przyszło na myśl, że chodzi o znaki, a nie pa, więc prawdopodobnie mógłbym ponownie zmniejszyć o połowę dane, używając znaków 16-bitowych.
Wyboisty
1

JavaScript, 253 240 238 236

Źródło Obfuscatweet ed - 253 240 238 236

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

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

Dzięki @compass za <p>sztuczki z tagami i @xem za 2 (5) znaków.

Próbny

Konwertuje dane z bazy 36 i konwertuje na bazę 4.

Przekąska
źródło
Nie mogę tego przetestować, ale nie sądzę, że padding:9robi coś bez jednostki po tym. Możesz również użyć elementu jednoliterowego, takiego jak alub qktóry jest domyślnie wbudowany, zamiast p.
NinjaBearMonkey
@ hsl Zaktualizowałem link do wersji demonstracyjnej i działa dobrze przynajmniej w moim Chrome, Firefox i Safari na Macu.
Przekąska
-2 bajty: zamień „|” przez 9 w ciągu i podziale. Ponadto używasz 3 razy „document.write”, powinieneś umieścić go w var, aby zapisać, np. 24b)
xem
@xem Dzięki za przypomnienie mi sztuczki polegającej na dzieleniu liczb. A ponieważ nie możemy przypisać document.writedo zmiennej (powinniśmy użyć document.write.bind(document)), najlepsze było przypisanie documentdo zmiennej.
Przekąska
lub możesz to zrobić za pierwszym razem: (d = dokument) [w = "write"] (/ * rzeczy do napisania * /) i po prostu zrób to po: d [w] ("Hi")
xem
1

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

Za pomocą Obfusc-a-tweet :

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

Spowoduje to wyświetlenie duszka bez użycia żadnych obrazów lub wielu elementów; po prostu niewłaściwie wykorzystuje box-shadowwłaściwość CSS do utworzenia każdego piksela. Wypróbuj na http://jsbin.com/pozohiyezo/ . Ta nieobjawiona wersja ma 307 znaków :

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+'"')

To jest oryginalna wersja HTML o zwykłej wanilii. Zobacz to w akcji na 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"
NinjaBearMonkey
źródło
TIL, nie możesz zamknąć tagu <p :)
xem.
ten kod może mieć bardzo dobrą kompresję w narzędziu takim jak regpack. Oto przykład w 729b (JS jest jednak używany do pisania HTML): goo.gl/7fF7kx
xem
@ xem Właściwie nawet nie zastanawiałem się nad wygenerowaniem kodu za pomocą JS, ale udało mi się znacznie skrócić jego zakup zgodnie ze wzorcem kodu.
NinjaBearMonkey
1

JavaScript, 256 lub 245 252 lub 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]+">")}))

Smutne jest przesłonięcie 256, ale 245 jest możliwe, jeśli używa się znaków niedrukowalnych:

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]+">")}))

Wystąpił problem z przesłaniem rozwiązania ze znakami niedrukowalnymi. Argumentem btoamusi być wynik atob("ij6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld")dodania 1 symbolu długości dla ucieczki odwrotnego ukośnika.

Skróć oba rozwiązania o 4 symbole: nie potrzebujemy nowych do tworzenia tablicy.

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]+">")}))

W tej wersji nie jest wymagane ucieczka. W btoa„s argument jest wynikiematob("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclbaidld")

Qwertiy
źródło
Zauważyłem problem związany z niedrukowaniem i moje ostatnie wyzwanie. Myślałem, że to tylko znaki 8, 9 i 13, jeśli to pomaga (choć łatwo można się pomylić)
Wyboisty
1

Perl, 266 260 257 249 245 bajtów

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

Używa podejścia podobnego do rozwiązania bash użytkownika 2485710 do zapisywania danych wyjściowych w stylu VT100. Usuwa jawną literę N dla nowej linii, wstawiając nową linię co 12 „vt100 pikseli”, 12 * 7 = 84.

Steve
źródło
1

SmileBASIC, 147 136 znaków

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

Wyjście (przycięte): zrzut ekranu

Zamieniłem wszystkie znaki w ciągach danych na x„s”, oto kody znaków (w UCS-2):
P$(Paleta): FF6B,8CFF,FFB1,3425,FF6A,6B04,FFE3,D925
Dane obrazu:0000,83F8,0A80,A3FA,8BE4,A5EA,BEA5,A55A,7EE5,0575,BFF5,0156,BFF5,0156,BBA5,0575,3AF4,A55A,3BC4,A5EA,0BC4,A3FA,0300,83F8

Paleta jest przechowywana w postaci ciągu, każdy kolor (32 bity) jest przechowywany w dwóch znakach (16 bitów każdy). Dane obrazu (2 bity na piksel) są przechowywane w innym ciągu (8 pikseli na znak)
Na szczęście wyzwanie jest oceniane w postaci znaków, ponieważ plik ten jest znacznie większy, jeśli jest zapisany w UTF-8.

12Me21
źródło
1

05AB1E , 87 bajtów ( niekonkurencyjny )

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

Wypróbuj online!

Wyjścia:

#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

Ponieważ 05AB1E nie może tworzyć kolorów ani grafik jakiegokolwiek rodzaju ... Jeśli nie jest to dopuszczalne, usunę je.

Urna Magicznej Ośmiornicy
źródło
Możesz napisać opakowanie Bash i powiedzieć, że masz rozwiązanieBash + 05AB1E
Pavel
1
@Pavel Myślałem o zrobieniu tego, zgaduję, że połączę to rozwiązanie z czyimś rozwiązaniem; P.
Magic Octopus Urn
Nie mogę powiedzieć, że „wygrywa”, ale proszę o zachowanie go, ponieważ jest to świetny wynik kompresji :)
xem
0

Sinclair BASIC - 573 bajtów

OK, więc Spectrum nie może pokazywać kolorów RGB zgodnie ze specyfikacją, więc użyłem najbliższego możliwego.

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

Łańcuch ma kolor (1 = niebieski, 2 = czerwony itp.), A następnie litera reprezentująca liczbę powtórzeń tego bloku (przyjmując wartość ASCII minus 96, aby otrzymać 1,2,3 itd.). Liczba bez litery po prostu rysuje jeden blok.

"\::"w wierszu 60 opisano sposób wprowadzania grafiki w edytorze tekstu przed przekształceniem go w plik TAP w celu załadowania do emulatora Fuse. (Pokazuje się na ekranie jako jednolita grafika blokowa).

Każde słowo kluczowe jest jednym bajtem w Sinclair BASIC, zawiera licznik polecenia PEEK po jego wygenerowaniu.

To jest Mario

Brian
źródło
0

Perl - 399 171 bajtów

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

Zapisuje plik gif na standardowe wyjście.

Steve
źródło