disconoscimento
Mentre so che c'è questa particolare domanda correlata , la mia domanda usa due porte da garage, un componente randomizzato, e lo sto anche basando su eventi della vita reale, vedendo mio figlio aver accidentalmente abbassato una di quelle porte da garage mentre uscivo dal garage la scorsa settimana ... Niente come un colpo alla testa per far fluire i succhi creativi! ;)
Lo sfondo
A Lucas (mio figlio di 15 mesi) piace giocare con il telecomando del garage. Ci sono due pulsanti su questo telecomando, uno per la porta del garage sinistro e uno per la porta del garage destro. Entrambi i pulsanti funzionano allo stesso modo; premere una volta per far aprire la porta, premere di nuovo per fermare, premere di nuovo per iniziare a chiudere, premere di nuovo per fermarsi di nuovo, e così via.
Lucas adora questo telecomando, premerà casualmente uno dei pulsanti, o entrambi, o nessuno. Se vengono premuti entrambi, non viene inviato alcun segnale, ma la pressione di un pulsante invierà un segnale.
Quindi, la sfida del code-golf è divisa in due parti:
Prima parte
Genera una stringa lunga 60 caratteri che rappresenta la pressione casuale dei pulsanti di Lucas per un minuto. "Casuale" in questo caso significa "con le stesse possibilità di ciascun ingresso per ogni segno di spunta". I personaggi sono i seguenti:
- 0: Lucas non ha premuto alcun pulsante o ha premuto entrambi i pulsanti. Ad ogni modo, nessun segnale è stato inviato.
- 1: Il pulsante per la porta sinistra del garage è stato premuto da Lucas
- 2: Il pulsante per la porta del garage destro è stato premuto da Lucas
Seconda parte
Utilizzando la stringa generata nella prima parte, simulare l'apertura e la chiusura del garage per due auto utilizzando i numeri come trigger per l'apertura, l'arresto e la chiusura di queste porte.
Le porte del mio garage sono piuttosto veloci (vedi il Disclaimer sopra sul perché). Dopo aver premuto il pulsante, sono necessari quattro secondi per essere completamente aperti o chiusi.
Quindi, se chiuso:
- 0 sec: 0% aperto (chiuso); quando si preme il pulsante, la porta inizia ad aprirsi
- 1 secondo: 25% aperto
- 2 sec: 50% aperto
- 3 sec: 75% aperto
- 4 sec: 100% aperto, porta ferma
E quindi, se aperto:
- 0 sec: 100% aperto; quando si preme il pulsante, la porta inizia a chiudersi
- 1 secondo: aperto al 75%
- 2 sec: 50% aperto
- 3 sec: 25% aperto
- 4 sec: 0% aperto (chiuso), porta ferma
Se una determinata porta è in movimento, un segnale a quella stessa porta la fermerà. Il segnale successivo inviato a quella stessa porta, successivamente, lo farà muovere nella direzione opposta. Se una porta viene fermata quando è stata precedentemente in movimento e ora è completamente aperta o completamente chiusa quando viene ricevuto il segnale "stop", la porta verrà registrata come "fermata" nello stato completamente aperto o completamente chiuso, pronta per muoversi nella direzione opposta quando riceve un nuovo segnale.
Con questa simulazione, entrambe le porte del garage saranno inizialmente in posizione chiusa. Quindi, diamo un'occhiata a un elenco di 10 secondi di comandi e vediamo cosa succede se Lucas dovesse eseguirli sul telecomando:
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
Produzione
La prima parte dell'output richiede la visualizzazione della stringa lunga di 60 caratteri di caratteri casuali "0", "1" e "2" generati dalla prima parte. per esempio.
212022112021202211202120221120212022112021202211202120221120
Sotto questa stringa, si trova l'elaborazione di questi "segnali" secondo le regole sopra menzionate su come le porte del garage si comporteranno con ciascun rispettivo carattere (secondo per secondo). Dovresti finire con 60 righe come risultato sotto la stringa di visualizzazione iniziale.
Ognuna di queste linee elaborate avrà la forma di:
N: (L:X% XXXXXXX, R:Y% YYYYYYY)dove:
- N è l'ennesimo carattere della rispettiva stringa casuale, che avrà la forma di 0, 1 o 2.
- X% è la percentuale di apertura della porta sinistra (non c'è imbottitura zero)
- XXXXXXX è lo stato della porta sinistra. Se la porta non è in movimento (cioè non si apre o si chiude) viene applicato lo stato "arrestato", il che significa che è stato arrestato in movimento (possibile solo al 25%, 50% o 75%) o arrestato quando è completamente aperto (100% ) o completamente chiuso (0%). Altrimenti, la porta sarà "apertura" o "chiusura".
- Y% è la percentuale di apertura della porta destra (non vi è alcuna imbottitura zero)
- AAAAAA è lo stato della porta giusta. Se la porta non è in movimento (cioè non si apre o si chiude) viene applicato lo stato "arrestato", il che significa che è stato arrestato in movimento (possibile solo al 25%, 50% o 75%) o arrestato quando è completamente aperto (100% ) o completamente chiuso (0%). Altrimenti, la porta sarà "apertura" o "chiusura".
Esempio mostrato sotto usando 10 "segnali" e 10 linee elaborate
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
Questo è code-golf, quindi il codice più corto sarà il chiaro vincitore. L'ho reso un po 'semplice usando frasi come "apertura", "arresto" e "chiusura", che sono tutte e sette le lettere ... quindi potresti voler inserire questo nella tua strategia.
Buona fortuna!
1comando non ha fermato la porta sinistra al 75% nel tuo esempio?