JavaScript / Cubix, 36 byte
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)
Thử nó!
Chức năng JavaScript có thể được kiểm tra bằng đoạn mã bên dưới, chương trình Cubix có thể được kiểm tra tại đây .
Cái này hoạt động ra sao?
JavaScript
Dòng đầu tiên là một nhận xét dòng cho JavaScript, vì nó bắt đầu bằng hai dấu gạch chéo, do đó JavaScript chỉ nhìn thấy dòng dưới cùng ( a=>eval(a.join`-`)
), lấy một mảng làm đầu vào, nối nó với các dấu trừ ở giữa và sau đó chạy dưới dạng mã, dẫn đến phép trừ của tất cả các phần tử trong mảng.
let f=
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)
console.log(f([1,2,3,4,5]))
console.log(f([3,1,4,1,5]))
Đàn con
Cubix nhìn thấy khối lập phương sau (chú ý rằng Cubix bỏ qua tất cả các khoảng trắng):
/ / .
! v +
u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
. . .
. . .
. . .
Sự bắt đầu
IP bắt đầu trên dòng thứ ba, chỉ về phía đông. Nó nhấn 'I'
lệnh, lấy một số từ đầu vào và đẩy nó vào ngăn xếp. Sau đó, nó được chuyển hướng bằng cách '^'
vào vòng lặp tổng.
Vòng lặp tổng
Tôi đã xóa tất cả các ký tự không phải là một phần của vòng lặp tổng và thay thế chúng bằng no-ops ( '.'
). IP ban đầu đến trên dòng thứ hai, chỉ về phía đông.
. . .
! v +
u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
Đầu tiên, '!'
lệnh kiểm tra phần tử trên cùng. Nếu đó là 0
(tức là chúng ta đã đạt đến cuối của đầu vào), lệnh tiếp theo ( 'v'
) được thực thi, phản ánh IP ra khỏi vòng lặp. Nếu chúng ta chưa đạt đến cuối của đầu vào, chúng ta sẽ thêm hai mục trên cùng với nhau ( '+'
, mục thứ hai là tổng của điểm đó, mục trên cùng là đầu vào mới). Sau đó, IP kết thúc sang một mặt khác của khối, vào'u'
ký tự, khiến IP thực hiện quay đầu và thực hiện 'I'
lệnh (đọc một số nguyên đầu vào khác), trong khi chỉ về phía bắc. IP kết thúc trở lại mặt trên, bỏ qua ( '$'
) hướng dẫn xóa ( ';'
) và thực hiện lần lượt khác, quay lại điểm mà chúng tôi đã bắt đầu.
Kết thúc
Nếu IP được phản ánh ra khỏi vòng lặp, các ký tự sau sẽ được thực thi:
. . .
. v .
. ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
Các hướng dẫn này xóa phần tử trên cùng (bằng 0), sau đó xuất phần tử trên cùng (tổng) thành số nguyên. Sau đó '@'
lệnh được đạt tới, vì vậy chương trình kết thúc.