Estos primeros programas que presento son transposiciones de código que poseo en un dialecto de BASIC llamado Yabasic 2.763. Y uno de los primeros que pasé a reda4 fué el clásico problema de las 100 puertas. Su enunciado es el siguiente:
Existen 100 puertas puestas en fila que, inicialmente, están cerradas. Se recorren todas secuencialmente 100 veces, abriendo las que estén cerradas y cerrando las que estén abiertas. La primera vez empezamos a partir de la puerta 1. La segunda vez, a partir de la 2, y así sucesivamente. La cuestión es averiguar qué puertas quedarán abiertas y cuales cerradas al finalizar.
Estas son las dos soluciones que presento:
^r4/lib/gui.txt
|: cls 1 1 1 ( 100 <=? )( dup "La puerta %d esta " print over <?
| ( "cerrada, " print )( "ABIERTA, " print rot 1+ rot drop dup dup * rot ) 1+
| dup 3 mod 0? ( cr ) drop ) 3drop waitkey waitkey ;
| === Version optimizada ===
:doors 1 ( 2dup dup * >=? )( drop dup dup * "%d" print cr 1+ ) 2drop ;
: cls 100 doors waitkey waitkey ;
Si existen formas más sencillas de hacerlo me gustaría saberlo.