To dość proste wyzwanie, ale (mam nadzieję) zabawne.
Zadanie
Jeśli teraz albo miesiąc jest, 4
a dzień jest 20
, godzina (na zegarze 12-godzinnym) jest, 4
a minuta jest 20
, lub minuta jest, 4
a druga jest 20
, wydrukuj tę sztukę ascii:
.
.:.
:|:
.:|:.
::|::
:. ::|:: .:
:|:. .::|::. .:|:
::|:. :::|::: .:|:;
`::|:. :::|::: .:|::'
::|::. :::|::: .::|:;
`::|::. :::|::: .::|::'
:::|::. :::|::: .::|::;
`:::|::. :::|::: .::|::;'
`::. `:::|::. :::|::: .::|::;' .:;'
`:::.. `;::|::. :::|::: .::|::: ::::;
`:::::. ':|::. :::|::: .::|:' ,::::;'
`:::::. ':|:::::|:::::|:' :::::;'
`:::::.:::::|::::|::::|::::.,:::;'
':::::::::|:::|:::|:::::::;:'
':::::::|::|::|:::::::''
`::::::::::;'
.:;'' ::: ``::.
:':':
;
Możesz mieć końcowe spacje.
W przeciwnym razie wydrukuj liczbę minut i sekund pozostałych do następnej takiej okazji w formacie: %d minutes and %d seconds left until your next hit.
przy zminimalizowanym czasie.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach !
PS Jeśli to wyzwanie jest zbyt nieodpowiednie dla tej strony, powiedz mi, a ja to zmienię.
code-golf
ascii-art
kolmogorov-complexity
date
Maltysen
źródło
źródło
Odpowiedzi:
Python 2, 371 bajtów
To źródło zawiera bajty, których nie można wydrukować, dlatego jest prezentowane jako zrzut heksadecymalny, który można dekodować
xxd -r
.Część czytelna:
źródło
JavaScript (ES6), 537 bajtów
Wykorzystuje kodowanie CP-1252.
Uwaga: Wszystkie nieczytelne wpisy w tym poście są oznaczone znakiem ucieczki,
\u00xx
dzięki czemu system Stack Exchange nie usuwa ich automatycznie. Należy uznać, że mają rozmiar jednego bajtu.Wyjaśnienie
Używa schematu kodowania wraz z pakowaniem każdego znaku do 4 bitów. Główna logika kodu to 174 bajty, a łańcuch liścia (w tym dekompresja) to 364 bajty. Dalsze szczegóły dotyczące metody kompresji można znaleźć poniżej.
Algorytmy kompresji
Bez kompresji, 911 bajtów
To jest sznurek liścia bez kompresji.
Kodowanie Run-Length, 542 bajtów
Ponieważ istnieje wiele kolejnych powtarzających się znaków, kodowanie w czasie przebiegu znacznie poprawia liczbę bajtów.
Każdy znak powtórzony 3 lub więcej razy zostaje zastąpiony znakiem, po którym następuje liczba dziesiętna
amount - 3
. Zakodowany ciąg jest generowany za pomocą tego kodu:4-bitowe pakowanie + RLE, 364 bajty
W oryginalnym ciągu znajduje się 9 różnych znaków, co oznacza, że 4 to minimalna liczba bitów do reprezentacji. Dogodnie pozwala to zmieścić dokładnie dwie reprezentacje znaków w jednym bajcie, umożliwiając zastosowanie prostego (i przyjaznego dla golfa) algorytmu dekompresyjnego. Ponadto pozostało 7 znaków, co pozwala na zastosowanie kodowania długości serii base-7 przed spakowaniem. Umieszczenie każdego 4-bitowego indeksu w górnej i dolnej części każdego skompresowanego znaku oznacza, że w bajcie są przechowywane 2 znaki, ponieważ kodowanie CP-1252 koduje każdy znak pod kodem 256 jako pojedynczy bajt.
Poniższy kod służy do kodowania i pakowania w czasie wykonywania:
Kodowanie Huffmana (Możliwa poprawa w przyszłości)
Niektóre znaki występują znacznie częściej niż inne, więc kodowanie Huffmana (liczby całkowite o zmiennej długości reprezentujące każdy znak) może zaoszczędzić kilka kolejnych bajtów. Wprowadzi to jednak znacznie większą złożoność algorytmu dekompresyjnego, więc poza tym, że jest o wiele większym nakładem pracy, może również kosztować więcej bajtów dekompresji, niż zapisuje w zakodowanym ciągu.
źródło
JavaScript ES6, 905 bajtów
Uff .. 12-godzinny zegar zabił moje skądinąd krótkie ( ahum ) rozwiązanie.
905 bajtów do wydrukowania 898 znaków z ascii art yay
Nieskluczony kod
Uwaga: Nieoznakowany kod nie zostanie wykonany
Spróbuj!
W poniższym fragmencie kodu możesz ustawić datę testowania sztuki ascii
źródło
15:16:20
będzie pasował do wyrażenia regularnego i przypadkowo wyświetli magiczny ciąg?()
były konieczne dladate
konstruktora:c=new d(), ...
może stać się po prostuc=new d, ...