Đũa đột biến với điểm KoTH


13

Quy tắc cơ bản (khác với tôi)

Câu chuyện

Đó là năm 4579, con người hiện có 2 bàn tay với 1001 ngón tay mỗi người. Đũa đã trở thành dựa trên điểm. Và @Dennis có nhiều đại diện hơn sau đó @Martin ... Các vòng tròn màu đỏ được vẽ bằng tay hiện đang bị hạ cấp ... Jon Skeet đã đạt 2 nghìn tỷ rep trên mỗi trang SE ... Thật đáng sợ tôi biết

Đũa là một trò chơi tay đã được giải quyết. Vì vậy, để có được điều này, tôi đã tạo ra nó đột biến. Tôi tăng số lượng ngón tay.

Nội quy của trò chơi

Cách chơi này

Mọi người bắt đầu bằng 2 tay. Mỗi bàn tay có 1001 ngón tay. Mỗi bàn tay bắt đầu với 1 (một) ngón tay trên mỗi bàn tay. Trong lượt của mình, bạn có thể "đánh" tay người chơi khác. Để đánh bạn chọn 1 tay của bạn để đánh và 1 tay của họ để đánh. Bàn tay bị đánh bây giờ có số lượng ngón tay ban đầu VÀ số lượng ngón tay bạn có trên bàn tay bạn chạm vào.

VÍ DỤ

P1: 1,1 P2: 1,1. P1[0]lượt truy cập P2[1]. Bây giờ là ngón tay P1:1,1 P2:1,2. Bây giờ P2[1]đánh p1[0]. Các ngón tay bây giờ là P1: 3,1P2 1,2.

Nếu một tay đạt tới 1001 ngón tay trở lên thì bàn tay đó sẽ ra. Sau đó, người chơi đã ra tay (đến lượt mình) có thể "tách". Chia tách là khi bạn lấy bàn tay đang ở trong và giảm một nửa số ngón tay (làm tròn lên) và đưa những ngón tay đó cho bàn tay kia lấy lại.

VÍ DỤ

P1: 1000,2P2 7,7. P2[0]lượt truy cập P1[0]. Điểm là P1: 0,2P2 1,1. P1[1]chia cho lượt của mình và điểm số là P1: 1,1và P2 7,7.

Trò chơi kết thúc khi một người chơi có cả hai tay. Điểm được ghi bằng số lượng ngón tay người chiến thắng có. Nhiều điểm hơn = tốt hơn. Người thua không được điểm nào.

Có những quy tắc khác được sử dụng nhưng đây là những quy tắc được sử dụng ở đây.

Mọi người chơi mọi người (vòng tròn)

Tàn cuộc

Tổng số điểm của bạn lên từ mỗi vòng bạn giành chiến thắng. Sau đó, trung bình điểm của mọi người lên. Chia tổng số của bạn cho điểm trung bình và nhận được điểm số cuối cùng của bạn. Hầu hết các điểm giành chiến thắng.

Quy tắc thực tế

Lỗ hổng tiêu chuẩn

Xin đừng không cố gắng để giải quyết trận đấu. Tôi thực sự phải có khả năng chạy nó: P

Hãy chắc chắn rằng bot có thể chạy nhanh. Với độ dài của các vòng đánh giá, việc này sẽ mất một lúc

Tất cả các thư viện cần thiết trong chương trình của bạn phải nằm trong thư viện python mặc định. Cũng liệt kê những cái bạn cần nhập khẩu. Nhập khẩu sẽ chỉ là nhập khẩu cơ bản (đối với toán học tôi làm import math:)

Câu trả lời phải hoạt động trong Python 3.x

Xử lý

Bot của bạn sẽ là tệp Python 3 của riêng nó với một playchức năng.

playsẽ được thông qua hai danh sách của hai số mỗi. Con số này cho biết có bao nhiêu ngón tay trên mỗi bàn tay. Danh sách đầu tiên là bàn tay của riêng bạn.

Nếu bạn chọn đánh vào tay người chơi khác, sau đó trả về danh sách hai bit. Bit đầu tiên là chỉ số của tay bạn đang sử dụng để đánh ( 0cho lần đầu tiên, 1cho lần cuối cùng) và bit thứ hai là chỉ số của bàn tay bạn đang đánh vào đối thủ.

Nếu bạn chọn tách, trả lại bất kỳ giá trị trung thực nào khác.

Tada!

Bộ điều khiển có thể được tìm thấy ở đây . Lưu mỗi bot trong tệp riêng của nó và liệt kê tên tệp của bot (không có .py) botnames.

Lưu ý cuối cùng:

Bạn và bot khác sẽ thay phiên nhau đi trước. Nếu trò chơi không chấm dứt sau 100.000 (một trăm nghìn) vòng, trò chơi sẽ bị chấm dứt và không bot nào thắng.

Bộ điều khiển không được bảo vệ chống lại việc di chuyển mãi mãi, nhưng chi phí không cần thiết sẽ bị cau mày mạnh mẽ.



"Quy tắc KOTH tiêu chuẩn" có thể là một liên kết? Và có lẽ "sơ hở tiêu chuẩn" quá.
trichoplax

My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!Cái gì, vậy chúng ta là những người đang tính toán cho KoTH?
HyperNeutrino

@HyperNeutrino sửa chữa opps.
Christopher

4
Dennis có nhiều đại diện hơn Martin bây giờ . Ôi chúa ơi, 996 ngón tay này đến từ đâu vậy?!
caird coinheringaahing

Câu trả lời:


6

Thuật toán mã hóa

Câu trả lời này thực sự sử dụng mã hóa và thuật toán, không giống như những người khác cho đến nay! tham khảo: imgur (cũng đánh bại tất cả các câu trả lời được đăng trước đó)

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))]

Tôi có tài liệu tham khảo XD
Christopher

Điều này vừa thắng. Nó không bao giờ mất.
Christopher

Xin chúc mừng! Tôi đoán tôi sẽ phải giải quyết cho vị trí thứ hai. Mã hóa và thuật toán của bạn mạnh hơn của tôi
Value Ink

3

Chú ý

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'

Ca thậnBot không muốn gây ra quá nhiều rắc rối, vì vậy nó sẽ đánh vào bàn tay nhỏ hơn của đối thủ bằng bàn tay nhỏ hơn nếu nó có cả hai tay và nếu không thì sẽ tách ra. Tuy nhiên, CaestionBot không phải là kẻ ngốc, vì vậy nếu nó có thể hạ gục tay đối thủ mà không mất ngay lượt tiếp theo, nó sẽ làm như vậy thay vì di chuyển bình thường.


Không chính thức đây là chiến thắng
Christopher

Mát mẻ! Chúng ta sẽ thấy mọi thứ diễn ra từ đây vì tôi sẽ không ngạc nhiên khi ai đó phát triển một chiến lược tốt hơn. Tôi chỉ áp dụng những gì tôi hiểu là chiến lược Chopilla (là một kẻ hèn nhát và chia rẽ thường xuyên để tránh bị giết) theo cách phù hợp nhất với các quy tắc mới (là một kẻ hèn nhát và đánh thấp để tránh bị giết, kể từ khi chia tách / sáp nhập trong khi bạn có cả hai tay của bạn là bất hợp pháp) lol
Value Ink

3

Bộ cân bằng

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

Nếu Equalizer bị thiếu một tay, nó sẽ tách ra. Mặt khác, nó đánh vào tay đối thủ nhỏ nhất bằng tay lớn nhất của mình.


Theo các quy tắc đột biến này, AFAIK bạn chỉ có thể tách ra nếu một tay ra.
Mực giá trị

Ồ vâng, tôi sẽ sửa nó.
LyricLy

"Nếu Equalizer không có tay ..." ý tôi là nếu nó không có tay thì nó đã mất rồi sao? Nhưng đó chỉ là trò đùa, hãy lấy +1 của tôi để bù lại
Ink Ink

3

Kẻ xâm lược

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

Một bot khởi đầu khác, AgTHERor sẽ đánh vào bàn tay của đối thủ lớn hơn bằng bàn tay lớn hơn nếu cả hai tay của nó không trống; mặt khác, nó tách ra


2

RandomBot

import random

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

Chỉ cần bắt đầu mọi thứ, đây là một bot tạo ra một cú đánh ngẫu nhiên nếu cả hai tay đều không trống; mặt khác, chia tách.

Chơi gôn vì tại sao không: 3


Tôi đã sửa nó
Christopher

@Christopher Xin lỗi, không thấy bình luận của bạn. --- Một khi bạn sửa nó, tôi sẽ xóa cái này .--- Tôi sẽ xóa cái này đi vì nó ngu ngốc xD
HyperNeutrino

@Christopher Lưu ý: Tôi đã chỉnh sửa nội dung này thành một bài nộp hợp lệ. Tôi cũng sẽ thêm một giải pháp khác; cho tôi biết nếu bộ điều khiển không hoạt động đúng :)
HyperNeutrino

Rất vui được thử chúng
Christopher

@Christopher Bộ điều khiển có hoạt động đúng không?
HyperNeutrino

2

lỗi

Vâng, đó là tên của bot.

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))]

Tôi đã đạt được điều này bằng cách thử nghiệm với các bot khác. Tuy nhiên, nó luôn đứng thứ hai trong các mô phỏng của tôi. Vì vậy, Ill sẽ làm cho một bot khác cuối cùng.

Chỉnh sửa: Tôi dường như không thể viết bất kỳ bot nào đánh bại CaestionBot và thử nghiệm bổ sung của tôi dường như cho thấy đây là thứ tốt nhất thứ hai, không phải thứ hai tệ nhất.


1

Vận động viên marathon

Tôi đã điều chỉnh mã của Agrieror do "HyperNeutrino" cung cấp để đơn giản đánh hai tay nhỏ hơn của đối thủ bằng tay nhỏ hơn. Đó là một chiến lược rất ngớ ngẩn tất nhiên nhưng tôi không thể từ chối đứng đầu bảng xếp hạng! (Mặc dù biểu đồ đó sẽ là thua lỗ)

Tôi không chắc chắn nếu mã này sẽ chạy mà không có lỗi vì tôi không thể kiểm tra nó do đang ở nơi làm việc. Tuy nhiên, nó nên chạy hoàn hảo.

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

Câu trả lời đầu tiên tốt đẹp! Bạn đã chọn một câu hỏi hay: P (không thiên vị)
Christopher

Cảm ơn :) Tôi đã khá lo lắng vì tôi không chắc việc chỉnh sửa mã của người khác như tôi có được phép hay không. Tôi cho rằng nó là miễn là bạn làm cho nó rõ ràng. Và tôi sẽ cố gắng tạo ra một người sẽ chơi lớn nhất trước các đối thủ lớn nhất nhưng HyperNeutrino đã đánh bại tôi một cách chính xác! haha
Jordan

Vâng. Trên mã chỉnh SE này thường được sử dụng: P
Christopher

Câu trả lời tuyệt vời! Một điều mà tôi lo lắng (không thể kiểm tra ngay bây giờ) là tôi không biết bộ điều khiển sẽ phản hồi như thế nào nếu bạn cố gắng đánh vào bàn tay trắng hoặc làm thế nào các yếu tố đó thành quy tắc.
Mực giá trị

1
Điều này rất giống với Equalizer nhưng Equalizer sẽ kiểm tra để chắc chắn rằng nó không đánh vào tay không của đối thủ nếu có. @LyricLy
HyperNeutrino
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.