2010-10-25 8 views
19

Un helicóptero deja caer dos trenes, cada uno en un paracaídas, sobre una línea ferroviaria recta e infinita.Programación de dos trenes para intersecar sin datos de posición o comunicación (rompecabezas lógico)

Hay una distancia indefinida entre los dos trenes.

Cada uno mira en la misma dirección, y al aterrizar, el paracaídas conectado a cada tren cae al suelo junto al tren y se separa.

Cada tren tiene un microchip que controla su movimiento. Las fichas son idénticas.

No hay forma de que los trenes sepan dónde están.

Necesita escribir el código en el chip para hacer que los trenes choquen entre sí.

Cada línea de código toma un solo ciclo de reloj para ejecutarse.

Se pueden utilizar los siguientes comandos (y sólo éstas):

  • MF - mueve el tren delantero
  • MB - mueve el tren hacia atrás
  • SI (P) - condicional que se satisface si el tren está al lado de un paracaídas. No hay "entonces" en esta declaración IF.
  • GOTO
+8

¿Por qué cerrar? Es una simple pregunta sobre la construcción de algoritmos que tiene una respuesta clara. – aioobe

+1

Puede agregar una etiqueta más "Entrevista-pregunta" para obtener más visibilidad – vrbilgi

+6

El hecho de que pueda copiar y pegar una pregunta sobre la programación en SO, no significa que la pregunta sea buena. Esta pregunta necesita un mejor formato, y probablemente algunas palabras del OP sobre * por qué * la pregunta fue publicada. –

Respuesta

25

Haga cada tren avanzar lentamente hasta que encuentra un paracaídas. Cuando el tren trasero encuentre el paracaídas del tren delantero, hazlo avanzar más rápido para alcanzar al tren delantero.

1. MF 
2. IF(P) 
3. GOTO 5 
4. GOTO 1 
5. MF 
6. GOTO 5 

Si desea realizar tarda menos tiempo para que los trenes lleguen entre sí, a costa de algunas líneas adicionales de código, se puede desenrollar el segundo bucle.

+0

Si esa es la sintaxis correcta para la instrucción 'IF', esta es una respuesta correcta. Incluso si las instrucciones 2da y 3ra están en la misma línea, todavía funcionará. –

+0

Esto es difícil. Necesita el entendimiento de la elección del líder unificado. – none

+1

No creo que esta sea una respuesta correcta. Creo que MF y MB no regulan la velocidad del tren, sino que lo mueven a cierta distancia. – Dialecticus

2
label1: MF 
If (P) 
{ 
    // Do nothing (because of no then?) 
} 
ELSE 
{ 
    MF; 
    MB; 
    GOTO label1; 
} 
label 2:MF 
GOTO label2; 

ir adelante hacia atrás 2 veces, 1 veces hasta que cumpla paracaídas del otro tren de ir hacia adelante como un loco (a topar en el otro - que sigue siendo hacia adelante y luego hacia atrás - lo que significa que a ir más lento). Uso MF una vez en la etiqueta 2, es decir, necesito 2 ciclos de reloj para dar un paso adelante. En la etiqueta 1, se necesitaron 5 ciclos de reloj para avanzar un paso. Entonces, si usamos más MF en label2, dos de ellos chocarán entre sí más rápido.
No se usó ninguna variable.

+0

He formateado tu código; por favor use el botón '101010' o sancione su código por 4 espacios la próxima vez :-) –

+0

Btw esto básicamente usa la misma lógica que la solución de @jchl, excepto que usa bloques y ELSE, que aparentemente no existen en este idioma. –

+1

Sí, veo eso. Pero no vi su solución cuando escribo la mía. Si actualizo la página lo suficientemente pronto, me alegraré con su solución. Utilizo el bloqueo para facilitar su comprensión, y ELLO debido a "no, entonces" en la pregunta. – Kiennx

Cuestiones relacionadas