Vous avez une pièce qui produit 0
ou 1
. Mais vous soupçonnez que la pièce peut être biaisée , ce qui signifie que la probabilité de 0
(ou 1
) n'est pas nécessairement 1/2.
Une procédure bien connue pour "transformer" une pièce biaisée en une pièce équitable (c'est-à-dire pour obtenir des résultats également probables), telle que proposée par von Neumann, est la suivante. Produisez des blocs (ne se chevauchant pas) de deux lancers de pièces jusqu'à ce que les deux valeurs d'un bloc diffèrent; et affiche la première valeur de ce bloc (la deuxième valeur ferait également l'affaire, mais pour les besoins de ce défi, nous choisissons la première). Intuitivement, 1
peut être plus probable que 0
, mais 01
et 10
sera tout aussi probable.
Par exemple, l’entrée 1110...
jetterait le premier bloc, puis produirait un à 1
partir du deuxième bloc, ...
Cette procédure est coûteuse , car plusieurs lancers de pièces sont consommés pour générer un seul résultat.
Le défi
Prenez une séquence finie de zéros et de uns, représentant les lancers de la pièce d'origine, et produisez le nombre maximum de résultats conformément à la procédure ci-dessus, jusqu'à ce que toutes les entrées soient consommées.
Le dernier bloc peut être incomplet si le nombre de valeurs entrées est impair. Par exemple, la séquence d'entrée ne 11111
donnerait aucun résultat (les deux premiers blocs ont des valeurs égales et le troisième est incomplet).
Règles
L'entrée peut avoir un nombre non négatif de valeurs, pas nécessairement positives ni même.
Le format d'entrée peut être:
- un tableau de zéros et de uns;
- une chaîne de zéros et des uns avec un séparateur facultatif.
Le format de sortie peut être:
- une chaîne de zéros et de uns, avec ou sans séparateurs;
- un tableau de zéros et de uns;
- chaînes contenant un seul zéro ou un, séparées par des nouvelles lignes;
- tout format similaire, raisonnable et adapté à votre langue.
Code de golf. Le moins d'octets gagne.
Cas de test
L'entrée et la sortie sont supposées être des chaînes.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'