Bạn có một đồng tiền sản xuất 0
hoặc 1
. Nhưng bạn nghi ngờ đồng xu có thể bị sai lệch , có nghĩa là xác suất 0
(hoặc 1
) không nhất thiết là 1/2.
Một thủ tục nổi tiếng để "biến đổi" một đồng xu thiên vị thành một đồng tiền công bằng (nghĩa là để có được kết quả có khả năng như nhau), như đề xuất của von Neumann, như sau. Sản xuất các khối (không chồng lấp) của hai lần tung đồng xu cho đến khi hai giá trị của một khối khác nhau; và xuất giá trị đầu tiên trong khối đó (giá trị thứ hai cũng sẽ làm được, nhưng với mục đích của thử thách này, chúng tôi chọn giá trị đầu tiên). Bằng trực giác, 1
có thể có nhiều khả năng hơn 0
, nhưng 01
và 10
sẽ đều có khả năng.
Ví dụ: đầu vào 1110...
sẽ loại bỏ khối đầu tiên, sau đó tạo 1
khối từ khối thứ hai, ...
Thủ tục này rất tốn kém , vì một số lần tung đồng xu được tiêu thụ để tạo ra một kết quả duy nhất.
Các thách thức
Thực hiện một chuỗi hữu hạn các số 0 và số 0, đại diện cho việc tung đồng xu ban đầu và tạo ra số lượng kết quả tối đa theo quy trình trên, cho đến khi tất cả đầu vào được tiêu thụ.
Khối cuối cùng có thể không đầy đủ, nếu số lượng giá trị đầu vào là số lẻ. Ví dụ, chuỗi đầu vào 11111
sẽ không tạo ra kết quả (hai khối đầu tiên có giá trị bằng nhau và khối thứ ba không đầy đủ).
Quy tắc
Đầu vào có thể có bất kỳ số lượng giá trị không âm, không nhất thiết là dương hoặc chẵn.
Định dạng đầu vào có thể là:
- một mảng số không và số không;
- một chuỗi các số không và các số có dấu phân cách tùy chọn.
Định dạng đầu ra có thể là:
- một chuỗi số không và số không, có hoặc không có dấu phân cách;
- một mảng số không và số không;
- các chuỗi chứa một số 0 hoặc một, được phân tách bằng các dòng mới;
- bất kỳ định dạng tương tự, hợp lý phù hợp với ngôn ngữ của bạn.
Mã golf. Ít byte nhất sẽ thắng.
Các trường hợp thử nghiệm
Đầu vào và đầu ra ở đây được coi là chuỗi.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'