Ma porte de garage électrique fonctionne comme ceci:
- Il n'y a qu'un seul bouton poussoir pour contrôler la porte
- Si la porte est complètement fermée et que j'appuie sur le bouton, la porte commence à s'ouvrir. L'ouverture complète prend 10 secondes
- Si la porte est complètement ouverte et que j'appuie sur le bouton, la porte commence à se fermer. La fermeture complète prend 10 secondes
- Si la porte est en cours d'ouverture ou de fermeture et que j'appuie sur le bouton, la porte s'arrête et reste partiellement ouverte.
- Chaque fois que la porte s'arrête de bouger, soit à la fin automatique d'une action d'ouverture ou de fermeture, soit à partir d'une interruption manuelle en poussant le bouton à mi-chemin d'une action, le mécanisme s'inversera et se souviendra de sa direction pour l'action suivante.
- Si le bouton est enfoncé lorsque la porte est arrêtée mais partiellement ouverte, le temps nécessaire pour terminer son action sera d'une fraction de 10 secondes proportionnellement à la quantité de mouvement nécessaire pour terminer l'action.
Supposons que la porte est complètement fermée au début.
Une liste d'entrée d'entiers sera donnée. Ces nombres entiers sont le nombre de secondes que j'attends entre les pressions successives du bouton de commande.
Sortie deux choses:
- un pourcentage indiquant l'état de la porte une fois que toutes les pressions sur les boutons sont terminées et que la porte a atteint un état stable. La sortie du
%
symbole est facultative. - une indication non ambiguë de la direction dans laquelle la porte se déplacera lors de la prochaine pression sur le bouton. Cela peut être
up
/down
,U
/D
,+
/-
,1
/0
ou ce que vous choisissez.
Vous pouvez supposer que la porte prend infiniment moins de 10 secondes pour terminer une action d'ouverture ou de fermeture.
Exemples d'entrées:
<empty list> # button was pushed just once
20 # button was pushed twice with 20 seconds between
10
5
20 20
10 10
5 5
1 2 3
8 9 10 11
11 10 9 8 7
Sorties attendues correspondant aux entrées ci-dessus
100% D
0% U
0% U
50% D
100% D
100% D
0% U
100% D
0% U
20% U
Exemple travaillé du dernier test
- La porte démarre fermée. Le bouton est enfoncé
- Attendez 11 secondes. La porte finit par s'ouvrir complètement. Le bouton est enfoncé.
- Attendez 10 secondes. La porte se ferme complètement. Le bouton est enfoncé.
- Attendez 9 secondes. Le bouton est enfoncé. La porte s'arrête à 90% ouverte.
- Attendez 8 secondes. Le bouton est enfoncé. La porte se ferme.
- Attendez 7 secondes. Le bouton est enfoncé. La porte s'arrête à 20% d'ouverture. La prochaine direction sera vers le haut.
Réponses:
Lua,
258248242 octetsNon golfé
Je ne vois pas comment vos cas de test peuvent être corrects ...OP Fixedla source
Pyth,
504539 octets6 octets grâce au Sp3000.
Suite de tests.
la source
JavaScript (ES6),
109106 octetsla source
Rubis, 152 octets
Cas de test:
la source
->v{
en->*v{
(je pense). En outre, vous avez besoin des espaces avant le:
et après? Et êtes-vous sûr que l':a<=0
analyse ne fonctionne pas(:a) <= 0
?:a<=0
moi, j'en aurais unArgumentError: comparison of Symbol with 0 failed
si ça ne fonctionnait pas. Je pense que parce qu'il a analysé le?
et sait qu'il est dans un opérateur ternaire, cela fonctionne juste. Les règles sont en effet étranges. J'ai mis des espaces ou des crochets aux endroits nécessaires pour éviter les erreurs de syntaxe commeSyntaxError: unexpected tLABEL
etNoMethodError: undefined method
u? ''.a=u ? a+w : a-w
et le changera=a+w*d
où ild
est1
ou-1
selon la direction, mais je ne l'ai pas encore réglé.Python 3.5,
193187185181175173172 octets:Prend la saisie sous la forme de nombres séparés par des virgules, par exemple
1,2,3,4,5
ou même1.2,3.4,7.8,9.2
. Indique si la porte de l'étape suivante monte ou descend avecU
ouD
, respectivement. Va jouer au golf avec le temps.Essayez-le en ligne! (Ideone) (Ici, l'entrée est prise sous la forme d'une liste composée de nombres séparés par des virgules, par exemple
[1,2,3,4,5]
.)la source
PHP,
128120 octetsLe code est enveloppé ici pour tenir dans la zone de code. Mettez tout sur une seule ligne, placez le marqueur PHP ouvert devant et enregistrez-le dans un fichier. Ou exécutez-le à partir de la ligne de commande à l'aide de
php -d error_reporting=0 -r '...the code...' [arguments]
.Le code source non golfé, la suite de tests et des exemples d'utilisation peuvent être trouvés sur github .
la source