Chciałbym, żebyś zbudował mi zegar, który wyświetla czas w tym formacie:
18 ----------
19 --------------------------------------------------
Wyświetla się „18: 10”. Bieżąca godzina i następna godzina są wyświetlane na początku wiersza, a następnie spacja i liczba myślników: w pierwszym wierszu liczba minut, które upłynęły w tej godzinie, a druga linia pokazuje, ile minut więcej iść za tę godzinę.
Wyjaśnić
- Zegar powinien wyświetlać czas systemowy. Jeśli pobieranie czasu z innego źródła jest wygodniejsze, to też jest w porządku. To nie może być dostarczony jako wejście.
- W
18:00
górnej linii jest tylko18
(końcowe spacje dozwolone, ale nie wymagane) - W
18:59
dolnej linii jest19 -
- Godziny <10 są wstępnie wypełnione znakiem
0
(01 -----
) lub wyrównane do prawej (1 -----
). Wyrównana do lewej pojedyncza cyfra nie jest dozwolona, nawet jeśli myślniki zaczynają się we właściwym miejscu (1 -----
jest nieprawidłowa). - Zegar powinien wyświetlać godziny w formacie 24-godzinnym.
- Chociaż nazywa się to formatem 24-godzinnym, tak naprawdę nie ma
24
na nim żadnego . Podczas 23. godziny druga linia zaczyna się od00
lub0
. - Wyświetlacz musi być aktualizowany co najmniej raz na minutę, ale nie musi to nastąpić dokładnie za
00
sekundę. Możesz aktualizować częściej / w sposób ciągły, jeśli jest to wygodniejsze, ale wynik musi oczywiście być czytelny - nie jeden rozmaz na całym ekranie.
Wkład
Żaden.
Wydajność
- Jak opisano powyżej. W obu liniach dozwolone są końcowe spacje, aby wstawić zegar do 60-poziomowych pozycji, dozwolona jest również nowa linia.
- Ekran musi zostać wyczyszczony podczas wyświetlania następnej minuty: za pomocą polecenia wyczyść ekran lub dodając nie mniej niż 30 nowych linii.
Dodatkowe zasady
- Standardowe luki są zabronione
- code-golf , wygrywa najkrótsza odpowiedź w bajtach.
Odpowiedzi:
MATL , 41 bajtów
Dzięki @Kundor za zauważenie błędu, teraz poprawionego
Wypróbuj w MATL online! Pamiętaj jednak, że program zostaje zabity po 30 sekundach, więc trudno jest wyłapać jakiekolwiek zmiany w danych wyjściowych.
Jak to działa
źródło
TI-Basic, 94 bajty
Stosunkowo proste. To ciąg z jedną spacją na początku. Godziny są wyrównane do prawej. Działa to tylko w kalkulatorach TI-84 +, ponieważ TI-83 nie ma wewnętrznego zegara.
Edycja: Dzięki @kundor za zauważenie, że nie zamknąłem ostatniej pętli. Naprawiono teraz (+2 bajty).
Edycja nr 2: Pierwsza godzina powinna wynosić zero, a nie dwadzieścia cztery. Korekta kosztem +14 bajtów.
źródło
Str1
,getTime
isub(
są dwa bajty każda. Możesz dowiedzieć się więcej na stronie tibasicdev.wikidot.com/tokensPartia, 197 bajtów
Uwaga: 10. linia ma spację końcową. Dla mnie
%time%
formatuje godziny z wiodącym odstępem, ale minuty z wiodącym zero. Uznałem, że wiodące zero jest łatwiejszym formatem wyjściowym, ponieważ wszystko, co muszę zrobić, to dodać 100 godzin i usunąć pierwszą cyfrę. Minuty są trudniejsze, ponieważ spowodują08
lub09
spowodują błędy analizy ósemkowej, więc1
efektywnie dodaję 100 minut, dostosowując się do tego poprzez odpowiednie przesunięcie pętli, która jest bajtem krótszym niż odejmowanie 100.źródło
Python 3.6,
110114112 bajtówWykorzystuje to nowe formatowanie ciągów F w celu zapisania jednego bajtu (
f'\n{h+1:2} '
vs.'\n%2d '%(h+1)
) Możesz zmienić[sleep(9)]
na,1
aby zapisać 8 bajtów, ale wtedy to tylko spamowanie ekranu.Zapisane jeden bajt zmieniającą
while 1:...;sleep 60
sięwhile[sleep(60)]:...
dzięki TuukkaX.Musiałem użyć jeszcze 5 bajtów, aby następna godzina wyświetlana po 23 była równa 0, zamiast 24, jak właśnie skomentował OP. :-(
Odzyskano jeden bajt, śpiąc tylko 9 sekund zamiast 60.
Zaoszczędziłem dwa bajty, używając krótkiego majsterkowania, aby skrócić
(h+1)%24
, zapożyczonego z rubinowej odpowiedzi Value Ink .źródło
sleep
zwracaNone
, co jest fałszem.sleep
jest również wtime
module, więc import * jest lepszy.Ruby,
989591 bajtówAktualizuje się co 5 sekund. Działa tylko w terminalach typu uniksowego.
Wersja wiersza polecenia systemu Windows,
9592 bajty:źródło
`cls`
vssystem'cls'
h=t.hour
a następnie użyćh
zamiast drugiegot.hour
, co pozwala zaoszczędzić 3 bajty.cls
. Dziękuję za twoją inną sugestię!puts`clear`
droga, jeśli używasz terminali uniksowych. Po prostu nie działa z wierszem poleceń systemu Windowscls
.puts"\e[H\e[2J"
wyczyścić konsolę, która moim zdaniem goli cztery bajty.loop{t=Time.now;puts"\e[H\e[2J%02d %s
Perl 6 , 113 bajtów
Spróbuj raz z limitem jednej sekundy.
Lub wypróbuj zmienioną wersję, która generuje wynik działania przez kilka godzin.
Rozszerzony:
źródło
[\+]
dodaje i[\-]
wydaje się odejmować. Czy to działa z mnożeniem i tym podobne?[+] LIST
co redukcja, tyle że daje wartości pośrednie. Zobacz stronę Dokumenty na produktyQBasic,
120127121 bajtówNie uruchamiaj tego zbyt długo, bo twój laptop się zapali.Teraz 99.several9s% bardziej wydajny procesor.Bez golfa i wyjaśnienia
Zaczynamy od wyczyszczenia ekranu, a następnie otrzymujemy bieżące godziny i minuty
TIMER
, które zwracają liczbę sekund od północy.Po raz pierwszy próbowałem
PRINT USING
, więc z przyjemnością odkryłem, że nie ma zwyczajnego dziwactwa QBasic, że liczby dodatnie są drukowane z wiodącą spacją.##
ponieważ specyfikator formatu zapewnia, że liczby jednocyfrowe są wyrównane do prawej i wypełnione spacją, zgodnie z wymaganiami. Niestety musimy użyć pętli dla łączników, ponieważ QBasic nie ma funkcji powtarzania łańcucha. (Jeśli się mylę, proszę dać mi znać!)Wszystkie
PRINT
instrukcje kończą się,;
aby ukryć nowy wiersz; ale po myślnikach potrzebujemy nowego wiersza; w ten sposób samotnik?
po wewnętrznejFOR
pętli.To
SLEEP 1
jest teraz konieczne. Bez niego ekran jest usuwany tak szybko po wydrukowaniu, że to tylko migotliwy bałagan. (Z tego powodu użyłemLOCATE 1
zamiastCLS
, dopóki nie zdałem sobie sprawy, żeCLS
iSLEEP
tak jest krótszy.)RUN
Ponownie uruchamia program od góry - najkrótszy sposób na uzyskanie nieskończonej pętli.źródło
Java 8,
313300299 bajtówTo aktualizuje tylko co 30 iteracji pętli while. Pozostałe 29 iteracji po prostu drukuje nowe linie.
Zaktualizowano
Zaoszczędzono
1314 bajtów dzięki pomocy Kevina Cruijssena! Dzięki!źródło
void f(){...}
I musisz dodać wymagany import (w twoim przypadkuimport java.time.*;
). Biorąc to pod uwagę, twój kod może być golfowany w wielu miejscach, aby obniżyć go do 311 bajtów (nawet z dodaną metodą -deklaracja i import). (Ponieważ jest za długi na ten komentarz, umieściłem go w następnym komentarzu .. xD)import java.time.*;void f(){for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().getMinute(),i;;)if(c>99){c=0;String l="",u,d;for(i=0;i++<61;)l+="-";u=l.substring(0,m);d=l.substring(m);System.out.println((h<10?"0":"")+h+" "+u+"\n"+(h<9?"0":"")+(h+1)+" "+d);}else{c++;System.out.println();}}
( 303 bajty ) Zalecam przeczytanie Porad dla golfistów w Javie i Porad dla golfistów w <wszystkich językach> . Miłego pobytu.for(i=0;i++<60
Zamiast 61 i(h<10?
zamiast 9. Dziękujemy za poinformowanie mnie o deklaracji metody i kilku wskazówkach golfowych!for(i=0;++i<61
zamiastfor(i=0;i++<61
(w tym drugim przypadku powinno to być rzeczywiście 60, i chociaż jest to ta sama ilość bajtów, prawdopodobnie jest to bardziej oczywiste / czytelne). Jednakh<9
mój kod jest poprawny. Miałeśh+1<10
wcześniej i po prostu zmieniłem to nah<9
usuwając 1 z obu stron. :)h<9
. Zmienię go, aby zapisać jeszcze 1 bajt. Dzięki jeszcze raz!C,
176162161160156 bajtówJest to rażące nadużycie wskaźników, ale kompiluje się i działa zgodnie z opisem. Pamiętaj, aby skompilować bez optymalizacji, w przeciwnym razie prawdopodobnie dojdziesz do awarii.
Nie golfowany:
źródło
JavaScript (ES6), 162 bajty
Aktualizacje raz na sekundę
źródło
console.clear()
wewnątrzconsole.log
argumentu) i przypisać jak najwięcej nieużywanym nawiasom. Wersja dla 154b:setInterval(c=>c.log(H(h,c.clear(d=new Date))+` ${'-'.repeat(m)} ${H(h+1)} `+'-'.repeat(60-m)),1e3,console,m=d.getMinutes(h=d.getHours(H=$=>$<9?'0'+$:$)))
.m=>`0${h++} \.slice(-3)+'-'.repeat(m)
.Python 2,
131129127 bajtówzapisał bajt dzięki @TuukkaX
źródło
while 1:
19 - \n 20 -----------------------------------------------------------
. Godziny nie są aktualizowane ...C
251267251 bajtówWersja bez golfa
Wykonuje pracę! Zdecydowanie można go w jakiś sposób skrócić. Załóżmy, że
unistd.h
plik jest dołączony.@Neil Dzięki za informację.
@Seth Thanks, za zapisanie 8 bajtów.
źródło
time_t
istruct tm
) w liczbie bajtów.printf("\n");
ciebie możesz użyćputs("");
Pierwszy raz w golfa ...
PowerShell, 116 bajtów (było 122)
Edycja: Z porady @ AdmBorkBork zmieniono Get-Date na datę i Wyczyść na cls, aby zaoszczędzić 6 bajtów.
źródło
cls
zamiastclear
i (o ile jesteś na Windowsie)date
zamiastget-date
. Jestem też pewien, że istnieje łatwiejszy sposób na wyjście z formatowania - bawię się nim i dam ci znać, jeśli coś wymyślę.while($d=date){cls;"{0,2} {2}``n{1,2} {3}"-f($h=$d.Hour),(++$h%24),('-'*($m=$d.Minute)),('-'*(60-$m));Sleep 9}
. Użyj podziału linii LF w swoim edytorze zamiast ``PHP,
104105 bajtówprezentacja
printf
niestandardowych znaków dopełniania:"%'-Ns"
= lewy ciąg padu z-
doN
znaków.wydrukuje 99 nowych linii (co 6 sekund) zamiast czyszczenia ekranu.
Pierwszy znak nowej linii musi być pojedynczym znakiem. W systemie Windows należy go zastąpić
\n
.źródło
GameMaker Language, 134 bajty
W ustawieniach musisz ignorować niekrytyczne błędy, aby to zadziałało. Również w GML
#
jest równoważny z\n
większością języków.źródło
Perl 6 , 104 bajtów
Musi być uruchomiony na terminalu kompatybilnym z ANSI, aby sekwencja sterująca do resetowania terminala działała.
Całkiem proste (ponieważ bardziej zaciemnione podejścia, które próbowałem, okazały się dłuższe):
DateTime.now.&{" "}.say xx*
: Przekształć bieżący czas w ciąg znaków (patrz poniżej) i powiedz to, a następnie powtórz wszystko nieskończoną liczbę razy. Ciąg jest zbudowany w następujący sposób:\ec
: Kod sterujący ANSI<ESC>c
do resetowania terminala, który czyści ekran.{.hour.fmt: '%2s'}
: godzina, wyrównane do prawej do 2 kolumn: przestrzeń
{'-'x.minute}
: myślnik powtarzany razy minutę\n
: Nowa linia{(.hour+1).fmt: '%2s'}
: następna godzina, wyrównane do prawej do 2 kolumn: przestrzeń
{'-'x 60-.minute}
: myślnik powtarzany razy 60 minus minutaźródło
AWK, 190 bajtów
Ponieważ
AWK
nie ma wbudowanejsleep
funkcji, po prostu stale sprawdzam zegar, aby sprawdzić, czy minuta się jeszcze nie zmieniła. Najważniejsze, że to działa ... prawda? :)źródło
Python 3.5,
127120117bajtówźródło
print('\n'*50)
zamiast tego działaćos.system('cls')
tak na * nix i Windows? Zaoszczędziłby kilka bajtów, ponieważ możesz utracićos
import, a OP mówi, że jest to dozwolone.Python,
115113 bajtówzaoszczędził kilka bajtów dzięki @kundor i @Phlarx
źródło
:02
formaty na just:2
.:02
format, by wstawić prawą cyfrę jednocyfrową z zerami.:2
lewe pola ze spacjami, które według wyzwania są w porządku.C # Interactive (138 bajtów)
źródło
d
zamiast nazwy daty vardt
? i 2) użyćsleep(1e3)
czy999
zamiast1000
?PHP,
112120 bajtówPonieważ nie ma sposobu na wyczyszczenie ekranu (który mogę znaleźć) musiałem iść z kupą nowych linii. Również pytanie, które jest aktualizowane do „co najmniej” raz na minutę, oszczędza bajt
9
zamiast60
.edycja: @Titus zauważył błąd w dopełnieniu drugiej godziny. Naprawienie kosztuje 8 bajtów.
źródło
Notice: Use of undefined constant str_pad - assumed 'str_pad' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant H - assumed 'H' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant i - assumed 'i' in C:\wamp64\www\my-site\a.php on line 2
. Coś na ten temat w Meta?-n
luberror_reporting(22519);
H
ustawienie daty to 00-23, ale zapomniałem o tym na drugą godzinę.Bash (3 i 4): 90 bajtów
Ze względu na użycie
$0
tego skryptu należy go umieścić w pliku, a nie wkleić w interaktywnej powłoce bash.Pierwsze polecenie ustawia
$d
na 60 łączników; opiera się na fakcie, że pierwsza linia tego skryptu ma długość 60 znaków. To trzy postacie krótsze niż kolejna najlepsza rzecz, jaką mogłem wymyślić:Jeśli nie chcesz, aby to ostatecznie powodowało, że Twoje urządzenie nie korzysta z PID-ów lub pamięci, możesz dodać
eval
na początku ostatniego wiersza, co dałoby 95 bajtów.źródło
let: h=09: value too great for base (error token is "09")
. Problem polega na tym, że zera wiodące są interpretowane jako stałe ósemkowe, więc 09 jest niepoprawny.BASH,
165141155 bajtówźródło
sleep 9
do stanu pętli while; usuń-
przed M w ciągu formatu w wierszu 4. Nie musisz także używać $ przed nazwami zmiennych w wyrażeniach arytmetycznych, więc$((60-$m))
może być$((60-m))
h=23; echo $((10#$h+1))
drukuje dla mnie 24.Gura , 138 bajtów
Dość krótkie i proste :)
źródło
Gura.exe
i wklejenie tego kodu powoduje błąd składniowysymbol k is not defined
.Ok, nie robiłem już golfa od jakiegoś czasu, więc oto moja smutna próba :)
Unix Korn Shell:
177171170 bajtówźródło
Mathematica, 235 bajtów
źródło
Przetwarzanie,
204200198197 bajtów5 bajtów zapisanych dzięki @L. Serné przy użyciu inteligentniejszych trójskładników
To daje ponad 30 nowych linii dla każdej aktualizacji (która ma miejsce, gdy ramka zostanie zaktualizowana)
Nie golfił
źródło
((i=hour())<10?" ":"")+i
na((i=hour())>9?i:" "+i)
dwa pozwoli zaoszczędzić 2B ... Powodzenia w dalszej grze w golfa!((i=hour()+1)>24?i=0:i)>9
staje się(i=hour()+1)>9
, ponieważhour
wypisuje liczbę z zakresu 0-23, a nawet z 1 dodaną do tego, nigdy nie będzie większa niż 24. Ponadto należy przesunąć przyrosti
warunku wewnątrzfor
pętli jak w ostatniej pętli. Powinny w sumie zaoszczędzić 13B.i
warunku pętli for,i
rozpocznie się jako1
zamiast0
i muszę dodać jeszcze jeden bajt,i++<=minute()
a liczba bajtów pozostanie taka sama. Ale mimo to dziękuję za pomoc w golfie o jeszcze 1 bajt :)C, 239 bajtów
Zainspirowany wpisami Setha i Abla, w razie potrzeby wyświetli 0 zamiast 24 przez następną godzinę i użyje 30 linii do wyczyszczenia ekranu.
źródło
SmileBASIC, 55 bajtów
Wyjaśnienie:
Uwaga: SmileBASIC ma tylko 50 kolumn tekstu, więc nie będzie dobrze wyglądać ...
źródło
C #
181176Ten kod zakłada, że
using System.Threading;
wiersz jest uwzględniony.Pełna klasa:
źródło
Console.ReadKey
instrukcja jest zbędna. Jedynym sposobem na wyjście jest zamknięcie okna konsoli lubCtrl+Break
...using System.Threading;
należy go uwzględnić w liczbie bajtów, jeśli go używasz. To samo zUsing System;
.