Twoim zadaniem jest stworzenie programu, który ma naśladować Big Bena (Twitter) .
Zadanie
Za każdym razem, gdy zaczyna się nowa godzina (zgodnie z czasem lokalnym komputera lub czasem UTC), musisz podawać BONG
powtarzające się hour
czasy (ze spacją między słowami). Na przykład, gdy jest godzina trzecia, musisz wyprowadzać dane BONG BONG BONG
. Format czasu jest zgodny z 12-godzinnym formatem czasu, tzn. Po godzinie 12 mamy 1, a nie 13. Program / funkcja musi działać wiecznie.
Przykład:
nie wysyłaj rzeczy w nawiasach
(start: 00:34 for example)
BONG (01:00)
BONG BONG (02:00)
(...)
BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00)
BONG (01:00 again)
(...)
(it continues forever)
Zasady
- Każda seria
BONG
s musi być oddzielona nową linią - Wiodące / końcowe znaki nowej linii są dozwolone
- Jednak spacje wiodące / końcowe nie są dozwolone
- Przesyłanie musi trwać wiecznie
- Twój wynik może być wydrukowany ± 3 sekundy od początku godziny
- Być może nie przyjąć program do uruchomienia w każdej konkretnej godziny
To jest golf golfowy , więc wygrywa program z najkrótszą liczbą bajtów!
code-golf
string
kolmogorov-complexity
date
Kritixi Lithos
źródło
źródło
TIMESKEW="60 1"
sprawia, że minuty płyną jak sekundy.Odpowiedzi:
05AB1E , 43 bajty
Wypróbuj online! (lol to nie zadziała, upłynie limit czasu za 60 sekund. Pobierz do tego interpreter 05AB1E )
Wyjaśnienie:
Zajęło mi to trochę czasu na golfa! Mogę trochę bardziej zagrać w golfa, ale to bije
*><>
, więc fajnie :)Szybka wersja:
Poczeka jedną sekundę na starcie i jedną sekundę między BONG
źródło
Grzmotnąć,
71,70, 69 bajtówEDYCJE:
Grał w golfa
Wyjaśniono
Wersja testowa
Działa z minutami zamiast godzinami
źródło
yes BONG|sed 12q
*> <> ,
484744 bajtówWypróbuj tutaj! ( lub ta wersja, która wykonuje test co minutę )
Daje to liczbę
BONG
s oddzieloną spacjami w zależności od godziny (a 13 to 1 itd.). Po finale nie ma spacji końcowychBONG
i jest nowa linia spływowa.Technicznie nie działa to wiecznie (ale w zasadzie tak się dzieje). Wycieka ~ 28 bajtów dziennie (ignorując narzut tłumacza ...). Wyciek 1GiB zajęłby około 105062 lat.
Zbliżając się do narzutu tłumacza, stos jest tylko kawałkiem
float64
s na tłumaczu Golanga. Więc po prostu28*8
wymyśliłem 224 bajty dziennie. Podzieliłem tę liczbę przez liczbę bajtów w gibibajcie (1073741824), a następnie 365, aby oszacować, że wyciek 1 GiB zajmie 13132,85 lat.Uwaga na temat tłumaczy
Tłumacz online jest w JavaScript. Strona musi być otwarta i widoczna, aby mogła sprawdzić aktualny czas i wygenerować BONG. Golang interpretera ma takich ograniczeń.
Wyjaśnienie
źródło
JavaScript (ES6),
9993 bajtówWykorzystuje czas UTC (który odpowiada rzeczywistej rzeczy). Ze względu na niestabilny charakter kodu możesz wypróbować następujące czynności, które robią to samo, ale co 60 sekund:
Oto dodatkowa 99-bajtowa wersja wykorzystująca czas lokalny:
źródło
alert
s dla mnie co minutę (ale liczbaBONG
s jest poprawna), ale program ma generować tylko co godzinęJavaScript (ES6),
125123117115 bajtówDzięki @ Flp.Tkc za oszczędność 5 bajtów!
Dzięki @BenAston za oszczędność 2 dodatkowych bajtów!
Snack Snippet
źródło
Partia, 142 bajty
Ponieważ plik działa jako nieskończona pętla, zaczynam z opóźnieniem 1s, ponieważ i tak potrzebuję go po bongach, co oszczędza cykle procesora.
>nul
Jest umieszczony dokładnie zapisać bajt (1>nul
spowodowałoby 1 do spożycia przez przekierowania). Następnie zapętlamy, dopóki minuty i sekundy nie będą równe zero. Bongi są konstruowane przez wzięcie ujemnego modulo godziny 12 i proszenie o ostatnieh
znaki z ciągu 12 znaków. Kiedyh
wynosi zero, to faktycznie daje nam cały ciąg, dlatego 12 bongów. Wystarczy więc zastąpić znaki słowemBONG
. Po uruchomieniu wygląda mniej więcej tak (zwróć uwagę, że obraz nie zapętla się, więc musisz ponownie załadować, aby ponownie zobaczyć animację):źródło
Bash + Linux crontab, 90
Miałem nadzieję, że będzie to krótsze niż inne odpowiedzi powłoki. Mimo to uważam, że to ciekawe podejście:
Skrypt uruchamia się raz, wypełnia crontab, a następnie kończy działanie. Jednak dane wyjściowe z cronjobs są wysyłane do terminala, z którego skrypt został uruchomiony. Myślę, że to wystarcza, aby przesłanie musiało trwać wiecznie .
Ostrzeżenie - spowoduje to usunięcie wszystkich istniejących wpisów crontab, więc upewnij się, że masz już utworzone kopie zapasowe.
Działa to na Ubuntu 16.04, który domyślnie używa Vixie
cron
.źródło
BONG
konieczne.cron
używasz?/proc/<PID>/fd/<N>
.Ruby,
11299 bajtówStara wersja
Dzięki QPaysTaxes za wskazówki
źródło
sleep(60)
tak się stałoCheddar v1.0.5, 162 bajty
Cheddar nie ma wbudowanego czytnika czasu / czytnika wyjściowego cmd, więc musiałem improwizować!
Gra w golfa:
Nie golfowany:
Wyjaśnienie:
Z powodu ograniczonej standardowej biblioteki Cheddara musiałem użyć cmd do wygenerowania czasu. Zrobiłem to, zapisując wynik „time / t”, który drukuje czas w formacie 12-godzinnym, do pliku o nazwie „c”. IO.read zwraca bufor, który rzuciłem na ciąg i podzieliłem przez „:”, co zapewniało, że godzina jest zawsze w indeksie zero. Całą operację zapisałem w wyrażeniu lambda, które zaoszczędziło mi 44 bajty. Po tym punkcie następuje logika „jeśli przechowywana godzina nie jest równa bieżącej godzinie, ustaw poprzednią godzinę na bieżącą i wydrukuj BONG n razy, odetnij odstęp końcowy”.
Cheddar może nie jest najmniej gadatliwym językiem, ale znalezienie takich obejść może być zabawne!
Niestety jest to rozwiązanie tylko dla systemu Windows.
Edycja 1: Zapisałem dwa bajty, zastępując „0 <1” w warunku warunkowym „1” Nie spodziewałem się, że 1 oceni się jako prawda w tym języku!
źródło
Rubin,
8281 bajtówCo sekundę sprawdzamy, czy jest to ostatnia sekunda godziny i odpowiednio BONG. Prawdopodobnie można by grać w golfa za pomocą brudnych sztuczek, ale nie znam zbyt wielu. Działa również inaczej niż inna odpowiedź Ruby.
Jeden bajt zaoszczędzony dzięki uprzejmości QPaysTaxes.
źródło
if
?puts
kiedy zapomniałem o tym.Python 2 ,
105106 bajtówEdytować
Dodano jeden bajt, zmieniając <na! = Po informacji zwrotnej z @ pinkfloydx33. Dobre miejsce.
Testowane jak najwięcej lokalnie, ale nie działa na TIO, ponieważ (oczywiście) przekracza 60 sekundowy limit wykonania. Testuj lokalnie :-)
btw, utrata tego irytującego końcowego miejsca kosztowała mnie 7 bajtów, w przeciwnym razie byłoby to poniżej 100.
W przypadku braku TIO tutaj jest generowane po odczekaniu godziny. Program Prog został uruchomiony o 15:27 z dodatkowym kodem debugowania, który pokazuje czas wydruku (format 12-godzinny).
Całkiem proste, ale oto wyjaśnienie dla każdego, kto jest zainteresowany.
źródło
11>0
,h>c
czy coś mi brakuje?Python 3 -
1009792 bajtyWyjaśnienie:
źródło
from time import*<NL>while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])
ma 93 bajtyfrom time import*
, toC, 238 bajtów
Nie jestem pewien, czy to działa poprawnie i jestem mobilny, a mój telefon nie ma kompilatora C. (Działa tylko na systemach typu UNIX)
źródło
f
zamiastmain
? Jak to ma działać?sh, 66 bajtów
Wyjaśniono
źródło
%I
z%M
i działa przez kilka minut.C, 198 bajtów
źródło
JavaScript ES6 87 bajtów
Edycja: bezwstydnie pożyczyłem
new Date/36e5%12|0||12
kod @ETHProductions, aby zaoszczędzić 6 bajtówźródło
R
104104 bajtówCo sekundę będzie (powinien) sprawdzać, czy jesteśmy pod koniec godziny, a następnie wydrukować tę liczbę sekund
BONG
.źródło
12:00:01
?Sys.sleep(60)
tak się staniewhile(1)
przezrepeat
.BONG
przez 1 sekundę, a nie tylko raz. Ma to na celu zapewnienie, że sprawdza tylko raz na sekundę.JavaScript ES2015,
1009998969488 bajtówWyjaśnienie:
h
to funkcja, która pobiera 12-godzinną godzinę dnia za pomocą operatora reszty (%12
).36e5
to liczba milisekund w ciągu jednej godziny przy użyciu składni wykładniczej do zapisywania znaków.new
Operator nie wymaga, nawiasy są używane funkcje, jeśli istnieją żadne argumenty, stądnew Date
. JavaScript ma tylko arytmetykę zmiennoprzecinkową,|
bitowy operator OR wymusza liczbę całkowitą, ponieważ bitowe operatory JS działają z podzbiorem liczb całkowitych liczb reprezentowanych przez zmiennoprzecinkowy IEEE 754.Przecinek określa podwyrażenia.
p
jest inicjowany na bieżącą godzinę (p=h()
).for(;;)
służy do wielokrotnego sprawdzania, czy ktośBONG
powinien zostać ostrzeżony. Sprawdzanie odbywa się tak szybko, jak pozwala na to środowisko wykonawcze.Jeśli godzina się zmieniła (
h()!=p
), aktualizujemy p, a następnie powiadamiamyBONG
s. Logiczny operator AND służy jako osłona (powoduje zwarcie, jeślih()===p
) w celu ustalenia, czyBONG
s są wyprowadzane.String.prototype.repeat
jest nowością w ES2015 i ratuje niektóre postacie przed użyciem czegoś takiego jak ES5Array.prototype.join
.h
zwraca zero dla dokładnych wielokrotności 12 (tj. 12:00, 12:00), więc zmieniamy go na 12 za pomocą logicznego ORp||12
.Dzięki Kritixi Lithos i ETHProductions za pomysły.
źródło
Excel VBA, 143 bajty
Kod wysyła do okna natychmiastowego VBE
Zabawna wersja, 143 bajtów (niekonkurencyjna)
Chociaż trudno byłoby uzyskać wyróżnienie na BONG, jest całkiem proste, aby uzyskać wyróżnienie na start
Beep
.Beep
Połączenia wytwarza sygnał dźwiękowy, a kod poniżej zastosowań to wytwarzają sygnałów wskazujących na godzinę, na godzinę, oddzielonych przerwami co 1 sekundę.Tak jak w przypadku powyższego, kod ten powoduje, że program Excel nie wydaje się odpowiadać, dlatego
:DoEvents
zalecane jest dodanie wywołania na końcu pierwszego wiersza, ponieważ poprawia to wrażenia użytkownika, jednak nie jest to konieczne do poprawnego wykonania kodu.Wersja bez golfa
źródło
Beep
lubDoEvents
Połączenia nie działają poprawnie na komputerach Mac.C # 234 bajtów
Nie planuję tutaj wygrywać żadnych nagród, ale implementacja C # jest obowiązkowa.
Niegolfowany z komentarzami:
źródło
for(;;)
, zmieńh=()=>1+(DateTime.Now.Hour-1)%12;
(zauważ też, że nie ma białych znaków), a następnie Wylicz. Powtórz staje się("BONG",t)
(oszczędza dwa lub trzy), a następnie pozbądź się dodatkowych białych znaków, tj.if(...)
Zwróć też uwagę, że to wydrukuje wszystkie połączone bongi, prawdopodobnie weź te oszczędności bajtów, aby przekształcić concat w złączenie ze spacją jako pierwszym argumentem.Groovy, 72 bajty
W jaki sposób?
Zapisz metodę, aby uzyskać bieżące godziny.
Przechowuj początkowe godziny.
Chociaż prawda, jeśli bieżąca godzina nie jest równa poprzedniej godzinie, bieżąca godzina wyjściowa jest pomnożona przez „BONG”, aby wyprowadzić bieżącą godzinę bonga.
+3 bajty
%12
dla niewojskowych bongów.źródło
perl, 60 bajtów
Aktualizacja
Zastąpione
" "
z$"
, usunięteCORE::
, skorygowanej liczby.Golf
Trzeba to uruchomić
perl -E
.Uwagi
x while y
jest równoważnewhile(y){x}
(gdziex
jest pojedynczą instrukcją), ale nie potrzebuje nawiasów.sleep
jest wykonywany po raz pierwszy, zanim cokolwiek zostanie wydrukowane.time
używa UTC. Oryginalny Big Ben jest w okresie letnim (British Summer Time, BST) od końca marca do końca października.sleep
zwraca liczbę sekund oczekiwania. To zawsze będzie prawda.źródło
-E
flaga ma +1 bajt (gdzieś jest strona o pomiarze flag ...). 2 , nie jestem pewien, jak uruchomić to, jak sięperl -E golf.pl
wydaje, aby natychmiast zakończyć.QBIC , 82 bajty
Naprawdę trzeba zmienić token literałów kodu (
$
) i zaimplementować funkcję podciągów (left$(x,y)
może być krótsza).Wewnętrzne funkcjonowanie:
Aktualizacja (NC): Nie
$
jest już używany w zestawie instrukcji QBIC, więc można go teraz swobodnie używać jako kodu dla QBasic bez konieczności literałów kodu. W takim przypadku zapisuje 4 bajty, co powoduje zwiększenie QBIC do 78 bajtów:źródło
SmileBASIC,
7467 bajtówWyprowadza duże ilości łamanych linii;)
Edycja: zapisano 7 bajtów dzięki lepszemu algorytmowi 24-> 12 godzin.
źródło
PHP, 63 bajty
Mógłbym zapisać jeszcze dwa bajty z rozszerzonym ASCII. Ale obecnie jestem na to zbyt leniwy.
drukuje BONGy z wiodącym podziałem linii dokładnie o pełnej godzinie. Uruchom z
-nr
.źródło
-n
jest rodzajem niejawnym (zignoruj php. i powróć do domyślnych wartości konfiguracji);-r
każe PHP uruchamiać kod z parametru wiersza poleceń zamiast z pliku.C, 152
Czytelny:
źródło