Để kiểm tra xem danh sách các số nguyên không âm có được cân bằng hay không , người ta có thể tưởng tượng việc đặt các trọng số tương ứng lên một bảng và sau đó thử cân bằng bảng trên một trục sao cho các trọng số tương đối được tóm tắt bên trái và bên phải của trục đều giống nhau. Trọng lượng tương đối được cho bằng cách nhân trọng lượng với khoảng cách của nó với trục (xem luật của đòn bẩy ).
(Nguồn: wikipedia )
Hình ảnh này tương ứng với một danh sách [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
. Danh sách này được cân bằng vì 5
có khoảng cách từ 20 đến trục, 100
khoảng cách là 1 và 5*20 = 100 = 100*1
.
Ví dụ
3 1 5 7
#########
^
Trong trường hợp này pivot là trực thuộc 5
, các 3
có khoảng cách 2 và 1
và 7
có khoảng cách 1. Vì vậy, cả hai bên trái và phải của tổng trục lên đến 7
( 3*2 + 1*1
ở bên trái và 7*1
bên phải) và do đó danh sách [3, 1, 5, 7]
được cân bằng.
Tuy nhiên, lưu ý rằng trục không phải được đặt dưới một trong các thành phần danh sách, nhưng cũng có thể được đặt ở giữa hai thành phần danh sách:
6 3 1
#######
^
Trong trường hợp này khoảng cách trở thành 0.5, 1.5, 2.5, ...
và như vậy. Danh sách này cũng được cân bằng vì 6*0.5 = 3 = 3*0.5 + 1*1.5
.
Trục chỉ có thể được đặt chính xác dưới một số hoặc chính xác ở giữa giữa hai số, và không, ví dụ như ở hai phần ba giữa hai số.
Bài tập
Đưa ra một danh sách các số nguyên không âm ở bất kỳ định dạng hợp lý nào, xuất ra một truthy
giá trị nếu danh sách có thể được cân bằng và một falsy
giá trị khác.
Bạn có thể giả sử rằng danh sách đầu vào chứa ít nhất hai phần tử và ít nhất một phần tử khác không.
Đây là một thử thách golf-code , vì vậy câu trả lời với số lượng byte ít nhất trong mỗi ngôn ngữ sẽ thắng.
Thử nghiệm chân lý
[1, 0]
[3, 1, 5, 7]
[6, 3, 1]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
[10, 4, 3, 0, 2, 0, 5]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[7, 7, 7, 7]
Thử nghiệm giả
[1, 2]
[3, 6, 5, 1, 12]
[0, 0, 2, 0, 1, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[6, 3, 2, 4, 0, 1, 2, 3]
[4, 0, 0, 2, 3, 5, 2, 0, 1, 2, 3, 0, 0, 1, 2, 4, 3, 1, 3, 0, 0, 2]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
Rất nhiều thử thách liên quan được tìm thấy trong khi thử thách này được đóng hộp cát : Đó có phải là một con số cân bằng? , Chỉ số cân bằng của một chuỗi , Cân bằng một tập các trọng số trên một trò chơi bập bênh , Cân bằng các từ , tôi sẽ lật lại chứ? và trục thuộc về đâu?
You can assume that the input list contains at least two elements and that at least one element is non-zero.