*> <> , 43 42 bajtów
<v":1200----"
S>@5dov>~r@@}r5
1&}o:&<^!?:-
Wypró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 ----
lub 1200
(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
<v":1200----"
Tutaj budujemy stos, którego będziemy używać przez cały czas trwania programu.
< move the IP left
":1200----" push ":1200----" to the stack
v move the IP down into "output time"
Czas wyjścia
>@5dov
1&}o:&<^!?:-
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.
Initialisation:
>@5dov
> move the IP right
@ move the ":" back two spaces in the stack
5 push 5 to the stack (let's call this `i`)
do output carriage return
v move IP down into "loop"
Loop:
1&}o:&<^!?:-
< move the IP left
& place i onto the register
}o: output a character and shift the stack left
& place i back onto the stack
1 - decrement i by 1
^!?: if i == 0, exit to "recover and swap"
Odzyskaj i zamień
S >~r@@}r5
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ę.
> move the IP right
~ remove trailing i from stack
r@@ reverse the stack and move ":" to the front
}r reverse the stack again, keeping ":" on the front
S 5 sleep for 500ms
45 bajtowe rozwiązanie
<v[5"12:00"1
d/S5
o/!?l
v>]?v
00.>0"--:--"5[
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ściowe 12
lub --
) i wybieram stan, z którym mam generować dane wyjściowe v>]?v
.
Wyjaśnienia już wkrótce! (1/2)