Descargo de responsabilidad
Si bien sé que existe esta pregunta relacionada en particular , mi pregunta usa dos puertas de garaje, un componente aleatorio, y también estoy basando esto en eventos de la vida real, al ver que mi hijo bajó accidentalmente una de dichas puertas de garaje mientras salía del garaje la semana pasada ... ¡Nada como un golpe en la cabeza para que fluyan los jugos creativos! ;)
El fondo
A Lucas (mi hijo de 15 meses) le gusta jugar con el control remoto del garaje. Hay dos botones en este control remoto, uno para la puerta de garaje izquierda y otro para la puerta de garaje derecha. Ambos botones funcionan de la misma manera; presione una vez para que la puerta comience a abrir, presione nuevamente para detener, presione nuevamente para comenzar a cerrar, presione nuevamente para detener nuevamente, y así sucesivamente.
A Lucas le encanta este control remoto, presionará aleatoriamente uno de los botones, o ambos, o ninguno. Si se presionan ambos, no se envía ninguna señal, pero al presionar un botón se enviará una señal.
Entonces, el desafío del código-golf se divide en dos partes:
Parte uno
Genere una cadena larga de 60 caracteres que represente las pulsaciones aleatorias de los botones de Lucas durante un minuto. "Aleatorio" en este caso significa "con la misma probabilidad de cada entrada en cada tic". Los personajes son los siguientes:
- 0: Lucas no presionó ningún botón o presionó ambos botones. De cualquier manera, no se ha enviado ninguna señal.
- 1: Lucas ha presionado el botón de la puerta de garaje izquierda
- 2: Lucas ha presionado el botón de la puerta de garaje derecha
La segunda parte
Usando la cadena generada en la Parte Uno, simule la apertura y el cierre del garaje para dos autos usando los números como disparadores para abrir, detener y cerrar estas puertas.
Las puertas de mi garaje son bastante rápidas (consulte el descargo de responsabilidad anterior para saber por qué). Una vez que presiona el botón, tarda cuatro segundos en abrirse o cerrarse por completo.
Entonces, si está cerrado:
- 0 segundos: 0% abierto (cerrado); Cuando se presiona el botón, la puerta comienza a abrirse
- 1 seg: 25% abierto
- 2 segundos: 50% abierto
- 3 segundos: 75% abierto
- 4 segundos: 100% abierto, la puerta se detiene
Y por lo tanto, si está abierto:
- 0 segundos: 100% abierto; Cuando se presiona el botón, la puerta comienza a cerrarse
- 1 seg .: 75% abierto
- 2 segundos: 50% abierto
- 3 seg: 25% abierto
- 4 seg: 0% abierto (cerrado), la puerta se detiene
Si una puerta en particular está en movimiento, una señal a esa misma puerta la detendrá. La siguiente señal enviada a esa misma puerta después de eso la enviará moviéndose en la dirección opuesta. Si una puerta se detiene cuando anteriormente estaba en movimiento y ahora está completamente abierta o completamente cerrada cuando se recibe la señal de "parada", la puerta se registrará como "detenida" en el estado completamente abierto o completamente cerrado, lista para moverse en la dirección opuesta cuando recibe una nueva señal.
Con esta simulación, ambas puertas de garaje estarán inicialmente en la posición cerrada. Entonces, echemos un vistazo a una lista de comandos de 10 segundos y veamos qué sucede si Lucas los ejecuta en el control remoto:
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)
Salida
La primera parte de la salida requiere la visualización de la cadena de 60 caracteres de caracteres aleatorios "0", "1" y "2" generados a partir de la Parte Uno. p.ej.
212022112021202211202120221120212022112021202211202120221120
Debajo de esta cadena, se encuentra el procesamiento de estas "señales" de acuerdo con las reglas mencionadas anteriormente sobre cómo se comportarán las puertas de garaje con cada carácter respectivo (segundo a segundo). Debe terminar con 60 líneas como resultado debajo de la cadena de visualización inicial.
Cada una de estas líneas procesadas tendrá la forma de:
N: (L:X% XXXXXXX, R:Y% YYYYYYY)
donde:
- N es el enésimo carácter de la cadena aleatoria respectiva, que tendrá la forma de 0, 1 o 2.
- X% es el porcentaje de apertura de la puerta izquierda (no hay relleno cero)
- XXXXXXX es el estado de la puerta izquierda. Si la puerta no está en movimiento (es decir, no se abre ni se cierra), se aplica el estado "detenido", lo que significa que se ha detenido en movimiento (solo es posible al 25%, 50% o 75%) o se detiene cuando está completamente abierto (100% ) o completamente cerrado (0%). De lo contrario, la puerta estará "abriéndose" o "cerrándose".
- Y% es el porcentaje de apertura de la puerta derecha (no hay relleno cero)
- AAAAAA es el estado de la puerta derecha. Si la puerta no está en movimiento (es decir, no se abre ni se cierra), se aplica el estado "detenido", lo que significa que se ha detenido en movimiento (solo es posible al 25%, 50% o 75%) o se detiene cuando está completamente abierto (100% ) o completamente cerrado (0%). De lo contrario, la puerta estará "abriéndose" o "cerrándose".
Ejemplo que se muestra a continuación utilizando 10 "señales" y 10 líneas procesadas
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)
Este es el código de golf, por lo que el código más corto será el claro ganador. He hecho esto un poco fácil usando frases como "abrir", "detener" y "cerrar", que son las siete letras ... así que es posible que desee incluir eso en su estrategia.
¡La mejor de las suertes!
1
comando no detiene la puerta izquierda al 75% en su ejemplo?