*> <> , 43 42 Bytes
<v":1200----"
S>@5dov>~r@@}r5
1&}o:&<^!?:-
Probieren Sie es hier aus!
Ich habe das Gefühl, ich könnte das verkürzen, ich habe ein paar Ideen zum Ausprobieren ... Im Grunde genommen macht das einen Stapel aus :1200----
. Sie isoliert den :
Stapel und dreht ihn um, indem sie ihn :
in die Mitte von entweder ----
oder 1200
(je nachdem, was sich am Ende des Stapels befindet) einfügt .
Ich sollte auch beachten, dass die einzige *> <> Anweisung, die hier verwendet wird, S
(sleep) ist, andernfalls handelt es sich um ein richtiges> <> Programm.
Update: 1 Byte durch Verschieben :
nach rechts gespeichert, anstatt es mit einem Register zu schützen.
Erläuterung
Initialisierung
<v":1200----"
Hier bauen wir den Stack auf, den wir für die gesamte Laufzeit des Programms verwenden werden.
< move the IP left
":1200----" push ":1200----" to the stack
v move the IP down into "output time"
Ausgabezeit
>@5dov
1&}o:&<^!?:-
Dies ist der Bereich, in dem die Uhrzeit tatsächlich ausgegeben wird. Die ersten 5 werden auf den Stapel geschoben, sodass die folgende Schleife 5-mal ausgeführt werden kann.
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"
Erholen und tauschen
S >~r@@}r5
Hier erholen wir uns :
von der Position, die es nach der Ausgabe ergibt, und wir erhalten einen umgekehrten Stapel. Dies führt tatsächlich zu einer "Ausgabezeit", was zu einer Endlosschleife führt.
> 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-Byte-Lösung
<v[5"12:00"1
d/S5
o/!?l
v>]?v
00.>0"--:--"5[
Probieren Sie es hier aus!
Dies ist auch im Grunde ein> <> Programm.
Ich dachte wirklich, mit diesem Ansatz könnten einige Bytes eingespart werden. Das gibt 12:00
man dann ganz einfach aus --:--
. Ich spare Bytes, indem ich die Ausgaberoutine wieder verwende o/!?l
(ich verwende diesen Spiegel sogar als Ein- und Ausgang). Ich verwende mehrere Stapel, um den Status (hat Ausgabe 12
oder --
) zu speichern , und wähle aus, mit welchem Status ich ausgeben soll v>]?v
.
Erklärungen folgen in Kürze! (1/2)