algorithm - origen - memética
Programación de dos trenes para intersectarse sin datos de posición o comunicación(lógica) (2)
Un helicóptero deja caer dos trenes, cada uno en paracaídas, sobre una línea de ferrocarril infinita y recta.
Hay una distancia indefinida entre los dos trenes.
Cada uno se enfrenta a la misma dirección y, al aterrizar, el paracaídas que se une a cada tren cae al suelo al lado del tren y se separa.
Cada tren tiene un microchip que controla su movimiento. Las fichas son idénticas.
No hay manera de que los trenes sepan dónde están.
Necesitas escribir el código en el chip para hacer que los trenes se topen entre sí.
Cada línea de código toma un solo ciclo de reloj para ejecutarse.
Puedes usar los siguientes comandos (y solo estos):
- MF - avanza el tren
- MB - mueve el tren hacia atrás
- IF (P): condicional que se cumple si el tren está al lado de un paracaídas. No hay un "entonces" en esta declaración IF.
- IR
Haz que cada tren se mueva hacia adelante lentamente hasta que encuentre un paracaídas. Cuando el tren trasero encuentre el paracaídas del tren delantero, haz que se mueva hacia adelante más rápido para alcanzar el tren delantero.
1. MF
2. IF(P)
3. GOTO 5
4. GOTO 1
5. MF
6. GOTO 5
Si desea que los trenes tarden menos tiempo en llegar unos a otros, al costo de algunas líneas de código adicionales, puede desenrollar el segundo bucle.
label1: MF
If (P)
{
// Do nothing (because of no then?)
}
ELSE
{
MF;
MB;
GOTO label1;
}
label 2:MF
GOTO label2;
Avanza 2 veces, retrocede 1 vez hasta que te encuentres con el paracaídas del otro tren, avanza como loco (para chocar con el otro, sigue adelante y luego hacia atrás, lo que significa que es más lento). Utilizo MF una vez en la etiqueta 2, significa que se necesitan 2 ciclos de tiempo para avanzar un paso. En label1 tomó 5 ciclos de reloj para avanzar un paso. Entonces, si usamos más MF en label2, dos de ellos se encontrarán más rápido.
Ninguna variable utilizada.