Bối cảnh
Straw Poll là một trang web dành cho việc tạo ra các cuộc thăm dò đơn giản / không chính thức. Được cung cấp một danh sách các tùy chọn, người dùng có thể chọn (các) lựa chọn của họ và số phiếu được kiểm tra. Có hai đặc điểm rất quan trọng của Cuộc thăm dò rơm:
- Có thể xem kết quả hiện tại trước khi bỏ phiếu
- Thường có thể chọn nhiều tùy chọn, được xử lý theo cùng một cách như thể bạn đã bỏ phiếu nhiều lần, một cho mỗi tùy chọn.
Một điều thú vị hơn là làm Straw Polls là kết quả lộn xộn. Có hai loại gián đoạn chính:
- Sự gián đoạn đơn giản, trong đó bạn bỏ phiếu cho tất cả các tùy chọn
- Sự gián đoạn nâng cao, trong đó bạn có chiến lược chọn các tùy chọn để bỏ phiếu để tối đa hóa hiệu quả.
Trong thử thách này, bạn sẽ viết một chương trình cho sự gián đoạn nâng cao .
Toán
Nói một cách đơn giản về mặt toán học, chúng ta có thể nói rằng entropy của phiếu bầu càng cao, cuộc thăm dò càng bị phá vỡ. Điều này có nghĩa là một cuộc thăm dò trong đó một lựa chọn duy nhất có tất cả các phiếu bầu không bị phá vỡ, trong khi một cuộc thăm dò trong đó mọi lựa chọn có số phiếu bằng nhau đều bị phá vỡ tối đa (đây là mục tiêu cuối cùng).
Entropy của một danh sách các số [x1, x2, ..., xn]
được đưa ra bởi phương trình sau từ wikipedia. P(xi)
là xác suất của xi
, đó là xi / total_num_of_votes
. Nếu một tùy chọn đã nhận được 0 phiếu cho đến nay, thì đơn giản là nó không được bao gồm trong tổng kết (để tránh log(0)
). Đối với mục đích của chúng tôi, logarit có thể nằm trong bất kỳ cơ sở nào bạn chọn.
Ví dụ, entropy của [3,2,1,1]
xấp xỉ 1.277
, sử dụng cơ sở e .
Bước tiếp theo là xác định mô hình bỏ phiếu nào dẫn đến sự gia tăng lớn nhất của entropy. Tôi có thể bỏ phiếu cho bất kỳ tập hợp con các tùy chọn, vì vậy, ví dụ như phiếu bầu của tôi có thể [1,0,1,0]
. Nếu đây là phiếu bầu của tôi, thì cuộc kiểm đếm cuối cùng là [4,2,2,1]
. Tính toán lại entropy đưa ra 1.273
, làm giảm entropy, có nghĩa đây là một nỗ lực khủng khiếp để phá vỡ. Dưới đây là một số tùy chọn khác:
don't vote
[3,2,1,1] -> 1.277
vote for everything
[4,3,2,2] -> 1.342
vote for the 1s
[3,2,2,2] -> 1.369
vote for the 2 and 1s
[3,3,2,2] -> 1.366
Từ điều này, chúng ta có thể kết luận rằng mô hình bỏ phiếu tối ưu là [0,0,1,1]
vì nó mang lại sự gia tăng lớn nhất về entropy.
Đầu vào
Đầu vào là một danh sách không trống của các số nguyên không tăng, không âm. Ví dụ như [3,3,2,1,0,0]
, [123,23,1]
hoặc thậm chí [4]
. Bất kỳ định dạng hợp lý đều được phép.
Đầu ra
Đầu ra là một danh sách (cùng độ dài với đầu vào) của các giá trị trung thực và falsey, trong đó các sự thật đại diện cho các tùy chọn mà tôi nên bỏ phiếu nếu tôi muốn gây ra sự gián đoạn tối đa. Nếu có nhiều mẫu biểu quyết cho cùng một kiểu entropy, thì một mẫu có thể là đầu ra.
Tiêu chí chiến thắng
Đây là mã golf, ít byte hơn là tốt hơn.
Các trường hợp thử nghiệm
[3,2,1,1] -> [0,0,1,1] (from 1.227 to 1.369)
[3,3,2,1,0,0] -> [0,0,0,1,1,1] (from 1.311 to 1.705)
[123,23,1] -> [0,1,1] (from 0.473 to 0.510)
[4] -> [0] OR [1] (from 0 to 0)
[7,7,6,6,5] -> [0,0,1,1,1] (from 1.602 to 1.608)
[100,50,1,1] -> [0,1,1,1] (from 0.707 to 0.761)