Aceto , 19 17 bytes no competitivos
Nueva versión (17 bytes):
Esta nueva versión toma los caracteres de uno en uno y se ejecuta mejor con la -F
opción. Funciona de manera similar, pero no idéntica a la solución anterior:
>,
Op0
p|1u
,ip^
Respuesta anterior (19 bytes):
(No compite porque tuve que corregir dos errores en el intérprete)
|p1u
iOp<
|!`X
rd!r
Diría que esta es la primera respuesta de Aceto que resalta lo que puede hacer relativamente bien. Las "listas" son flujos de entrada, con una entrada por línea, "1" para verdadero y "0" para falso, con una cadena vacía que significa el final de la lista.
Los programas de Aceto se ejecutan en una curva de Hilbert, comenzando en la parte inferior izquierda y terminando en la parte inferior derecha. Primero, r
colocamos una cadena, la d
duplicamos y la negamos ( !
), convirtiendo las cadenas vacías en Verdadero, todo lo demás en Falso. Luego hay un espejo horizontal condicional ( |
): si el elemento superior de la pila es verdadero, refleje horizontalmente. Esto sucede cuando la cadena estaba vacía. Si hacemos el reflejo, aterrizamos en el X
, que mata al intérprete.
De lo contrario, convertimos la copia restante en la pila a un i
nteger y hacemos otro espejo horizontal condicional: esta vez, debido a que 1 es verdadero y 0 es falso, reflejamos si vemos el (primer) valor verdadero. Si no reflejamos (entonces vimos un 0), p
desciframos lo que está en la pila (ya que la pila está vacía, un cero) y O
saltamos al rigin de la curva, donde comenzamos, comenzando todo el proceso nuevamente.
De lo contrario, cuando vimos un 1, reflejamos y aterrizamos en el u
, que invierte la dirección en que nos movemos en la curva de Hilbert. 1p
imprime un 1, y ahora continuamos de la misma manera O
que hubiéramos ido si hubiéramos visto un 0, pero dado que estamos en "modo inverso", nuestro origen está en la parte inferior derecha , así que saltamos allí.
Ahora r
colocamos otra cuerda y la negamos. Si la cadena estaba vacía, y por lo tanto el elemento de la pila superior es Truthy, `
será no escapar el comando siguiente ( X
), lo que nos dejamos.
En caso contrario (si la cadena no estaba vacía), que sí escapar del X
e ignorarlo. En ese caso, vamos a la izquierda ( <
), p
rint 0 (porque la pila está vacía) y volvemos al O
rigin.