Wyzwanie
Twoim zadaniem jest wyprowadzenie czasu (w czasie 12 godzin) w sztuce ascii.
Wszystkie znaki, które zostaną użyte, są następujące:
___ __ ___ ____ _ _ _____ __ ______
/ _ \ /_ | |__ \ |___ \ | || | | ____| / / |____ |
| | | | | | ) | __) | | || |_ | |__ / /_ / /
| | | | | | / / |__ < |__ _| |___ \ | '_ \ / /
| |_| | | | / /_ ___) | | | ___) | | (_) | / /
\___/ |_| |____| |____/ |_| |____/ \___/ /_/
___ ___
/ _ \ / _ \ _
| (_) | | (_) | __ _ _ __ _ __ _ __ (_)
> _ < \__, | / _` | ' \ | '_ \ ' \ _
| (_) | / / \__,_|_|_|_| | .__/_|_|_| (_)
\___/ /_/ |_|
(Dla każdej liczby / symbolu osobno zapoznaj się z tą treścią ).
Otrzymasz dane wejściowe w postaci tablicy:
[hours, minutes, 'am/pm']
. Na przykład,[4, 57, 'am']
z pojedynczymi cudzysłowami używanymi tylko dla am / pm- lub
"hours-minutes-am/pm"
. Na przykład,"4-56-am"
- lub
[hours, 'minutes', 'am/pm']
dla języków, które nie obsługują zer wiodących na liczbach. Na przykład,[4, '07', 'am']
Możesz użyć dowolnej metody wprowadzania.
Dane wyjściowe będą miały postać 1 2 : 5 9 am
, w której znajduje się jedna spacja początkowa, dwie spacje między każdą liczbą (w treści, każda liczba ma już jedną spację po każdej stronie), jedna spacja między: (dwukropek) i sąsiednie liczby oraz jedna spacja między ostatnią liczbą a am/pm
opcjonalnym początkowym i / lub końcowym znakiem nowej linii. Wszystkie spacje znajdują się między skrajnym prawym punktem symbolu po lewej stronie i skrajnym lewym punktem symbolu po prawej stronie.
Dozwolone jest niejawne wyjście.
Wygrywa najniższy rozmiar bajtu.
am/pm
Muszą być usytuowane tak, że w dolnej części p
IN pm
jest wyrównana z dolną częścią końca wyjścia, to jest im undercore oznaczający górę am/pm
zaczyna się na trzecim dół linii (nie wliczając czołową przełamane).
Dwukropek ma być wyrównany w taki sposób, aby jego pierwszy znak (podkreślenie) zaczynał się od drugiej linii w dół (nie licząc wiodącej nowej linii).
Dla minutes < 10
, wypisz minuty z wiodącym 0
(powinieneś otrzymać to na wejściu). Na przykład [8, 04, 'pm']
-> 8 : 0 4 pm
.
Nie wolno pobierać danych dla numerów z biblioteki lub zasobu zewnętrznego. Wszystkie dane muszą być zawarte w programie.
Na przykład dla danych wejściowych [12, 47, 'am']
wynik byłby następujący:
__ ___ _ _ ______
/_ | |__ \ _ | || | |____ |
| | ) | (_) | || |_ / / __ _ _ __
| | / / _ |__ _| / / / _` | ' \
| | / /_ (_) | | / / \__,_|_|_|_|
|_| |____| |_| /_/
(Jeśli zobaczysz jakieś przypadki krawędzi, z którymi nie możesz zdecydować, co zrobić, napisz w komentarzach, a ja dodam je do przykładów).
Odpowiedzi:
Perl,
592579540522510 bajtówPod sektorem!
Ten program oczekuje czasu w drugim formacie ( „12-34-am” ) jako argumentu wiersza poleceń.
Skomentowano:
Pamiętaj, że z powodu problemów z kodowaniem znaków po wklejeniu powyższego kodu do pliku dane wyjściowe mogą być nieco zniekształcone. Oto wersja golfowa, zakodowana w standardzie 64. Skopiuj i wklej do
base64 -d > 510.pl
:Oto czcionka, której używam. Oddzielę glify od siebie o 12 znaków (wielkość am / pm), aby ułatwić indeksowanie.
Ta czcionka ma 592 bajty.
W poprzednim podejściu zastosowano kilka wariantów kompresji RLE, aby zredukować to do 353 bajtów, kosztem 78 bajtów kodu dekompresyjnego.
Kodowanie Huffmana kompresuje czcionkę do 221 bajtów kosztem 154 bajtów dla algorytmu dekompresyjnego.
źródło
Bash + narzędzia GNU + figlet , 134
Nie jestem pewien, czy figlet jest dozwolony, czy nie, ale wydaje się, że zapewnia on odpowiednie czcionki -
big
dla cyfr orazsmall
dla:
i{a,p}m
:Reszta to tylko uzyskiwanie właściwych informacji
date
i zmienianie formatowania, aby wyglądało dobrze:Figlet może być zainstalowany na Ubuntu z
sudo apt-get install figlet
.źródło
C ++, 938 bajtów
Zmieniona wersja z podstawową kompresją danych wejściowych: przetestuj tutaj
źródło
Haskell,
932699 bajtówTak, poniżej 700 bajtów !!
Nieco golfa
Jak to działa
(Tak działa przede wszystkim program bez golfisty)
clock
zajmuje krotkę czasu i zwraca ciąg znaków.m
to bieżąca minuta z0
dodanym wiodącym, jeśli tak jest<10
.hm
godziny i minuty połączone z:
. Ostatnią rzeczą, jaką robi, jest transpozycja wyniku.Dość proste tutaj.
digit
to funkcja, która mapuje znaki do lokalizacji w przechowywanym ciągu.To jest przechowywany w magii ciąg.
Jedyną prawdziwą zmianą między programami golfowymi i nie golfowymi jest to, że program golfowy dodaje pewną kompresję łańcuchów, zastępując niektóre typowe wzorce znaków
!@$
. Pierwotny ciąg danych to667
bajty, po kompresji zamiany jest on390
bajtowyźródło
JavaScript (ES6),
994985 bajtówOkropna próba z surowymi danymi w ogóle nieskompresowanymi i bardzo tandetna metoda wysyłania danych.
Ale hej ... to tylko moja druga odpowiedź codegolfa!
Stare zgłoszenie (994 bajtów) :
Podziel na linie, aby ułatwić czytanie.
Gruntownie:
źródło
Python 3,
10851072 bajtówGrał w golfa
Nie golfił
źródło