Anda memiliki koin yang menghasilkan 0
atau 1
. Tetapi Anda mencurigai koin itu bias , artinya kemungkinan 0
(atau 1
) tidak harus 1/2.
Sebuah terkenal prosedur untuk "mengubah" koin bias menjadi koin (yaitu untuk mendapatkan hasil yang sama mungkin), seperti yang diusulkan oleh von Neumann, adalah sebagai berikut. Menghasilkan (tidak tumpang tindih) blok dari dua lemparan koin sampai dua nilai blok berbeda; dan output nilai pertama di blok itu (nilai kedua juga akan dilakukan, tetapi untuk tujuan tantangan ini kita memilih yang pertama). Secara intuitif, 1
mungkin lebih mungkin daripada 0
, tetapi 01
dan 10
akan sama mungkin.
Misalnya, input 1110...
akan membuang blok pertama, lalu menghasilkan 1
dari blok kedua, ...
Prosedur ini mahal , karena beberapa lemparan koin dikonsumsi untuk menghasilkan hasil tunggal.
Tantangan
Ambil urutan nol dan satu yang terbatas, mewakili lemparan koin asli, dan hasilkan jumlah hasil maksimum sesuai dengan prosedur di atas, sampai semua input dikonsumsi.
Blok terakhir mungkin tidak lengkap, jika jumlah nilai input ganjil. Misalnya, urutan input tidak 11111
akan menghasilkan hasil (dua blok pertama memiliki nilai yang sama, dan blok ketiga tidak lengkap).
Aturan
Input dapat memiliki jumlah nilai non-negatif, tidak harus positif atau bahkan.
Format input mungkin:
- sejumlah nol dan satu;
- string nol dan yang dengan pemisah opsional.
Format output mungkin:
- serangkaian nol dan satu, dengan atau tanpa pemisah;
- sejumlah nol dan satu;
- string yang mengandung nol tunggal atau satu, dipisahkan oleh baris baru;
- format serupa yang wajar dan sesuai dengan bahasa Anda.
Golf kode. Bytes paling sedikit menang.
Uji kasus
Input dan output di sini diasumsikan sebagai string.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'