यह जीवन है, जिम, लेकिन जैसा कि हम जानते हैं कि यह नहीं है


58

आप शायद कॉनवे के गेम ऑफ लाइफ को जानते हैं , जो गणितज्ञ जॉन कॉनवे द्वारा आविष्कार किया गया प्रसिद्ध सेलुलर ऑटोमेटन है। जीवन नियमों का एक सेट है, जो एक साथ, आपको कोशिकाओं के दो-आयामी बोर्ड का अनुकरण करने की अनुमति देता है। नियम यह तय करते हैं कि बोर्ड पर कौन से सेल रहते हैं और कौन से मर जाते हैं। कुछ कल्पना के साथ, आप कह सकते हैं कि जीवन एक शून्य-खिलाड़ी खेल है: एक ऐसा खेल जिसका उद्देश्य प्रसिद्ध ग्लाइडर की तरह दिलचस्प व्यवहार के साथ पैटर्न ढूंढना है।

ग्लाइडर

एक शून्य-खिलाड़ी खेल ... आज तक। आपको एक कार्यक्रम लिखना है जो गेम ऑफ लाइफ निभाता है - और इसे जीतने के लिए खेलता है, हिल-स्टाइल का राजा। आपका प्रतिद्वंद्वी (एकवचन) बेशक ऐसा करने की कोशिश करता है। विजेता या तो किसी भी जीवित कोशिकाओं के साथ अंतिम बॉट है, या 10000 पीढ़ियों के बाद सबसे अधिक जीवित कोशिकाओं वाला खिलाड़ी है।

खेल के नियमों

नियम लगभग समान हैं (B3 / S23) जीवन:

  • दो से कम अनुकूल पड़ोसियों के साथ एक जीवित कोशिका भुखमरी से मर जाती है।
  • दो या तीन अनुकूल पड़ोसियों के साथ एक जीवित कोशिका जीवित रहती है।
  • तीन से अधिक अनुकूल पड़ोसियों के साथ एक जीवित कोशिका ओवरपॉपुलेशन से मर जाती है।
  • एक ही खिलाड़ी के तीन पड़ोसियों के साथ एक मृत सेल उस खिलाड़ी के लिए लड़ने के लिए जीवित है, बशर्ते कोई दुश्मन पड़ोसी न हो

... लेकिन प्रत्येक पीढ़ी के बाद, आपको और आपके प्रतिद्वंद्वी दोनों को हस्तक्षेप करने का अवसर मिलता है। आपके लिए लड़ने के लिए आप अधिकतम 30 सेल तक जाग सकते हैं। (जो पहले जाता है वह सर्वर द्वारा तय किया जाता है।)

बोर्ड एक (x, y) कोशिकाओं का वर्ग है। सभी वर्ग शुरू में मर चुके हैं। सीमाएं चारों ओर नहीं लपेटती हैं (यह टोरस के आकार की दुनिया नहीं है) और स्थायी रूप से मृत हैं।

यह बैटलबोट्स और कोर वार्स की भावना में एक प्रतियोगिता है । एक केंद्रीय सर्वर है जो बॉट चलाएगा और यह यहां पाया जा सकता है

मसविदा बनाना

क्षेत्र सर्वर argv के माध्यम से संचारित एक साधारण JSON प्रोटोकॉल बोलता है

जहां मान एक JSON एन्कोडेड स्ट्रिंग है

  • y_size: टाइल्स के अधिकतम y तार गायब होने से पहले
  • x_size: टाइल्स के अधिकतम x तार गायब होने से पहले
  • tick_id: वर्तमान टिक नंबर
  • board: फॉर्म '(y, x)' में कुंजियों के साथ एक डिक्शनरी और फॉर्म में bot_idइंट (इंट)
  • bot_id: इस आईडी के साथ बोर्ड में टाइलें आपकी हैं

उदाहरण:

 {"y_size":2000,"x_size":2000,"board":{},"bot_id":1,"tick_id":1}

सर्वर को आपकी पसंद बताना:

  • सर्वर को अपने रंग में बदलने के लिए टाइल्स की एक सूची भेजें।
  • जो खाली हैं उन्हें ही बदला जाएगा
  • नेस्टेड कोर्डर्स सूची प्रारूप
    • [[0,0], [0,1], [100,22]...]

नोट: आपके बॉट को टाइल्स को अपडेट करने की आवश्यकता नहीं है - सर्वर खुद को अपडेट करता है

प्रतियोगिता के नियम

  • यदि आपका कार्यान्वयन प्रोटोकॉल का पालन करने में विफल रहता है, तो जो मोड़ वह करता है वह जब्त कर लिया जाएगा; सर्वर राज्य में कोई परिवर्तन नहीं मान लेगा
  • आपको अखाड़े के सर्वर में गलती से लाभ उठाने की अनुमति नहीं है।
  • एक समय में अपने ऐ कदम पर फैसला किया है। कृपया अपना अगला कदम यथोचित रूप से उपवास करें।
  • अंत में, कृपया सर्वर के लिए अच्छा हो। यह आपके आनंद के लिए है।
  • इन नियमों का पालन नहीं करने से अयोग्यता हो सकती है।
  • एक टाई होने की स्थिति में, दोनों खिलाड़ियों की कुल मिलाकर 1 जीत है

नियंत्रक खुद चल रहा है

नियंत्रक के लिए स्रोत यहां पाया जा सकता है । नियंत्रक को चलाने के 2 तरीके हैं:

  • प्रतियोगिता मोड (टर्मिनल)
    • के साथ सेटअप करें python3 get_answers.py
    • प्रत्येक बॉट के साथ एक सभी वी सभी प्रतियोगिता को चलाएं जो इसे हर दूसरे के खिलाफ खड़ा करता है।
  • परीक्षण मोड (GUI)
    • Daud python3 nice_gui.py
    • क्लिक करें Pull Answers
    • यदि आप पोस्ट करने से पहले अपने स्वयं के उत्तर को जोड़ना चाहते हैं, File -> Add manual answerतो फ़ाइल पर क्लिक करें और उसे खोजें और उस भाषा को चुनें जिसे वह लिखा गया है।
    • यदि आपकी भाषा मुझे पेश नहीं कर रही है और मैं इसे सर्वर पर स्थापित करने की कोशिश करूंगा, तो मैं इसे चलाऊंगा (स्थापना और निर्देश चलाना बहुत अच्छा होगा!)
    • एक दूसरे के खिलाफ गड्ढे करने के लिए 2 बॉट चुनें
    • क्लिक करें Run
    • खेल देखो...
  • स्थापना
    • Python3 की आवश्यकता है
    • get_answers को bs4 और html5lib की आवश्यकता होती है
    • नियंत्रक को .sh फ़ाइलों को चलाने का एक तरीका चाहिए।

उदाहरण एप्लिकेशन की छवि

स्कोरिंग

12/07/2016(12 जुलाई) 14/07/2016 (14 जुलाई ) से शुरू होने वाली सबसे अधिक जीत वाला बॉट जीत हासिल करने के लिए कैसे काम नहीं कर सकता है।


इस चैट रूम में कंट्रोलर / गुई की मदद ली जा सकती है


यह प्रश्न 2014 से विकास में रहा है और सैंडबॉक्स में सबसे अधिक उत्कीर्ण प्रश्न था। विशेष धन्यवाद वांडर नौटा (मूल लेखक और अवधारणा), PPCG चैट (टिप्पणियों और सहायता) और सैंडबॉक्स पोस्ट में टिप्पणी करने वाले किसी भी व्यक्ति (अधिक टिप्पणियां) के लिए जाता है।


25
हुह, मुझे लगा कि यह सैंडबॉक्स से बाहर नहीं निकलेगा। महान!
लुइस मेंडो

टाइपो: 12/06/2016 (12 जुलाई)
लुइस मेंडो

4
+1। आप इस महान प्रश्न को सैंडबॉक्स से बाहर लाने के लिए AED पुरस्कार के योग्य हैं!
agtoever

1
@ केविनलाउ-नहींकेनी ओह, ठीक है। क्या आप किसी फ़ाइल में कमांड चला सकते हैं?
R

1
@ मैगेंटा जब मैं उन्हें प्राप्त करता हूं (मैं इसके बारे में पूरी तरह से भूल गया हूं, भले ही यह लगातार खुले टैब में हो), मैं इसे अभी चला रहा हूं
ब्लू

जवाबों:


4

पायथन 3, एक्स्प्लोरर

जगह के चारों ओर छोटे विस्फोटकों को डालता है, चाहे कोई ब्लॉक पहले से ही हो।

from random import randint
import sys,json,copy
q=json.loads(sys.argv[1])
x=q["x_size"];y=q["y_size"];F=[[0,1],[1,0],[1,1],[1,2],[2,0],[2,2]];D=[]
for g in [0]*5:
 X=randint(0,x);Y=randint(0,y);A=copy.deepcopy(F)
 for C in A:C[0]+=Y;C[1]+=X
 D+=A
print(D)

1
मुझे विश्वास नहीं हो रहा है कि मेरे सभी काम अनिश्चितकालीन विकास के लिए ब्लॉक-मेकिंग स्विच स्थापित करने के बाद और विकास संरचनाओं को ध्वस्त करने के लिए विशेष रूप से निर्मित प्रणाली, एक साधारण विस्फोटक-आधारित प्रणाली ने मुकाबले में मेरा सर्वश्रेष्ठ प्रदर्शन किया: ओ
मूल्य इंक

मुझे नहीं पता कि यह या तो कैसे होता है, क्योंकि मैं जो भी कारण के लिए नियंत्रक नहीं चला सकता।
मैजेंटा

8

रूबी, इंटरप्टिंगब्लॉकमेकर

ट्रेनिंगबॉट जैसे ग्लाइडर को इनिशियलाइज़ करने के बजाय, यह 5x5 ब्लॉक-मेकिंग स्विच मशीन बनाने की कोशिश करता है, जैसा कि विकिपीडिया पर भूलभुलैया में एक यादृच्छिक बिंदु पर बताया गया है । फिर, अपनी शेष सक्रियताओं के साथ, यह सिर्फ दुश्मन बिंदुओं को ढूंढता है और उन्हें बढ़ने से रोकने और संभवतः उनके पैटर्न को गड़बड़ाने के प्रयास में अपने कोशिकाओं के साथ पास के क्षेत्र को काली मिर्च करने की कोशिश करता है। अगली पीढ़ी में आपकी कोशिकाएं मर जाएंगी, लेकिन हो सकता है कि उन्होंने आपके प्रतिद्वंद्वी को धीमा करने के लिए कुछ वृद्धि को रोक दिया हो!

v2: टाइमआउट्स को कम से कम करने की कोशिश करने के लिए थोड़ा अनुकूलित (?)।

v3: हमारे स्वयं के सेल स्थानों को अस्वीकार करने से पहले सक्रिय ब्लॉकों के सबसेट को पूर्व-नमूना करने के लिए अनुकूलित रुकावट कोड, बीच में आने वाले सेल हमलों में कुछ प्रभावशीलता की कीमत पर आगे के समय को रोकने के लिए।

require 'json'

class Range
  def product range2
    self.to_a.product range2.to_a
  end
end

args = JSON.parse(ARGV[0])
bot_id = args["bot_id"]
width  = args["x_size"]
height = args["y_size"]
board  = args["board"]

generator = [[2,2], [2,3], [2,6], [3,2], [3,5], [4,2], [4,5], [4,6], [5,4], [6,2], [6,4], [6,5], [6,6]]

targets = []

iterations = 50
gen_location = nil
while !gen_location && iterations > 0
  y = rand height - 9
  x = rand width  - 9
  temp = (0...9).product(0...9).map{|_y, _x| [y + _y, x + _x]}
  if temp.all?{|_y,_x| !board["(#{y},#{x})"]}
    gen_location = temp
    targets += generator.map{|_y, _x| [y + _y, x + _x]}
  end

  iterations -= 1
end

enemies = board.keys.sample(100).reject {|k| board[k] == bot_id}
interrupts = []
enemies.each do |location|
  y, x = location.scan(/\d+/).map &:to_i
  interrupts |= ((y-1)..(y+1)).product((x-1)..(x+1)).reject{|y, x| gen_location.include?([y,x]) || board["(#{y},#{x})"]}
end

targets += interrupts.sample(30 - targets.size)

puts JSON.dump(targets)

@muddyfish धन्यवाद, यह तय! अब केवल मुद्दा यह है कि विंडोज कमांड लाइन कमांड में 8191 की हार्डकोड सीमा होती है, जिसका अर्थ है कि सिमुलेशन में एक निश्चित बिंदु पर बॉट्स दुर्घटनाग्रस्त JSON स्ट्रिंग को पार्स करने में असमर्थ होगा। यह एक OS मुद्दा है, इसलिए मुझे लगता है कि मुझे अपने बॉट का परीक्षण करने के लिए एक लिनक्स क्लाउड बॉक्स या कुछ और देखना होगा
वैल्यू इंक

@muddyfish मैंने पहले ही उल्लेख किया है कि कमांड लाइन की सीमा के कारण विंडोज में समस्या है, यह अंतिम त्रुटि Cloud9 पर थी जो कि संभवतः एक लिनक्स बॉक्स है। मेरा बॉट आपके लिनक्स बॉक्स पर कैसे किराया करता है (जब से आपने यह सोचा था कि आपके पास एक है)?
मूल्य इंक

यह bot_scoreपता चलता है कि मैंने इसे प्रतिबद्ध नहीं किया था, लेकिन यह दर्शाता है कि प्रत्येक बॉट ने अन्य बॉट्स के खिलाफ कितनी जीत दर्ज की है
ब्लू

ठीक है, धन्यवाद! दुर्भाग्य से, Cloud9 में वास्तव में एक GUI नहीं है और विंडोज अभी भी अंततः अपनी कमांड सीमा को तोड़ने के बिना सिमुलेशन को नहीं चला सकता है, लेकिन कम से कम मुझे एक संक्षिप्त रूप से पता चला कि कैसे बॉट्स एक दूसरे के खिलाफ किराया करते हैं। इसके अलावा, मुझे कुछ समय के लिए अपने बॉट को खुद से लड़ते हुए देखना पड़ता है क्योंकि वे एक-दूसरे पर हमला करते रहते हैं और चरित्र की सीमा को तोड़ने के लिए पर्याप्त विकास को रोकते हैं, हालांकि यह कभी-कभार बाहर होता है ...
वैल्यू इंक

4

पायथन 2, ट्रेनिंगबोट

क्योंकि हर किसी को इनमें से एक की जरूरत होती है!

import random, copy
import sys, json

args = json.loads(sys.argv[1])
bot_id = args["bot_id"]
x_size = args["x_size"]
y_size = args["y_size"]
cur_tick = args["tick_id"]
board = args["board"]

glider = [[1,2],[2,1],[0,0],[0,1],[0,2]]

x_add = random.randrange(x_size)
y_add = random.randrange(y_size)
new_glider = copy.deepcopy(glider)
for coord in new_glider:
    coord[0]+=y_add
    coord[1]+=x_add
move = new_glider
print json.dumps(move)

4

जावा, ट्रोल बॉट

ट्रोल बॉट ने इसके बारे में सोचा है, और उसे पता चलता है कि वह दुश्मन की परवाह नहीं करता है। वास्तव में वह सिर्फ इन कारखानों को अपने नक्शे में बेतरतीब ढंग से अपने दोस्तों के अधिक उत्पादन के लिए फैलाता है। थोड़ी देर बाद उन्होंने महसूस किया कि किसी भी अतिरिक्त कोशिकाओं को क्लैंप में सबसे अच्छा उपयोग किया जाता है। चार कोशिकाओं के ये ब्लॉक आपस में चिपकेंगे और ग्लाइडर को अपनी पटरियों में रोकेंगे! उसे नहीं लगता कि वह सिर्फ लड़ता है। इसके अलावा वह वर्बोज़ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग का एक बड़ा समर्थक है। ट्रोल यह भी मानता है कि कोर्ड्स प्रारूप y, x में हैं, और वह परीक्षण करने के लिए कह रहा है। बस उसे "TrollBot.java" नामक एक फ़ाइल में डालें, और वह सेट हो जाएगा!

package trollbot;

/**
 *
 * @author Rohans
 */
public class TrollBot{
public static class coord{
    public int x;
    public int y;
    public coord(int inX,int inY){
        x = inX;
        y = inY;
    }
    @Override
    public String toString(){
        return"["+x+","+y+"]";
    }
}
    /**
     * Input the JSON as the first cla
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       String JSON="{\"bot_id\":1,\"y_size\":1000,\"x_size\":1000,\"board\":{}}";
    String[] JArray=args[0].split(",");
       int botId=Integer.parseInt(JSON.charAt(10)+"");
    int xSize=Integer.parseInt(JArray[2].substring(JArray[2].indexOf(":")+1));
    int ySize=Integer.parseInt(JArray[1].substring(JArray[1].indexOf(":")+1));
    int[][] board = new int[xSize][ySize];//0 indexed
//todo: parse the board to get an idea of state
    String soldiers="[";    
//for now just ignore whats on the board and put some troll cells on
    //Attempts to create 3 10 cells factories of cells, hoping it does not place it on top of allies
    //Then puts random 2/2 blocks
  boolean[][] blockspam=new boolean[10][8];
  blockspam[7][1]=true;
  blockspam[5][2]=true;
  blockspam[7][2]=true;
  blockspam[8][2]=true;
  blockspam[5][3]=true;
  blockspam[7][3]=true;
  blockspam[5][4]=true;
  blockspam[3][5]=true;
  blockspam[1][6]=true;
  blockspam[3][6]=true;
  for(int z=0;z<3;z++){
     int xOffSet=(int) (Math.random()*(xSize-11));
     int yOffSet=(int) (Math.random()*(ySize-9));
     //stay away from edges to avoid odd interactions
     for(int i=0;i<blockspam.length;i++){
         for(int j=0;j<blockspam[i].length;j++){
             if(blockspam[i][j])
             soldiers+=new coord(j+yOffSet,i+xOffSet).toString()+",";
         }
     }
  }
  soldiers=soldiers.substring(0,soldiers.length()-1);
  for(int i=0;i<8;i++){
            int y=(int ) (Math.random()*(ySize-1));
            int x = (int) (Math.random()*(xSize-1));
      soldiers+=new coord(y,x).toString()+",";
                          soldiers+=new coord(y+1,x).toString()+",";
                          soldiers+=new coord(y,x+1).toString()+",";
                          soldiers+=new coord(y+1,x).toString()+",";

  }
  soldiers+="\b]";

  System.out.println(soldiers);
  //GO GO GO! Lets rule the board
    }

}

3

पायथन 3, रैंडमबॉट

इस बॉट को बुद्धिमान निर्णय लेने में परेशानी होती है, लेकिन यह कम से कम चीजों को अन्य चीजों के ऊपर रखने की कोशिश नहीं करना जानता है। यह बेतरतीब ढंग से ग्लाइडर, नावें, C / 2 Orthagonal s, और 2x2 ब्लॉकों को विभिन्न झुकावों के साथ बनाएगा , यह सुनिश्चित करेगा कि जब उन्हें रखा जाए तो वे किसी और चीज, दुश्मन या दुश्मन के साथ अतिव्यापी न हों।

जब मैं GUI चलाने की कोशिश करता हूं, तो इस बॉट का परीक्षण नहीं किया गया, क्योंकि मैं सभी प्रकार की त्रुटियां प्राप्त कर रहा हूं। इसके अलावा, मैंने बेस के रूप में ट्रेनिंगबॉट का इस्तेमाल किया और सिर्फ एडिट किया, इसलिए कोड में कोई समानता शायद उसी वजह से है।

import random, copy
import sys, json
args = json.loads(sys.argv[1])
bot_id = args["bot_id"]
x_size = args["x_size"]
y_size = args["y_size"]
board = args["board"]
occupied = [tuple(key) for key,value in iter(board.items())]
cellsleft=30
move=[]
choices = [[[1,2],[2,1],[0,0],[0,1],[0,2]],
           [[0,0],[0,1],[1,1],[1,0]],
           [[0,1],[1,0],[0,2],[0,3],[1,3],[2,3],[3,3],[4,3],[5,2],[5,0]],
           [[0,0],[1,0],[0,1],[2,1],[2,2]]]
while cellsleft>0:
    x_add = random.randrange(x_size)
    y_add = random.randrange(y_size)
    new_glider = copy.deepcopy(random.choice(choices))
    randomdirection = random.choice([[1,1],[1,-1],[-1,1],[-1,-1]])
    maxy=max([y[0] for y in new_glider])
    maxx=max([x[1] for x in new_glider])
    for coord in new_glider:
        coord[0]=coord[0]*randomdirection[0]+y_add
        coord[1]=coord[1]*randomdirection[1]+x_add
        cellsleft-=1
    set([tuple(x) for x in new_glider]) 
    if not set([tuple(x) for x in new_glider]) & (set(occupied)|set([tuple(x) for x in move])) and cellsleft>0:
        if min(y[0] for y in new_glider)<0: new_glider = [[y[0]+maxy,y[1]] for y in new_glider]
        if min(y[1] for y in new_glider)<0: new_glider = [[y[0],y[1]+maxx] for y in new_glider]
        move += new_glider
    elif set([tuple(x) for x in new_glider]) & (set(occupied)|set([tuple(x) for x in move])):
        cellsleft+=len(new_glider)

print(json.dumps(move))

1
GUI आपके print(sys.argv[1])लाइन 3 पर होने के कारण सबसे अधिक विफल हो रहा है , जो आउटपुट को गड़बड़ कर देता है (सिम्युलेटर को केवल निर्देशांक की स्ट्रिंग की उम्मीद है जिसे आप जागना चाहते हैं)। इसके अलावा, आपके कार्यक्रम की अंतिम पंक्ति एक समापन पैरा याद कर रही है।
मूल्य स्याही

@ केविनलाउ-केकेनी जीयूआई प्रशिक्षण बॉट और रूबी बॉट पर भी विफल हो रहा था। मैंने उस लाइन को हटा दिया, हालांकि, और समापन परन में जोड़ा (मुझे लगता है कि बाद वाला एक कॉपी-पेस्ट त्रुटि था)।
स्टीवन एच।

जब आप इसे चलाते हैं, तो आप किस ऑपरेटिंग सिस्टम पर हैं, और कमांड लाइन में क्या त्रुटियाँ हैं? वर्तमान में यह एक ज्ञात बग है कि कमांड लाइन के माध्यम से पारित तर्कों के कारण विंडोज ठीक से सिम नहीं चला सकता है जब वे लगभग 8000 की कमांड लाइन वर्ण सीमा से अधिक हो जाते हैं।
मान इंक

@ केविनलाउ-केकेनी मैं विंडोज 10 का उपयोग कर रहा हूं, और मुझे मिल गया है ... ठीक है, बहुत सारी त्रुटियां। पहली बात यह थी कि BeautifulSoup ढूंढना नहीं चाहता था html5lib, फिर सभी बॉट्स वाले फ़ोल्डर को नहीं ढूंढना था (मुझे इन दोनों के लिए कोड बदलना था), और तब से पायथन बॉट के चलने का परिणाम नॉन-0 रिटर्न कोड है। 1.
स्टीवन एच।

विंडोज अभी भी कोड नहीं चला सकता है अगर स्क्रीन पर बहुत सारे सक्रिय सेल हैं ... लेकिन आपकी अन्य त्रुटियों के लिए, यह हो सकता है क्योंकि ट्रेनिंगबोट पायथन 2 चाहता है?
वैल्यू इंक

3

पायथन, गाइविथागुन

वह एक आदमी है, उसे एक बंदूक मिल गई है; वह पागल है। वह सिर्फ हर जगह ग्लाइडर बंदूकें डंप करता है, इस बात की परवाह किए बिना कि कोई और क्या कर रहा है

import random, copy
import sys, json

args = json.loads(sys.argv[1])
bot_id = args["bot_id"]
x_size = args["x_size"]
y_size = args["y_size"]
tick_id = args["tick_id"]
board = args["board"]

start_squares = [[0,5],[2,5],[1,6],[2,6],
                 [35,3],[36,3],[35,4],[36,4]]
gun = [[11,5],[11,6],[11,7],
       [12,4],[12,8],
       [13,3],[13,9],
       [14,3],[14,9],
       [15,6],
       [16,4],[16,8],
       [17,5],[17,6],[17,7],
       [18,6],
       [21,3],[21,4],[21,5],
       [22,3],[22,4],[22,5],
       [23,2],[23,6],
       [25,1],[25,2],[25,6],[25,7]]

templates = [start_squares, gun]

def add_squares(pos, coords):
    new_squares = copy.deepcopy(coords)
    for coord in new_squares:
        coord[0]+=pos[0]
        coord[1]+=pos[1]
    return new_squares

def get_latest_pos():
    seed, template_id = divmod(tick_id, 2)
    random.seed(seed)
    cur_pos = [random.randrange(y_size),
               random.randrange(x_size)]
    cur_template = templates[template_id]
    try:
        return add_squares(cur_pos, cur_template)
    except IndexError:
        return []

move = get_latest_pos()

print json.dumps(move)

2

पायथन 3, स्क्वायरबॉट

हर जगह फुहारें-शायद

वर्ग जीवन में स्थिर वस्तु हैं- वे चलती नहीं हैं। इसलिए अगर मैं जगह के आसपास पर्याप्त अक्रिय वस्तुओं को रखता हूं, तो जो ग्लाइडर और विस्फोट अन्य बनाते हैं वे संभवतः अवरुद्ध हो जाएंगे, या कम से कम भीग जाएंगे।

TrainingBot से अनुकूलित

from random import randint
import sys,json,copy
args=json.loads(sys.argv[1])
x=args["x_size"];y=args["y_size"]
square=[[0,0],[0,1],[1,0],[1,1]];D=[]
for g in range(7):
 X=randint(0,x);Y=randint(0,y)
 A=copy.deepcopy(square)
 for C in A:C[0]+=Y;C[1]+=X
 D+=A
print(D)

हालांकि मुझे इसका परीक्षण करने में परेशानी हो रही है



मैं यह पुष्टि कर सकता हूं कि यह बॉट वास्तव में वही करता है जो इसका मतलब है - और इसने मुझे कंट्रोलर में एक बग ढूंढने और ठीक करने में मदद की
ब्लू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.