Você tem uma moeda que produz 0
ou 1
. Mas você suspeita que a moeda possa estar enviesada , o que significa que a probabilidade de 0
(ou 1
) não é necessariamente 1/2.
Um procedimento bem conhecido para "transformar" uma moeda tendenciosa em uma moeda justa (ou seja, para obter resultados igualmente prováveis), como proposto por von Neumann, é o seguinte. Produza blocos (sem sobreposição) de dois lançamentos de moedas até que os dois valores de um bloco sejam diferentes; e gera o primeiro valor nesse bloco (o segundo valor também funcionaria, mas, para os propósitos desse desafio, escolhemos o primeiro). Intuitivamente, 1
pode ser mais provável que 0
, mas 01
e 10
será igualmente provável.
Por exemplo, a entrada 1110...
descartaria o primeiro bloco e produziria um a 1
partir do segundo bloco, ...
Esse procedimento é caro , porque vários sorteios são consumidos para gerar um único resultado.
O desafio
Pegue uma sequência finita de zeros e uns, representando lançamentos da moeda original, e produza o número máximo de resultados de acordo com o procedimento acima, até que toda a entrada seja consumida.
O último bloco pode estar incompleto, se o número de valores de entrada for ímpar. Por exemplo, a sequência de entrada 11111
não produziria resultado (os dois primeiros blocos têm valores iguais e o terceiro bloco está incompleto).
Regras
A entrada pode ter qualquer número não negativo de valores, não necessariamente positivo ou uniforme.
O formato de entrada pode ser:
- uma matriz de zeros e uns;
- uma sequência de zeros e outros com um separador opcional.
O formato de saída pode ser:
- uma sequência de zeros e uns, com ou sem separadores;
- uma matriz de zeros e uns;
- strings contendo um único zero ou um, separados por novas linhas;
- qualquer formato semelhante e razoável que seja adequado ao seu idioma.
Código de golfe. Menos bytes ganha.
Casos de teste
Entrada e saída são aqui consideradas como seqüências de caracteres.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'