Podaj aktualny czas


49

Wyzwanie

Musisz podać bieżący czas w sposób ciągły (aż do anulowania przez przerwanie), raz na sekundę, w dowolny z następujących sposobów:

  • Musi być w formacie 24-godzinnym lub AM / PM.
    • Jeśli jest to pierwsze, należy je rozdzielić dwukropkami (tj. 15:47:36).
    • Jeśli jest to ten ostatni, należy go rozdzielić dwukropkami i śledzić AM / PM (tj. 3:47:36 PM)
  • Można go pobrać z Internetu.
  • Może to być czas systemowy.
  • Musi wyświetlać dowolną naturalnie dostępną formę wydruku, która obsługuje wybrany tekst.
  • Dane wyjściowe mogą zawierać dodatkowe informacje poza czasem, ale musisz zagwarantować jeden i tylko jeden wynik czasu na sekundę.
  • Ciągłe wyjście musi być w odstępie sekundowym - jeśli zdecydujesz się poczekać, aż sekunda zmieni się między wyjściami, to dobrze. Jeśli odczekasz sekundę między każdym wyjściem, jest to całkowicie akceptowalne, pomimo ewentualnej utraty dokładności.

Ponieważ jest to katalog, języki utworzone po tym wyzwaniu mogą konkurować. Pamiętaj, że musi być tłumacz, aby można było przetestować zgłoszenie. Dozwolone jest (a nawet zachęcane) samodzielne pisanie tego tłumacza dla wcześniej niewdrożonego języka. Poza tym należy przestrzegać wszystkich standardowych zasad gry w . Zgłoszenia w większości języków będą oceniane w bajtach w odpowiednim wcześniej istniejącym kodowaniu (zwykle UTF-8).

Katalog

Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań według języka oraz b) jako ogólnej tabeli wyników.

Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

## Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

## Perl, 43 + 2 (-p flag) = 45 bytes

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


Czy „do momentu anulowania przez przerwanie” obejmuje zamknięcie programu czy też potrzebuje mechanizmu, aby zatrzymać zakodowany w nim cykl?
user81655,


1
Ostrzeżenie: Wszystko sleep 1opiera odpowiedź przerwa reguła 5: należy zagwarantować jedno i tylko jedno wyjście, raz na sekundę. !!
F. Hauri

1
F. Hauri: Jak to możliwe? Zasada 6 mówi: „Jeśli poczekasz sekundę między każdym wyjściem, to również jest w porządku”.
YetiCGN

1
@Jasen Nie, ale znaczenie „to w porządku” oznacza, że ​​opcja oczekiwania jest nadal ważna, niezależnie od ewentualnej straty czasu. Wyjaśniłem to dla ciebie.
Addison Crump,

Odpowiedzi:


56

Minecraft 1.8.7, 7 + 8 = 15 blytów (bajty + bloki)

Dotyczy tylko jednego bloku poleceń:

xp 1 @p

Dane wyjściowe trafiają do konsoli klienta w następujący sposób:

czasy

W ramach normalnej wydajności.

To jest system:

system

xpdaje określoną ilość doświadczenia określonemu graczowi dzięki składni xp <amount> <player>. Jestem prawie pewien, że jest to najmniejsze polecenie, które ma teraz wyjątkową moc wyjściową.


3
Nie mów „19 bajtów”, ponieważ nie zmierzyłeś rozmiaru odpowiedzi w bajtach.
feersum

6
@feersum Jest powód, dla którego mówię bajty, zaufaj mi. Jest to obecnie najbliższa konsensusu dla MC.
Addison Crump

4
Możesz użyć przestarzałych kodów numerycznych, prawda?
Conor O'Brien

4
Użyj tego systemu oceniania, jeśli chcesz, 19 wielorybów, ale nie jest to 19 bajtów, ponieważ nie ma wcześniej zdefiniowanego kodowania, które pozwala przechowywać to rozwiązanie w pliku 19-bajtowym.
feersum

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Wierzę, że musiałbym zawinąć w JSON. Chyba że użyłem 1.6, ale jest to praktycznie inny język.
Addison Crump

17

JavaScript, 32 bajty

setInterval("alert(Date())",1e3)

Wykorzystuje fakt, że setInterval ocenia kod. Nie jest to zalecane, ale kiedy miałeś problem z golfem?

Date() zwraca bieżącą godzinę i datę w takim formacie (może się różnić w zależności od systemu).

 Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)

Czy setInterval(alert,1e3,Date())zamiast tego zadziałałoby?
ETHproductions

@ETHproductions Zawsze pokazuje mi ten sam czas
ev3commander

@EETProdukcje w twoim przykładzie Date()zostaną ocenione tylko raz podczas tworzenia interwału
MMM

15

sh (+ zegarek), 11 bajtów

Scenariusz:

watch -n1 .

(brak końcowego nowego wiersza)

Wynik:

Every 1,0s: . (SPACES) Sat Nov 28 19:07:51 2015

Ilość miejsc zależy od szerokości terminala.

Testowane na Debian8 i NetBSD7.


Odpowiednie narzędzie do pracy, +1
Addison Crump

Zaraz, czy to się liczy jako język programowania? Czy możesz podać mi link do tłumacza?
Addison Crump

@VoteToClose watchjest coreutil. Prawdziwym językiem jest bash / sh.
Klamka

Więc ... nie powinno to być Bash (distribution), nie watch? @Doorknob
Addison Crump

1
Hmm Musisz użyć -pprzełącznika, aby nie złamać zasady , musisz zagwarantować jedno i tylko jedno wyjście czasu na sekundę. !!
F. Hauri

15

Snap , 8 7 6 bloków


(Tak, zmieniłem go w MS Paint, ponieważ byłem zbyt leniwy, aby zrobić kolejny zrzut ekranu. Co z tego? Przynajmniej jest czytelny.)
Kliknij skrypt, aby uruchomić
zegar 24-godzinny.


2
Zawsze uwielbiam graficzne języki programowania. : D +1
Addison Crump

oh hej ev3! Znam cię z forów Snap / Scratch: P dlaczego dokładnie potrzebujesz Snap zamiast Scratch?
anOKsquirrel

2
@ anOKsquirrel Ponieważ nie muszę zagnieżdżać wszystkich tych bloków łączenia.
ev3commander

Czy to nie powinno czytać 9:21:08?
Łukasz

@Luke Jak pokazuje odpowiedź TI-BASIC, czas bez wiodącego zera na wyjściu jest w porządku. Jest czytelny dla człowieka i jasne, jaka jest godzina.
Addison Crump

11

Python 2, 47 bajtów

from time import*
while[sleep(1)]:print ctime()

Brak linku online, ponieważ czas oczekiwania ideone (huehuehue) przed wydrukowaniem czegokolwiek.

Dzięki @xsot za while[sleep(1)]lewę i ctimelewę.

Drukuje bieżącą datę i godzinę w następujący sposób: Fri Nov 27 21:23:02 2015


2
/ ja klaszcze powoli w rytm. Bardzo zabawne Mego. ; D
Addison Crump


sleep 1reguła 5 oparta na łamaniu odpowiedzi: musisz zagwarantować jeden i tylko jeden wynik czasu na sekundę.
F. Hauri

@ F.Hauri sleep 1powoduje uśpienie bieżącego wątku przez dokładnie jedną sekundę. Jest zgodny z zasadami.
Mego

1
@ F.Hauri Biorąc pod uwagę, że sam autor wyzwania używa ekwiwalentu sleep(1)zarówno w swoim rozwiązaniu AppleScript, jak i swoim rozwiązaniu biczowania Vitsy + , jest to wyraźnie dopuszczalne.
Mego

9

Perl, wiersz poleceń, 24 bajty

sleep(say)while$_=gmtime

Należy to uruchomić z wiersza poleceń, ponieważ perl -E'sleep(say)while$_=gmtime'(w systemie Windows zamiast tego należy stosować cudzysłowy). Data zostanie podana wraz z czasem, który wydaje się dozwolony .


Perl, 25 bajtów

sleep print$/.gmtime;do$0

W kontekście skalarnym gmtimezwróci ciąg podobny do Sat Nov 28 10:23:05 2015. Wynik z print, zawsze 1, jest używany jako parametr dla sleep. do$0służy do ponownego uruchomienia skryptu po zakończeniu timera.


2
Jak wynika z rozwiązania AppleScript @ VoteToClose i komentarza , nie trzeba wyodrębniać czasu.
Mego

1
Inną 24 bajtów rozwiązanie: {sleep say~~gmtime;redo}.
Denis Ibaev

sleep 1reguła 5 oparta na łamaniu odpowiedzi: musisz zagwarantować jeden i tylko jeden wynik czasu na sekundę .
F. Hauri

@ F.Hauri reguła została dodana po opublikowaniu tego postu.
primo

9

JavaScript ES6, 43 39 bajtów

setInterval(_=>console.log(Date()),1e3)

Działa z moimi bieżącymi ustawieniami czasu (które nie były zmieniane przez pewien czas, dziękuję), przynajmniej.

4 bajty zapisane przez Conora O'Briena.


alert jest krótszy?
Maltysen

8
@Maltysen Myślę, że w wielu przeglądarkach musisz zamknąć jedno okno alertu, aby zobaczyć następne.
flawr

@Maltysen Spróbowałem, jakoś pomieszało interwał
SuperJedi224

1
Nie potrzebujesz .toTimeString()w Chrome i FF.
Bob

1
Myślę, że można zastąpić new Date()zDate()
Conor O'Brien

8

Arcyóu , 27 bajtów

(@ t(pn(zz 1)(p(st %H:%M:%S

Musiałem połączyć dwie nowe funkcje do tego wyzwania, zzi st.

pn: Dokładnie jak Lisp progn.

zz: Bezpośredni link do Pythona time.sleep.

st: Bezpośredni link do Pythona time.strftime.

Zwykle cudzysłowy byłyby konieczne wokół ciągu formatu, ale ponieważ nie ma spacji, jest on analizowany jako symbol. Tłumacz interpretuje niezdefiniowane symbole jako siebie, więc otrzymujemy ciąg.


1
Chciałbym głosować, ale nie mam już głosów. +1; c Oraz ładne aktualizacje. : D
Addison Crump

7

Bash, 51 31 24 21 20 bajtów

Dzięki @quartata za bardzo pomocne komentarze. Dziękuję @Dennis za wyjaśnienia i odciąć jeszcze więcej bajtów. Dziękuję @VoteToClose za wyjaśnienie zasad (które najwyraźniej jestem kiepski w czytaniu) w celu dalszego zmniejszenia bajtów.

datewyświetla pełną datę z zegarem 24-godzinnym. sleep 1śpi przez sekundę. exec $0nieskończenie zapętla skrypt.

date;sleep 1;exec $0

Nie potrzebujesz shebang.
spaghetto

Także myślę, że można zastąpić truez sleep 1ponieważ sleepzwraca 1.
spaghetto

date +%T;sleep 1;exec $0jest nieco krótszy. @ quartata Nitpicking: sleepma kod wyjścia zero, dlatego jest whilekontynuowany.
Dennis

3
Och, jestem idiotą
spaghetto

2
Później nie potrzebujesz miejsca date, więc jest to tylko 20 bajtów.
ThisSuitIsBlackNot

6

Befunge 98, 53 bajtów

 v
v>"EMIT"4(>H.8,':,M.8,':,S:.8,d,
>:S-    !!k^

Uwagi:

  1. Ten program nie zeruje liczb, które drukuje.
  2. Ten program wypisuje spację, a następnie znak cofania po każdej liczbie, ponieważ .polecenie wypisuje ukrytą spację na końcu.
  3. Rozmiar stosu w tym programie rośnie z każdą sekundą, a zatem w końcu zabraknie mu pamięci.
  4. Ten program zastąpi poprzedni czas, gdy drukuje nowy. Aby drukować za każdym razem w nowej linii, zmień dpierwszą linię naa

Dlaczego ciąg „TIME” jest potrzebny? Czy jest jakiś sposób, żeby go złapać? (Nie wiedziałem o tym)
Addison Crump

"EMIT"4(Na początku programu mówi interpreter załadować TIMEodcisk palca, który umożliwia H, Moraz Sinstrukcje. (Nie, nie emituje liczby 4).
pppery

To jest niesamowite . Nigdy nawet nie pomyślałem, że wiele esolangów to zrobi, +1.
Addison Crump

@VoteToClose Befunge 98 ma nawet instrukcję wykonania programu arytmetycznego wyskakującego ze stosu.
pppery

1
ucieka, aby nauczyć się tego języka Przepraszam ...
Addison Crump

6

mIRC 7,49 20 16 bajtów

/timer 0 1 $time

Gdzie możemy to przetestować?
Addison Crump

Musisz pobrać mIRC to klient IRC typu shareware. Możesz go pobrać ze strony: mirc.com również, ponieważ powyższa odpowiedź korzysta z sayCiebie, musisz połączyć się z serwerem, a następnie dołączyć do kanału. w innym przypadku użyłbyś echozamiast say. mIRC ma swój własny język skryptowy mSL (język skryptowy mIRC)
Do0msDay

5

AutoHotkey, 50 bajtów

x::Send,% a!=A_Sec? A_Hour ":" A_Min ":" a:=A_Sec:

Uwagi:

  1. Wymaga przytrzymania xdla ciągłego wyjścia.
  2. Zdejmij palec z, xaby przerwać i zakończyć wyjście.
  3. Dane wyjściowe są w formacie 24-godzinnym.

2
Możesz, dla kilku dodatkowych bajtów, umieścić to w etykiecie narzędzia, aby nie wymagało od użytkownika trzymania x.
Michelfrancis Bustillos

5

C (w systemie Linux x64), 179 177 175 168 159 bajtów

#include<time.h>
#include<sys/time.h>
main(){struct timeval a;char b[9];for(;;){gettimeofday(&a,0);strftime(b,9,"%T",localtime(&a.tv_sec));puts(b);sleep(1);}}

Nie golfowany:

#include <time.h>
#include <sys/time.h>
main(){
  struct timeval a;
  char b[9];
  for(;;){
    gettimeofday(&a, 0);
    strftime(b, 9, "%T",localtime(&a.tv_sec));
    puts(b);
    sleep(1);
  }
}

Tylko przetestowany na Linuksie x64 i prawdopodobnie tylko działa na nim (x32 może działać, ale inne platformy prawdopodobnie nie będą działać).

Główną różnicą między tym programem a innym opublikowanym programem w C jest użycie wywołań funkcji wyłącznych dla systemu Linux, które, chociaż są okropną praktyką dla prawdziwego oprogramowania, oszczędzają sporo bajtów ... jeśli zignorujesz wszystkie ostrzeżenia kompilatora.


Witamy w PPCG! O ile się nie mylę, wierzę, że możesz usunąć przestrzeń pomiędzy #includei <...>. Czy możesz użyć 1e6zamiast 1000000?
Addison Crump

@VoteToClose Miałeś rację co do spacji w #includes. Nie wygląda na to, że usleep () akceptuje 1e6, jednak - na podstawie tego, jak szybko zaczyna wypluwać znaczniki czasu, po prostu interpretuje to jako 1.
Gamerdog

¯ \ _ (ツ) _ / ¯ Nie znam też C. Pozwolę na to profesjonalistom. Witaj ponownie, oddaj głos. : D
Addison Crump

Ach, kolejna rzecz - nie musisz odcinać ciągu tylko na czas, więc możesz po prostu wyprowadzić cały czas, pod warunkiem, że zawiera wymagany ciąg czasu.
Addison Crump

2
Możesz użyć %Tjako specyfikacji formatu w strftime.
Mego

5

Jolf , 14 8 7 bajtów

Przekreślony 14 to strike 1? Nie, nigdy się nie przyłapie;)

Wypróbuj tutaj! Kliknij uruchom, nie klikaj na nic innego ^ _ ^ strona jest bardzo ... wybuchowa. Tak. Naprawiono system wyjściowy z aktualizacją.

TaD#`~2

(I dodano kilka stałych i ~1do ~4mają uprawnień 10).

Wyjaśnienie

setInterval("alert(Date())",1000);
     T         a      D#   ` ~2

4
Ktoś powinien stworzyć YAJSGV (Yet Another JavaScript Golfing Variant).
intrepidcoder

Wydaje się, że drukuje to znacznie więcej niż tylko czas.
Dennis

1
@Dennis Założyłem, że to w porządku, jak w przypadku innych rozwiązań
Conor O'Brien

Mój zły, przeczytałem tylko twoje i odpowiedź Bash.
Dennis

@Dennis Nie ma problemu ^ _ ^
Conor O'Brien

5

Dyalog APL , 27 18 16 bajtów

':',¨⎕TS⋄→≢⎕DL 1

Wypróbuj online!

⎕TSYMD hmst prepend
':',¨: do każdej
nowej instrukcji
⎕DL 1poczekaj sekundę i zwróć rzeczywisty czas oczekiwania; 1,0 sekunda sumuje
rzeczywisty czas oczekiwania, dając 1
przejście do linii (1 = ta linia)


4

Perl 6 , 29 bajtów

Prawo sposobem, aby to zrobić:

Supply.interval(1).tap: -> $ {
  say join ':',.hour,.minute,.whole-second given DateTime.now
}
await Promise.new; # halt this thread indefinitely
22:21:58
22:21:59
22:22:0
22:22:1
22:22:2
…

Wersja golfowa

loop {sleep say join ':',now.polymod(1,60,60,24)[31]} # 56 bytes
3:59:26
3:59:27
3:59:28
3:59:29
…

Ponieważ wyjście nie musi być ograniczone tylko do czasu, mogę go nieco skrócić.

loop {sleep say DateTime.now} # 29 bytes
2015-11-27T22:18:10-06:00
2015-11-27T22:18:11-06:00
2015-11-27T22:18:12-06:00
2015-11-27T22:18:13-06:00
…

4

R, 38 bajtów

repeat{Sys.sleep(1);print(Sys.time())}

To wyświetla aktualny czas w następującym formacie:

[1] "2015-11-28 07:34:01 CET"

4

PowerShell, 19 bajtów

for(){date;sleep 1}

Jak już wspomniano, wyjście musi zawierać hh: mm: ss, które można zredukować dofor(){date;sleep 1}
steve

4

PHP, 37 bajtów

<?=date('G:i:s');header('refresh:1');

Wysyła sformatowany czas serwera i ustawia odświeżanie strony co sekundę.

Oczywiście zależy to od Twojego połączenia internetowego i szybkości odpowiedzi serwera :)

Próbny


Nie, bez odświeżania:Warning: Cannot modify header information - headers already sent
Martijn

@Martijn Nie mam pojęcia, z czym możesz zadzierać, ponieważ to działa dla mnie :)
nicael

Usunę głosowanie jako korzyść wątpliwości, ale działa to dla mnie dokładnie raz. Próbowałem na dwóch różnych zwykłych serwerach.
Martijn

2
Zależy od tego, czy masz włączone buforowanie danych wyjściowych.
Andrea,

<?=header('refresh:1').date('G:i:s');powinien działać z dowolnym ustawieniem bffering wyjścia.
Jasen

4

VBA, 69 bajtów

Uzyskiwanie czasu jest łatwe, now()Wyprowadzanie tylko co 1 sekundę .... DUŻO więcej informacji.

Jest to „właściwy” sposób oczekiwania na 1 sekundę w VBA. 78 bajtów

Sub a():Debug.Print Now():Application.Wait Now()+TimeValue("0:0:1"):a:End Sub

Lub jeśli chcesz obniżyć niektóre rogi, a posiadanie racji tylko w 86% czasu jest wystarczające, 63 Bajty
dodając jeden SigFig zabiorą cię do 95% dokładności, a trzeci do 99,36%

Sub a():Debug.Print Now():Application.Wait Now()+1e-5:a:End Sub

Jeśli chcesz uzyskać powyższą metodę do 100%, potrzebujesz 69 bajtów (1/86400)

Sub a():Debug.Print Now():Application.Wait Now()+(1/86400):a:End Sub

Wszystkie te metody natknęłyby się na sekundę przestępną, ponieważ nie czekają 1 sekundy, ale czekają do 1 sekundy. O północy, kiedy zegary cofną się o godzinę, zegar zatrzyma się na 1 godzinę, a następnie zacznie od momentu, w którym został przerwany.

VBA pozwala na metodę uśpienia, ale twój bajtowy plik jest zrujnowany. 97 bajtów

Declare Sub Sleep Lib "kernel32" (ByVal k as Long)
Sub a():Debug.Print Now():Sleep(1e3):a:End Sub

3

JavaScript, 47 38 35 bajtów

for(p=1;t=Date();p=t)t!=p&&alert(t)

Wyjaśnienie

Ciągle sprawdza, czy czas się zmienił, a następnie alerts, jeśli tak.

for(
  p=1;
  t=Date();
  p=t
)
  t!=p
    &&alert(t)

Nie musisz po prostu uzyskać ciągu czasu. ; D Tak długo, jak gdzieś tam jest.
Addison Crump

@VoteToClose Oh prawda!
user81655,

Nie sądzę, że potrzebujesz +"", ponieważ bez new, Date()zwraca ciąg znaków.
ETHprodukcje

@ETHproductions Ach, tak, pozostało tam od momentu użycia new. Dzięki za złapanie tego!
user81655,

3

AppleScript, 51 35 bajtów

powtarzać
zaloguj bieżącą datę
opóźnienie 1
koniec

Dość oczywiste. Drukuje bieżącą datę, która zawiera czas, opóźnia sekundę, a następnie kontynuuje.


1
Więc poczekaj, czy można wydrukować bieżącą datę i godzinę?
spaghetto

@ quartata Tak, wszelkie powiązanie z czasem, o ile czas jest generowany w sposób ciągły i gwarantowany, że jest generowany, jest w porządku.
Addison Crump

opóźnienie 1 robi co? pauza na 1000000000 ns?
Jasen

@Jasen To prawda.
Addison Crump


3

Dyalog APL, 36 bajtów

Tym razem niezbyt krótko.

{⎕←1↓∊'⊂:⊃,ZI2'⎕FMT 3↑3↓⎕TS⋄∇⎕DL 1}1

Daje to 24-godzinny czas, tj .:

14:37:44
14:37:45
14:37:46
...

Wyjaśnienie:

  • {... }1: zdefiniuj funkcję i wywołaj ją (argument jest ignorowany, ale potrzebujemy funkcji, aby wywołać ją rekurencyjnie)
    • ⎕TS: funkcja systemowa zwracająca bieżącą datę i godzinę w formacie rok - miesiąc - dzień - godzina - minuta - sekunda - milisekunda . ( ⎕TS= T ime s TAMP)
    • 3↑3↓: upuść pierwsze 3 elementy (tj. rok - miesiąc - dzień), a następnie weź pierwsze 3 elementy, które pozostały (godzina - minuta - sekunda).
    • '⊂:⊃,ZI2'⎕FMT: sformatuj każdą liczbę jako dwucyfrową liczbę całkowitą ( I2) z wiodącymi zerami ( Z), poprzedzoną dwukropkiem ( ⊂:⊃). (Wynikiem jest macierz.)
    • : Pobierz wszystkie elementy w matrycy, w kolejności wierszy. (Daje to wektor, w tym przypadku ciąg znaków).
    • 1↓: upuść pierwszy znak (który jest dodatkiem :)
    • ⎕←: wyślij to
    • ⎕DL 1: następnie poczekaj sekundę ( ⎕DL= d e l ay)
    • : wywołuje funkcję rekurencyjnie

{⎕←1↓∊':',¨⍕¨3↑3↓⎕TS⋄∇⎕DL 1}1dla 28 bajtów, wystarczy na OP .
Adám,

Nowe zasady zezwalają na wyrzucanie śmieci i losowe spacje, dzięki czemu można się dużo pozbyć.
Adám


3

Haskell, 98 96 85 bajtów

import GHC.Conc
import Data.Time
m@main=getCurrentTime>>=print>>threadDelay(10^6)>>m

Alternatywna wersja z użyciem notacji:

main = do
  time <- getCurrentTime
  print time
  threadDelay 1000000
  main

Pobiera aktualny czas ze getCurrentTimez Data.Timebiblioteki, a następnie go do rur print, czeka 1.000.000 mikrosekundy (1 sekunda) i nazywa siebie.

Dzięki im i Mauris!


m@main=...>>mjest zawsze krótszy niżmain=...>>main
Lynn,

Ponadto, ponieważ i tak threadDelayjest specyficzny dla GHC, możesz go zaimportować z GHC.Conc
Lynn

3

Partia - 34 40 bajtów

Uwielbiam wbudowane zmienne:

:A                    //Set label A
echo %time%           //Print the time in 24 hour format
timeout 1    //Wait 1 second (thanks DavidPostill)
goto A                //Jump back to A and repeat

Zdecydowanie sleepw najbliższym czasie musi być jakieś polecenie w Batch.


Brak wbudowanego snu, ale jest limit czasu . Można wymienić ping ...z timeout 1. Również zegar nie jest bardzo dokładny podczas używania ping. Lepiej z timeout;)
DavidPostill

@DavidPostill dzięki za wskazówkę, nigdy nie wiedziałem, że w Windowsie było takie polecenie. :)
GiantTree

@GiantTree Nie ma za co;)
DavidPostill

Golf: wyjąć :Ai wymienić goto Az%0
stevefestl

3

Python 3, 99 bajtów

Przepraszamy, jeśli dziwnie formatuje kod, robiąc to z iPada. (nie pytaj). Wiem, że ten kod jest duży, biorąc pod uwagę niektóre inne odpowiedzi, ale nie widziałem jeszcze pytona, więc chciałem go dodać.

import time
import datetime
while(True):
 print(datetime.datetime.now().time())
 time.sleep(1)  

Można wymienić Truez 1, a jeśli umieścić printi sleeplinie na tej samej linii co while(oddzielone średnikiem) oszczędza Ci spacje.
metro

@undergroundmonorail ok, dziękuję za wskazówkę True / 1. Nie jestem do tego przyzwyczajony, ponieważ Java Dosent to robi. Nie wiedziałem też, że Python też ma średniki. Przyjrzę się temu
Ashwin Gupta,

3

Java, 300 166 137 125 125 124 bajtów

Prawie więcej niż o połowę dzięki VoteToClose, Paülo Ebermann i janschweizer!

interface A{static void main(String[]a)throws Exception{for(;;Thread.sleep(1000))System.out.println(new java.util.Date());}}

Nie golfowany:

interface A {
    static void main(String[] a) throws Exception {
        for (;; Thread.sleep(1000)) System.out.println(new java.util.Date());
    }
}

1
Uprość import: java.util.*zamiast dwóch java.utilimportów, java.text.*z tego samego powodu. Użyj for(;;)do nieskończonych pętli. Użyj String[]aw głównej deklaracji. Użyj interface A{static void main(..., ponieważ spowoduje to jeszcze większe skrócenie. Można używać Exceptionnad InterruptedExceptioni można zastąpić exz e. Możesz także usunąć cały tekst z haczyka, ponieważ i tak to nic nie robi.
Addison Crump

1
Tak, interfejs jest trochę zwariowany - nie mam pojęcia, dlaczego Java na to pozwala, biorąc pod uwagę, że interfejsy są zaprojektowane tak, aby były niemożliwe do uruchomienia.
Addison Crump

1
Dwie rzeczy: musisz zmienić ciąg czasu na „HH: mm: ss” - od teraz formatujesz „Hour: Month: Second”. Ponadto, ponieważ używasz pętli, możesz pozbyć się deklaracji DateFormati Calendarzmiennych łącznie. Zamieniasz zawartość pętli for na System.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()));try{Thread.sleep(1000);}catch(Exception e){}.
Addison Crump

1
Wszystkie rzeczy, które właśnie zasugerowałem, podsumowały:import java.util.*;import java.text.*;interface A{static void main(String[]a){for(;;){System.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()));try{Thread.sleep(1000);}catch(Exception e){}}}}
Addison Crump

1
throws Exceptionjest krótszy niż try / catch
faza

3

Perl, 99 81 75 51 40 36 29 27 bajtów

sleep(print gmtime.$/);do$0

1
Możesz go skrócić, używając gmtimezamiast localtime.
Brad Gilbert b2gills

2
Równieżprintf"%02d:%02d:%02d\n",(gmtime)[2,1,0]
Brad Gilbert b2gills

1
gmtime."\n"wymusi kontekst skalarny.
primo

1
Prawie nigdy nie powinieneś robić ."\n"w golfie: użyj, .$/aby zaoszczędzić 2 bajty. Przynajmniej użyj literału nowego wiersza zamiast, \naby zapisać 1 bajt.
ThisSuitIsBlackNot
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.