Avertissement
Bien que je sache qu'il existe une question connexe particulière , ma question utilise deux portes de garage, un composant de randomisation, et je base également cela sur des événements de la vie réelle, en voyant mon fils abaisser accidentellement l'une desdites portes de garage pendant que je sortais du garage la semaine dernière ... Rien de tel qu'un coup à la tête pour faire couler les jus créatifs! ;)
L'arrière-plan
Lucas (mon fils de 15 mois) aime jouer avec la télécommande du garage. Il y a deux boutons sur cette télécommande, un pour la porte de garage gauche et un pour la porte de garage droite. Les deux boutons fonctionnent de la même manière; appuyez une fois pour que la porte commence à s'ouvrir, appuyez à nouveau pour arrêter, appuyez à nouveau pour commencer à fermer, appuyez à nouveau pour arrêter à nouveau, etc.
Lucas aime cette télécommande, il va appuyer au hasard sur l'un des boutons, ou les deux, ou aucun du tout. Si les deux sont enfoncés, aucun signal n'est envoyé, mais une pression sur un bouton enverra un signal.
Ainsi, le défi du code-golf est divisé en deux parties:
Partie un
Générez une chaîne de 60 caractères représentant les pressions aléatoires de Lucas sur une minute. "Aléatoire" dans ce cas signifie "avec une chance égale de chaque entrée à chaque tick". Les personnages sont les suivants:
- 0: Lucas n'a appuyé sur aucun bouton ou a appuyé sur les deux boutons. Quoi qu'il en soit, aucun signal n'a été envoyé.
- 1: Lucas a appuyé sur le bouton de la porte de garage gauche
- 2: Lucas a appuyé sur le bouton de la porte de garage droite
Deuxième partie
À l'aide de la chaîne générée dans la première partie, simulez l'ouverture et la fermeture du garage pour deux voitures en utilisant les chiffres comme déclencheurs pour l'ouverture, l'arrêt et la fermeture de ces portes.
Mes portes de garage sont assez rapides (voir la clause de non-responsabilité ci-dessus pour savoir pourquoi). Une fois que vous appuyez sur le bouton, il faut quatre secondes pour être complètement ouvert ou fermé.
Donc, si fermé:
- 0 sec: 0% ouvert (fermé); lorsque le bouton est enfoncé, la porte commence à s'ouvrir
- 1 sec: 25% ouvert
- 2 sec: 50% ouvert
- 3 sec: 75% ouvert
- 4 sec: 100% ouvert, la porte s'arrête
Et donc, si ouvert:
- 0 sec: 100% ouvert; lorsque le bouton est enfoncé, la porte commence à se fermer
- 1 sec: 75% ouvert
- 2 sec: 50% ouvert
- 3 sec: 25% ouvert
- 4 sec: 0% ouvert (fermé), la porte s'arrête
Si une porte particulière est en mouvement, un signal à cette même porte l'arrêtera. Le prochain signal envoyé à cette même porte après cela l'enverra se déplaçant dans la direction opposée. Si une porte est arrêtée alors qu'elle était précédemment en mouvement et est maintenant complètement ouverte ou complètement fermée lorsque le signal "stop" est reçu, la porte sera enregistrée comme "arrêtée" à l'état complètement ouvert ou complètement fermé, prête à se déplacer dans la direction opposée lorsqu'il reçoit un nouveau signal.
Avec cette simulation, les deux portes de garage seront initialement en position fermée. Alors, regardons une liste de 10 secondes de commandes et voyons ce qui se passe si Lucas devait les exécuter sur la télécommande:
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)
Production
La première partie de la sortie nécessite l'affichage de la longue chaîne de 60 caractères de caractères aléatoires "0", "1" et "2" générés à partir de la première partie. par exemple.
212022112021202211202120221120212022112021202211202120221120
En dessous de cette chaîne, se trouve le traitement de ces "signaux" selon les règles mentionnées ci-dessus sur le comportement des portes de garage avec chaque caractère respectif (sur une base seconde par seconde). Vous devriez vous retrouver avec 60 lignes sous la chaîne d'affichage initiale.
Chacune de ces lignes traitées se présentera sous la forme de:
N: (L:X% XXXXXXX, R:Y% YYYYYYY)où:
- N est le nième caractère de la chaîne aléatoire respective, qui sera sous la forme d'un 0, 1 ou 2.
- X% est le pourcentage d'ouverture de la porte gauche (il n'y a pas de remplissage nul)
- XXXXXXX est l'état de la porte gauche. Si la porte n'est pas en mouvement (c'est-à-dire qu'elle ne s'ouvre ni ne se ferme), l'état "arrêté" est appliqué, ce qui signifie qu'elle a été arrêtée en mouvement (uniquement possible à 25%, 50% ou 75%) ou arrêtée lorsqu'elle est complètement ouverte (100% ) ou complètement fermé (0%). Sinon, la porte sera "ouverte" ou "fermée".
- Y% est le pourcentage d'ouverture de la porte droite (il n'y a pas de remplissage nul)
- YYYYYYY est l'état de la porte droite. Si la porte n'est pas en mouvement (c'est-à-dire qu'elle ne s'ouvre ni ne se ferme), l'état "arrêté" est appliqué, ce qui signifie qu'elle a été arrêtée en mouvement (uniquement possible à 25%, 50% ou 75%) ou arrêtée lorsqu'elle est complètement ouverte (100% ) ou complètement fermé (0%). Sinon, la porte sera "ouverte" ou "fermée".
Exemple illustré ci-dessous utilisant 10 "signaux" et 10 lignes traitées
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)
C'est le code-golf, donc le code le plus court sera le gagnant clair. J'ai rendu cela un peu facile en utilisant des phrases comme "ouverture", "arrêté" et "fermeture", qui sont toutes les sept lettres ... donc vous voudrez peut-être intégrer cela dans votre stratégie.
Bonne chance!
1commande n'arrête- t-elle pas la porte gauche à 75% dans votre exemple?