Turing Complete: Salvataggio con grazia con la guida ai circuiti di ritardo

Una guida dettagliata di uno dei livelli più difficili da grep di Turing Complete.

 

Passaggio 1: cosa dobbiamo fare?

Secondo il nostro amico alieno dal naso lungo, stiamo costruendo un circuito in grado di salvare un valore e produrre qualsiasi valore attualmente salvato.

Scomponendolo un po' di più, ci sono alcune attività diverse che in realtà siamo tenuti a svolgere qui. Innanzitutto, dobbiamo in qualche modo salvare un valore per sempre. In secondo luogo, se il bit "save" (l'input in alto) è attivo, è necessario sostituire tutto ciò che è "salvato" con il valore nel bit in basso.

Quella seconda parte sembra complicata, ma iniziamo con la prima e vediamo come possiamo costruirci sopra.

Passaggio 2: supponiamo che il salvataggio sia disattivato (e risolviamo un problema che abbiamo già risolto)

Ricordi le zecche dispari? In quel problema stavamo emettendo un MENO e poi usando a NON per “salvare” an on, e poi nel segno di spunta successivo facendo la stessa cosa ma con valori opposti. Sembra complicato, quindi usiamo un'immagine.


In questo caso, stavamo essenzialmente salvando il risultato del NON del valore dell'ultimo tick. Un modo di pensare a questo è che stiamo emettendo tutto ciò che è nel circuito di ritardoe mettendo l'output che vogliamo per il prossimo segno di spunta in circuito di ritardo. Quindi il modo più ovvio per salvare un valore qui sarebbe semplicemente tornare indietro su se stesso. Proviamo quello.


Ottimo, ora abbiamo un ciclo di salvataggio. Qualunque cosa venga emessa dal circuito di ritardo ci ritroveremo e saremo d'oro. Per semplicità, mi riferirò a qualsiasi input che stiamo inviando al circuito di ritardo come "salvataggio" dell'input.

Possiamo testarlo? Di sicuro, è una buona idea. Eseguendo per MENO funziona (fino a quando i test seguenti non falliscono, ma possiamo vedere che non c'è motivo per cui giri improvvisamente on ed emette un on segnale). Lanciamo un on generatore e assicurati che salvi un on.


Ovviamente non sarebbe così facile :/ Niente di amichevole OR non posso aggiustare.


Va meglio! Conosco il On ce la farebbe on a prescindere, ma spero che tu possa vedere anche se potessimo prenderlo on via, l'ingresso in basso al OR lo manterrebbe per sempre.

Infatti, nei casi in cui il salva input is MENO, questo è esattamente il comportamento che vogliamo! O in un altro modo di esprimerlo, Se il Salva input is MENO E altre ancora…  il valore salvato è on, quindi inviare un on Vai all’email  circuito di ritardoo se il file Salva input is MENO E altre ancora…  il valore salvato è MENO, produrre un MENO. Possiamo semplificarlo un po'; se la Salva input is MENO, quindi invia tutto ciò che è in circuito di ritardo torna su se stesso, in modo da poterlo emettere al prossimo tick.

Facciamo una tabella della verità (quelle cose nei livelli precedenti che mostrano quale dovrebbe essere l'output per determinati input).

Salva input
Ingresso loop salvato
Uscita

Ti incoraggio a provare a costruirlo da solo, ma ecco come potrebbe apparire:


Qui sto usando l'arancione per indicare il nostro ciclo di salvataggio e l'azzurro per mostrare il nostro salva input. Ti consiglio di prendere l'abitudine di colorare i fili in gruppi logici come questo, sarai felice di averlo fatto nei livelli successivi 🙂

Passaggio 3: Ok, aggiungiamo la possibilità di modificare ciò che salviamo

Tesoro, abbiamo risolto metà del problema. Ora dobbiamo solo capire come ignorare tutto ciò che abbiamo salvato quando il salva input is on, e invece salva tutto ciò che è in input di valore. Sembra difficile, ma iniziamo a giocare.


Bene, in realtà, guardando di nuovo il nostro circuito, abbiamo risolto più della metà del problema! Se la salva input is on, Allora l' E assicurerà che tutto ciò che abbiamo salvato sia impostato MENO. In questo caso, tutto ciò che dobbiamo fare è prendere il valore da input di valore e scrivilo al circuito di ritardo.


Ahh, siamo così vicini, ma c'è un errore qui. Stiamo salvando il valore del input di valore, anche quando il salva input non è impostato. Vogliamo salvare quel valore solo se il salva input è attivo, quindi usiamo di nuovo un po' di logica per capire come.

Salva input
Input di valore
Uscita

Guardando indietro alla nostra logica di salvataggio, volevamo il valore salvato se il salva input Prima MENO. Qui vogliamo il input di valore, Se l' salva input is on. Sembra molto simile, quindi proviamo un cancello di nuovo.


Premi play e... abbiamo finito!

Altro

Questo non è il modo più efficiente per risolvere il livello, ma non è questo il punto. Volevo mostrare i passaggi che puoi fare per risolverlo da solo, in modo che tu possa capire il livello e non solo ottenere un pulsante "salta". Spiegare le cose non è però la mia abilità più forte, quindi se c'è qualcosa che non è ancora chiaro o un modo diverso di pensare che lo ha fatto scattare per te, condividi i commenti qui sotto!

Questo livello è difficile perché è uno dei primi che richiede di scomporre il problema in sottoproblemi senza rendere ovvio che dovresti. Essere in grado di esaminare un problema e semplificarlo fino ai sottoproblemi più piccoli e più facili ti porterà più lontano in questo gioco rispetto a qualsiasi laurea in CS o background informatico, quindi ti consiglio di tenerlo a mente nei livelli futuri in cui i problemi diventano più grandi e più grande.

By Rinwallz

1 pensiero su "Turing Complete: salvare con grazia con la guida ai circuiti di ritardo"

  1. OH MIO DIO! Questa soluzione è così sofisticata e soddisfacente. Grazie mille. Mi ha aiutato molto a superare questo livello. Pollice su!

    Rispondi

Lascia un tuo commento

ArabicEnglishFrenchGermanItalianJapaneseKoreanPortugueseSpanish