{"id":8629,"date":"2019-01-22T13:19:46","date_gmt":"2019-01-22T11:19:46","guid":{"rendered":"?p=8629"},"modified":"2019-01-22T13:19:46","modified_gmt":"2019-01-22T11:19:46","slug":"multiplicador-de-senal","status":"publish","type":"post","link":"https:\/\/perdiendo.org\/museodemetralla\/?p=8629","title":{"rendered":"multiplicador de se\u00f1al"},"content":{"rendered":"<p>\t\t\t\t<img decoding=\"async\" src=\"wp-content\/uploads\/2019\/01\/2019-01-22-13_05_14-TIS-100.png\" alt=\"\" \/><\/p>\n<p>Hac\u00eda mucho tiempo que no me acercaba a <a href=\"http:\/\/www.zachtronics.com\/tis-100\/\">TIS-100<\/a>, y hace un rato, en un hueco, pens\u00e9 en entrar en alguno de los puzzles que no hab\u00eda conseguido hacer antes, lo que me llev\u00f3 a este multiplicador de se\u00f1al. Y parece que quiz\u00e1, despu\u00e9s de a\u00f1os luchando con python, con juegos como este, con pseudo c\u00f3digo, al final es posible que mi cerebro est\u00e9 aprendiendo de alg\u00fan modo. De un problema al que hace algo m\u00e1s de un a\u00f1o no consegu\u00eda encontrar ni el comienzo de una soluci\u00f3n, aunque fuera remoto, he pasado a separar rapidamente un contador, un generador de n\u00fameros y un sumador.<\/p>\n<p>Es una tonter\u00eda y no tiene ning\u00fan misterio, pero a m\u00ed me hace much\u00edsima ilusi\u00f3n haber sido capaz de plantearlo y resolverlo. Los resultados no son espectaculares pero a m\u00ed, desde luego, me bastan.<\/p>\n<p><img decoding=\"async\" src=\"wp-content\/uploads\/2019\/01\/2019-01-22-13_13_40-TIS-100.png\" alt=\"\" \/><\/p>\n<p>El nodo de arriba a la izquierda es un contador del primer factor. Comprueba que no es cero, lo manda a la derecha, le resta uno y vuelve a empezar. Cuando llega a cero manda un cero a la derecha y toma un n\u00famero nuevo de arriba. Tal y como he decidido hacerlo este factor no puede ser nunca cero, porque es el que indica las veces que tiene que sumarse el otro. Podr\u00eda ser perfectamente al rev\u00e9s, claro.<\/p>\n<pre><code># CUENTA ATRAS\nMOV UP ACC # mueve arriba a la memoria ACC\nINI: # etiqueta de salida de INI\nMOV ACC RIGHT # mueve la memor\u00eda ACC a la derecha\nJEZ OUT # si ACC es cero salta a OUT\nSUB 1 # r\u00e9stale uno a ACC\nJMP INI # salta a INI\nOUT: # nada (vuelta al inicio)\n<\/code><\/pre>\n<p>El de arriba a la derecha almacena el otro factor, verifica que lo que ha recibido a la izquierda no es cero y manda el n\u00famero hacia abajo, y vuelve a hacerlo una y otra vez hasta que la izquierda le manda un cero. Cuando es un cero manda abajo un -1. El primer factor no puede ser cero pero este s\u00ed, y en caso de serlo mandar\u00e1 ceros hacia abajo hasta encontrarse con un cero en el nodo izquierdo, as\u00ed que la se\u00f1al de aviso de cambio no puede ser otro cero. En el ejercicio s\u00f3lo se multiplican n\u00fameros positivos.<\/p>\n<pre><code># ENVIA N ABAJO\nMOV UP ACC # mueve arriba a ACC\nINI: SAV # etiqueta de salida de INI, guarda ACC en BAK\nMOV LEFT ACC # mueve la izquierda a ACC\nJEZ OUT # si ACC es cero vete a OUT\nSWP # intercambia BAK con ACC\nMOV ACC DOWN # mueve ACC abajo\nJMP INI # salta a ini\nOUT: MOV -1 DOWN # salida de OUT, mueve -1 abajo\n<\/code><\/pre>\n<p>El de abajo a la izquierda es s\u00f3lo un buffer que seguro que podr\u00eda quitar, simplemente recoge lo que tiene a la derecha y lo vuelve a colocar disponible para el nodo de la derecha.<\/p>\n<pre><code># ALMACEN\nMOV RIGHT RIGHT # mueve derecha a la derecha\n<\/code><\/pre>\n<p>El de abajo a la derecha va a sumar los n\u00fameros que manda el de arriba hasta que reciba la se\u00f1al de empezar de cero, utilizando el nodo de la izquierda como almac\u00e9n, y en ese momento manda el resultado final de la suma abajo. Este nodo (bueno, todos, pero este especialmente) seguro que se puede hacer de un modo mejor. Tienes dos sitios donde almacenar un n\u00famero, ACC y BAK, pero la \u00fanica forma de interactuar con BAK es ejecutar el comando SAV, que copia ACC en ella, y el comando SWP, que intercambia los valores de ambas, por eso tengo que utilizar LEFT. Coloco un cero en left al empezar para no tener que dividir el c\u00f3digo entre el primer n\u00famero de una secuencia y los dem\u00e1s.<\/p>\n<pre><code># SUMA NUMEROS\nMOV 0 LEFT # mueve cero a la izquierda\nINI:MOV UP ACC # destino de INI, mueve arriba a ACC\nJLZ OUT # si ACC es menor que cero vete a OUT\nADD LEFT # suma izquierda a ACC\nMOV ACC LEFT # mueve ACC a la izquierda\nJMP INI # salta a INI\nOUT:MOV LEFT DOWN # mueve izquierda abajo.\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Hac\u00eda mucho tiempo que no me acercaba a TIS-100, y hace un rato, en un hueco, pens\u00e9 en entrar en alguno de los puzzles que no hab\u00eda conseguido hacer antes, lo que me llev\u00f3 a este multiplicador de se\u00f1al. Y parece que quiz\u00e1, despu\u00e9s de a\u00f1os luchando con python, con juegos como este, con pseudo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[47],"tags":[],"class_list":["post-8629","post","type-post","status-publish","format-standard","hentry","category-zatchtronics"],"_links":{"self":[{"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/posts\/8629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8629"}],"version-history":[{"count":0,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=\/wp\/v2\/posts\/8629\/revisions"}],"wp:attachment":[{"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perdiendo.org\/museodemetralla\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}