Cave Rangers - Khám phá bóng tối


9

Người bạn địa chất của bạn suýt đá cánh cửa văn phòng của bạn khi anh ta xông vào, mắt háo hức và yêu cầu bạn đi cùng anh ta đến một địa điểm mà anh ta vừa phát hiện ra. Trên đường đi, anh ta giải thích rằng anh ta nghĩ rằng anh ta thực sự đã đạt được vàng. Vấn đề duy nhất là, nó bị chôn sâu dưới lòng đất trong một hang động có mái rất không ổn định. Quá nguy hiểm khi chơi trò chơi, vì vậy anh ta muốn bạn lập trình một trong những robot khám phá hang động của anh ta để thu thập càng nhiều vàng càng tốt trước khi anh ta kéo nó trở lại. Anh ta cũng đề cập rằng anh ta đã thăm dò hang động và tìm thấy một số động vật hoang dã có thể gây hại cho robot, và anh ta cũng đã bỏ một số thiết bị xuống đó mà vẫn có thể sử dụng được. Mỗi robot được trang bị hai cánh tay và một loạt các cảm biến. Khi bạn đến hiện trường, anh ta nói với bạn rằng anh ta đang dự định tuyển thêm nhiều lập trình viên,

Bây giờ, xuống đến nitty-gritty. Các cảm biến truyền thông tin đến chương trình của bạn dưới dạng các ký tự ASCII. Dưới đây là danh sách ý nghĩa của từng nhân vật và mô tả cho bất cứ điều gì bot có thể gặp trong hang động:

Code    Name/Description

Y       Your bot
        You do things

@       Other bots
        They do other things

-       Ground
        This doesn't do things

C       Centipede
        These will bite you and leave a poison effect
        The bite will cost 1 health
        The poison effect will last for 3 turns, costing 2 health each turn

B       Bats
        If bats end up in the same space you are, your bot runs in a random direction during its turn rather than what you told it to do

L       Lion (because reasons)
        Lions deal heavy damage, 10 health, each time they attack

F       Food
        Eating this will give you 5 health
        Can only be used once

W       Water
        Drinking this will cure poison effects early
        Can only be used once

R       Revealer
        This will increase the range of your visibility to an 11x11 grid
        The extra range will only be 75% correct, but the original range won't be effected

K       Knife
        You do twice as much damage to other bots if you have a knife

G       Gold
        The whole reason you're doing this in the first place

N       Nurse Nina
        She mend you good
        Restores your health by 10 while you occupy the same space as her

}       Boulder
        You can't walk over boulders, and neither can anything else

P       Pit
        If you fall in a pit, you will be stuck for 3 turns

Kích thước của hang phát triển dựa trên số lượng bot đang tham gia. Nó bắt đầu là 30x30 và nhận thêm 10 x10 cho mỗi bot. Vì vậy, 2 bot sẽ khám phá một hang động 50x50.

Bots bắt đầu với 20 sức khỏe, nhưng chúng không có giới hạn tối đa về sức khỏe.

Đầu vào:

Bạn sẽ nhận được đầu vào thông qua STDIN theo định dạng sau:

20,5,10,1,0,True,False    <-health, number gold pieces, number of turns your bot has lasted, number of until the poison wears off, number of turns until you are no longer stuck in a pit, if you have a revealer, if you have a knife
-----
-G}--
--Y-L
-C---
---B-

Dòng đầu tiên chứa thông tin về bot của bạn và phần còn lại là lưới mà bot của bạn có thể nhìn thấy. Nếu bot của bạn chống lại một trong 4 bức tường của hang động, bạn sẽ nhận được một lưới trông giống như thế này (trong trường hợp là tất cả các con đường đến phương Tây):

---
}--
Y--
---
---

Các hang động không bao quanh, và tầm nhìn của bạn cũng không. Các bức tường của hang động không được đánh dấu, dấu hiệu duy nhất bot của bạn nhận được rằng nó đang ở gần một bức tường là tầm nhìn của nó bị giảm đi. Với Revealer, bạn có thể nhận được một cái gì đó như thế này:

--------C--
LW--------B
---K-N-----
--------BR-
-F---------
--B--Y---@N
-W@---F----
------K-F--
----@-}----
R@---G}--}-
--------G-R

Đầu ra:

Bạn nhận được hai lần di chuyển mỗi lượt, mà bạn xuất ra theo định dạng sau:

MNNANW    <- Moves are groups of 3 characters representing the action and the direction

Các hành động có thể là như sau:

M    Move - Move your bot in the specified direction
A    Attack - Attack the square in the specified direction
H    Hold - Do nothing

Các hướng có thể là như sau:

NN - North (up)
NE - Northeast (up-right)
EE - East (right)
SE - Southeast (down-right)
SS - South
SW - Southwest
WW - West
NW - Northwest

Các động tác được áp dụng từ trái sang phải.

Biến:

Biến tiến bộ theo cách sau:

  1. Hiệu ứng độc được áp dụng cho bất kỳ người chơi nào bị nhiễm độc

  2. Non-bot di chuyển và tấn công

    2a. Sư tử, rết và dơi di chuyển ngẫu nhiên

    2b. Sư tử và Rết sẽ tấn công mọi thứ liền kề với nó (bao gồm cả đường chéo)

    2c. Hiệu ứng dơi sẽ chỉ được áp dụng cho bot nếu nó ở cùng không gian với dơi

    2đ. Y tá Nina sẽ ở một vị trí trong 3 lượt, và sau đó nhảy đến một vị trí ngẫu nhiên.

  3. Bots di chuyển

    3a. Nếu bot của bạn cho đầu ra không hợp lệ, nó sẽ không di chuyển

    3b. Bot của bạn sẽ cố gắng đến gần không gian được chỉ định bởi đầu ra nhất có thể (xem ghi chú ở phía dưới để biết thêm chi tiết)

    3c. Một cuộc tấn công vào một con rết, sư tử hoặc dơi sẽ giết chết nó

    3d. Tấn công một bot khác mà không dùng dao sẽ gây sát thương 5 điểm và 10 bằng dao

Quy tắc:

  1. Bám sát các ngôn ngữ phổ biến có thể chạy trên OS X hoặc Linux.

  2. Bạn có thể tùy ý ghi tối đa và không vượt quá 1kb dữ liệu vào một tệp

Ghi điểm:

Bots sẽ chỉ ở trong hang cho đến khi chỉ còn một người, hoặc cho đến khi 50 lượt đi qua, tùy theo điều kiện nào đến trước. Bot của bạn sẽ được đánh giá dựa trên tổng số lượng vàng mà nó thu thập được và số lần quay của nó kéo dài.

Mã điều khiển có thể được tải xuống để kiểm tra tại đây (tạo một thư mục có tên là "bot" trong cùng thư mục mà bạn tải xuống và đặt bot của bạn vào "bot") Bạn sẽ cần NumPy để chạy nó. Hãy thoải mái tìm hiểu về nó, nhưng bạn sẽ phải bào chữa cho mớ hỗn độn ...

Đây là một số mã cho một bot ngẫu nhiên:

#!/usr/bin/python
import random as r

a = ['M','A','H']
d = ['NN','NE','EE','SE','SS','SW','WW','NW']

print(a[r.randint(0,2)]+d[r.randint(0,7)]+a[r.randint(0,2)]+d[r.randint(0,7)])

**** Bot của bạn sẽ luôn di chuyển theo hướng chung mà đầu ra của bạn chỉ định, nhưng nếu nó bị cản trở bởi một tảng đá hoặc một bức tường, hướng chính xác phụ thuộc vào hoàn cảnh. Chẳng hạn, nếu bot của bạn chống lại một bức tường như vậy:

---
}--
Y--
---
---

và đầu ra của bạn là

MNWMSW

bot của bạn sẽ di chuyển một không gian xuống. Nó không thể di chuyển Bắc hoặc Tây, do đó di chuyển không có hiệu lực. Nó có thể di chuyển về phía Nam (và đã làm) nhưng không thể di chuyển về phía Tây. Tuy nhiên, nếu bot của bạn cố gắng di chuyển về phía Đông Bắc, nó sẽ đi thẳng vào không gian đó (chuyển động chéo là chéo, không theo thủ tục)

Bảng xếp hạng

Đây là những điểm trung bình của 4 trò chơi.

The bot of Survival:    54.75
Coward:                 52.25
Pufferfish:             50.00
Randombot:              50.00
Indiana Jones:          47.50
TheoremBot:             46.50

Mỗi bot có bao nhiêu sức khỏe? Và các cạnh của hang động trông như thế nào?
Conor O'Brien

Họ bắt đầu với 20 và có thể thu thập bao nhiêu tùy thích. Đã thêm thông tin này ở trên
Beanstalk

Các cạnh của hang động không được đánh dấu, chương trình của bạn sẽ chỉ nhận được các bit mà bạn có khả năng có thể đi bộ.
Beanstalk

Bạn có thực sự không biết sức khỏe của bạn?
pppery

Bạn có thể nhập chiều dài và chiều rộng của tầm nhìn của bot không?
LegionMammal978

Câu trả lời:


4

Indiana Jones, Python 2

Bot này không sợ bất cứ điều gì. Nó sẽ cố gắng để có được vàng; và nếu không tìm thấy, nó sẽ cố gắng đâm đối thủ bằng dao.

#!/usr/bin/env python
import sys
import random
data = sys.stdin.readlines()
health, gold, turns, poison_remaining, pit_remaining, revealer, knife = eval(data[0])
lines = data[1:]

myloc = [-1, -1]

width, height = len(lines[0]), len(lines)

for y, line in enumerate(lines):
    if line.find('Y')>-1:
        myloc = [line.index('Y'), y]
if myloc[0]<width/2:
    padding = int(width/2-myloc[0])
    lines = ['-'*padding+line for line in lines]
    myloc[0]+=padding
elif myloc[0]>width/2+1:
    padding = int(myloc[0]-width/2-1)
    lines = [line+'-'*padding for line in lines]

if myloc[1]<height/2:
    padding = int(height/2-myloc[1])
    lines = ['-'*width]*padding + lines
    myloc[1]+=padding
elif myloc[1]>height/2+1:
    padding = int(myloc[1]-height/2-1)
    lines = lines + ['-'*width]*padding

uddirections = {1:'N',0:'',-1:'S'}
lrdirections = {1:'E',0:'',-1:'W'}

golds = {}
for y, line in enumerate(lines):
    if 'G' in line:
        x = line.index('G')
        direction = ((uddirections[max(min(myloc[1]-y,1),-1)]+lrdirections[max(min(x-myloc[0],1),-1)])*2)[:2]
        distance = max(abs(myloc[0]-x), abs(myloc[1]-y))
        golds[distance] = direction

bots = {}
for y, line in enumerate(lines):
    if '@' in line:
        x = line.index('@')
        direction = ((uddirections[max(min(myloc[1]-y,1),-1)]+lrdirections[max(min(x-myloc[0],1),-1)])*2)[:2]
        distance = max(abs(myloc[0]-x), abs(myloc[1]-y))
        bots[distance] = direction

foods = {}
for y, line in enumerate(lines):
    if 'F' in line:
        x = line.index('F')
        direction = ((uddirections[max(min(myloc[1]-y,1),-1)]+lrdirections[max(min(x-myloc[0],1),-1)])*2)[:2]
        distance = max(abs(myloc[0]-x), abs(myloc[1]-y))
        foods[distance] = direction

knives = {}
for y, line in enumerate(lines):
    if 'K' in line:
        x = line.index('K')
        direction = ((uddirections[max(min(myloc[1]-y,1),-1)]+lrdirections[max(min(x-myloc[0],1),-1)])*2)[:2]
        distance = max(abs(myloc[0]-x), abs(myloc[1]-y))
        knives[distance] = direction

if golds:
    direction = golds[min(golds.keys())]
elif not knife and knives:
    direction = knives[min(knives.keys())]
elif health<20 and foods:
    direction = foods[min(foods.keys())]
elif bots and knife:
    direction = bots[min(bots.keys())]
    if min(bots.keys())==1:
        print ('A'+direction)*2
        sys.exit(0)
    elif min(bots.keys())==2:
        print 'M'+direction+'A'+direction
        sys.exit(0)
else:
    print ('M'+random.choice('NS')+random.choice('NEWS'))*2
    sys.exit(0)
print ('M'+direction)*2

Chỉ cần thay đổi một điều để làm việc này - line.index('Y')sẽ báo lỗi nếu "Y" không có trong dòng, nhưng line.find('Y')sẽ trả về -1 nếu "Y" không có trong dòng. Nếu không, nó thật tuyệt!
Beanstalk

Bạn bot đôi khi đầu ra MSNMSN, không hợp lệ.
pppery

3

Hèn nhát, trăn3

Một kẻ hèn nhát luôn chạy trốn khỏi những mối đe dọa tiềm tàng.

Tuy nhiên, nếu anh ta cảm thấy siêu mạnh, anh ta sẽ đột nhiên chạy điên cuồng và đâm mọi thứ gần anh ta.

Vấn đề với việc thực hiện hiện tại là các lệnh di chuyển được ban hành mà không có kiến ​​thức cho dù đó là lần đầu tiên hay lần thứ hai.

#!/usr/bin/env python3.4

import sys, random


class Coward():
  """
  A coward always runs from potential threats.

  However, if he feels super strong, he will suddenly run amok 
  and stab everything near him.  
  """
  def __init__(self, hp, gold, turn, poison, pit, revealer, knife):
    self.hp=int(hp)
    self.gold=int(gold)
    if knife=="True": self.knife=True
    else: self.knife=False    
    self.pit=int(pit)
    self.poison=int(poison)

  def readGrid(self, grid):
    self.grid=grid.split("\n")
  @property
  def _confidence(self):
    return self.hp+5*self.knife-2*self.poison
  @property
  def _lineOfY(self):
    for i, line in enumerate(self.grid):
      if "Y" in line:
        return i
  @property
  def _colOfY(self):
    return self.grid[self._lineOfY].index("Y")
  @property
  def _maxX(self):
    return len(self.grid)-1
  @property
  def _maxY(self):
    return len(self.grid[0])-1
  def move(self, step):
    d = {'NN':(0,-1),'NE':(1,-1),'EE':(1,0),'SE':(1,1),'SS':(0,1),'SW':(-1,1),'WW':(-1,0),'NW':(-1,-1)}
    c2d={(0,-1):'NN',(1,-1):'NE',(1,0):"EE",(1,1):"SE",(0,1):"SS",(-1,1):"SW",(-1,0):"WW",(-1,-1):"NW"}
    #Don't move into wall/ boulder/ pit
    #print(d, file=sys.stderr)
    for k,v in list(d.items()):
      x=self._lineOfY+v[0]
      y=self._colOfY+v[1]
      #print (k, v ,x , y, file=sys.stderr)
      if x<0 or y<0 or x>self._maxX or y>self._maxY:
        #print ("Out of bounds: ", k, file=sys.stderr)
        del d[k]
      elif self.grid[x][y]=="}" or self.grid[x][y]=="P":
        del d[k]
    #Always avoid bats, and enemys
    for dx in range(-2,3):
      for dy in range(-2,3):
        x=self._lineOfY+dx
        y=self._colOfY+dy
        if x<0 or y<0 or x>self._maxX or y>self._maxY:
          continue;
        if self.grid[x][y] in ["B", "L", "C", "@"]:
          for k in self._toDirection(dx, dy):
            if k in d: del d[k] #Too many threats from all sides can paralyze the Coward: nowhere to go...
    #print(d, file=sys.stderr)
    tomove=[]
    #Neighboring fields
    for dx in [-1,1]:
      for dy in [-1,1]:
        x=self._lineOfY+dx
        y=self._colOfY+dy
        if x<0 or y<0 or x>self._maxX or y>self._maxY:
          continue
        if self.poison>0 and self.grid[x][y]=="W":
          for k,v in d.items():
            if v==(dx,dy):
              tomove.append(k)
        if self.grid[x][y]=="N": #Always go to nurse, even if dangerous
          tomove.append(c2d[(x,y)])
        if self.grid[x][y] in ["F","K","G"]: #Go to Food, Knife or Gold, if save
          for k,v in d.items():
            if v==(dx,dy):
              tomove.append(k)
    #Further away: Go towards food, knife and gold and Nina if save.
    for target in ["N", "F", "G", "K"]:
      for dx in [-2,2]:
        for dy in [-2,2]:
          x=self._lineOfY+dx
          y=self._colOfY+dy
          if x<0 or y<0 or x>self._maxX or y>self._maxY:
            continue
          if self.grid[x][y]==target:
            l=[ k for k in self._toDirection(dx,dy) if k in d]
            if l: tomove.append(random.choice(l))
    s=list(d.keys())
    random.shuffle(s)
    tomove+=s
    try:
      return "M"+tomove[step-1]
    except IndexError:
      return ""
  def attack(self, step):    
    c2d={(0,-1):'NN',(1,-1):'NE',(1,0):"EE",(1,1):"SE",(0,1):"SS",(-1,1):"SW",(-1,0):"WW",(-1,-1):"NW"}
    #If Bot next to you: always attack
    for k,v in c2d.items():
      x=self._lineOfY+k[0]
      y=self._colOfY+k[1]
      if x<0 or y<0 or x>self._maxX or y>self._maxY:
        continue
      if self.grid[x][y]=="@":
        return "A"+v
    #If Bot or monster could come closer: attack potential new position
    attDir={(-2,-2):["NW"], (-2,-1):["NW","WW"], (-2,0):["WW","NW","SW"], (-2,1):["WW","SW"], (-2,2):["SW"],(-1,-2):["NW","NN"], (-1,2):["SW","SS"], (0,2):["SW","SS","SE"],(0,-2):["NW","NN","NE"],(1,-2):["NN","NE"],(1,2):["SS","SE"],(2,-2):["NE"],(2,-1):["NE","EE"], (2,0):["NE","EE","SE"], (2,1):["EE","SE"], (2,2):["SE"]}
    for k,v in attDir.items():
      x=self._lineOfY+k[0]
      y=self._colOfY+k[1]
      if x<0 or y<0 or x>self._maxX or y>self._maxY:
        continue
      if self.grid[x][y] in ["@","L","C","B"]:
        return "A"+random.choice(v)
    return ""
  def _toDirection(self,dx,dy):
    if dx<0:
      if dy<0:
        return ["WW","NW","NN"]
      elif dy==0:
        return ["WW","NW","SW"]
      elif dy>0:
        return ["WW","SW","SS"]
    elif dx>0:
      if dy<0:
        return ["EE","NE","NN"]
      elif dy==0:
        return ["EE","NE","SE"]
      elif dy>0:
        return ["EE","SE","SS"]
    elif dx==0:
      if dy<0:
        return ["NN","NE","NW"]
      elif dy==0:
        return []
      elif dy>0:
        return ["SS","SE","SW"]
  def _nearBat(self):
    for dx in range(-2,3):
      for dy in range(-2,3):
        x=self._lineOfY+dx
        y=self._colOfY+dy
        if x<0 or y<0:
          continue;
        if self.grid[x][y]=="B":
          return True
    return False
  def makeTurn(self):
    try:
      command=""
      #If stuck, just attack
      if self.pit:
        command+=self.attack(1)+self.attack(2)
      #Always run from bats
      if self._nearBat:
        command+=self.move(1)+self.move(2)
      #If high-confidence: attack
      if self._confidence>30:
        command+=self.attack(1)+self.attack(2)
      #Else: Move somewhere
      command+=self.move(1)+self.move(2)
      #Just in case, two random attacks
      d = ['NN','NE','EE','SE','SS','SW','WW','NW']
      a=random.choice(d)
      b=random.choice([ x for x in d if x!=a])
      command+="A"+a+"A"+b
      return command[:6]
    except Exception as e:
      #print (e, file=sys.stderr)
      #Attacking is better than nothing
      d = ['NN','NE','EE','SE','SS','SW','WW','NW']
      a=random.choice(d)
      b=random.choice([ x for x in d if x!=a])
      return "A"+a+"A"+b


info=sys.stdin.readline()
grid=sys.stdin.read()
info=info.split(",")
bot=Coward(*info)
bot.readGrid(grid)
t=bot.makeTurn()
#print(t, file=sys.stderr)
print(t)

3

Bot sống sót - Python 2

from __future__ import print_function
health,gold,survived,poison,pit,revealer,knife = input()
if pit:
    exit()
#Yes, this is python 2, despite the use of input()
lines = []
try:
    while True:
        lines.append(raw_input())
except EOFError:
    pass
CMOVES={"NW":(-1,-1),"NN":(-1,+0),"NE":(-1,+1),
        "WW":(+0,-1),             "EE":(-0,+1),
    "SW":(+1,-1),"SS":(+1,+0),"SE":(+1,+1),
}
MOVES={v:k for k,v in CMOVES.iteritems()}
import sys
def get_your_pos():
    for row,line in enumerate(lines):
        for col,square in enumerate(line):
            if square == "Y":
                return row,col
    raise ValueError("Your bot is not present.")
def isnearby(thing,p=None):
    your_pos = p or get_your_pos()
    for move in MOVES:
        yp = your_pos[0]+move[0],your_pos[1]+move[1]
        try:
            if yp[0] >= 0 and yp[1] >= 0 and lines[yp[0]][yp[1]] == thing:
                return move
        except IndexError:
            #Edge of cavern
            pass
for turn in range(2):
    import random
    nprio = .5
    if health > 25:
        nprio -= .2
    elif health < 10:
        nprio += .3
    if poison:
        nprio += .18
    #heal
    motive = how = None
    if random.random() < nprio:
        nurse = isnearby("N")
        if nurse:
            motive = "M"
            how = MOVES[nurse]
        elif random.random() < nprio:
            food = isnearby("F")
            if food:
                motive = "M"
                how = MOVES[food]
    #cure poison
    if poison and not motive:
        water = isnearby("W")
        if water:
            motive = "M"
            how = MOVES[water]
    if not motive:
        #Kill lions, bats, and centipedes
        for animal in ("L","B","C"):
            animal = isnearby(animal)
            if animal:
                motive = "A"
                how = MOVES[animal]
                y = get_your_pos()
                y = y[0]+animal[0],y[1]+animal[1]
                lines = map(list,lines)
                lines[y[0]][y[1]] = "-"
                break
        else:
            #Pick up knives
            if not knife:
                knife = isnearby("K")
                if knife:
                    motive = "M"
                    how = MOVES[knife]
            #Attack other bots
            else:
                prey = isnearby("@")
                if prey:
                    motive = "A"
                    how = MOVES[prey]
    #Get gold
    gold = isnearby("G")
    if gold and not motive:
        motive = "M"
        how = MOVES[gold]
    def isvalidmove(c):
        c = CMOVES[c]
        y = get_your_pos()
        y=(y[0]+c[0],y[1]+c[1])
        if y[0] >= 0 and y[1] >= 0:
            try:
                lines[y[0]][y[1]]
            except LookupError:
                pass
            else:
                return True
    if turn and not motive:
        motive = "M"
        while not (how and how not in (isnearby("}"),isnearby("P"),isnearby("@"))\
              and isvalidmove(how)):
            how = random.choice(CMOVES.keys())
    if not motive:break
    if not turn and motive == "M":
        lines = map(list,lines)
        yp = get_your_pos()
        lines[yp[0]][yp[1]] = "-"
        yp=[yp[0]+CMOVES[how][0],yp[1]+CMOVES[how][1]]
        lines[yp[0]][yp[1]] = "Y"
    print(motive+how,end="")
else:
    exit()
#Nothing found on first move
def isvaguelynearby(thing):
    your_pos = get_your_pos()
    for move in MOVES:
        yp = your_pos[0]+move[0],your_pos[1]+move[1]
        try:
            if yp[0] >= 0 and yp[1] >= 0 and board[yp[0]][yp[1]] != "P":
                dest = isnearby(thing,yp)
                if dest:
                    return move,dest
        except IndexError:
            #Edge of cavern
            pass
if random.random() < nprio:
    dests = isvaguelynearby("N")
    if not dests and random.random() < nprio:
        dests = isvaguelynearby("F")
    if dests:
        m1,m2 = MOVES[dests[0]],MOVES[dests[1]]
        print("M" + m1 + "M" + m2)
        exit()
dests = (poison and isvaguelynearby("W")) or (not knife and isvaguelynearby("K"))\
    or isvaguelynearby("G")
prey = isvaguelynearby("L") or isvaguelynearby("B") or isvaguelynearby("C") or \
       (knife and isvaguelynearby("@"))
if dests:
    m1,m2 = MOVES[dests[0]],MOVES[dests[1]]
    print("M" + m1 + "M" + m2)
elif prey:
    m1,m2 = MOVES[prey[0]],MOVES[prey[1]]
    print("M" + m1 + "A" + m2)
else:
    how = None
    while not (how and how not in     (isnearby("}"),isnearby("P"),isnearby("@"))\
          and isvalidmove(how)):
        how = random.choice(CMOVES.keys())
    print("M"+how,end="")
    lines = map(list,lines)
    yp = get_your_pos()
    lines[yp[0]][yp[1]] = "-"
    yp=[yp[0]+CMOVES[how][0],yp[1]+CMOVES[how][1]]
    lines[yp[0]][yp[1]] = "Y"
    while not (how and how not in (isnearby("}"),isnearby("P"),isnearby("@"))\
          and isvalidmove(how)):
            how = random.choice(CMOVES.keys())
    print("M"+how)

Chỉnh sửa: thêm hố tránh tốt hơn.


2

Cá nóc, Python 3+

Tôi chỉ là người đó.

#!/usr/bin/env python3.4
import random
def select():
 return "A"+["NN","NE","EE","SE","SS","SW","WW","NW"][random.randint(0,7)]
print(select()+select())

Bot này có mục đích tự cung cấp. Tôi có thể thêm tìm kiếm golf sau này nếu tôi có thời gian.
Conor O'Brien

Nó sẽ làm cho mã của bạn dài hơn một chút, nhưng Pufferfish có thể tấn công hai lần trong cùng một lượt nếu nó muốn trở nên nguy hiểm hơn
Beanstalk

@TheBeanstalk Ohhh ngọt ngào!
Conor O'Brien

Bạn nhận ra rằng bot này sẽ không bao giờ nhận được vàng, và không phải tất cả các bot khác sẽ đi lang thang vào "hào quang tiêu diệt" của nó
pppery

@ppperry Tôi nhận ra điều này; điều này chủ yếu là để có được quả bóng lăn; nó không có mục đích để giành chiến thắng, nhưng để làm cho cuộc sống hơi khó khăn hơn. Như trong, Black Hat Man
Conor O'Brien
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.