Napisz program, który wyświetla bieżący czas systemowy jako zegar analogowy, używając grafiki ASCII. Zegar musi pokazywać co najmniej wskazówki godzinowe i minutowe oraz musi mieć wystarczającą rozdzielczość co najmniej 5 minut.
Wyświetlacz może być tak mały i brzydki, jak chcesz, ale pokazany czas powinien być łatwo rozpoznawalny.
Program musi działać nieprzerwanie i aktualizować swój status. Jeśli twój system może wyczyścić ekran, użyj go, w przeciwnym razie wystarczy odmalować zegar, gdy zmieni się jego stan.
Otrzymasz -20% premii od liczby postaci, jeśli zegar ma rozdzielczość co najmniej 1 minuty.
Odpowiedzi:
Mathematica 207 - 42 = 165
Znaczniki i etykiety godzin są umieszczone na okręgu jednostki.
H
iM
obracają się wokół centrum zegara, pokazując odpowiednio całkowitą liczbę ukończonych godzin i minut.S
aktualizuje swoją pozycję kilka razy na sekundę.Pokazane są dwie wersje: wersja, która drukuje tekst w płaszczyźnie kartezjańskiej, a druga, która wyświetla znaki tekstowe w siatce.
Ta wersja umieszcza postacie w płaszczyźnie kartezjańskiej.
Poniższy zegar pokazuje czas 3:08:17 .
Wersja terminalowa lub sieciowa :
430316 znaków (253 z dodatkowym rabatem)Ta wersja działa tak samo, ale umieszcza znaki w siatce komórek 61 x 61, a nie na płaszczyźnie kartezjańskiej. Nadal można go trochę pograć w golfa, ale chciałem tylko pokazać (niechlujny) wynik podobny do terminala w Mathematica .
Poniższy zegar pokazuje 11:06 .
Dla żartu:
Oto nie analogiczna wersja zegara analogowego. (60 znaków) Nie użyto zewnętrznych bibliotek.
źródło
JavaScript 370–74 = 296
http://jsfiddle.net/wBKQ6/7/
(Działa to tylko w Chrome, ponieważ nadużywam faktu, że identyfikatory elementów są dodawane do zakresu globalnego).
Gra w golfa (370):
Przykładowe wyjście (znacznie bardziej skondensowane w wersji demo):
źródło
Python, 328 - 65 = 263
Drukuje nowy zegar co sekundę, a wskazówka minut jest aktualizowana co minutę.
Zegary, które drukuje, wyglądają tak (nie są tak rozciągnięte w moim terminalu):
źródło
100% czystości Tylko bash ! Bez widelca!
Sfinalizowaną i zaktualizowaną wersję można znaleźć tam lub na tej stronie: zegar ascii dla maniaków . Ale nie używaj tego! Przeczytaj notatkę na końcu tej odpowiedzi, zostałeś ostrzeżony! Zamiast tego użyj tej wersji perla !
Pierwszy prosty zegar bez drugiego tiku.
Skalowalne i edytowalne:
Narysuj zegar 21x21 (10x2 + 1) o 10H10 w mniej niż jedną sekundę.
To akceptuje 3 argumenty:
Usage: ascii-clock.sh [ray of clock] [Hour] [Min]
gdzie domyślny promień to 12, rysunek zegara to2 x ray + 1
wysokość linii i podwójna szerokość z powodu dodanego miejsca, aby spróbować uzyskać okrągły kształt.Jeśli skrypt zostanie wywołany z argumentem
0
lub1
, będzie się powtarzać co minutę. W przeciwnym razie, jeśli określono przynajmniej godzinę (drugi parametr), losuje tylko raz i wychodzi.H
Znacznik znajduje się w 70% z promieniowania iM
znacznik znajduje się w 90% z promieniowania.Bez użycia zewnętrznych plików binarnych takich jak
date
lubbc
do losowania!(Dzięki @manatwork za wbudowane,
read -t
jeśli/bin/sleep
).Wszystko to odbywa się za pomocą wbudowanego poleceń powłoki.
Używa sekwencji ANSI , ale tylko dla pętli i aby pogrubić znaczniki.
Można to uruchomić jako:
Spowoduje to wytworzenie czegoś takiego:
Lub może być uruchamiany jako:
Alternatywa: z pełnym rysunkiem ścieżki:
może produkować:
lub
Ostatnia wersja z Seconds renderuje tyki i nanosleep do synchronizacji.
Działa to tylko na najnowszym Linuksie, ponieważ
/proc/timer_list
umożliwia obliczenie ułamka sekundy do uśpienia między każdym odświeżeniem.Bardziej zaciemniona wersja (2702 bajtów):
Zgodnie z prośbą @manatwork istnieje wersja bardziej golfowa .
Ta wersja jest pokolorowana i przedstawia czas cyfrowy na rogach.
Uwaga: i tak tego nie używaj!
Ponieważ jest to program bashowy, a bash nie jest językiem programowania, przez pewien czas nie warto go używać.
Demo zużycia pamięci w zaledwie 5 godzin, z rysunkiem promienia o długości 7 znaków:
Główną zaletą tego jest to, że kiedy potrzebuję pamięci, muszę po prostu zabić zegar.
( Nota: Połączyłem to, wersję perla i jej wersję javascript w ascii-clock dla maniaków ;-)
źródło
bash
4.1. W wersji 4.2 rzeczywiście działa w sposób ciągły i nie wymaga parametrów wiersza poleceń.bash
jest demonstracją wielkich umiejętności. (/ ja zdejmuję kapelusz i klika link upvote) Ale te 2529 znaków wciąż można zredukować w duchu wyzwań związanych z golfem kodowym : „Golf-golf to konkurencja polegająca na rozwiązaniu określonego problemu w najmniejszej liczbie bajtów kodu źródłowego. ”Python 2 - 207
Jest bardzo brzydki, ale czytelny. Drukuje co 9 sekund (w razie potrzeby możesz zmienić na 1 sekundę), aktualizuje się co 5 minut. Nie mam dużego doświadczenia z golfem kodu w pythonie, więc spodziewam się, że można to poprawić.
Przykładowe dane wyjściowe:
źródło
Perl 5 x 65 = 325 - 65 (20%) = 260 znaków !!
Czysty, okrągły, z drugim tikiem i aktualizowany co sekundę.
Na 24- liniowej konsoli wyglądają dobrze ( 00:12:56 ):
I jest kolorowa, ładniejsza i mądrzejsza wersja:
Ta wersja jest silnie powiązana z inną odpowiedzią , z tą główną zaletą, że można przez chwilę uruchomić to w spokoju! Możesz więc znaleźć tam uaktualnioną wersję lub na tej stronie ascii-clock dla maniaków .
W demonstracji, która robi ok samo w Perl wymaga mniej zasobów:
dla mniej więcej takich samych funkcji:
s
kropką dla drugiego przewodnika.S
w lewym górnym rogu podczas snu (poszukaj różnicy w wersji bash )Plus
-a
Zaktualizowana wersja autoryzuje argument do rysowania ścieżki godzinowej i minutowej ułamkowo (ścieżka godzinowa miejsca 11h59 około 12h).Niech kolejna wersja perla !!!
Korzystanie z następującego (pięknego) obrazu:
Niż możesz po prostu:
Ok, wymaga to zainstalowania gd2-perl. Ale można zastąpić
curl
przezwget -O -
;-)(Uwaga: ten obraz ma rozmiar około 1,5 KB. Zbudowałem kolejny taki sam obraz, ale o długości 900 bajtów. Możesz znaleźć to zdjęcie, a także jego wersję javascript w ascii-clock dla maniaków :-)
źródło
eval
przezprint
, aby przed uruchomieniem nieznanego pobrać kod ;-)Tcl, 288
Ok, oto wyjaśnienie:
while 1 {...}
- Ok, zapomnij wyjaśnienia.regsub -all \ +|. "oaosocowoeouooovoioxozom r n\n" \ {&} p
zastępuje+|.
się_{\0}
i zapisuje wynik wp
.p
jest tak naprawdę pomieszanym słownikiem, w którym brakuje pierwszego klucza (lub tylko listą z nieparzystą liczbą elementów).lset p [set h [expr $h%12*2]] h
ustawia godzinę na liście zastępczejlset p [set m [expr $m/5*2]] [expr $h-$m?"m":"x"]
ustawia minuty. jeśli godzina i minuta są takie same, użyjx
zamiast tego.string map /\ $p {rr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru}
/\ $p
jest równa"/ $p"
, więc dodaję pierwszy key (/
). Następnie zastępuję każde wystąpienie kluczarr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru
jego wartością.Zwykła mapa to
(Odczytywać jako „Zamień
/
zo
, wymienića
zo
... zastąpićm
z___
(które powinny być spacji))I repace
o
zh
i innych zm
,m
,r
in
to tylko do Shoren ciąg wyjściowy (Wymieniłem kilka pomieszczeń z jednym z nich, również\n
zn
). Pierwszy element dodaję później, aby zamiast h * 2 + 1 użyć indeksu, który zastępuję. (zapisuje 2 znaki)Niektóre uwagi:
{}
. Ok, jest to trochę bardziej skomplikowane, np. Można uciec przed spacją za pomocą\
, ale takie szczegóły są udokumentowane gdzie indziej .key1 value1 key2 value2
źródło
JavaScript 2169-434 = 1735
Ok, dużo, ale są w porządku i działają tak samo jak mój poprzedni wariant w poprzednich postach ( bash i perl ).
Ta wersja jest bardziej zaciemniona niż ta, którą można znaleźć na moim zegarku ascii dla maniaków
źródło
Python, 259 - 52 = 207
Przykładowe dane wyjściowe:
źródło
Rubinowy:
230228 znaków - 46 = 182(Uwaga:
^[
jest pojedynczym znakiem).Przykładowy przebieg (o 21:19:33):
Wersja „Tak brzydka, jak chcesz”:
191181 znaków - 36 = 145(Mniejszy rozmiar, niższa precyzja, brak sekund, identyczny promień, straszne migotanie.)
Przykładowy przebieg (o 21:19):
Wersja bez trygonometrii:
130125 znaków (bez premii)(Zainspirowany Johannes Kuhn „s rozwiązania Tcl . Nie wiem, jak wiele, jak nie mam jeszcze rozszyfrować jego kodu).
Przykładowy przebieg (o 21:19):
źródło
tr': can't convert Fixnum into String (TypeError)”? Now that you mentioned the error I dug for a version 1.8.7 and received the above error of that. Works fine on 1.9.2 and 1.9.3. Seems that
? M ” zostało zinterpretowane jako Fixnum w starszych wersjach i dopiero później zostało zmienione na String.HTML i JS:
397 - 20% = 317.6 characters
Moja pierwsza iteracja. Nie jestem z tego bardzo zadowolony, ale to działa i pokazuje czas w bardzo jasny sposób.
źródło
Ti-Basic 84, 587 - 20% = 469,6
Jego wyniki są bardzo ładne i szczegółowe.
źródło
C, 554 bajtów, Aktualizacje mniej więcej raz na sekundę.
Wynik:
źródło