TI-Basic (TI-84 Plus CE), 31 byte
.5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))i^(2Ans
TI-Basic là ngôn ngữ được mã hóa và mỗi mã thông báo được sử dụng ở đây là một byte, ngoại trừ remainder(
, là hai.
Điều này sử dụng phiên bản 1 chỉ mục.
Giải trình:
Có một mô hình lặp lại cứ sau bốn số. Trong phiên bản 1 chỉ mục, đó là: - (x + 1) / 2, (x + 1) / 2, - (x + 1) / 2, (x-1) / 2 cho giá trị đầu vào x. Điều này có thể được biểu diễn dưới dạng hàm xác định từng phần.
f (x) = - (x + 1) / 2 nếu x ≡ 1 mod 4; (x + 1) / 2 nếu x ≡ 2 mod 4; - (x + 1) / 2 nếu x ≡ 3 mod 4; (x - 1) / 2 nếu x ≡ 0 mod 4
Vì các phần "x ≡ 1 mod 4" và "x ≡ 3 mod 4" giống nhau, chúng ta có thể kết hợp chúng thành "x ≡ 1 mod 2".
Bây giờ chức năng piecewise là:
f (x) = - (x + 1) / 2 nếu x ≡ 1 mod 2; (x + 2) / 2 nếu x ≡ 2 mod 4; (x-2) / 2 nếu x ≡ 0 mod 4
Đây là nơi tôi bắt đầu chia nó thành các lệnh thực tế. Vì giá trị là dương đối với các chỉ số chẵn và âm đối với các số lẻ, nên chúng ta có thể sử dụng (-1) ^ x. Tuy nhiên, trong TI-Basic i^(2X
(5 byte) ngắn hơn(-1)^Ans
(6 byte). Lưu ý rằng dấu ngoặc đơn là bắt buộc do thứ tự của các hoạt động.
Bây giờ chúng ta có cách để loại bỏ các đầu vào lẻ ra khỏi đường đi, chúng ta chuyển sang các mod (thêm phần phủ định trở lại sau). Tôi đã làm cho trường hợp của một đầu vào lẻ là mặc định, vì vậy chúng tôi bắt đầu với .5(Ans+1)
.
Để khắc phục trường hợp nhập chẵn, chỉ cần thêm một vào số trong ngoặc đơn, nhưng chỉ khi x ≡ 0 mod 2. Điều này có thể được biểu diễn dưới dạng .5(Ans+1+remainder(Ans+1,2))
hoặc .5(Ans+1+not(remainder(Ans,2)))
, nhưng chúng có cùng số byte, vì vậy nó không thành vấn đề.
Để khắc phục trường hợp đầu vào nhiều 4, chúng ta cần trừ 3 từ số trong ngoặc đơn, nhưng cũng là 1 vì tất cả bội số của 4 đều chẵn, sẽ thêm một từ bước trước, vì vậy chúng ta hiện có .5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))
.
Bây giờ, chỉ cần giải quyết phần xác định dấu hiệu cho đến hết để có được chương trình đầy đủ.