*> <> , 43 42 byte
<v":1200----"
S>@5dov>~r@@}r5
1&}o:&<^!?:-
Provalo qui!
Sento che dovrei essere in grado di accorciarlo, ho un paio di idee da provare ... Fondamentalmente questo fa una pila di :1200----
. Isola il :
e capovolge la pila, inserendo la :
al centro di una ----
o 1200
(a seconda di quale si trova alla fine della pila).
Dovrei anche notare che l'unica * * <> istruzione che utilizza è S
(sleep), altrimenti si tratta di un programma> <> appropriato.
Aggiornamento: 1 byte salvato spostando :
a destra invece di proteggerlo con un registro.
Spiegazione
Inizializzazione
<v":1200----"
Qui costruiamo lo stack che useremo per la durata del programma.
< move the IP left
":1200----" push ":1200----" to the stack
v move the IP down into "output time"
Tempo di uscita
>@5dov
1&}o:&<^!?:-
Questa è la sezione in cui viene effettivamente emesso il tempo. I primi 5 vengono inseriti nello stack in modo che il ciclo sottostante sappia che viene eseguito 5 volte.
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"
Ripristina e scambia
S >~r@@}r5
Qui recuperiamo :
dalla posizione in cui risulta dopo l'output e finiamo con uno stack inverso. Questo in realtà termina correttamente nel "tempo di uscita", causando un ciclo infinito.
> 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
Soluzione a 45 byte
<v[5"12:00"1
d/S5
o/!?l
v>]?v
00.>0"--:--"5[
Provalo qui!
Anche questo è fondamentalmente un programma> <>.
Ho davvero pensato che sarebbe stato in grado di salvare alcuni byte con questo approccio. Questo semplicemente produce 12:00
, quindi --:--
. Risparmio byte riutilizzando la routine di output o/!?l
(riutilizzo anche quel mirror sia in entrata che in uscita). Uso più stack per memorizzare lo stato (ha output 12
o --
) e seleziono lo stato con cui dovrei produrre v>]?v
.
Spiegazioni in arrivo! (1/2)