당신은 생산 동전이 0
또는 1
. 그러나 동전이 편향되어 있다고 의심됩니다. 즉, 0
(또는 1
) 의 확률이 반드시 1/2 일 필요는 없습니다.
잘 알려진 에 바이어스 동전을 "변화"에 대한 절차 공정한 동전 폰 노이만에 의해 제안 된 (즉 똑같이 가능성이 결과를 얻기 위해)로 다음이다. 블록의 두 값이 다를 때까지 두 개의 코인 토스의 블록을 겹치지 않습니다 (겹치지 않음). 해당 블록의 첫 번째 값을 출력합니다 (두 번째 값도 마찬가지이지만이 문제의 목적을 위해 첫 번째 값을 선택 함). 직관적으로, 1
보다 더 가능성이있을 수 0
있지만, 01
과 10
똑같이 가능성이있을 것입니다.
예를 들어, 입력 1110...
은 첫 번째 블록을 버리고 1
두 번째 블록에서 ... 을 생성합니다 .
단일 결과를 생성하기 위해 여러 개의 동전 던지기가 소비되기 때문에이 절차는 비용 이 많이 듭니다 .
도전
원래 동전의 토스를 나타내는 0과 1의 유한 순서를 취하고 모든 입력이 소비 될 때까지 위의 절차에 따라 최대 결과 수를 생성하십시오 .
입력 값의 수가 홀수 인 경우 마지막 블록이 불완전 할 수 있습니다. 예를 들어, 입력 시퀀스 11111
는 결과를 생성하지 않습니다 (처음 두 블록은 동일한 값을 가지며 세 번째 블록은 불완전합니다).
규칙
입력은 음수가 아닌 값을 가질 수 있으며 반드시 양수이거나 짝수는 아닙니다.
입력 형식은 다음과 같습니다.
- 0과 1의 배열;
- 선택적 구분 기호가있는 0과 1의 문자열
출력 형식은 다음과 같습니다.
- 구분 기호가 있거나없는 0과 1의 문자열;
- 0과 1의 배열;
- 개행으로 구분 된 단일 0 또는 1을 포함하는 문자열;
- 귀하의 언어에 맞는 유사하고 합리적인 형식.
코드 골프. 가장 적은 바이트가 이깁니다.
테스트 사례
여기서 입력과 출력은 문자열로 가정합니다.
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'