Eine exemplarische Vorgehensweise durch eines der am schwierigsten zu grependen Levels von Turing Complete. „Saving Gracefully“ nach dem neuen Patch vom Dezember 2021 ersetzte SR-Latches durch Verzögerungsschaltungen. Ich habe ein paar Leute gesehen, die mit diesem Level zu kämpfen haben, also habe ich beschlossen, einen illustrierten Leitfaden zu schreiben, der mit Ihnen eine Antwort aufbaut. Die hier gezeigte Antwort ist nicht unbedingt die effizienteste, aber wir sind hier, um zu verstehen, nicht nur zu kopieren und einzufügen.
Schritt 1: Was müssen wir tun?
Laut unserem langnasigen außerirdischen Freund bauen wir eine Schaltung, die einen Wert speichern und den aktuell gespeicherten Wert ausgeben kann.
Wenn wir das etwas weiter aufschlüsseln, gibt es ein paar verschiedene Aufgaben, die wir hier tatsächlich erledigen müssen. Erstens müssen wir irgendwie einen Wert für immer speichern. Zweitens, wenn das „Save“-Bit (der obere Eingang) eingeschaltet ist, müssen wir alles, was „gespeichert“ ist, durch den Wert im unteren Bit ersetzen.
Dieser zweite Teil klingt schwierig, aber fangen wir mit dem ersten an und sehen, wie wir darauf aufbauen können.
Schritt 2: Nehmen wir an, Speichern ist ausgeschaltet
Erinnerst du dich an Odd Ticks? Bei diesem Problem haben wir ein Off ausgegeben und dann ein NOT verwendet, um ein On zu „speichern“, und dann im nächsten Tick dasselbe getan, aber mit entgegengesetzten Werten. Das klingt kompliziert, also verwenden wir ein Bild.
(Sie können Komponenten mit der Leertaste drehen)
In diesem Fall haben wir im Wesentlichen das Ergebnis von gespeichert NICHT vom Wert des letzten Ticks. Eine Möglichkeit, darüber nachzudenken, ist, dass wir ausgeben, was auch immer in ist Verzögerungsschaltung, und die gewünschte Ausgabe für den nächsten Tick in die einfügen Verzögerungsschaltung. Der offensichtliche Weg, hier einen Wert zu speichern, wäre also, einfach auf sich selbst zurückzugreifen. Versuchen wir das.
Großartig, jetzt haben wir eine Speicherschleife. Was auch immer von ausgegeben wird Verzögerungsschaltung wird wieder eingespeist, und wir werden golden sein. Der Einfachheit halber bezeichne ich jeden Eingang, den wir an die Verzögerungsschaltung senden, als „Speichern“ des Eingangs.
Können wir das testen? Sicher, das ist eine gute Idee. Läuft es für WOW! funktioniert (bis die folgenden Tests fehlschlagen, aber wir können sehen, dass es keinen Grund dafür gibt, dass es sich plötzlich dreht on und Ausgabe an on Signal). Lass uns ein werfen on Generator und stellen Sie sicher, dass er eine speichert on.
Das wäre natürlich nicht so einfach. Nichts freundliches OR kann nicht beheben.
Das ist besser! Ich kenne die On würde es schaffen on Unabhängig davon, aber hoffentlich können Sie sehen, ob wir das aushalten könnten on weg, der untere Eingang zum OR würde es für immer behalten.
In der Tat, in den Fällen, in denen die Eingabe speichern is WOW!, das ist genau das Verhalten, das wir wollen! Oder anders ausgedrückt: Wenn die Eingabe speichern is WOW! Und Der gespeicherte Wert ist on, dann sende eine on zu den Verzögerungsschaltungoder wenn die Eingabe speichern is WOW! Und Der gespeicherte Wert ist WOW!, Ausgabe an WOW!. Wir können das etwas vereinfachen; wenn die Eingabe speichern is WOW!, dann senden Sie, was auch immer in der ist Verzögerungsschaltung auf sich selbst zurück, damit wir es beim nächsten Tick ausgeben können.
Lassen Sie uns eine Wahrheitstabelle erstellen (diese Dinge in den früheren Levels, die zeigen, was der Ausgabe zu verzeihen ist, Eingaben).
Ich ermutige Sie, zu versuchen, das selbst zu bauen, aber so könnte das aussehen:
Hier verwende ich Orange, um unsere Sicherungsschleife zu kennzeichnen, und Hellblau, um unsere anzuzeigen Eingabe speichern. Ich empfehle, sich daran zu gewöhnen, Drähte in logischen Gruppen wie dieser zu färben, Sie werden froh sein, dass Sie dies in den späteren Levels getan haben.
Schritt 3: Fügen wir die Möglichkeit hinzu, zu ändern, was wir speichern
Süß, wir haben das halbe Problem gelöst. Jetzt müssen wir nur noch herausfinden, wie wir alles, was wir gespeichert haben, ignorieren können, wenn die Eingabe speichern is on, und speichern Sie stattdessen alles, was sich in der befindet Werteingabe. Das klingt hart, aber fangen wir an, herumzuspielen.
Nun, wenn wir uns unsere Schaltung noch einmal ansehen, haben wir mehr als die Hälfte des Problems gelöst! Wenn die Eingabe speichern is on, dann ist die UND stellt sicher, dass alles, was wir gespeichert haben, eingestellt ist WOW!. In diesem Fall müssen wir nur den Wert aus der abrufen Werteingabe und schreib es an die Verzögerungsschaltung.
Ahh, wir sind so nah dran, aber hier ist ein Fehler. Wir sparen den Wert der Werteingabe, auch wenn die Eingabe speichern ist nicht eingestellt. Wir wollen diesen Wert nur speichern, wenn die Eingabe speichern eingeschaltet ist, also lassen Sie uns wieder etwas Logik anwenden, um herauszufinden, wie.
Wenn wir auf unsere Speicherlogik zurückblicken, wollten wir den gespeicherten Wert, wenn der Eingabe speichern wurde WOW!. Hier wollen wir die WerteingabeWenn die Eingabe speichern is on. Das klingt bemerkenswert ähnlich, also versuchen wir es mal UND Tor wieder.
Drücken Sie Play und ... wir sind fertig!
Andere
Dies ist nicht der effizienteste Weg, um das Level zu lösen, aber darum geht es nicht. Ich wollte die Schritte zeigen, die Sie unternehmen können, um es selbst zu lösen, damit Sie das Level verstehen und nicht nur einen „Überspringen“-Button erhalten. Dinge zu erklären ist jedoch nicht meine stärkste Fähigkeit, also wenn es etwas gibt, das noch unklar ist oder eine andere Denkweise, die es für dich zum Klicken gebracht hat, teile es bitte in den Kommentaren unten!
Dieses Level ist schwierig, weil es eines der ersten ist, bei dem Sie das Problem in Teilprobleme zerlegen müssen, ohne dass es offensichtlich ist, dass Sie es tun sollten. In der Lage zu sein, ein Problem zu betrachten und es auf die kleineren, einfacheren Unterprobleme zu reduzieren, bringt Sie in diesem Spiel weiter als jeder CS-Abschluss oder Computerhintergrund überhaupt, daher empfehle ich, dies in zukünftigen Levels zu berücksichtigen, in denen die Probleme auftreten größer und größer.
Es funktioniert auch im wirklichen Leben, aber ich bin nur hier, um beim Saving Gracefully zu helfen, Living Gracefully liegt immer noch bei Ihnen.
Das ist alles, was wir heute dafür teilen Turing abgeschlossen führen. Dieses Handbuch wurde ursprünglich erstellt und geschrieben von renwallz. Falls wir dieses Handbuch nicht aktualisieren, finden Sie das neueste Update, indem Sie diesen folgen Link.