점 KoTH로 변이 된 젓가락


13

기본 규칙 (내 것과 다름)

이야기

4579 년이며, 이제 인간은 각각 1001 개의 손가락으로 2 개의 손을 갖습니다. 젓가락은 포인트를 기반으로합니다. 그리고 @Dennis는 @Martin보다 더 많은 담당자를 가지고 있습니다 ... 손으로 그려진 빨간색 원은 이제 하향 조정되었습니다 ... Jon Skeet은 모든 SE 사이트에서 2 조의 담당자를 기록했습니다.

젓가락은 해결 된 핸드 게임입니다. 그래서이 문제를 해결하기 위해 돌연변이를 만들었습니다. 손가락의 양을 늘 렸습니다.

게임의 규칙

이것이 연주되는 방식

모든 사람은 두 손으로 시작합니다. 각 손에는 1001 개의 손가락이 있습니다. 1 (한) 손가락으로 모든 손이 시작 각각의 손. 당신의 차례 동안 당신은 다른 플레이어의 손을 "히트"할 수 있습니다. 때리려면 타격 할 손 1 개와 타격 할 손 1 개를 선택하십시오. 맞은 손은 이제 처음에 있던 손가락의 양과 손으로 맞은 손가락의 양을 갖습니다.

전의

P1: 1,1 P2: 1,1. P1[0]안타 P2[1]. 이제 손가락은 P1:1,1 P2:1,2입니다. 이제 P2[1]안타 p1[0]. 손가락은 이제 P1 : 3,1P2 1,2입니다.

한 손이 1001 개 이상의 손가락을 올리면 그 손은 꺼집니다. 그런 다음 (턴을 위해) 핸드를 얻은 플레이어는 "분할"할 수 있습니다. 분리는 손을 잡고 손가락의 양 (반올림)을 반으로 줄이고 다른 손에 손가락을 다시 넣을 때입니다.

전의

P1 : 1000,2P2 7,7. P2[0]안타 P1[0]. 점수는 P1 : 0,2P2 1,1입니다. P1[1]자신의 차례에 대해 분할하고 점수는 P1 : 1,1및 P2 7,7입니다.

한 플레이어가 양손을 빼면 게임이 종료됩니다. 점수는 승자가 가진 손가락의 양에 따라 결정됩니다. 더 많은 점수가 더 좋습니다. 패자는 점수를 얻지 못합니다.

사용되는 다른 규칙이 있지만 여기에 사용 된 규칙이 있습니다.

모두가 모두를한다 (라운드 로빈)

최종 단계

이길 때마다 포인트를 합산하십시오. 그런 다음 모든 사람의 포인트를 평균하십시오. 총점을 평균 점수로 나누고 최종 점수를 얻으십시오. 대부분의 포인트가 이깁니다.

실제 규칙

표준 허점

게임을 해결하려고 하지 마십시오 . 나는 실제로 그것을 실행할 수 있어야합니다 : P

봇이 빠르게 달릴 수 있는지 확인하십시오. 라운드의 길이로 판단하면 시간이 오래 걸립니다

프로그램에 필요한 모든 라이브러리는 기본 파이썬 라이브러리에 있어야합니다. 가져와야 할 항목도 나열하십시오. 수입 그냥 기본적인 수입 될 것입니다 (수학을 위해 내가 할 : import math)

답변은 Python 3.x에서 작동해야합니다

매니저

봇은 play함수 가있는 자체 Python 3 파일입니다 .

play두 개의 숫자로 구성된 두 개의 목록이 각각 전달됩니다. 이 숫자는 각 손에 몇 개의 손가락이 올라 갔는지 나타냅니다. 첫 번째 목록은 자신의 손입니다.

다른 플레이어의 손에 맞도록 선택했다면, 두 비트 목록을 반환하십시오. 첫 번째 비트는 당신이 치는 데 사용하는 핸드의 인덱스 ( 0첫 번째, 1마지막에 대한 인덱스)이고 두 번째 비트는 상대에게 치는 핸드의 인덱스입니다.

분할하기로 선택한 경우 다른 진실 된 값을 반환하십시오.

타다!

컨트롤러는 여기 에서 찾을 수 있습니다 . 각 봇을 자체 파일에 저장하고에 각 봇의 파일 이름을 (없이 .py) 나열하십시오 botnames.

최종 메모 :

당신과 다른 봇이 먼저 돌아갑니다. 게임이 100,000 (십만) 라운드에서 종료되지 않으면 게임이 종료되고 봇이 이기지 않습니다.

컨트롤러는 영원히 움직이는 동작으로부터 보호되지 않지만 불필요한 오버 헤드가 심하게 찌그러 질 것입니다.



"표준 KOTH 규칙"이 링크 일 수 있습니까? 그리고 아마도 "표준 허점"도 있습니다.
trichoplax

My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!그렇다면 우리는 KoTH에 대한 계산을 수행하는 사람들입니까?
HyperNeutrino

@HyperNeutrino opps 고정.
Christopher

4
데니스는 현재 마틴보다 더 많은 대표를 가지고 있다 . 세상에,이 여분의 996 개의 손가락은 어디에서 왔습니까?!
caird coinheringaahing

답변:


6

코딩 및 알고리즘

이 답변은 실제로 지금까지 다른 것과 달리 코딩 및 알고리즘을 사용합니다! 참조 : imgur (이전에 게시 된 모든 답변을 능가합니다)

def play(A, B):
    if sum(A) == 1:
        return [A.index(1), B.index(max(B))]
    elif max(A) + max(B) > 1000:
        return [A.index(max(A)), B.index(max(B))]
    elif 0 in A:
        return 1
    elif 0 in B:
        return [A.index(min(A)), 1-B.index(0)]
    else:
        return [A.index(min(A)), B.index(min(B))]

나는 그 참조 XD를 얻었다
Christopher

이것은 단지 이겼다. 결코 잃지 않았습니다.
Christopher

축하합니다! 두 번째 자리에 정착해야 할 것 같습니다. 코딩과 알고리즘이 내 것보다 강력했습니다
Value Ink

3

주의 봇

def play(s,o):
 if max(s)+max(o)>1000 and (all(s) or max(s)+min(o)<1001):
  return [s.index(max(s)),o.index(max(o))]
 else:
  return [s.index(min(s)),o.index(min(filter(bool,o)))]if all(s) else 'split'

봇은 너무 많은 문제를 일으키고 싶지 않으므로 양손이 있으면 더 작은 손으로 상대방의 손을 작게 치고 그렇지 않으면 쪼개집니다. 그러나 CautionBot은 바보가 아니므로 즉시 다음 턴을 잃지 않고 상대방의 손을 빼낼 수 있다면 정상적인 움직임 대신에 그렇게 할 것입니다.


비공식적으로이기는
Christopher

멋있는! 누군가가 더 나은 전략을 개발할 때 놀라지 않기 때문에 여기서 어떻게 진행되는지 살펴볼 것입니다. 방금 바닐라 젓가락 전략으로 이해 한 것을 적용했습니다 (당신이 쪼개거나 합치는 동안 새로운 규칙 (살해되지 않도록 겁쟁이 및 적중))을 적용했습니다. lol
Value Ink

3

평형 장치

def play(s, o):
    if not all(s):
        return 1
    else:
        return [s.index(max(s)), o.index(min(filter(bool, o)))]

이퀄라이저에 손이 없으면 분리됩니다. 그렇지 않으면, 가장 큰 손으로 상대에게 가장 작은 손을칩니다.


이러한 변형 된 규칙에 따라 AFAIK는 한 손이 나가야 분할 할 수 있습니다.
가치 잉크

그래, 내가 고칠 게
LyricLy

"이퀄라이저에 손이 없으면 ..."글쎄, 손이 없으면 이미 잃어버린 것입니까? 그러나 그것은 단지 nitpicking입니다, 보상하기 위해 내 +1을 가져 가십시오
Value Ink

3

침략자

def play(s, o):
    return [s.index(max(s)),o.index(max(o))]if all(s)else 1

또 다른 스타터 봇인 Aggressor는 양손이 모두 비어 있지 않으면 상대방의 손을 크게칩니다. 그렇지 않으면 분할됩니다.


2

랜덤 봇

import random

def play(s, o):
    return [random.randint(0,1)for i in'  ']if all(s)else 1

일을 시작하기 위해 여기에 손이 모두 비어 있지 않으면 무작위 타격을하는 봇이 있습니다. 그렇지 않으면 분할됩니다.

왜 그렇게하지 골프 : 3


나는 그것을 고치고 있었다
Christopher

@Christopher 죄송합니다. 댓글을 보지 못했습니다. --- 고침하면 이것을 삭제하겠습니다 .--- 어리석은 xD이므로 이것을 삭제하겠습니다
HyperNeutrino

@Christopher 참고 : 나는 이것을 유효한 제출로 편집했습니다. 다른 솔루션도 추가하겠습니다. 컨트롤러가 제대로 작동하지 않으면 알려주십시오 :)
HyperNeutrino

멋진 시도
Christopher

@Christopher 컨트롤러가 올바르게 작동합니까?
HyperNeutrino

2

오류

예, 봇의 이름입니다.

def play(s, o):
    if max(s)+max(o)>1000:
        return [s.index(max(s)),o.index(max(o))]
    if 0 in s:return ''
    return [s.index(max(s)),o.index(min(o))]

나는 다른 봇과의 테스트를 통해 이것에 도달했습니다. 그러나 내 시뮬레이션에서 지속적으로 두 번째입니다. 결국 다른 봇을 만들게됩니다.

편집 : CautionBot를 능가하는 봇을 작성할 수 없으며 추가 테스트를 통해 이것이 2 위가 아니라 2 위를 나타내는 것으로 보입니다.


1

마라토너

"HyperNeutrino"에서 제공 한 Aggressor의 코드를 조정하여 상대의 작은 손을 작은 손으로 두 손으로 쳤습니다. 그것은 물론 매우 어리석은 전략이지만 차트의 맨 위에있는 것을 거절 할 수는 없습니다! (그 차트는 손실이더라도)

직장에서 코드를 테스트 할 수 없어서이 코드가 오류없이 실행되는지 확실하지 않습니다. 그러나 완벽하게 실행되어야합니다.

def play(s, o):
     return [s.index(min(s)),o.index(min(o))]if all(s)else 1

좋은 첫 답변! 좋은 질문을 선택
Christopher

고마워 :) 나는 다른 사람의 코드를 수정하는 것이 허용되는지 여부를 확신하지 못했기 때문에 매우 긴장했습니다. 나는 당신이 그것을 명백하게하는 한 그것이 있다고 가정합니다. 그리고 나는 상대들에게 가장 큰 손을 대는 가장 큰 손을 만들려고했지만 HyperNeutrino가 저를 정확하게 이겼습니다! 하하
요르단

네. 이 SE에서 수정 코드가 자주 사용됩니다 : P
Christopher

멋진 답변! 내가 걱정해야 할 한 가지는 (지금은 테스트 할 수 없음) 빈 손으로 쳤을 때 컨트롤러가 어떻게 반응하는지 또는 규칙에 영향을 미치는 방법을 모른다는 것입니다.
밸류 잉크

1
이것은 이퀄라이저와 매우 유사하지만 이퀄라이저는 상대방의 빈 손에 닿지 않았는지 확인합니다. @LyricLy
HyperNeutrino
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.