코인 플립 시퀀스 선택을 분석하는 프로그램 구축


15

오래된 저서의 퍼즐에서, 두 명의 플레이어가 동전이 반복적으로 뒤집힐 때 처음 나타날 동전 뒤집기 시퀀스를 선택하는 게임이 정의됩니다. (실제로 이상하고 주사위 굴림 이었지만,이 작은 세부 사항은 문제 동등성 측면에서 중요하지 않습니다.)

그것은 유의할 점은 선수 1 개 선택하는 경우 TTT와 플레이어 2 개 선택한다면은 HTT, 그 플레이어 2는 유일한 방법 때문에, 게임을 승리의 7/8 기회가 TTT전에 올 수는 HTT처음 세 넘겼 모든 꼬리가있는 경우입니다.

당신의 임무는 선택된 두 시퀀스 중 하나가 먼저 올 확률을 추론하는 프로그램이나 함수를 만드는 것입니다. 프로그램은 두 줄의 입력 (또는 두 문자열을 인수로 사용)을 취합니다. 각각은 길이가 10 이하인 시퀀스를 나타냅니다.

HTT
TTT

그리고 첫 번째 플레이어가 이길 확률을 분수 또는 십진수 형식으로 출력하십시오.

7/8
0.875

어떤 언어로든 이것을 수행하는 가장 짧은 코드가 이깁니다.


6
시퀀스는 항상 서로 같은 길이입니까?
Uri Granta

1
@UriZarfaty 아니요, 반드시 그런 것은 아닙니다.
Joe Z.

아마도 시퀀스는 구별되어야하지만 (출력이 타이를 지정할 수 없기 때문에).
Uri Granta

예, 시퀀스는 고유해야합니다.
Joe Z.

보다 구체적으로, 하나는 다른 하나의 터미널 하위 문자열이 될 수 없습니다.
Joe Z.

답변:


4

파이썬 3 (139 136 134 132 126 115 143)

여기에 설명 된대로 Conway의 알고리즘을 사용 합니다 . 첫 번째가 두 번째의 종료 서브 시퀀스가 ​​아닌 한 모든 시퀀스 쌍을 처리합니다 (명령에 따라).

def f(a,b):c=lambda x,y=a:sum((x[~i:]==y[:i+1])<<i for i in range(len(x)));return 0 if b in a else(1/(1+(c(a)-c(a,b))/(c(b,b)-c(b))),1)[a in b]

6 바이트를 면도 해 주셔서 감사합니다. 서브 시퀀스로 버그를 발견 한 Zgarb에게 감사합니다.


현재 버전이 작동하지 않습니다. 입력을 위해 "HTT"그리고 "TTT", o값을 보유 -1하며하여 분할한다 0.
Jakube

1
좋은 골프! 나는 기본 인수 트릭을 좋아한다. (안된) 팁 몇 가지 : 당신은 곱셈에 의해 수 2**i<<i, 출력 확률은 다음과 같이 쓸 수 1/(1/o + 1)있는에 당신의 상호 넣을 수 있습니다, o직접.
xnor

감사. 좋은 자리 re o / (1 + o). <<!
Uri Granta

@Jakube 죄송합니다. 귀하의 의견을 찾지 못했습니다! 현재 버전은 "HTT"및 "TTT"에서 제대로 작동합니다.
Uri Granta

1
이것은을위한 제로 응답을 제공 HTH하고 T첫번째 선수가 이길 수 있지만,. 다른 대답은 같은 문제가 있습니다.
Zgarb

3

CJam, 44 38 36 바이트

here 과 동일한 Conway 알고리즘을 사용합니다 .

ll]_m*{~1$,,@f>\f{\#!}2b}/\-:X--Xd\/

입력은 두 줄로 된 두 개의 고유 한 시퀀스입니다. 결과는 초 당 첫 승리 확률입니다. 입력의 길이가 같을 필요는 없습니다

p첫 번째 플레이어 A의 승률 ( )을 공식으로 사용하고 있습니다.

여기에 이미지 설명을 입력하십시오

그런 다음 확률은 다음과 같이 정의됩니다

여기에 이미지 설명을 입력하십시오

단순화 후

여기에 이미지 설명을 입력하십시오

약간의 단순화 후

여기에 이미지 설명을 입력하십시오


입력 예 :

HTT
TTT

산출:

0.875

여기에서 온라인으로 사용해보십시오


Joe는 의견에서 (이 글이 게시 된 후) 줄의 길이가 반드시 같을 필요는 없다고 말했습니다. CJam을 이해하지 못해 +1.
mdc32

@ mdc32 고정, 1 바이트 더 이상 :(
Optimizer

codegolfSE가 이제 LaTeX를 지원한다고 믿게하셨습니다 ... = (
flawr

@flawr HAHA. 죄송합니다 :(. 온라인 LaTeX 편집기의 PNG입니다.
Optimizer

이것은을위한 제로 응답을 제공 HTH하고 T첫번째 선수가 이길 수 있지만,. 다른 대답은 같은 문제가 있습니다.
Zgarb

0

루아 211 190 184

Conway의 알고리즘도 사용합니다. 여전히 루아를 처음 사용하므로 더 확실하게 골프를 즐길 수 있습니다.

z=io.read;e=function(s,t)r='';for d in s:gmatch"."do r=r..(d==t:sub(1,1)and 1 or 0);end;return tonumber(r,2);end;a=z();b=z();print((e(a,a)-e(a,b))/(e(b,b)-e(b,a))/(1/((1/2)^b:len())));

언 골프

z=io.read;
e=function(s,t)
r='';
    for d in s:gmatch"."do 
        r=r..(d==t:sub(1,1)and 1 or 0);
    end;
    return tonumber(r,2);
end;
a=z();
b=z();
print((e(a,a)-e(a,b))/(e(b,b)-e(b,a))/(1/((1/2)^b:len())));

첫 번째 버전

z=io.read;
e=function(s,t) 
    r=0;
    for d in s:gmatch"."do 
        r=r*10;
        if d==t:sub(1,1)then r=r+1 end;
    end
    return tonumber(r,2);
end;
f=function(n,o)
    return ((e(n,n)-e(n,o))/(e(o,o)-e(o,n)))/(1/((1/2)^3));
end;
print(f(z(),z()));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.