Tienes una moneda que produce 0
o 1
. Pero sospecha que la moneda puede estar sesgada , lo que significa que la probabilidad de 0
(o 1
) no es necesariamente 1/2.
Un procedimiento bien conocido para "transformar" una moneda sesgada en una moneda justa (es decir, para obtener resultados igualmente probables), como lo propone von Neumann, es el siguiente. Produzca bloques (no superpuestos) de dos lanzamientos de monedas hasta que los dos valores de un bloque difieran; y generar el primer valor en ese bloque (el segundo valor también funcionaría, pero para los propósitos de este desafío, elegimos el primero). Intuitivamente, 1
puede ser más probable que 0
, sin embargo 01
, y 10
será igualmente probable.
Por ejemplo, la entrada 1110...
descartaría el primer bloque, luego produciría un 1
del segundo bloque, ...
Este procedimiento es costoso , porque se consumen varios lanzamientos de monedas para generar un solo resultado.
El reto
Tome una secuencia finita de ceros y unos, que representan lanzamientos de la moneda original, y produzca el número máximo de resultados de acuerdo con el procedimiento anterior, hasta que se consuma toda la entrada.
El último bloque puede estar incompleto, si el número de valores de entrada es impar. Por ejemplo, la secuencia de entrada 11111
no produciría ningún resultado (los dos primeros bloques tienen valores iguales y el tercer bloque está incompleto).
Reglas
La entrada puede tener cualquier número de valores no negativos, no necesariamente positivos o pares.
El formato de entrada puede ser:
- una serie de ceros y unos;
- Una cadena de ceros y unos con un separador opcional.
El formato de salida puede ser:
- una cadena de ceros y unos, con o sin separadores;
- una serie de ceros y unos;
- cadenas que contienen un solo cero o uno, separados por nuevas líneas;
- cualquier formato similar y razonable que se adapte a su idioma.
Código de golf. Pocos bytes ganan.
Casos de prueba
Aquí se supone que la entrada y la salida son cadenas.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'