Dystrybucja Debian Linux (i dystrybucje oparte na Debianie, takie jak Ubuntu, Kali i inne) używają menedżera pakietów o nazwie APT. Aby zainstalować program foo
, wpisz w terminalu
sudo apt-get install foo
Jedno małe jajko wielkanocne z APT jest następujące
apt-get moo
Które po wpisaniu wygeneruje następujący wynik
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
..."Have you mooed today?"...
Musisz napisać program, który generuje dane wyjściowe EXACT w jak najmniejszej liczbie bajtów. (w tym spacje końcowe i nowa linia)
Oto te same dane wyjściowe z \n
dodanym do reprezentowania znaków nowego wiersza i *
do reprezentujących końcowe spacje
(__)*\n
(oo)*\n
/------\/*\n
/ | ||***\n
* /\---/\*\n
~~ ~~***\n
..."Have you mooed today?"...\n
Zgodnie z żądaniem w komentarzach, tutaj jest suma md5 muczenia.
35aa920972944a9cc26899ba50024115 -
apt-get moo|md5sum
?apt-get moo
POdpowiedzi:
Bash, 95 bajtów
Powyższe jest odwracalnym zrzutem heksadecymalnym. Aby utworzyć plik, uruchom
wklej zrzut heksowy i naciśnij Enter, a następnie Ctrl+ D.
Aby uruchomić utworzony plik, uruchom
Wykona się każda inna nazwa pliku.
Wybrałem zopfli jako kompresor, ponieważ jest on kompatybilny z programem zut Coreutils i osiąga lepszą kompresję niż gzip, bzip2 i xz.
zcat<<''
odczytuje następujące wiersze (do EOF) i podaje je jako dane wejściowezcat
.Zauważ, że zcat wydrukuje ostrzeżenie (ponieważ usunąłem sumę kontrolną skompresowanego pliku), podobnie jak bash (ponieważ HEREDOC nie jest zakończony pustą linią). Te ostrzeżenia są drukowane do STDERR (pomijane przez
2>&-
), co jest domyślnie dozwolone na zasadzie konsensusu w Meta .źródło
CJam, 96
Wykorzystuje to wiele nieprzyjemnych bajtów, więc oto zrzut heksowy:
Możesz uruchomić plik za pomocą interpretera Java; może być konieczne zastosowanie kodowania ISO-8859-1, na przykład:
java -Dfile.encoding=ISO-8859-1 …
Wypróbuj online
Równoważna (i znacznie dłuższa) wersja ASCII:
Wypróbuj online
Wyjaśnienie:
Istnieje 7 znaków, które mają powtórzeń:
_o-|~.
. Każdy z nich może być zakodowany jako liczba n od 0 do 6. Dla każdej powtarzającej się sekwencji koduję zarówno indeks znaku (n), jak i liczbę powtórzeń (k) w jednym bajcie:2 * (k * 7 + n)
zapisany jako znak z tym kod. I koduję dowolne pojedyncze znaki2 * c + 1
, gdzie, gdzie c jest kodem ASCII. Wszystko idzie w początkowym ciągu, a reszta programu go dekoduje:Stara wersja (109):
Wypróbuj online
źródło
Pyth, 100
Wypróbuj online: demonstracja
r"string"9
run-length-dekoduje ciąg.edytować:
Oto rozwiązanie 97 znaków: Demonstracja . Bardzo prawdopodobne, że jest to również 97 bajtów (w iso-8859-1). Ale zbyt zmęczony, by zapisywać bajty i robić wyjaśnienia. Chyba jutro wieczorem.
źródło
GolfScript (107 bajtów)
Jest to bardzo proste kodowanie: znaki nowej linii są zastępowane
^
, a spacje są kodowane długością. Wynik zawiera niektóre niedrukowalne znaki, więc przedstawiam go tutaj jakoxxd
wynik:Demo online
Zauważ, że jest to jeden znak krótszy niż odpowiedni kod CJam. Kompromis jest używany
'
jako separator dla głównego ciągu (oszczędzając dwa\
s, aby uciec"
), zapisując ii
konwertując wartości znaków na liczby całkowite w pętli dekodującej i uzyskując wolny znak nowej linii; vs literały znakowe zastępujące literały łańcuchowe jednoznakowe.Ponieważ to pytanie zostało na krótko oznaczone do druku-ascii, Stworzyłem również wersję z tylko (108) znakami do wydrukowania:
Zamiast kodowania okresie długości przestrzeni jako znaki
^A
do^R
(i kodowania^J
jak^
do kolizji uniknąć), pozostawia nietknięte i nowe linie koduje okresie długości jakI
doY
.Nawiasem mówiąc, mój program GolfScript Kolmogorov ogólnego przeznaczenia tworzy program 120-bajtowy.
źródło
Lua,
186178 bajtów8 bajtów zapisanych dzięki sugestii @DJ McMayhem
Nie golfowany:
źródło
a=repeat(" ",17)
> <> , 217 bajtów
Niestety jest to dość nudna odpowiedź. Zaczyna się od odczytania łańcucha, który wyciąga całą krowę, z nowymi liniami tworzonymi przez dodanie wartości 10 do stosu (a). Następnie przechodzi w pętlę, która po prostu wyciąga krowę.
Pierwotnie utworzyłem pętlę, aby dodać zestaw spacji, ale w rzeczywistości było to droższe bajtowo niż tylko wstawianie spacji.
EDYCJA: Zapomniałem, że ryba jest zapisana jako „> <>”
źródło
PowerShell, 144 bajty
Powyższy kod będzie działał poprawnie w środowiskach, które drukują znaki nowej linii w stylu Uniksa (
\n
). Wytwarza prawidłowe dane wyjściowe za pomocą np. Pash w systemie Linux.Matematycznie, dla PowerShell,
$a
optymalne jest posiadanie 8 spacji dla zmiennej, ponieważ mniej oznacza zbyt wiele dodatkowych spacji między zmienną a krową, aby były$b
opłacalne, a więcej oznacza, że nie możemy podwoić się w pierwszych dwóch liniach dla głowa.źródło
\r
jest znakiem powrotu karetki,\n
jest podawaniem linii. Razem\r\n
tworzy nowy wiersz w systemie Windows. 2. PowerShell to nie tylko system Windows. Przetestowałem twój kod za pomocą Pash (implementacja Windows PowerShell dla Mono o otwartym kodzie źródłowym) i dane wyjściowe mają odpowiedni skrót MD5. 3. Z uwagi na powyższe pozwoliłem sobie na cofnięcie postu. Jeśli nie zgadzasz się z tym, prześlij go ponownie na wiki.\r\n
i\n
, ale, jak powiedziałem, nie mogłem uzyskać prawidłowego MD5 w systemie Windows bez czegoś rażącego. Ale dziękuję za tę edycję. Najpierw też słyszałem o Pash, więc też dziękuję za to. Zastanawiam się, jak skomplikowane byłoby zbudowanie pod Cygwinem; ;-)Cząsteczka , 145 bajtów
Mój pierwszy raz próbował skompresować grafikę ASCII: P
źródło