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)
Ricordate Odd Ticks? In quel problema stavamo emettendo un segnale di spegnimento e poi usando un'istruzione NOT per "salvare" un segnale di accensione , e poi nel tick successivo facevamo 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? Certo, è un'ottima idea. Farlo funzionare per spento funziona (fino a quando i test seguenti falliscono, ma possiamo vedere che non c'è motivo per cui debba accendersi improvvisamente ed emettere un segnale di accensione ). Aggiungiamo un generatore di accensione e assicuriamoci che salvi un segnale di accensione.

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 ai 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).
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
Perfetto, metà del problema è risolto. Ora dobbiamo solo capire come ignorare qualsiasi valore salvato quando il pulsante di salvataggio è attivo e salvare invece il valore inserito nel campo apposito . Sembra difficile, ma iniziamo a sperimentare.

Bene, in realtà, guardando di nuovo il nostro circuito, abbiamo risolto più della metà del problema! Se la salva input is on, Allora l' and 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.
Ripensando alla nostra logica di salvataggio, volevamo il valore salvato se l' input di salvataggio era disattivato . Qui vogliamo il valore inserito se l' input di salvataggio è attivato . Sembra incredibilmente simile, quindi proviamo di nuovo con una porta AND .

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.
Di Renwallz
OH MIO DIO! Questa soluzione è così sofisticata e soddisfacente. Grazie mille. Mi ha aiutato molto a superare questo livello. Pollice su!