19 Stimmen

Programmieren Sie zwei Züge, damit sie sich ohne Positionsdaten oder Kommunikation kreuzen (Logikrätsel)

Ein Hubschrauber lässt zwei Züge, jeweils an einem Fallschirm, auf eine gerade unendliche Eisenbahnlinie fallen.

Es gibt eine undefinierte Entfernung zwischen den beiden Zügen.

Jeder Zug zeigt in die gleiche Richtung, und beim Landen fällt der Fallschirm, der an jedem Zug befestigt ist, neben dem Zug auf den Boden und löst sich.

Jeder Zug hat einen Mikrochip, der seine Bewegung steuert. Die Chips sind identisch.

Es gibt keine Möglichkeit für die Züge zu wissen, wo sie sind.

Sie müssen den Code im Chip schreiben, damit die Züge aufeinander stoßen.

Jede Codezeile benötigt einen einzigen Taktzyklus zur Ausführung.

Sie können nur die folgenden Befehle verwenden:

  • MF - bewegt den Zug nach vorne
  • MB - bewegt den Zug rückwärts
  • IF (P) - Bedingung, die erfüllt ist, wenn der Zug neben einem Fallschirm ist. Es gibt kein "dann" für diese IF-Anweisung.
  • GOTO

25voto

jchl Punkte 6042

Jeder Zug soll sich langsam vorwärts bewegen, bis er einen Fallschirm findet. Wenn der hintere Zug den Fallschirm des vorderen Zuges findet, lass ihn schneller vorwärts fahren, um den vorderen Zug einzuholen.

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

Wenn Sie möchten, dass die Züge sich schneller erreichen, jedoch auf Kosten einiger zusätzlicher Codezeilen, können Sie die zweite Schleife entfalten.

2voto

Kiennx Punkte 31
label1: MF
If (P)
{
   // Nichts tun (da kein Then?)
}
ELSE
{
   MF;
   MB;
   GOTO label1;
}
label 2:MF
GOTO label2;

Geh 2 Mal vorwärts, 1 Mal rückwärts, bis du auf den Fallschirm des anderen Zuges triffst und dann verrückt vorwärts gehst (um auf den anderen zu stoßen - es ist immer noch Vorwärts und dann Rückwärts - was bedeutet, dass es langsamer wird). Ich benutze MF einmal in Label 2, das bedeutet, dass es 2 Taktzyklen dauert, um einen Schritt vorwärts zu gehen. In Label 1 dauerte es 5 Taktzyklen, um einen Schritt vorwärts zu gehen. Also, wenn wir mehr MF in Label 2 verwenden, werden sich beide schneller treffen.
Es werden keine Variablen verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X