বিজ্ঞপ্তি
এই চ্যালেঞ্জটি শেষ হয়ে গেছে এবং পুনরায় বিচার করা হবে না, তবে উত্তর পোস্ট করতে এবং নির্দ্বিধায় আপনার প্রোগ্রামটিকে অন্যদের বিরুদ্ধে নিয়ন্ত্রণ প্রোগ্রামের সাথে পরীক্ষা করে নির্দ্বিধায় পড়ুন!
এই চ্যালেঞ্জটির লক্ষ্য হ'ল প্রতিপক্ষকে অবরুদ্ধ করার জন্য 25x25 গ্রিডে কৌশলগতভাবে একটি প্রাচীর অঙ্কন করে অন্য একটি এআইয়ের বিরুদ্ধে লড়াইয়ে জয়লাভ করা এআইকে তৈরি করা।
ইনপুট
25 লাইন পৃথক করে এবং ;
কমান্ড-লাইন আর্গুমেন্ট হিসাবে শেষ হয় । এর মধ্যে অন্তর্ভুক্ত থাকবে:
- খালি স্পেস
.
- দেয়াল
#
- খেলোয়াড়
1
এবং2
(প্রতিপক্ষ সর্বদা থাকে2
)
উদাহরণ
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
যা নিম্নলিখিত মানচিত্রের প্রতিনিধিত্ব করে:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
আউটপুট
কনসোলটিতে লেখা একটি স্ট্রিং, এআইটি যে দিকে ঘুরতে চায় তার প্রতিনিধিত্ব করে অক্ষর দিয়ে শুরু হবে। এই হল কেস সংবেদনশীল!
- উত্তর
N
- পূর্ব
E
- দক্ষিণ
S
- পশ্চিম
W
- ছেড়ে দিন (অন্য কিছু)
উদাহরণ
W
খেলার নিয়ম
- এআইগুলি সরানোর সাথে সাথে তারা পেছনের প্রাচীরের শক্ত ট্রেইল ছেড়ে যাবে।
- প্লেয়ারগুলি উপরের-বাম এবং নীচে-ডান কোণে শুরু হয়
- কোনও এআই কোনও দেয়াল বা এআইআই একে অপরের মধ্যে ক্রাশ না হওয়া অবধি খেলাটি চলে।
- তাদের প্রতিপক্ষ প্রথমে ক্রাশ হলে একটি এআই জিতে যায়
- নেই কোন বিজয়ী বা পরাজিতর যদি AIs উভয় হারান একই সময়ে।
- যদি একটি এআই গ্রিডের এক প্রান্ত থেকে যায় তবে তারা অন্য দিক থেকে একই দিকে চালিয়ে যায়।
র্যাঙ্কিং
1 ম স্থান - ফ্লাডবট (জাভা, 12 টি জয়)
২ য় স্থান - ফ্লুইডবট (পাইথন, 9 টি জয়)
তৃতীয় স্থান - ফিলআপ আপ (সি ++, 8 টি জয়)
চতুর্থ স্থান - অ্যাওবট (রুবি, 5 জয়)
5 ম স্থান - আরকবোট (পাইথন, 4 টি জয়)
6th ষ্ঠ স্থান - ব্লাইন্ডস্পেক (ব্যাচ, ২ টি জয়)
6th ষ্ঠ স্থান - র্যান্ডমবট (সি #, 2 জয়)
নিয়ন্ত্রণ প্রোগ্রাম (পাইথন ৩.৩.৩ এর জন্য পরীক্ষিত)
প্রোগ্রামটি দুটি কমান্ডের আর্গুমেন্ট এবং একটি একক যুক্তির ( ""
যদি প্রয়োজন না হয়) এআই সহ উদাহরণস্বরূপ পরিচালিত হয় যেমন। Control.py "ruby" "AwayBot.rb" "FillUpBot.exe" ""
। এটি এখানে ডাউনলোড করা যায় ।
import sys, subprocess
Program1, Argument1, Program2, Argument2, Player1, Player2, Grid = sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], [0, 0], [24, 24], [['.' for y in range(25)] for x in range(25)]
while True:
Str = ''
for x in range(25):
for y in range(25):
if Grid[x][y] == '1' or Grid[x][y] == '2':
Grid[x][y] = '#'
Grid[Player1[0]][Player1[1]] = '1'
Grid[Player2[0]][Player2[1]] = '2'
for y in range(25):
for x in range(25):
Str += Grid[x][y]
Str += ';'
if Argument1 == '':
move = subprocess.Popen([Program1, Str], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
else:
move = subprocess.Popen([Program1, Argument1, Str], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
Lose1 = False
if move == 'N':
if Player1[1] > 0:
Player1[1] -= 1
else:
Player1[1] = 24
elif move == 'E':
if Player1[0] < 24:
Player1[0] += 1
else:
Player1[0] = 0
elif move == 'S':
if Player1[1] < 24:
Player1[1] += 1
else:
Player1[1] = 0
elif move == 'W':
if Player1[0] > 0:
Player1[0] -= 1
else:
Player1[0] = 24
else:
Lose1 = True
if Grid[Player1[0]][Player1[1]] == '#' or Grid[Player1[0]][Player1[1]] == '2':
Lose1 = True
print('Player 1:', move)
if Argument2 == '':
move = subprocess.Popen([Program2, Str.replace('2','3').replace('1','2').replace('3','1')], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
else:
move = subprocess.Popen([Program2, Argument2, Str.replace('2','3').replace('1','2').replace('3','1')], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
Lose2 = False
if move == 'N':
if Player2[1] > 0:
Player2[1] -= 1
else:
Player2[1] = 24
elif move == 'E':
if Player2[0] < 24:
Player2[0] += 1
else:
Player2[0] = 0
elif move == 'S':
if Player2[1] < 24:
Player2[1] += 1
else:
Player2[1] = 0
elif move == 'W':
if Player2[0] > 0:
Player2[0] -= 1
else:
Player2[0] = 24
elif Lose1:
Lose2 = True
else:
Lose2 = True
print('Player 2:', move)
print(Str.replace(';', '\n'))
if Grid[Player2[0]][Player2[1]] == '#':
Lose2 = True
if Lose1 and Lose2:
print('Draw!')
break
elif Lose1:
print('Player 2 wins!')
break
elif Lose2:
print('Player 1 wins!')
break