Wiele urządzeń elektronicznych, zwłaszcza starych, będzie migać, 12:00
gdy czas nie zostanie ustawiony. Celem tego wyzwania jest odtworzenie tego.
W szczególności zadaniem jest wyświetlanie 12:00
i --:--
alternatywnie w nieskończonej pętli .
Okres powinien wynosić 1 drugi równo podzielona na dwa okresy po 0,5 sekundy. Tutaj „1 sekundę” i „równomiernie” można interpretować luźno. Na przykład dopuszczalne jest, jeśli kod zatrzymuje się na 0,5 sekundy między wyświetlaniem ciągów, nawet jeśli wynikowy okres będzie wtedy nieco dłuższy niż 1 sekunda. Dopuszczalna jest początkowa pauza przed wyświetleniem pierwszego ciągu.
Każdy nowy ciąg może zostać wyświetlony albo przez zastąpienie poprzedniego ciągu, albo w nowym wierszu . Końcowe białe znaki są dozwolone, z tym wyjątkiem, że jeśli każdy nowy ciąg znaków znajduje się w innym wierszu, między kolejnymi ciągami znaków nie powinny być puste.
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
Galaretka , 20 bajtów
Jak to działa
źródło
HTML / CSS,
131108106101 +1817 =149126125123118 bajtówEdycja: Zapisano 23 bajty dzięki @insertusernameherehere. Zapisano 1 bajt, zmieniając z
<pre>
na<tt>
. Zaoszczędzono 2 bajty dzięki @darrylyeo. Zaoszczędź 5 bajtów dzięki @DBS.źródło
a{position:absolute}
ale kompletnie zapomniałem opre
...<tt>
.}}
całkowicie usunąć finał .margin-left
domargin
skoro pracujesz od góry w lewo i takmargin:-5ch;
powinien mieć ten sam efekt.Shell i
pv
26 bajtówUżyj tego
yes
standardowego narzędzia ipv
elementu potoku Shell do pomiaru przepływających danychźródło
-qlL2
do stworzenia 2 linii-qL12
na sekundę zamiast : 12 znaków na sekundę. Długość skryptu jest taka samaPython2,
807573696766 bajtówZauważyłem, że moja magia strun trwała dłużej niż wybieranie struny z tablicy.Nieważne, rozgryzłem to.Objaśnienie :
Ustawiam licznik n na 0, który będzie przełączany między 0 a 1.
Pętlę bez końca z pętlą
while 1
.Tworzę ciąg
1-2-::0-0-
, który zawiera ciąg12:00
i z--:--
przeplotem.Począwszy od indeksu 0 z krokiem 2, otrzymujemy:
12:00
Zaczynając od indeksu 1 z krokiem 2, otrzymujemy:
--:--
Używam n, aby powtórzyć sekwencję 0 , 1 , 0 , 1 , 0 ... która będzie początkowym indeksem łańcucha.
n^=1
, w każdej pętli, otrzymujemy tę sekwencję.^
będąc operatorem XOR.n^=1
powoduje 1n^=1
powoduje 0.5
->0.5
) sekundy.@FlipTack zapisał 4 bajty! -> Umieść pętlę w jednej linii.
@Rod zapisał 2 bajty! ->
n+=1
don^=1
, a zatemn%2
don
.@xnor zapisał bajt! ->
while 1
->while[time.sleep(.5)]
.źródło
n+=1
zn^=1
, a następnie użyć[n::2]
, oszczędza 2 bajty i uniknąć wielkich liczb c:print"1-2-::0-0-"[n::2]
doprint"\b"*6+"1-2-::0-0-"[n::2],
niej doda kilka bajtów, ale będzie migać w miejscu\r
zamiast,\b\b\b...
aby przejść na początek linii. Ale w każdym razie dodałoby to tylko bajty do bieżącego rozwiązania.while[time.sleep(.5)]:
.Oktawa,
63626155 bajtówZaoszczędź dwa bajty dzięki Tomowi Carpenterowi! Użycie pojedynczego łańcucha zamiast dwóch łańcuchów w tablicy komórek było krótsze.
Wyjaśnienie:
Kilka bajtów zapisanych, ponieważ Octave nie wymaga dwukropka lub średnika między
flip(c)
idisp()
, oraz międzypause(.5)
iend
.źródło
flip
zamiast licznika!JavaScript, 59 bajtów
Wyjaśnienie
setInterval('...',500)
ustawia interwał wykonywania kodu w ciągu co 500 milisekund lub 1/2 sekundy.y=1
y
początkowo ustawia zmienną na 1. W ten sposób drukowana jest pierwsza rzecz,12:00
ponieważy
służy do uzyskania dostępu do tablicy.console.log(...)
logi co do konsoli, w tym albo12:00
albo--:--
.["12:00","--:--"][y^=1]
tworzy tablicę z ciągami znaków zawierającymi oba stany. Następniey
służy do uzyskania dostępu do jednego z elementów. Wreszcie,^=
lub robi to operator złożony XORy = y ^ 1
. To po prostu odwraca bit, ponieważ1 ^ 1
wynosi 0 i0 ^ 1
wynosi 1, podobnie jak w @TuukkaX . W ten sposób zarejestrowany ciąg znaków naprzemiennie przechodzi między dwoma elementami w tablicy, a tym samym tworzy efekt migania.źródło
y=1;setInterval('console.log(y?"12:00":"--:--");y=!y',500)
You can save some bytes with setInterval(...,i=500) :-)
. Zasadniczo mamy tę samą odpowiedź i działa również na twoją.V ,
3130272524 bajtówZaoszczędzono 5 bajtów dzięki @ nmjcman101 poprzez zamianę kolejności
12:00
i--:--
tak, żek
można ją usunąć, usuwając,ò
aby można było dodać niejawnie na końcuZapisane 1 bajt dzięki @DJMcMayhem umieszczając oba
12:00
i--:--
w jednej liniiStare rozwiązanie:
<ESC>
jest0x1b
Hexdump:
Wyjaśnienie
Gif (nieaktualne)
Uwaga: mam włączone podświetlanie
źródło
ò
podany jest domyślnie, więc możesz go usunąć.ò
. Działa tylko razk
. Zamiast tegopkdd
możesz po prostu użyćVp
, ponieważp
w trybie wyboru wizualnego skutecznie zamienia zaznaczenie z domyślnym rejestrem.ò
, ale jeśli to działa teraz, myślę, że powinieneś być w stanie to zmienićòVp:sl500m
i pozwolić V dodać^Mò
2 bajty.bash,
585645 bajtówzapisano 3 bajty poprzez pomijanie--
po,set
gdy 1. arg jest liczbą.Zapisano 16 bajtów przy użyciu składni @DigitalTrauma :
Następnie tracę 5 bajtów z powodu komentarza zeppelin .
Nie można tego przetestować w linii poleceń. Gdy się angażujemy
$0
, musi to zostać zapisane w skrypcie, aby uruchomić.Odwracać
Przy odrobinie przygotowania może to być miłe ( 412 bajtów ):
Lub nawet te same dwie linie, ale z:
źródło
s(){ echo $1;sleep .5;};for((;;)){ s 12:00;s --:--;}
printf '%%\041\n/Helvetica findfont\n24 scalefont\nsetfont\nnewpath\n%s %s moveto\n(%s) show\nshowpage\n' -2.456 0.550003 12:00 | gs -sDEVICE=pnmraw -r600 -g470x146 -sOutputFile=- -q - | pnmscale -width 160 | ppmtopgm | pgmtopbm | pbmtoascii -2x4
;-)f()(echo $1;sleep .5);f 12:00;f --:--;$0
Perl, 49 bajtów
Perl
sleep
nie może spać przez czas poniżej 1 sekundy, stąd użycieselect undef, undef, undef, .5
(golfa przez zastąpienieundef
go$,
) do spania. 5 sekund.Inna interesująca rzecz:
$|
może trzymać0
lub1
. Więc$|--
po prostu przełącza jego wartość, od0
do1
.I w końcu
{... ;redo}
działa jak nieskończona pętla.źródło
*> <> ,
4342 bajtówWypróbuj tutaj!
Wydaje mi się, że powinienem być w stanie skrócić to, mam kilka pomysłów do wypróbowania ... Zasadniczo jest to stos
:1200----
. Wyodrębnia:
i odwraca stos, wstawiając:
środek jednego----
lub1200
(w zależności od tego, co znajduje się na końcu stosu).Powinienem również zauważyć, że jedyną instrukcją *> <>, której używa, jest
S
(uśpienie), w przeciwnym razie jest to właściwy program> <>.Aktualizacja: Zapisano 1 bajt, przesuwając
:
w prawo zamiast chroniąc go rejestrem.Wyjaśnienie
Inicjalizacja
Tutaj budujemy stos, którego będziemy używać przez cały czas trwania programu.
Czas wyjścia
Jest to sekcja, w której czas jest faktycznie wyprowadzany. Pierwsze 5 jest wypychane na stos, więc pętla poniżej wie, że działa 5 razy.
Odzyskaj i zamień
Tutaj odzyskujemy
:
pozycję, z której wynika po wyjściu, i otrzymujemy odwrócony stos. To faktycznie ładnie przechodzi w „czas wyjściowy”, powodując nieskończoną pętlę.45 bajtowe rozwiązanie
Wypróbuj tutaj!
Ten jest także w zasadzie programem> <>.
Naprawdę myślałem, że przy takim podejściu można zaoszczędzić trochę bajtów. To po prostu wyjść
12:00
, następnie--:--
. Zapisuję bajty, ponownie wykorzystując procedurę wyjściowąo/!?l
(nawet ponownie używam lustra jako wejścia i wyjścia). Korzystam z wielu stosów do przechowywania stanu (ma dane wyjściowe12
lub--
) i wybieram stan, z którym mam generować dane wyjściowev>]?v
.Wyjaśnienia już wkrótce! (1/2)
źródło
HTML / CSS (tylko Chrome), 80 + 4 = 84 bajtów
Edycja : Atrybut „content” nie jest animowany zgodnie ze specyfikacją CSS , ale znajduje się w przeglądarce Chrome na komputerze.
źródło
Noodel , niekonkurencyjne 16 bajtów
Noodel jest wciąż bardzo w toku. Próbuję zmoczyć stopy kilkoma wyzwaniami.
Spróbuj:)
Jak to działa
Oto fragment kodu :)
źródło
QBIC ,
3733 bajtówQBasic niestety może spać tylko przez całe sekundy. Zobaczę wkrótce o opracowaniu metody pozwalającej na większą elastyczność. Wprowadziłem 1,
01
aby zasymulować.5
.Wyjaśnienie:
W starszych wersjach QBIC
$
i(spacja) były znakami zastrzeżonymi. Wywołanie funkcji QBasic wymagającej spacji (jak
sleep x
) lub$
(left$(..)
) wymagało literału kodu:Kod w bloku literału kodu jest przekazywany bezpośrednio do QBasic bez parsowania przez QBIC. Odciążając funkcje z tych symboli (
$
stały się'
, a nowe wiersze są teraz┘
(alt-217) zamiast), symbole nie są już postrzegane przez QBIC jako specjalne znaki i po prostu przekazywane. To samo dotyczy skutecznie małych liter: służy do reprezentowania zmiennych numerycznych zarówno w QBIC, jak i QBasic i pozostaje niezmienionych. Korzystanie z funkcji QBasic, która nie jest zaimplementowana w QBIC (podobnej
SLEEP
), jest więc po prostu kwestią niestosowania zarezerwowanych znaków QBIC. Jest to łatwiejsze dzięki ostatnim zmianom symboli poleceń.źródło
JavaScript,
777672 bajtówDzięki Kritixi Lithos za 1 bajt i L. Serne za 4 bajty!
źródło
1000
można skrócić do1e3
setInterval
isetTimeout
zaakceptuj ciąg znaków z kodem jako pierwszym argumentem, abyś mógł zapisać kolejne 4B:setInterval('l=console.log,l("12:00"),setTimeout("l(
-: -)",500)',1e3)
`
s to znaczy teraz ES6, podczas gdy tylko poprzednia odpowiedź potrzebne ES5.Python 2,
88857371 bajtówWypróbuj tutaj!
Dzięki pożyczeniu pomysłu Stewie Griffin na przerzucenie listy program stał się możliwy. Wersja bez golfa z wyjaśnieniem:
Dzięki @FlipTack za uratowanie 14 bajtów!
źródło
PHP,
51 50471 bajt zapisany ze względu na manatwork i kolejne 3 zapisane przez inserttusernamehere tutaj. Dzięki!
źródło
usleep(5e5)
wywołanie nafor
trzeci parametr,,
separator stanie się niepotrzebny, oszczędzając 1 znak.while(1)
.echo
a$i
i wymienić\n
z rzeczywistą linią.Pyth, 23 bajty
W pseudokodzie:
Używa wstępnie zainicjowanej zmiennej
Z
jako flip-flop i odwraca jej stan za każdym razemif
, gdy próbuje sprawdzić warunek.źródło
rubin,
4742 bajtówNie ma jeszcze rubinowej odpowiedzi, więc oto moja pierwsza próba:
źródło
GNU sed, 39 bajtów
EDYCJE:
Grał w golfa
Wyjaśniono
Wypróbuj online!
źródło
dc (bash), 37 bajtów
Działa to poprzez naciśnięcie dwóch ciągów „12:00” i „-: -” na stosie, a następnie wielokrotne zamianie wartości, drukowanie elementu na górze stosu i spanie pół sekundy.
Aby to uruchomić, możesz zapisać go w pliku, a następnie wpisać
lub możesz uruchomić go bezpośrednio z wiersza poleceń bash, wpisując
źródło
Perl 6 ,
48 4134 bajtówźródło
for
pętli może nieco ją skrócić:for |<12:00 --:-->xx* {sleep .5;.say}
say
zwraca 1:sleep .say/2 for |<12:00 --:-->xx*
Galaretka, 22 bajty
Nie działa w TIO. Uruchomienie aplikacji Jelly na Androidzie z QPython3 było również świetną zabawą.
Wyjaśnienie
źródło
Mathematica, 38 bajtów
Wyjaśnienie
Wysyła zmienną zegarową, która cyklicznie zmienia się od 0 do 1 co sekundę.
Jeśli zmienna zegara jest większa niż .5, wyślij „12:00”. Jeśli nie, wpisz „-: -”.
Spraw, aby program był dynamiczny (ciągle aktualizowany)
źródło
JavaScript,
57552 bajty zapisane dzięki ETHproductions
źródło
setInterval(...,i=500)
:-)Postscript
225214Tylko dla zabawy! Nie wysyłaj tego do prawdziwej drukarki !!
Spróbuj:
lub
następnie
Ale nie próbuj otwierać tego za pomocą bardziej wyrafinowanej przeglądarki i dbaj o miniatury pulpitu!
źródło
gs -c '...'
wierszu polecenia pojawi się biała strona, konieczne może być powiększenie okna wyświetlania lub użycie mniejszej rozdzielczości:gs -r45 -c '...'
lub mniejszegogs -r600 -g360x200 -c '...'
JavaScript (w przeglądarce),
17416015912211211110910766 (91) bajtówUsunąłem,
pre
ponieważ używanie czcionki monotypowej nie jest częścią wymagań, więc moja nowa liczba wynosi 66 . Niektóre znaki są dodawane w celu użycia czcionki o stałej szerokości, ale ponieważ nie jest to potrzebne, nie liczę tych 25 znaków więcej.Dzięki produktom ETH dla oszczędności 14 bajtów,
do Kritixi Lithos do zapisywania 1 bajt,
do zarządzania dla oszczędzania
13 bajtów,do Christoph do zapisywania i dwa kolejne bajty
dla siebie za oszczędność 37 bajtów przy użyciu
[..][b^=1]
zamiastsetTimeout
... i 10 kolejnych przez zastąpieniefunction(){..}
podwójnymi cudzysłowami ...... gorzej:
Od 66 do czegoś więcej ...
... ale dla zabawy w duchu migającego wyświetlacza:
źródło
1000
może zostać1e3
window.
;window.setTimeout
jest taki sam jaksetTimeout
.tt
jest krótszy niżpre
i sugeruje również użycie czcionki Monospace. (Po prostu jest to element wbudowany, a nie blok, ale tutaj nie powinno to mieć znaczenia.)b=document.body.append(a=document.createElement('tt'))
d=document;d.body.append(a=d.createElement('tt'));setInterval("a.innerHTML=++b%2?'12:00':'--:--'",b=500)
oszczędza 5 bajtówsetInterval("document.body.innerHTML=++b%2?'12:00':'--:--'",b=500)
pozostaje tylko w tyle za fantazyjną monosferą, ale ma tylko 66 bajtów.QuickBASIC , 167 kęsów (pyszne)
I tak nigdy nie zamierzałem wygrywać. QB nie ma floor (), a także nie ma funkcji spania dla x milisekund. Dlatego działa to poprzez pobranie części zmiennoprzecinkowej TIMERA (zwraca sekundy, które upłynęły od północy plus ułamek bieżącej sekundy wyrażony jako dwucyfrowa liczba dziesiętna). Następnie dodajemy pętlę wokół „50 jednostek”, aby określić, kiedy faza powinna się przełączyć z „-: -” na „12:00”, i użyć pierwotnego dziesiętnego TIMERA dla przełączenia z „12:00” do "--:--".
Wreszcie, nawet uruchomienie tego jest zgodne z QB4.5, w DOSBox na dość mocnej maszynie pomija rytmy. To dlatego, że QB naprawdę nie jest wystarczająco szybki, aby wykonać DO-LOOP i oceny wewnątrz MS, w którym robimy porównanie. Potrzebowałbym pudełka z PRZYSZŁOŚCI!
W każdym razie wyglądam teraz na 100 i sprawiłem, że każdy student amerykańskiego uniwersytetu był szczęśliwy, ponieważ prawdopodobnie mają odpowiedź na lekcję Comp Sci - ponieważ wciąż uczą tego ...
źródło
b% = b% - 99
dob%=b%-99
?Clojure,
7962 bajtówV2
-17 bajtów poprzez zmianę z okropnej pętli indeksującej na zapętlanie nieskończonej listy.
Tworzy nieskończoną listę
"12:00"
i"--:--"
powtarzanie w kółko, a następnie używadoseq
do ciągłego pobierania następnej wiadomości i drukowania.V1
Nie mogłem wymyślić dobrego sposobu na skompresowanie stałych „12:00” i „-: -”, więc musiałem je po prostu na stałe zakodować.
Nie golfowany:
źródło
Pushy , 22 bajty (niekonkurujące)
Ta odpowiedź wykorzystuje dwa stosy, przewracając je i drukując kolejno znaki:
oW
Komenda jest częścią zestawu poleceń eksperymentalnych, które postdatować wyzwaniu, dzięki czemu ta odpowiedź nie konkurują.źródło
Windows PowerShell,
4655 bajtówKod oryginalny:
źródło