Dane wejściowe : kolor szesnastkowy RGBA c
(np. FFFF00FF
) I liczba całkowita> 0 i <1000 n
(np. 200
).
Dane wyjściowe : surowe bajty pliku PNG, tak że gdy dane wyjściowe są zapisywane w pliku i otwierane w przeglądarce zdjęć, wyświetlany n
jest n
obraz wypełniony kolorem c
.
Specyfikacja : Twój program powinien wypisywać dokładnie :
- nagłówek PNG (
89504E470D0A1A0A
szesnastkowo) IHDR
fragment zawierający następujące dane:- szerokość: poprzednie wejście
n
- wysokość: poprzednie wejście
n
- głębia bitowa:
8
(RGBA
) - rodzaj koloru:
6
(truecolor z alfa) - metoda kompresji:
0
- metoda filtrowania:
0
- metoda z przeplotem:
0
- szerokość: poprzednie wejście
- jeden lub więcej
IDAT
fragmentów zawierających dane obrazu (wcześniej wprowadzono jednolity obraz koloruc
); może być skompresowany lub nieskompresowany IEND
fragment końcowy obraz
Dalsze szczegóły dostępne są w Wikipedii , na stronie W3 lub w wyszukiwarce Google.
Ograniczenia :
- Nie wolno używać bibliotek obrazów ani funkcji zaprojektowanych do pracy z obrazami dowolnego rodzaju.
- Twój program musi zostać uruchomiony w czasie krótszym niż 3 minuty i wygenerować plik poniżej 10 MB dla wszystkich danych wejściowych (kontrola poprawności).
- To jest golf golfowy , więc wygra najkrótszy kod w bajtach!
code-golf
graphical-output
Klamka
źródło
źródło
999x999
Plik ma więcej niż 30720 pikseli, dzięki czemu wydaje się wewnętrznie sprzeczne.Odpowiedzi:
Perl, 181
Rozmiar to 180 bajtów i
-p
potrzebna jest opcja (+1). Wynik to wtedy 181.Argumenty podawane są przez STDIN w linii oddzielonej spacją, kolorem jako wartością szesnastkową (16 znaków) i liczbą pikseli dla szerokości / wysokości, np .:
Rozmiar pliku to 832 bajty. Maksymalny rozmiar obrazu (n = 999) tego samego koloru ma 6834 bajty (znacznie poniżej 10 MB).
Rozwiązanie wykorzystuje dwie biblioteki:
use Digest::CRC crc32;
dla wartości CRC32 na końcach porcji.use IO::Compress::Deflate deflate;
kompresować dane obrazu.Obie biblioteki nie są powiązane z obrazami.
Nie golfowany:
Edycje
use IO::Compress::Deflate':all';
zastępuje się przezuse Compress::Zlib;
. Ten ostatnicompress
domyślnie eksportuje funkcję deflacji . Funkcja nie potrzebuje referencji jako argumentów, a także zwraca wynik bezpośrednio. To pozwala pozbyć się zmiennej$o
.Dzięki za odpowiedź Michaela :
Funkcja
k
: Wywołaniepack
może zostać usunięte przy użyciu szablonuNa*N
dla pierwszejpack
funkcji.pack
szablonNNCV
z czterema wartościami optymalizuje sięNNC3n
z sześcioma wartościami.Dzięki za komentarz VadimR z dużą ilością wskazówek:
use String::CRC32;
jest krótszy niżuse Digest::CRC crc32;
.y///c-4
jest krótszy niż-4+y///c
.CH*
z powtórzeniem wartości.$i
za pomocą odwołania do wartości.-p
) z dopasowaniem separatora spacji/ /
. Potem jest pierwsza opcja$`
i wchodzi drugi argument$'
.-p
drukuje również automatycznie$_
."\cZ"
jest krótszy niż"\x1a"
.Lepsza kompresja
Kosztem rozmiaru kodu dane obrazu mogą być dalej kompresowane, jeśli zastosowane jest filtrowanie.
Rozmiar niefiltrowanego pliku dla
FFFF0FF
200
: 832 bajtówFiltr
Sub
(różnice poziomych pikseli): 560 bajtówFiltruj
Sub
dla pierwszego wiersza iUp
dla pozostałych wierszy: 590 bajtówNajpierw niefiltrowana linia, a następnie filtruj
Up
: 586 bajtówRównież
Compress::Zlib
można dostroić; najwyższy poziom kompresji można ustawić za pomocą dodatkowej opcji dla poziomu kompresji działającegocompress
kosztem dwóch bajtów:Rozmiar pliku
yellow200.png
bez filtrowania zmniejsza się z 832 bajtów do 472 bajtów. W przypadku przykładu zSub
filtrem rozmiar pliku zmniejsza się z 560 bajtów do 445 bajtów (pngcrush -brute
nie można dalej kompresować).źródło
-p
. Oprócz wglądu w odpowiedź Michaela (NA*N
iNNCV
szablony): -String::CRC32
domyślnie eksporty///c-4
jest OK,CH*
szablon$i
zniknął\cZ
, słowa bez słów są w porządku-p
i/ /;
umieszcza argumenty w przedmeczu i postmatchu. Zastanawiam się, czy coś przeoczyłem, a wynik możeuse Compress::Zlib;
PHP 214
Nie jestem ekspertem od PHP, jest miejsce na golfa. Wskazówki są mile widziane.
Wygeneruj plik PNG:
Wygeneruj strumień base64 (wklej wynik w pasku adresu przeglądarki)
Wersja bez golfa:
źródło
Python, 252 bajty
Ten skrypt pobiera dane wejściowe z argv. Uruchom ten skrypt z wiersza poleceń, np
python 27086.py deadbeef 999
źródło