Hai una moneta che produce 0
o 1
. Ma si sospetta che la moneta può essere prevenuto , il che significa che la probabilità di 0
(o 1
) non è necessariamente 1/2.
Una procedura ben nota per "trasformare" una moneta distorta in una moneta giusta (cioè per ottenere risultati altrettanto probabili), come proposta da von Neumann, è la seguente. Produci blocchi (non sovrapposti) di due lanci di monete fino a quando i due valori di un blocco differiscono; e genera il primo valore in quel blocco (lo farebbe anche il secondo valore, ma ai fini di questa sfida scegliamo il primo). Intuitivamente, 1
potrebbe essere più probabile di 0
, ma 01
e 10
sarà ugualmente probabile.
Ad esempio, l'ingresso 1110...
eliminerebbe il primo blocco, quindi produrrebbe un 1
dal secondo blocco, ...
Questa procedura è costosa , poiché vengono utilizzati diversi lanci di monete per generare un singolo risultato.
La sfida
Prendi una sequenza finita di zeri e uno, che rappresentano i lanci della moneta originale, e produci il numero massimo di risultati secondo la procedura sopra, fino a quando tutto l'input è consumato.
L'ultimo blocco può essere incompleto, se il numero di valori di input è dispari. Ad esempio, la sequenza di input 11111
non produrrebbe alcun risultato (i primi due blocchi hanno valori uguali e il terzo blocco è incompleto).
Regole
L'input può avere qualsiasi numero non negativo di valori, non necessariamente positivo o pari.
Il formato di input può essere:
- una matrice di zeri e uno;
- una stringa di zeri e quelli con un separatore opzionale.
Il formato di output può essere:
- una stringa di zeri e uno, con o senza separatori;
- una matrice di zeri e uno;
- stringhe contenenti un singolo zero o uno, separate da newline;
- qualsiasi formato simile e ragionevole adatto alla tua lingua.
Codice golf. Vince il minor numero di byte.
Casi test
Si presume che input e output siano stringhe.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'