TI-Basic (TI-84 Plus CE), 31 bytes
.5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))i^(2Ans
TI-Basic es un lenguaje tokenizado y cada token utilizado aquí es un byte, excepto remainder(
, que es dos.
Esto utiliza la versión 1 indexada.
Explicación:
Hay un patrón que se repite cada cuatro números. En la versión indexada 1, es: - (x + 1) / 2, (x + 1) / 2, - (x + 1) / 2, (x-1) / 2 para el valor de entrada x. Esto se puede representar como una función definida por partes.
f (x) = - (x + 1) / 2 si x ≡ 1 mod 4; (x + 1) / 2 si x ≡ 2 mod 4; - (x + 1) / 2 si x ≡ 3 mod 4; (x-1) / 2 si x ≡ 0 mod 4
Debido a que las partes "x ≡ 1 mod 4" y "x ≡ 3 mod 4" son las mismas, podemos combinarlas en "x ≡ 1 mod 2".
Ahora la función por partes es:
f (x) = - (x + 1) / 2 si x ≡ 1 mod 2; (x + 2) / 2 si x ≡ 2 mod 4; (x-2) / 2 si x ≡ 0 mod 4
Aquí es donde empiezo a dividirlo en comandos reales. Como el valor es positivo para los índices pares y negativo para los impares, podemos usar (-1) ^ x. Sin embargo, en TI-Basic i^(2X
(5 bytes) es más corto que(-1)^Ans
(6 bytes). Tenga en cuenta que los paréntesis son obligatorios debido al orden de las operaciones.
Ahora que tenemos la manera de negar las entradas impares, pasamos a las modificaciones (agregando la negación de nuevo más adelante). Hice el caso de una entrada impar por defecto, así que comenzamos con .5(Ans+1)
.
Para arreglar el caso de una entrada uniforme, simplemente agregue uno al número entre paréntesis, pero solo cuando x ≡ 0 mod 2. Esto podría representarse como .5(Ans+1+remainder(Ans+1,2))
o .5(Ans+1+not(remainder(Ans,2)))
, pero tienen el mismo número de bytes, por lo que no importa cuál.
Para arreglar el caso de entrada de múltiplo de 4, necesitamos restar 3 del número entre paréntesis, pero también otro 1 porque todos los múltiplos de 4 son pares, lo que sumaría uno de nuestro paso anterior, por lo que ahora tenemos .5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))
.
Ahora, simplemente agregue la parte que determina la señal hasta el final para obtener el programa completo.