Kosmiczne wezwanie to wiadomość wysłana w kosmos w 1999 i 2003. Jest wykonana z 23 127 * 127px monochromatycznych obrazów bitmapowych, jak opisano tutaj .
Twoim zadaniem jest napisanie programu, który wyświetla całą wiadomość 127 * 2921px, albo w postaci tekstu (złożonego z zer, jedynek i znaków podziału linii) lub jako obraz (narysowany na ekranie lub zapisany na dysku). Będą dwie kategorie zwycięzców: jedna dla wyników tekstowych i jedna dla wyników graficznych.
Wszystkie triki są dozwolone, z wyjątkiem typowych luk.
Dozwolone jest wydrukowanie 23 stron osobno.
Dozwolone jest pisanie do 23 programów (np. Jeden dla każdej strony) i sumowanie ich rozmiaru w celu ustalenia wyniku.
Dozwolone jest użycie do 23 plików binarnych obok twojego programu (programów). Ich waga jest liczona w twoim wyniku.
Najkrótszy kod (w bajtach) wygrywa.
Przy 1 bicie na piksel obraz zawiera 127 * 127 * 23/8 = 46370 bajtów + 7 bitów danych. (ostrzeżenie: nie można wypisać dodatkowego zera, jeśli wartości pikseli są przechowywane w 46371 bajtach)
Końcowy znak nowej linii / spacja jest dozwolony dla tekstu wyjściowego.
Wyjście wizualne nie może zawierać żadnego czarnego piksela oprócz czarnych pikseli kosmicznego wezwania. Można go narysować w jednej kolumnie (poprawnie uporządkowanej) lub podzielić na 23 obrazy lub animować (jak gif), a także poprawnie uporządkować.
Załącznik: wyjście tekstu i wyjście obrazu do odtworzenia:
0
, pusty program Snails drukuje1
, a pusty program GolfScript drukuje nowy wiersz . Ktoś może przesłać 0-bajtową, 373888-programową odpowiedź :)Odpowiedzi:
GIF, 27386 bajtów
Oto strony oryginalnej transmisji pokrojone na pojedyncze ramki GIF, okazało się, że nie są tak małe jak 1 PNG wszystkich :(
źródło
HTML, 16012b
Skompresowałem obraz w PNG8, otworzyłem go w edytorze tekstu, dołączyłem
<svg onload="document.body.innerHTML='<img src=#>'">
na końcu i voilà:
Demo: http://xem.github.io/miniCosmicCall/
Uwaga: dołączanie
<img src=#>
również działa, ale pozwala na wyświetlenie dużej ilości śmieci, więc wolę tego nie robić.PS: dla zabawy umieściłem również całą wiadomość w jednym, wykonywalnym tweecie (możesz skopiować i wkleić ją w konsoli przeglądarki, a pojawi się obraz):
https://twitter.com/MaximeEuziere/status/742440423994580992
źródło
Python 2.7 -
109718077 bajtówaktualizacja:
LZMA faktycznie z jakiegoś powodu nie działa dla mnie, więc wróciłem do Deflate.
Znalazłem narzędzie online do jeszcze bardziej kompresowania PNG (mówią, że używają kompresji stratnej, ale tablica pozostaje niezmieniona)
__main__.py
trochę w golfa ...Większość algorytmów kompresji patrzy na dane jako tablicę jednowymiarową, a zatem nie może uchwycić powtarzających się dwuwymiarowych znaków wyświetlanych w wywołaniu kosmicznym (IMO utrudnia także obcym zrozumienie: P).
Najpierw wybrałem każdy znak jako tablicę 7 * 5 i sporządziłem listę wszystkich unikalnych znaków (101, jeśli pamiętam). Następnie iterowałem obraz, a gdy znaleziono znak, zapisywano jego pozycję i indeks (na liście znaków).
Pozycje te mogą być reprezentowane pojedynczą liczbą całkowitą, jednak z znalezionymi ponad 2K znakami, a pozycje w zakresie od 0-370966 (forma divmod) wymagają do 3 bajtów każda. Zebrałem jednak pozycje znaków w kolejności, więc zamiast tego przekonwertowałem pozycję bezwzględną na pozycję przesunięcia, dzięki czemu większość liczb jest mniejsza niż 1 bajt. Zakodowałem tę listę w utf-8, aby uwzględnić kilka liczb, które były większe niż 1 bajt
Po nagraniu i usunięciu wszystkich dopasowanych znaków zapisałem png z maksymalną kompresją. Następnie spakowałem skrypt rekonstrukcji Pythona (odwróć ten sam proces), png, szablon chatacter i listę pozycji znaków - wszystko w pliku zip, aby skorzystać z faktu, że python może wziąć folder lub plik zip jako argument, i rozpocznie wykonywanie od dowolnego pliku na najwyższym poziomie o nazwie
__main__.py
. Bawiłem się trochę z 7z, aby uzyskać najlepszą kompresję, która okazała się być LZMA z dykta 1M i 32-bitowymi słowami.oto skrypt dekodera (grał w golfa, ale wciąż ma komentarze)
link do pobrania pliku zip ...źródło
Gzipbzip2
w powłoce,2091418965 bajtówUtwórz plik danych wyjściowych z danymi wyjściowymi podanymi w pytaniu
bzip2
i zmień nazwę pliku nas
. To pozwala następnie:wykonać pracę. Daje to w sumie 18958 bajtów danych i 7-bajtowe polecenie.
źródło
Pyth, 46381 bajtów
Z oczywistych powodów nie można go tutaj opublikować.
Próba.
Pastebin zrzutu heksadecymalnego programu.
źródło
jc.BC""127"
).Bash + WebP binarny, 11 + 15330 = 15341 bajtów
Zgodnie z zasadami:
i
… Nie mogłem się oprzeć opublikowaniu czegoś głupio prostego.
Program działa w trybie bash i wyświetla obraz, zapisując go na dysku.
Używa 1 pliku binarnego, który również jest plikiem obrazu (tak, WebP jest formatem obrazu), dlatego program może zrobić tak niewiele, jak… wykonać kopię tego pliku.
Zatem kod (11 bajtów):
Zakładając, że plik binarny towarzyszący ma nazwę „b”, kod zapisuje plik obrazu na dysk z poprawnym rozszerzeniem („a.webp”).
Nie widzę powodu, aby przesyłać plik binarny, ponieważ jest on trywialnie stworzony przez uruchomienie
tworzy plik z 15330 bajtami. Jeśli ktoś chce, mogę go gdzieś przesłać.
Uwaga:
-z
opcja wcwebp
aktywuje tryb bezstratnej kompresji.9
to wytrzymałość na ściskanie (maksymalna).źródło
Python 3, 64513 bajtów
Używaj tylko ASCII!
http://pastebin.com/PMLb4Xti
Stara wersja, 64529 bajtów: http://pastebin.com/nteYkUtM
źródło
import lzma,base64,os