গুহা রেঞ্জার্স - অন্ধকার অন্বেষণ


9

আপনার ভূতাত্ত্বিক বন্ধুটি যখন ফেটে পড়ল তখন আপনার অফিসের দরজাটি প্রায় লাথি মেরে ফেলল, উচ্ছ্বসিত চোখে চোখ পড়ল এবং আপনাকে সন্ধান করা কোনও সাইটে তার সাথে আসতে বলল। পথে তিনি ব্যাখ্যা করেছেন যে তিনি ভাবেন যে তিনি আক্ষরিকভাবে সোনাকে আঘাত করেছেন। কেবল সমস্যাটি হ'ল এটি খুব অস্থির ছাদযুক্ত একটি গুহায় গভীর ভূগর্ভস্থ সমাহিত। এটি স্পেলিংকিংয়ে যাওয়া খুব বিপজ্জনক, সুতরাং তিনি চান যে আপনি তাঁর একটি গুহা অন্বেষণকারী রোবটকে যতটা সোনার সংগ্রহ করতে পারেন সেটিকে ব্যাক আপ টানানোর আগেই এটি প্রোগ্রাম করতে পারেন। তিনি আরও উল্লেখ করেছেন যে তিনি গুহাটি অনুসন্ধান করেছেন এবং এমন কিছু বন্যজীবন খুঁজে পেয়েছেন যা রোবটগুলির পক্ষে ক্ষতিকারক হতে পারে এবং তিনি এমন কিছু সরঞ্জাম সেখানে রেখেছিলেন যা এখনও ব্যবহারযোগ্য হতে পারে। প্রতিটি রোবট দুটি বাহু এবং বিভিন্ন সেন্সর দিয়ে সজ্জিত। আপনি যখন ঘটনাস্থলে পৌঁছেছেন, তিনি আপনাকে বলেন যে তিনি আরও কোডার নিয়োগের পরিকল্পনা করছেন,

এখন, নীচে কৌতুক নিচে। সেন্সরগুলি ASCII অক্ষর হিসাবে আপনার প্রোগ্রামে তথ্য দেয়। প্রতিটি চরিত্রের অর্থ কী এবং বট গুহায় যে বোটের মুখোমুখি হতে পারে তার বিশদটি এখানে একটি তালিকা:

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

কয়টি বট অংশ নিচ্ছে তার উপর ভিত্তি করে কভারের আকার বৃদ্ধি পায়। এটি 30x30 হিসাবে শুরু হয় এবং এটি প্রতিটি বোটের জন্য অতিরিক্ত 10x10 পায়। সুতরাং 2 বট 50x50 গুহাটি সন্ধান করবে।

20 টি স্বাস্থ্য দিয়ে বট শুরু হয় তবে তাদের স্বাস্থ্যের সর্বাধিক সীমা থাকে না।

ইনপুট:

আপনি নিম্নলিখিত বিন্যাসে STDIN এর মাধ্যমে ইনপুট পাবেন:

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-

প্রথম লাইনে আপনার বট সম্পর্কিত তথ্য রয়েছে এবং বাকি অংশটি আপনার গ্রটটি দেখতে পাবে এমন গ্রিড। যদি আপনার বটটি গুহাটির 4 টি দেয়ালের বিপরীতে থাকে তবে আপনি একটি গ্রিড পাবেন যা দেখতে আরও ভাল লাগে (পশ্চিমে সব দিক থেকে যাওয়ার ক্ষেত্রে):

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

গুহাটি চারপাশে মোড়ানো হয় না এবং আপনার দৃষ্টিও দেয় না। গুহার দেওয়াল চিহ্নিত করা হয়নি, আপনার বটটি কেবলমাত্র ইঙ্গিত দেয় যে এটি কোনও প্রাচীরের নিকটে রয়েছে এটির দৃশ্য হ্রাস করা হচ্ছে। প্রকাশকের সাথে, আপনি এই জাতীয় কিছু পেতে পারেন:

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

আউটপুট:

আপনি প্রতি টার্নে দুটি চাল পান, যা আপনি নিম্নলিখিত ফর্ম্যাটে আউটপুট দেন:

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

সম্ভাব্য ক্রিয়াগুলি নিম্নলিখিত:

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

সম্ভাব্য দিকনির্দেশগুলি নিম্নলিখিত:

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

চালগুলি বাম থেকে ডানে প্রয়োগ করা হয়।

পালা:

নিম্নলিখিত ফ্যাশনে অগ্রগতি ঘুরিয়ে:

  1. বিষক্রিয়াজনিত যে কোনও খেলোয়াড়ের জন্য বিষের প্রভাব প্রয়োগ করা হয়

  2. নন-বটস সরানো এবং আক্রমণ করে

    2A। সিংহ, সেন্টিপিডস এবং ব্যাটস এলোমেলোভাবে সরানো

    2b। সিংহ এবং সেন্টিপিডস এর সাথে সংলগ্ন সমস্ত কিছু আক্রমণ করবে (ত্রিভুজ সহ)

    2C। ব্যাটের প্রভাব কেবল একটি বট ক্ষেত্রে প্রয়োগ করা হবে যদি এটি ব্যাটের মতো একই জায়গায় থাকে

    2d। নার্স নিনা একটি স্থানে 3 টার্নের জন্য অবস্থান করবে এবং তারপরে এলোমেলো লোকেশনে চলে যাবে।

  3. বট চলা

    3a। যদি আপনার বটটি অবৈধ আউটপুট দেয় তবে তা সরবে না

    3b। আপনার বট যতটা সম্ভব আউটপুট দ্বারা নির্ধারিত স্থানের কাছাকাছি যাওয়ার চেষ্টা করবে (আরও বিশদে বিশদটির জন্য নীচের নোটটি দেখুন)

    3C। একটি সেন্টিপিড, সিংহ বা ব্যাটের আক্রমণ একটিটিকে হত্যা করবে

    3d। একটি ছুরি ছাড়া অন্য বট আক্রমণ আক্রমণ 5 টি ক্ষতি করতে হবে, এবং 10 একটি ছুরি দিয়ে

নিয়মাবলী:

  1. ওএস এক্স বা লিনাক্সে চালিত হতে পারে এমন সাধারণ ভাষায় লেগে থাকুন।

  2. আপনি কোনও ফাইলের কাছে 1kb ডেটা অতিক্রম না করে optionচ্ছিকভাবে লিখতে পারেন

স্কোরিং:

বটগুলি কেবলমাত্র একটি অবধি অবধি অবধি অবধি পশুর মধ্যে থাকবে অথবা 50 টি মোড় চলে যাবে যতক্ষণ না প্রথমে আসে। আপনার বটটি কতগুলি সোনার মুদ্রা সংগ্রহ করেছে এবং কতটি পালা হয়েছে তার সমষ্টি অনুসারে বিচার করা হবে।

কন্ট্রোলার কোডটি এখানে পরীক্ষার জন্য ডাউনলোড করা যেতে পারে (আপনি যে ডিরেক্টরিটি ডাউনলোড করেছেন সেই একই ডিরেক্টরিতে "বটস" নামে একটি ফোল্ডার তৈরি করুন এবং আপনার বটকে "বটস" এর ভিতরে রাখুন) এটি চালানোর জন্য আপনার নুমপি দরকার হবে। এটি খনন করতে নির্দ্বিধায়, তবে আপনাকে এই জগাখিচুড়ি মাফ করতে হবে ...

এলোমেলো বটের জন্য এখানে কিছু কোড রয়েছে:

#!/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)])

**** আপনার বটটি সর্বদা আপনার আউটপুট নির্দিষ্ট দিকের দিকে যেতে থাকে তবে এটি যদি কোনও শিলা বা দেয়াল দ্বারা বাধা হয়ে থাকে তবে সঠিক দিকটি পরিস্থিতিটির উপর নির্ভর করে। উদাহরণস্বরূপ, যদি আপনার বটটি প্রাচীরের বিপরীতে থাকে:

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

এবং আপনার আউটপুট হয়

MNWMSW

আপনার বট এক স্থান নীচে সরানো হবে। এটি উত্তর বা পশ্চিম স্থানান্তর করতে পারেনি, সুতরাং সেই পদক্ষেপের কোনও প্রভাব ছিল না। এটি দক্ষিণে সরে যেতে পারে (এবং করেছিল) তবে পশ্চিমকে সরাতে পারেনি। তবে, যদি আপনার বট উত্তর-পূর্ব দিকে সরানোর চেষ্টা করে তবে এটি সরাসরি সেই জায়গায় চলে যাবে (তির্যক আন্দোলনটি তির্যক, প্রক্রিয়াভিত্তিক নয়)

লিডারবোর্ড

এগুলি 4 গেমের গড় স্কোর।

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

প্রতিটি বট কতটুকু স্বাস্থ্য আছে? এবং গুহাটির প্রান্তটি কেমন দেখাচ্ছে?
কনর ও'ব্রায়েন

তারা 20 দিয়ে শুরু করে এবং তারা যতটা চায় সংগ্রহ করতে পারে। উপরের এই তথ্যটি যুক্ত করা হয়েছে
দ্য বিণস্টালক

গুহাটির প্রান্তগুলি চিহ্নিত করা হয়নি, আপনার প্রোগ্রামটি কেবলমাত্র বিটগুলি পাবেন যা আপনি সম্ভাব্যভাবে চলতে পারেন।
দ্য বিণস্টাল্ক

আপনি কি সত্যিই নিজের স্বাস্থ্য জানেন না?
পিপ্পারি

আপনি কি বটের দর্শনের দৈর্ঘ্য এবং প্রস্থকে ইনপুট দিতে পারবেন?
LegionMammal978

উত্তর:


4

ইন্ডিয়ানা জোন্স, পাইথন 2

এই বট কিছুই ভয় পায় না। এটি সোনা পাওয়ার চেষ্টা করবে; এবং এটি যদি কিছু না পায় তবে এটি বিরোধীদেরকে ছুরি দিয়ে আঘাত করার চেষ্টা করবে।

#!/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

এই কাজটি করার জন্য কেবল একটি জিনিস পরিবর্তন করতে হয়েছিল - line.index('Y')"Y" লাইনে না থাকলে একটি ত্রুটি line.find('Y')ফেলবে , তবে "Y" লাইনে না থাকলে -1 ফিরে আসবে। নাহলে দারুণ!
দ্য বিস্টালক

আপনি বট কখনও কখনও আউটপুট MSNMSN, যা অবৈধ।
পিপিরি

3

কাপুরুষ, অজগর 3

একটি কাপুরুষ সর্বদা সম্ভাব্য হুমকী থেকে চালায়।

যাইহোক, যদি তিনি নিজেকে শক্তিশালী মনে করেন তবে তিনি হঠাৎ শৌখিন হয়ে চালাবেন এবং তার কাছের সমস্ত জিনিস ছুরিকাঘাত করবেন।

বর্তমান বাস্তবায়নে সমস্যা হ'ল মুভ কমান্ডগুলি প্রথম বা দ্বিতীয় পদক্ষেপ কিনা তা অজান্তেই জারি করা হয়।

#!/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

বেঁচে থাকার বট - পাইথন 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)

সম্পাদনা করুন: আরও ভাল পিট এড়ানো।


2

পাফফলিশ, পাইথন 3+

আমি ঠিক সেই ব্যক্তি

#!/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())

এই বটটির স্ব-রক্ষণের উদ্দেশ্য রয়েছে। আমার যদি সময় থাকে তবে আমি পরে গল্ফ-সন্ধান যুক্ত করতে পারি।
কনর ও ব্রায়েন

এটি আপনার কোডটি আরও দীর্ঘায়িত করবে, তবে পফফারফিস আরও ঘাতক হতে চাইলে একই ঘুরে একবার দুবার আক্রমণ করতে সক্ষম হবে
দ্য বিনস্টালক ২

@ দ্য বিয়ানস্টালক ওহহ মিষ্টি!
কনর ও'ব্রায়েন

আপনি বুঝতে পেরেছেন যে এই বটটি কখনও কোনও স্বর্ণ পাবে না, এবং অন্যান্য সমস্ত বটগুলি তার "কিল
আরাতে

@ পিপারি আমি এটি উপলব্ধি করতে পারি; এটি মূলত বল ঘূর্ণায়মান ছিল; এটি জয়ের উদ্দেশ্য নয়, তবে জীবনকে আরও জটিল করে তোলা। যেমনটি রয়েছে, ব্ল্যাক হ্যাট ম্যান
কনর ও'ব্রায়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.