Sie haben eine Münze, die 0
oder produziert 1
. Sie vermuten jedoch, dass die Münze voreingenommen ist , was bedeutet, dass die Wahrscheinlichkeit 0
(oder 1
) nicht unbedingt 1/2 beträgt.
Ein bekanntes Verfahren zur "Umwandlung" einer voreingenommenen Münze in eine faire Münze (dh zur Erzielung gleichwahrscheinlicher Ergebnisse), wie von Neumann vorgeschlagen, lautet wie folgt. Produziere (nicht überlappende) Blöcke mit zwei Münzwürfen, bis sich die beiden Werte eines Blocks unterscheiden. und gebe den ersten Wert in diesem Block aus (der zweite Wert würde auch reichen, aber für die Zwecke dieser Herausforderung wählen wir den ersten). Intuitiv 1
kann eher als 0
, aber 01
und 10
wird gleich wahrscheinlich sein.
Zum Beispiel 1110...
würde die Eingabe den ersten Block verwerfen und dann einen 1
aus dem zweiten Block erzeugen , ...
Dieses Verfahren ist teuer , da mehrere Münzwürfe verbraucht werden, um ein einziges Ergebnis zu erzielen.
Die Herausforderung
Nehmen Sie eine endliche Folge von Nullen und Einsen, die Würfe der ursprünglichen Münze darstellen, und erzeugen Sie die maximale Anzahl von Ergebnissen gemäß dem oben beschriebenen Verfahren, bis die gesamte Eingabe verbraucht ist.
Der letzte Block kann unvollständig sein, wenn die Anzahl der Eingabewerte ungerade ist. Beispielsweise 11111
würde die Eingabesequenz kein Ergebnis liefern (die ersten beiden Blöcke haben gleiche Werte und der dritte Block ist unvollständig).
Regeln
Die Eingabe kann eine beliebige nicht negative Anzahl von Werten haben, nicht unbedingt positive oder gerade.
Das Eingabeformat kann sein:
- eine Anordnung von Nullen und Einsen;
- eine Folge von Nullen und Einsen mit einem optionalen Trennzeichen.
Ausgabeformat kann sein:
- eine Folge von Nullen und Einsen mit oder ohne Trennzeichen;
- eine Anordnung von Nullen und Einsen;
- Zeichenfolgen, die eine einzelne Null oder Eins enthalten, durch Zeilenumbrüche getrennt;
- Jedes ähnliche, vernünftige Format, das zu Ihrer Sprache passt.
Code Golf. Wenigste Bytes gewinnt.
Testfälle
Eingabe und Ausgabe werden hier als Zeichenfolgen angenommen.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'