La puerta de mi garaje eléctrico funciona así:
- Solo hay un botón para controlar la puerta
- Si la puerta está completamente cerrada y presiono el botón, la puerta comienza a abrirse. Tarda 10 segundos en abrirse completamente
- Si la puerta está completamente abierta y presiono el botón, la puerta comienza a cerrarse. Tarda 10 segundos en cerrarse completamente
- Si la puerta está a medio abrir o cerrarse y presiono el botón, entonces la puerta se detiene y se deja parcialmente abierta.
- Cada vez que la puerta deja de moverse, ya sea por la finalización automática de una acción de apertura o cierre, o por la interrupción manual presionando el botón a la mitad de una acción, el mecanismo se revertirá y recordará su dirección para la siguiente acción.
- Si se presiona el botón cuando la puerta está detenida pero parcialmente abierta, la cantidad de tiempo para que complete su acción será una fracción de 10 segundos en proporción a la cantidad que necesita moverse para completar la acción.
Suponga que la puerta está completamente cerrada al comienzo.
Se dará una lista de entrada de enteros. Estos enteros son la cantidad de segundos que espero entre pulsaciones sucesivas del botón de control.
Salida dos cosas:
- un porcentaje que indica el estado de la puerta una vez que se completan todos los botones y la puerta ha alcanzado un estado estable. La salida del
%
símbolo es opcional. - Una indicación inequívoca de en qué dirección se desplazará la puerta en el siguiente botón. Esto puede ser
up
/down
,U
/D
,+
/-
,1
/0
o lo que elija.
Puede suponer que la puerta tarda infinitamente menos de 10 segundos para completar una acción de abrir o cerrar.
Entradas de ejemplo:
<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
Salidas esperadas correspondientes a las entradas anteriores
100% D
0% U
0% U
50% D
100% D
100% D
0% U
100% D
0% U
20% U
Ejemplo trabajado de la última prueba
- La puerta comienza cerrada. Se presiona el botón
- Espera 11 segundos. La puerta termina completamente abierta. Se presiona el botón.
- Espera 10 segundos La puerta termina completamente cerrada. Se presiona el botón.
- Espera 9 segundos Se presiona el botón. La puerta se detiene al 90% abierta.
- Espera 8 segundos Se presiona el botón. La puerta comienza a cerrarse.
- Espera 7 segundos. Se presiona el botón. La puerta se detiene al 20% abierta. La siguiente dirección estará arriba.
Respuestas:
LUA,
258248242 bytesSin golf
No veo cómo tus casos de prueba pueden ser correctos ...OP fijofuente
Pyth,
504539 bytes6 bytes gracias a Sp3000.
Banco de pruebas.
fuente
JavaScript (ES6),
109106bytesfuente
Ruby, 152 bytes
Casos de prueba:
fuente
->v{
a->*v{
(creo). Además, no se necesitan los espacios antes de la:
, así como después? ¿Y estás seguro de que:a<=0
no funciona(:a) <= 0
?:a<=0
, obtendría unArgumentError: comparison of Symbol with 0 failed
si no funcionara. Creo que porque analizó?
y sabe que está en un operador ternario, simplemente funciona. Las reglas son realmente extrañas. He puesto espacios o corchetes en lugares que son necesarios para evitar errores de sintaxis comoSyntaxError: unexpected tLABEL
yNoMethodError: undefined method
u? ''.a=u ? a+w : a-w
y cambiarlo aa=a+w*d
donded
está1
o-1
dependiendo de la dirección, pero aún no lo he resuelto.Python 3.5,
193187185181175173172 bytes:Toma entrada en forma de números separados por comas, por ejemplo
1,2,3,4,5
o incluso1.2,3.4,7.8,9.2
. Muestra si la puerta en el siguiente paso sube o baja conU
oD
, respectivamente. Jugará más golf con el tiempo.¡Pruébelo en línea! (Ideone) (Aquí la entrada se toma en forma de una lista que consiste en números separados por comas, por ejemplo
[1,2,3,4,5]
).fuente
PHP,
128120 bytesEl código se envuelve aquí para caber en el cuadro de código. Ponga todo en una sola línea, coloque el marcador abierto de PHP frente a él y guárdelo en un archivo. O ejecútelo desde la línea de comando usando
php -d error_reporting=0 -r '...the code...' [arguments]
.El código fuente no protegido, el conjunto de pruebas y ejemplos de uso se pueden encontrar en github .
fuente