У вас есть монета, которая производит 0
или 1
. Но вы подозреваете, что монета может быть предвзятой , то есть вероятность 0
(или 1
) не обязательно равна 1/2.
Хорошо известна процедура «преобразования» Необъективное монету в справедливой монеты (т.е. для получения результатов с равной вероятностью), как это было предложено фон Неймана, состоит в следующем. Производить (не перекрывающиеся) блоки двух бросков монет, пока два значения блока не будут различаться; и вывести первое значение в этом блоке (второе значение также подойдет, но для целей этой задачи мы выбираем первое). Интуитивно, 1
может быть, более вероятно, чем 0
, но 01
и 10
будет одинаково вероятным.
Например, входные данные 1110...
отбрасывают первый блок, а затем производят 1
из второго блока ...
Эта процедура дорогая , потому что несколько монетных монет потребляются для получения одного результата.
Соревнование
Возьмите конечную последовательность нулей и единиц, представляющих броски исходной монеты, и выведите максимальное количество результатов в соответствии с описанной выше процедурой, пока не будут использованы все входные данные.
Последний блок может быть неполным, если количество входных значений нечетное. Например, входная последовательность 11111
не даст результата (первые два блока имеют одинаковые значения, а третий блок не завершен).
правила
Вход может иметь любое неотрицательное количество значений, не обязательно положительное или четное.
Формат ввода может быть:
- массив нулей и единиц;
- строка нулей и единиц с необязательным разделителем.
Выходной формат может быть:
- строка нулей и единиц с разделителями или без них;
- массив нулей и единиц;
- строки, содержащие один ноль или единицу, разделенные символом новой строки;
- любой подобный, разумный формат, который подходит вашему языку.
Код гольф. Побеждает несколько байтов.
Контрольные примеры
Вход и выход здесь предполагаются как строки.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'