Turing Complete: Guardar con gracia con la guía de circuitos de retardo

Un tutorial de uno de los niveles más difíciles de grep de Turing Complete.

 

Paso 1: ¿Qué tenemos que hacer?

De acuerdo con nuestro amigo alienígena de nariz larga, estamos construyendo un circuito que puede guardar un valor y generar cualquier valor guardado actualmente.

Desglosando eso un poco más, hay algunas tareas diferentes que realmente debemos hacer aquí. Primero, necesitamos de alguna manera guardar un valor para siempre. En segundo lugar, si el bit "guardar" (la entrada superior) está activado, entonces debemos reemplazar lo que esté "guardado" con el valor en el bit inferior.

Esa segunda parte suena complicada, pero comencemos con la primera y veamos cómo podemos construir a partir de eso.

Paso 2: supongamos que Guardar está desactivado (y resolvamos un problema que hemos resuelto antes)

¿Recuerdas las garrapatas impares? En ese problema estábamos dando salida a un off y luego usando un NO para "salvar" un on, y luego en el siguiente tick haciendo lo mismo pero con valores opuestos. Eso suena complicado, así que usemos una imagen.


En este caso, básicamente estábamos guardando el resultado de la NO del valor del último tick. Una forma de pensar en esto es que estamos generando lo que sea que esté en el circuito de retardo, y colocando la salida que queremos para el siguiente tick en el circuito de retardo. Entonces, la forma obvia de guardar un valor aquí sería simplemente retroceder sobre sí mismo. Probemos eso.


Genial, ahora tenemos un ciclo de guardado. Cualquiera que sea la salida del circuito de retardo será retroalimentado y seremos dorados. En aras de la simplicidad, me referiré a cualquier entrada que estemos enviando al circuito de retardo como "guardar" la entrada.

¿Podemos probar esto? Seguro que es una buena idea. ejecutándolo por off funciona (hasta que fallan las pruebas a continuación, pero podemos ver que no hay razón para que se vuelva repentinamente on y generar un on señal). vamos a lanzar un on generador y asegúrese de que ahorra un on.


Claro que no sería tan fácil :/ Nada un amistoso OR no se puede arreglar.


¡Eso es mejor! Sé que el On lo haría on independientemente, pero espero que puedas ver incluso si pudiéramos tomar eso on de distancia, la entrada inferior a la OR lo mantendría para siempre.

De hecho, en los casos en que el guardar entrada is off, ¡este es exactamente el comportamiento que queremos! O dicho de otro modo, si el Guardar entrada is off Y  el valor guardado es on, luego envía un on En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”. circuito de retardoo si el Guardar entrada is off Y  el valor guardado es off, generar un off. Podemos simplificar eso un poco; Si el Guardar entrada is off, luego envíe lo que esté en el circuito de retardo vuelve a sí mismo, para que podamos generarlo en el siguiente tick.

Hagamos una tabla de verdad (esas cosas en los niveles anteriores que muestran cuál debería ser la salida para las entradas dadas).

Guardar entrada
Entrada de bucle guardada
Salida

Te animo a que intentes construirlo tú mismo, pero así es como se vería:


Aquí estoy usando naranja para indicar nuestro ciclo de guardado y azul claro para mostrar nuestro guardar entrada. Recomiendo adquirir el hábito de colorear los cables en grupos lógicos como este, te alegrarás de haberlo hecho en los niveles posteriores 🙂

Paso 3: Ok, agreguemos la capacidad de cambiar lo que guardamos

Cariño, tenemos la mitad del problema resuelto. Ahora solo tenemos que descubrir cómo ignorar lo que hayamos guardado cuando el guardar entrada is on, y en su lugar guarde lo que esté en el entrada de valor. Eso suena difícil, pero comencemos a jugar.


Bueno, en realidad, mirando nuestro circuito nuevamente, ¡tenemos más de la mitad del problema resuelto! Si el guardar entrada is on, Entonces el E se asegurará de que todo lo que hayamos guardado se establezca en off. En este caso, todo lo que tenemos que hacer es tomar el valor del entrada de valor y escríbelo al circuito de retardo.


Ahh, estamos tan cerca, pero aquí hay un error. Estamos ahorrando el valor de la entrada de valor, incluso cuando el guardar entrada no está configurado. Sólo queremos guardar ese valor si el guardar entrada está activado, así que usemos algo de lógica nuevamente para averiguar cómo.

Guardar entrada
Entrada de valor
Salida

Mirando hacia atrás en nuestra lógica de guardado, queríamos el valor guardado si el guardar entrada fue off. Aquí queremos el entrada de valor, Si el guardar entrada is on. Eso suena notablemente similar, así que intentemos una puerta de nuevo.


Dale al play y... ¡hemos terminado!

Outro

Esta no es la forma más eficiente de resolver el nivel, pero ese no es el punto. Quería mostrar los pasos que puede seguir para resolverlo usted mismo, para que pueda comprender el nivel y no solo obtener un botón de "saltar". Sin embargo, explicar las cosas no es mi habilidad más fuerte, así que si hay algo que aún no está claro, o una forma diferente de pensar que lo hizo clic para usted, ¡compártalo en los comentarios a continuación!

Este nivel es difícil porque es uno de los primeros que requiere que dividas el problema en subproblemas sin que sea obvio que debes hacerlo. Ser capaz de ver un problema y simplificarlo a los subproblemas más pequeños y fáciles te llevará más lejos en este juego que cualquier título de CS o experiencia informática, por lo que recomiendo tenerlo en cuenta en los niveles futuros donde los problemas se vuelven más grandes. y más grande

By Renwallz

1 pensamiento sobre "Turing completo: guardar con gracia con la guía de circuitos de retardo"

Deja un comentario

ArabicEnglishFrenchGermanItalianJapaneseKoreanPortugueseSpanish