Masz monetę, która produkuje 0
lub 1
. Ale podejrzewasz, że moneta może być stronnicza , co oznacza, że prawdopodobieństwo 0
(lub 1
) niekoniecznie wynosi 1/2.
Dobrze znana procedura „przekształcić” tendencyjnego monety do sprawiedliwego monety (czyli uzyskanie równie prawdopodobnych wyników), w wersji zaproponowanej przez von Neumanna, jest następująca. Wytwarzaj (nie zachodzące na siebie) bloki dwóch rzutów monetą, aż dwie wartości bloku będą się różnić; i wypisz pierwszą wartość w tym bloku (druga wartość też by zrobiła, ale dla celów tego wyzwania wybieramy pierwszą). Intuicyjnie 1
może być bardziej prawdopodobne 0
, ale 01
i 10
równie prawdopodobne.
Na przykład dane wejściowe 1110...
odrzuciłyby pierwszy blok, a następnie wygenerowałyby 1
z drugiego bloku, ...
Ta procedura jest droga , ponieważ do wygenerowania jednego wyniku zużywa się kilka rzutów monetą.
Wyzwanie
Weź skończoną sekwencję zer i jedynek, reprezentujących rzuty oryginalnej monety, i uzyskaj maksymalną liczbę wyników zgodnie z powyższą procedurą, aż do wyczerpania całego wkładu.
Ostatni blok może być niekompletny, jeśli liczba wartości wejściowych jest nieparzysta. Na przykład sekwencja wejściowa 11111
nie dałaby rezultatu (pierwsze dwa bloki mają równe wartości, a trzeci blok jest niekompletny).
Zasady
Dane wejściowe mogą mieć dowolną nieujemną liczbę wartości, niekoniecznie dodatnią, a nawet parzystą.
Format wejściowy może być:
- tablica zer i jedynek;
- ciąg zer i jedynek z opcjonalnym separatorem.
Format wyjściowy może być:
- ciąg zer i jedynek, z separatorami lub bez;
- tablica zer i jedynek;
- ciągi zawierające pojedyncze zero lub jeden, oddzielone znakami nowej linii;
- każdy podobny, rozsądny format, który pasuje do twojego języka.
Kod golfa. Wygrywa najmniej bajtów.
Przypadki testowe
Zakłada się, że dane wejściowe i wyjściowe są ciągami.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'