추가 된 예제 4/11
규칙 설명 4/8 : 모든 제출물은 내 컴퓨터가 48 시간 동안 수행 할 수있는만큼의 경기로 구성된 하나의 거대한 무료 토너먼트에서 경쟁합니다.
Twitch에서 스트림을 시청하는 데 시간을 보낸 사람은 DeepBot 의 유행을 알고 있으며 아마도 Bank Heist 베팅 게임에 익숙 할 것입니다. 이 King of the Hill 토너먼트는 해당 게임에서 직접 영감을 얻었습니다. 그러나 걱정하지 마십시오. 나는이 버전에 충분한 꼬임을 던져서 흥미로운 것을 유지했다고 생각합니다.
간단한 예
#####GAME 13: 16 players######
Round 1:
gunHeCK bet 0.
PassivePanga bet 69.
SnitcherKing bet 1.
Lurker bet 0.
OC'sRandomTpyos bet 1.
MonisAddiction bet 69.
RaysFive01K bet 28.
LimeadeSneaktar bet 1.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
HeCKuSumer bet 185.
Round 2
HeCKuSumer decided to !guncheck.
LimeadeSneaktar decided to double cross.
MonisAddiction decided to all in.
OC'sRandomTpyos decided to acquire intel.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
PassivePanga decided to !guncheck.
Results
PassivePanga failed. :(
SnitcherKing failed. :(
OC'sRandomTpyos was successful, and may gain ¥0
MonisAddiction failed. :(
RaysFive01K was successful, and may gain ¥0
LimeadeSneaktar was successful, and may gain ¥1
HeCKuSumer failed. :(
Results:
0. KaylorrCriterion: 3600
1. Lurker: 3600
2. gunHeCK: 3600
3. SnitcherKing: 3586
4. PassivePanga: 2634
5. LimeadeSneaktar: 2496
6. HeCKuSumer: 1909
7. HardHatUmar: 490
8. RaysFive01K: 255
9. OC'sRandomTpyos: 170
10. MonisAddiction: 0
(In this round, 7 players joined the heist, but the dice only rolled right for 3 of them. Of those, only LimeadeSneaktar brought any home--having stolen it from OcsRandomTpyos. RaysFive01K won significantly more, but deposited it all at the bank before leaving. At this point, the players who did not heist are doing well, living off their day jobs.)
#####GAME 14: 231 players######
Round 1:
Lurker bet 0.
HeCKuSumer bet 190.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
MonisAddiction bet 0.
OC'sRandomTpyos bet 1.
gunHeCK bet 0.
LimeadeSneaktar bet 1.
RaysFive01K bet 25.
PassivePanga bet 69.
SnitcherKing bet 1.
Round 2
PassivePanga decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
HeCKuSumer decided to !guncheck.
SnitcherKing decided to finger.
RaysFive01K decided to deposit.
LimeadeSneaktar decided to double cross.
Results
HeCKuSumer failed. :(
OC'sRandomTpyos failed. :(
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
PassivePanga failed. :(
SnitcherKing failed. :(
Results:
0. KaylorrCriterion: 3840
1. Lurker: 3840
2. gunHeCK: 3840
3. SnitcherKing: 3825
4. PassivePanga: 2805
5. LimeadeSneaktar: 2495
6. HeCKuSumer: 1959
7. HardHatUmar: 490
8. MonisAddiction: 240
9. RaysFive01K: 229
10. OC'sRandomTpyos: 161
Six players heisted--but should have been paying more attention to the rabble and backed out, because the probabilities dropped too low to win, and all failed.
#####GAME 15: 300 players######
Round 1:
OC'sRandomTpyos bet 1.
Lurker bet 0.
SnitcherKing bet 1.
MonisAddiction bet 69.
LimeadeSneaktar bet 1.
gunHeCK bet 0.
HardHatUmar bet 0.
RaysFive01K bet 22.
KaylorrCriterion bet 0.
HeCKuSumer bet 195.
PassivePanga bet 69.
Round 2
HeCKuSumer decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
MonisAddiction decided to all in.
PassivePanga decided to !guncheck.
LimeadeSneaktar decided to double cross.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
Results
OC'sRandomTpyos failed. :(
SnitcherKing failed. :(
MonisAddiction was successful, and may gain ¥0
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
HeCKuSumer failed. :(
PassivePanga failed. :(
And here, the probabilities dropped too low to win again--except for MonisAddiction, who went all in, and therefore avoided the probability modification incurred by the rabble backing out. No winnings are listed here, because a player who wins going all in immediately adds all winnings to its holdings without any possible modification by other players' actions.
게임 규칙
토너먼트 / 게임 구조
- 토너먼트는 1000에서 1100 사이에서 무작위로 균일하게 선택된 다수의 게임으로 구성되며, 모든 심각한 제출은 모두 무료로 동시에 경쟁합니다.
- 모든 플레이어는 240 크레딧으로 첫 번째 게임을 시작 하고 각 후속 게임은 이전 게임이 끝날 때 얻은 크레딧 수로 시작합니다.
- 각 게임은 2 라운드로 진행되며, 각 라운드에서 플레이어는 무작위로 균일하게 결정된 순서에 따라 한 가지 결정을 내립니다.
- 1 라운드에서 플레이어는 0과 현재 신용 보유액 사이의 정수 크레딧을 지불하여 은행 강도에 참여할 수 있습니다.
- 2 라운드에서, 적어도 하나의 크레딧 (이하 "하이 스터"라고 함)을 베팅하여 습격에 참여하기로 선택한 각 플레이어는 베팅을하기로 결정할 수 있습니다 (그리고 그렇게하는 동안 다른 조치를 수행 할 수도 있음). 습격을 거부하거나 올인합니다. (이러한 옵션은 아래에 자세히 설명되어 있습니다.)
- 상속자 수와 지불 한 총 크레딧 수에 따라 5 개의 은행 중 하나가 선택되어 강도를 준비합니다. 이 선택은 개별 승리 확률과 지불금이 결정되는 확률에 영향을줍니다. (은행은 아래에 설명되어 있습니다.)
- 옵트 아웃하지 않은 각 상속인은 은행의 (수정 된) 확률로 은행의 (수정 된) 베팅 배당률 (내림차순)을 곱하거나 지분을 잃게됩니다. 각 플레이어의 성공 또는 실패는 개별적 으로 결정 되며 일부는 다른 플레이어가 실패한 경우 성공합니다.
- 참여 여부에 관계없이 모든 플레이어는 성공 또는 실패한 후 급여를받습니다 (아래 설명 제외).
- 게임을 영구적으로 나가는 것은 불가능합니다. 최악의 경우, 플레이어는 다음 급여를 받기 위해 게임을 기다려야 할 수도 있습니다.
- 1000-1100 게임을 모두 마친 후 가장 많은 크레딧을 가진 플레이어가 해당 토너먼트의 승자로 선언됩니다.
- 토너먼트는 지정되지 않은 횟수만큼 반복되며 (48 시간 내에 계산할 수있는 횟수)이 토너먼트의 전체 우승자를 결정하기 위해 모든 토너먼트의 플레이어 수입이 합산됩니다.
두 번째 베팅 라운드
- 1 라운드에서 긍정적 인 베팅을 한 선수는 2 라운드에 참여할 수 있습니다.
- 이 라운드에서 플레이어는 다음을 수행 할 수 있습니다.
- 베팅을 취소하려면 "back out"문자열로 회신하십시오. 이것은 현재 습격에 대한 베팅을 0으로 설정하고 또한 습격에 남아있는 플레이어가 성공할 확률을 약간 줄입니다. 이 옵션을 선택하면 플레이어는 남은 상속인을 위험에 처한 것에 대한 처벌로 습격에 따른 240 신용 지불을 잊어 버립니다. (남은 상속자들은 은행의 확률과 "백 아웃"하지 않은 상속자의 비율을 곱한 확률로 성공합니다.)
- "all in"문자열로 답장하여 전체 신용 보유를 날려 버리고 다음 240 신용 급여에서 급여 담보 대출을 받으십시오. 강제를 위해 최고의 장비와 인텔을 구입하고 혼자서 들어가십시오. 누구에게나 의존합니다. 그러한 선수의 승리 확률은 다른 녀석이 습격에서 탈락하거나 더블 크로스에 의해 도난 당할 수 없습니다. 당첨금은 전체 베팅 금액이 240을 더한 것으로 결정되며, 손실은 홀딩스를 0으로 설정합니다.
- 이전 베팅을 고수하고 습격을 정상적으로 진행하려면 다른 문자열 (빈 문자열 포함)로 회신하십시오. (권장 답변 : "! guncheck"). 특정 답변에는 다음과 같은 추가 부작용이 있습니다.
- "작업 변경"에 대한 응답은 플레이어가 작업을 종료하게합니다. 이 라운드를 시작하면 매 라운드가 끝날 때마다 5 % 확률로 새로운 위치에 고용됩니다. 이것이 성공하면, 플레이어는 고용되고 즉시 첫 번째 급여를받습니다. 각각의 새 일자리는 마지막 일자리보다 정확히 5 % 더 많이 지불합니다 (내림차순). 이 조치는 습격의 성공 여부에 관계없이 성공합니다.
- "인텔 획득"에 대한 답변은, 만약 습격이 성공하면, 그 습격에서 얻은 모든 상금을 크레딧 당 0.00001를 더 얻 도록 플레이어 가 습격 한 은행의 배당률에 소비하게 할 것입니다 . 이 승률 수정은 영구적입니다. 예를 들어, 플레이어가 은행 1을 강탈 할 때이 동작을 선택하고 강렬에서 6969 점을 획득하면 해당 플레이어에 대한 은행 1의 확률은 0.06969만큼 영구적으로 증가하며 플레이어는 해당 강탈에서 아무것도받지 않습니다.
- "가드 구매"에 대한 답변은 플레이어가 습격중인 은행의 경비원 중 하나를 구매하게합니다. 해당 플레이어의 월급 (가드의 일반 뇌물)에 대해 1 크레딧을 영구적으로 줄이는 대신, 플레이어는 해당 은행에서 "영구적"증가 된 승률 확률 을 받습니다 ( 물었다). 확률은 해당 은행에서 플레이어의 현재 승리 확률과 100 %의 차이의 정확히 1 %만큼 증가합니다. 이 조치는 습격이 실패하더라도 성공합니다. 참고 : 언제라도 플레이어가 모든 가드 뇌물을 지불하기에 충분한 크레딧을 얻지 못하면 즉시 지불 할 수없는 뇌물 수만큼 많은 확률 보너스를 "영구적으로"잃습니다.
- "예금"에 대한 답변은 습격이 성공하면 습격 한 은행의 계좌에 플레이어의 전체 상금을 남깁니다. 크레딧은 어떤 목적 으로든 접근 할 수 없으며 출금 전까지는 플레이어의 점수에 포함되지 않습니다. 이 계정은 게임당 0.14 %의 이율로이자를 지불합니다.
- "탈퇴"에 대한 답변은 습격이 성공하면 습격 한 은행의 계좌 내용 전체를 플레이어의 상금에 추가합니다. 결과적으로 계정이 제로화됩니다. 이 추가 상금 은 더블 크로스로 도난 당할 수 있습니다.
- "double cross"라는 답장은 다음 두 가지 중 하나를 수행합니다.
- "더블 크로스"를 플레이 한 상속인의 수가 습격을하기로 결정한 비토 블 상속자의 총수의 최대 1/10 (반올림) 또는 10 명 미만인 경우 정확히 1 )에 해당하는 경우, 더블이 아닌 모든 크로스 오버의 총 우승 수를 더블 크로스 수 (내림차순)로 나눈 것과 같은 추가 상금을받습니다. 이 경우 모든 비-더블-크로 더는 습격으로부터 0 크레딧을받습니다. 다시 말해서, 이중 교차점은 다른 모든 사람의 크레딧을 훔쳐서 서로 균등하게 나눕니다.
- "더블 크로스"를 한 상속자 수가 임계 값을 초과하면 플레이어는 승리를 얻지 못하고 (강도가 성공한 경우) 급여를 반으로 줄인 후 직장에서 해고됩니다. (이 경우 "직무 변경"참조)이 경우 모든 비-크로스-크로스 (토끼 포함)는 모든 비-크로스의 총 상금을 비-비-크로스의 총 수로 나눈 보너스 지불을받습니다. 다시 말해, 음모가 비밀을 유지하기에는 너무 커졌고, 음모가 뿌리 내리고 습격에서 제외되었으며, 모두가 형벌에 대한 판돈을 나누었고, 더러운 거래에 대한 평판이 그들의 직업을 잃었습니다.
- "손가락을 두 번 교차하는 쥐 쥐를 쥐는 손가락에서와 같이" "손가락"에 대한 대답은 습격이 성공하면 플레이어에게 두 번의 기회를 제공 할 수있는 8 개의 기회를 제공합니다. 아직 그렇게 식별되지 않은 crosser .
- 이 방식으로 확인 된 각 이중 교차점은 총격 대신 현재 신용 보유액의 25 %를 반올림하고 (직접 반올림) 직무를 상실하며 급여를 절반으로 줄입니다 (보스가 나쁜 행동을 용인하지 않기 때문에) , 은행이 습격 당할 확률은 5 % 잃습니다 (다른 상속인은 미래에 더 의심스럽고 물건이 털이 많으면 버스에 던질 가능성이 높기 때문에). 이 방법으로 확인 된 이중 교차점은 다른 이중 교차점에 대해 이중 교차점의 성공 여부에 영향을 미치지 않지만 이중 교차점에서 도난 된 크레딧을받지 못하고 도난 된 크레딧은 비 교차점으로 다시 분배됩니다. 더블 크로스.
- 이 방법으로 더블 크로스를 식별하지 않으면 스 니치는 모든 시간을 낭비하는 스티치를 얻습니다. 또한 현재 습격에서 얻은 상금의 절반을 지불하고 월급을 5 % 삭감합니다 (보스가 태틀 테일의 시간을 줄입니다). 현재 은행에서 5 %의 베팅 배당률 (다른 상속자들이 미래에이긴 상으로 관대하거나 공정하지 않을 가능성이 높기 때문에) 이렇게 잃어버린 상금의 절반은 더블-크로스가 성공하면 핑거링되지 않은 더블-크로스에게, 더블-크로스가 실패하면 더블-비-크로스 (래블 포함)에 분배됩니다.
은행
은행은 인덱스를 사용하여 선택됩니다. numheisters + int(totalamountbet/100000)
여기서 numheisters는 1 라운드에서 긍정적 인 베팅을 한 플레이어의 수이고 totalamountbet은 모든 플레이어의 지분의 합계입니다. 다시 말해, 십만 학점은 1 개의 추가 상속자만큼 좋습니다. 이 지수를 기반으로 다음 은행 중 하나가 선택되며, 해당 지수가 충족하거나 초과하는 임계 값이 가장 높은 은행이 선택됩니다.
Bank Index Threshold Victory Prob. Bet Odds
---- --------------- ------------- --------
0:Municipal 0 0.540 0.80
1:City 20 0.488 1.10
2:State 40 0.425 1.30
3:National 60 0.387 1.65
4:Federal Reserve 80 0.324 1.95
토너먼트가 계속되면 각 플레이어가 트렌드를 베팅 할 수있는 금액이 높아짐에 따라 최고 은행 레벨에 도달 할 확률이 높아집니다. 또한 이들은 "인텔 확보"또는 "가드 구매"작업으로 수정되기 전의 초기 확률과 확률 일뿐 입니다. 초기 확률과 확률로,시와 국립 은행 만이 예상 손실을 초과하는 상금을 예상했습니다.
래블
- 토너먼트에는 "토블"이라고 불리는 500 명의 다른 플레이어가 포함되어 있습니다. 이를 통해 각 게임을 차별화하고 예측하기가 어려워지며, "실제"플레이어 몇 명만 있어도 더 위험하고 보상이 많은 은행에 도달 할 수 있습니다.
- 각 게임에는 rabble의 모든 하위 세트에 무작위로 선택된 균일하게 참여하는 rabble의 일부 하위 세트가 포함됩니다.
- 모든 rabble은 다음 전략을 사용합니다.
- 이 라운드에서 이미 결정을 한 선수의 결정에 따라 선택된 은행에서 성공할 확률과 같은 확률로 확률 적으로 베팅을 선택하십시오 .
- 0이 아닌 금액에 베팅하는 경우 현재 보유 금액을 초과하지 않는 최대 금액 (69, 420, 6969, 80085)을 선택하십시오.
- 두 번째 라운드에서는 이미 철회 한 베터 비율의 5 %에 50 %를 더한 확률로 "백 아웃"합니다. (이것은 2 라운드 초반의 플레이어가 랍블 사이에 큰 계단식 효과를 가질 수 있음을 의미합니다.주의를 기울이고 습격이 시작되기 전에 붕괴 될 준비를하십시오.)
입력 및 출력
두 라운드 모두에서 프로그램은 다음과 같은 정보를 정확하게이 순서 대로 명령 행 인수로 받습니다. 달리 명시되지 않는 한 모든 값은 소수를 포함하지 않는 정수입니다.
- 현재 게임 번호 (인덱싱되지 않은)
- 현재 게임의 라운드 수 (1 또는 2)
- 현재 게임의 플레이어 수 (래블 포함)
- 이번 라운드에서 이미 턴을 한 플레이어 수입니다.
- 지금까지 긍정적 인 스테이크를 저질렀던 상속자 수. (두 번째 라운드에서 이것은 실제로 첫 번째 라운드에서 구입 한 총 상속자 수입니다.)
- 지금까지 투자 한 총 크레딧 수입니다. (두 번째 라운드에서, 이것은 실제로 첫 라운드에 투자 학점의 총 수있을 것입니다 - 특히, 그것은 하지 않습니다 더 heisters "의 모든"의 초기 지분보다 더 포함 않는다 "철회"의 지분을 포함 상속자.)
- 두 번째 라운드에서 확인한 상속자 수입니다 (즉, "백 아웃"하지 않음). 이것은 첫 라운드 동안 0이 될 것입니다.
- 강요 될 은행의 (0 인덱스) 숫자 (첫 번째 라운드 동안 아무도 내기하지 않으면 강탈되는 은행)
- 플레이어가 현재 사용할 수있는 크레딧 수입니다.
- 플레이어가 1 라운드에서 베팅 한 크레딧 수입니다. (이는 1 라운드에서 항상 0입니다.)
- 각 게임이 끝날 때 급여에서 플레이어가받을 크레딧 수입니다.
- 플레이어가 현재 월급을 받고있는 경우 1, 플레이어가 실직 상태 인 경우 0
- 이전 게임이 끝났을 때 리더 보드 (래블 제외)에서 1 인덱스 등급. (당시 크레딧이 더 많은 플레이어 수의 1 이상으로 정의됩니다. 예를 들어 첫 번째 게임에서 모든 플레이어의 순위는 1입니다.)
- 모든 플레이어가 보유한 평균 크레딧 수 (래블 제외) (10 진수로 표시)
- 모든 플레이어가 보유한 크레딧 수의 평균 절대 편차 (토끼 제외) (10 진수로 표시)
- 모든 플레이어가 보유한 최대 크레딧 수 (예 : 래블을 포함하지 않은 1 등급 플레이어가 보유한 크레딧 수)
- 플레이어가 은행 0 계좌에 저장 한 크레딧 수
- 은행 1 계좌
- 은행 2 계좌
- 은행 3 계좌
- 은행 4 계좌
- 은행 0에서 플레이어의 개인 승리 확률
- 은행 1 확률
- 은행 2 확률
- 은행 3 확률
- 은행 4 확률
- 은행 0에서 성공한 습격시 플레이어의 개인 지불 확률
- 은행 1 확률
- 은행 2 확률
- 은행 3 확률
- 은행 4 확률
게임의 첫 번째 라운드에서 플레이어 프로그램은 0에서 해당 플레이어의 계정에있는 총 크레딧 수 사이의 정수를 표시하도록 인쇄해야합니다. 사용 가능한 신용 잔액보다 많은 베팅 금액은 최대 베팅으로 간주됩니다. 다른 출력 (또는 오류 조건)은 제로 베팅으로 해석됩니다.
게임의 두 번째 라운드에서 플레이어 프로그램은 위의 "두 번째 베팅 라운드"섹션에 설명 된대로 문자열을 표시하도록 인쇄해야합니다. 여기서 오류 조건은 기본 조치로 취해집니다. 일반적으로 습격을 사용하십시오.
제어 장치
토너먼트는 이 컨트롤러를 사용하여 진행됩니다 . 봇 예제도 있습니다. 여전히 테스트 중입니다. 앞으로 더 많은 코드. github에서 버그 수정을 제출하십시오. 규칙이 변경되면 업데이트됩니다.
자신의 컴퓨터에서 단일 토너먼트를 실행하려면 경쟁자 .txt에 라인을 추가 한 후 다음을 사용하십시오.
python bankheist.py 1000
컨테스트 규칙
- 플레이어는 명령 줄 인수를받을 수있는 자유 언어로 원하는 수의 플레이어 프로그램을 제출할 수 있습니다.
- 제출에는 필요한 도구 이름과 정확한 명령을 포함하여 프로그램을 컴파일하고 내 PC에서 실행하는 방법에 대한 명백한 지침이 포함되어야합니다. 제출에는 프로그램을 실행하는 명령이 하나 이상 포함되어야하며 명령 행 인수가 직접 추가 될 수 있습니다.
- 또한 제출물에는 공백이없는 고유 한 이름이 있어야합니다.
- 프로그램은 상당히 짧은 시간 안에 실행되어야합니다. (저는 합리적인 구성 요소에 대한 상한선을 설정하지 않습니다. 오히려 속도를 높이기 위해 실행 시간이 너무 큰 항목을 만든 사람에게 간단히 알려줄 것입니다.)
- 프로그램이 파일을 읽거나 쓰지 못할 수 있습니다. 또한 실행간에 정보를 저장하는 다른 방법을 사용할 수도 없습니다. 이 과제의 핵심은 제한된 / 요약 된 정보를 기반으로 복잡한 결정을 내리는 것입니다.
- 이러한 규칙은 모두 필요할 경우 언제든지 변경 될 수 있습니다. 이 게시물 상단 에 이러한 변경 사항을 알리는 메시지가 추가 됩니다.
- 이 콘테스트는 마지막 사용자가 첫 번째 게시물을 제출 한 후 1 주일 이내에 종료됩니다 . 컨테스트가 종료 될 때까지 언제든지 기존 제출물을 수정할 수 있습니다. 이 마감일 을이 게시물 의 맨 위에 있는 메시지로 업데이트하기 위해 최선을 다하겠습니다 .
- 이 컨테스트는 규칙이 변경된 후 1 주일 이내에 종료됩니다. 규칙 변경의 영향을받는 사용자에게 의견을 남기기 위해 최선을 다하겠습니다.
- 이 콘테스트에 직접 참여하는 것이 좋습니다. ;)