আংশিক পর্যবেক্ষণযোগ্য সংযোগ -4


8

খেলাাটি

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

ইতিমধ্যে পূর্ণ কলামগুলির মধ্যে যে কোনও চলন আপনার পালা হিসাবে গণ্য হবে এবং কোনও গেম যদি টার্নের চেয়ে বেশি সময় ধরে চালিত হয় তবে 6 * 7এটি ড্র হিসাবে রায় দেওয়া হবে।

চ্যালেঞ্জ স্পেসিফিকেশন

আপনার প্রোগ্রামটি পাইথন 3 ফাংশন হিসাবে প্রয়োগ করা উচিত। প্রথম যুক্তি হ'ল বোর্ডের একটি 'ভিউ', যা নীচে থেকে শীর্ষে সারিগুলির 2D তালিকা হিসাবে পরিচিত বোর্ডের রাষ্ট্রকে প্রতিনিধিত্ব করে যেখানে 1প্রথম খেলোয়াড়ের চালনা, 2দ্বিতীয় খেলোয়াড়ের 0চালনা এবং একটি খালি অবস্থান বা একটি লুকানো আপনার প্রতিপক্ষ দ্বারা সরানো

দ্বিতীয় যুক্তিটি হল একটি টার্ন নম্বর যা থেকে সূচিকৃত হয় 0এবং এর সমতা আপনাকে বলে দেয় আপনি কোন খেলোয়াড়।

চূড়ান্ত যুক্তি হ'ল একটি স্বেচ্ছাসেবী রাষ্ট্র, Noneপ্রতিটি গেমের শুরুতে শুরু হয়, যা আপনি পালাগুলির মধ্যে রাষ্ট্র সংরক্ষণ করতে ব্যবহার করতে পারেন।

আপনি যে কলাম সূচকটি খেলতে চান তার একটি 2-tuple ফিরে আসা উচিত এবং পরের বারের দিকে আপনাকে নতুন রাষ্ট্র ফিরিয়ে দেওয়া উচিত।

স্কোরিং

হিসাবে একটি জয় গন্য +1, যেমন ড্র 0, এবং একটি ক্ষতি -1। আপনার লক্ষ্যটি হল একটি রাউন্ড-রবিন টুর্নামেন্টে সর্বোচ্চ গড় স্কোর অর্জন। আমি একটি পরিষ্কার বিজয়ী সনাক্ত করতে প্রয়োজন হিসাবে অনেক ম্যাচ চালানোর চেষ্টা করব।

বিধি

যে কোনও প্রতিযোগীর কাছে যে কোনও সময়ে সর্বাধিক একটি প্রতিযোগী বট হওয়া উচিত, তবে আপনি উন্নতি করে থাকলে আপনার প্রবেশিকা আপডেট করা ঠিক হবে। অনুগ্রহ করে আপনার বটকে প্রতি টার্ন ভাবার সময়কে 1 ডলারে সীমাবদ্ধ করার চেষ্টা করুন to

পরীক্ষামূলক

নিয়ামকটির জন্য উত্স কোডটি এখানে একসাথে উল্লেখযোগ্য কয়েকটি প্রতিদ্বন্দ্বী উদাহরণস্বরূপ বটগুলি সহ:

import itertools
import random

def get_strides(board, i, j):
    yield ((i, k) for k in range(j + 1, 7))
    yield ((i, k) for k in range(j - 1, -1, -1))
    yield ((k, j) for k in range(i + 1, 6))
    yield ((k, j) for k in range(i - 1, -1, -1))
    directions = [(1, 1), (-1, -1), (1, -1), (-1, 1)]
    def diag(di, dj):
        i1 = i
        j1 = j
        while True:
            i1 += di
            if i1 < 0 or i1 >= 6:
                break
            j1 += dj
            if j1 < 0 or j1 >= 7:
                break
            yield (i1, j1)
    for d in directions:
        yield diag(*d)

DRAWN = 0
LOST = 1
WON = 2
UNDECIDED = 3

def get_outcome(board, i, j):
    if all(board[-1]):
        return DRAWN
    player = board[i][j]
    strides = get_strides(board, i, j)
    for _ in range(4):
        s0 = next(strides)
        s1 = next(strides)
        n = 1
        for s in (s0, s1):
            for i1, j1 in s:
                if board[i1][j1] == player:
                    n += 1
                    if n >= 4:
                        return WON
                else:
                    break
    return UNDECIDED

def apply_move(board, player, move):
    for i, row in enumerate(board):
        if board[i][move] == 0:
            board[i][move] = player
            outcome = get_outcome(board, i, move)
            return outcome
    if all(board[-1]):
        return DRAWN
    return UNDECIDED

def get_view(board, player):
    view = [list(row) for row in board]
    for i, row in enumerate(view):
        if i % 2:
            continue
        for j, x in enumerate(row):
            if x == 3 - player:
                row[j] = 0
    return view

def run_game(player1, player2):
    players = {1 : player1, 2 : player2}
    board = [[0] * 7 for _ in range(6)]
    states = {1 : None, 2 : None}
    for turn in range(6 * 7):
        p = (turn % 2) + 1
        player = players[p]
        view = get_view(board, p)
        move, state = player(view, turn, states[p])
        outcome = apply_move(board, p, move)
        if outcome == DRAWN:
            return DRAWN
        elif outcome == WON:
            return p
        else:
            states[p] = state
    return DRAWN

def get_score(counts):
    return (counts[WON] - counts[LOST]) / float(sum(counts))

def run_tournament(players, rounds=10000):
    counts = [[0] * 3 for _ in players]
    for r in range(rounds):
        for i, player1 in enumerate(players):
            for j, player2 in enumerate(players):
                if i == j:
                    continue
                outcome = run_game(player1, player2)
                if outcome == DRAWN:
                    for k in i, j:
                        counts[k][DRAWN] += 1
                else:
                    if outcome == 1:
                        w, l = i, j
                    else:
                        w, l = j, i
                    counts[w][WON] += 1
                    counts[l][LOST] += 1
        ranks = sorted(range(len(players)), key = lambda i: get_score(counts[i]), reverse=True)
        print("Round %d of %d\n" % (r + 1, rounds))
        rows = [("Name", "Draws", "Losses", "Wins", "Score")]
        for i in ranks:
            name = players[i].__name__
            score = get_score(counts[i])
            rows.append([name + ":"] + [str(n) for n in counts[i]] + ["%6.3f" % score])
        lengths = [max(len(s) for s in col) + 1 for col in zip(*rows)]
        for i, row in enumerate(rows):
            padding = ((n - len(s)) * ' ' for s, n in zip(row, lengths))
            print(''.join(s + p for s, p in zip(row, padding)))
            if i == 0:
                print()
        print()

def random_player(view, turn, state):
    return random.randrange(0, 7), state

def constant_player(view, turn, state):
    return 0, state

def better_random_player(view, turn, state):
    while True:
        j = random.randrange(0, 7)
        if view[-1][j] == 0:
            return j, state

def better_constant_player(view, turn, state):
    for j in range(7):
        if view[-1][j] == 0:
            return j, state

players = [random_player, constant_player, better_random_player, better_constant_player]

run_tournament(players)

শুভ কোথিং!

অস্থায়ী ফলাফল

Name                    Draws Losses Wins  Score  

zsani_bot:              40    5377   94583  0.892 
better_constant_player: 0     28665  71335  0.427 
constant_player:        3     53961  46036 -0.079 
normalBot:              38    64903  35059 -0.298 
better_random_player:   192   71447  28361 -0.431 
random_player:          199   75411  24390 -0.510 

আপনি কেন [-1] [জে] == 0 চেক দেখছেন তা ব্যাখ্যা করতে পারেন? আমি এগুলি পুরোপুরি নিশ্চিত নই যে আপনি কোথায় সেগুলি ভরিয়েছেন এবং আমার অজগর জ্ঞানটি কিছুটা মরিচা বলে মনে হচ্ছে।
বার্বিয়ান 772

@ বার্বারিয়ান 7272২ আমি যাচ্ছি যে কলামটিতে এখনও স্থান আছে কিনা তা আমি যাচাই করছি। নোট করুন যে এখানে 6 টি সারি রয়েছে তাই উপরের সারিটি পুরোপুরি পর্যবেক্ষণ করা হয়।
ব্যবহারকারী1502040

1
আপনার পাস হিসাবে ইতিমধ্যে পূর্ণ কলামগুলিতে স্থাপন করা গণনা করা উচিত নয়। অনেকগুলি 4 টি গেমের সমাপ্তি ঘটে কেবল একটি কলামে ভরাট না হয়ে এবং যদি কোনও খেলোয়াড় সেই কলামে খেলে হেরে যায়, অন্যথায় এটি কোনও খেলোয়াড়ের জন্য বাধ্যতামূলক জয় হলে গেমটি টাই হয়ে যাবে।
soktinpk

@soktinpk এটি কি কেবল কৌশলটির অন্য স্তরটি যুক্ত করে না? কানেক্ট -4 সর্বোপরি একটি সমাধান হওয়া খেলা, সুতরাং টার্ন এড়িয়ে যাওয়া ফ্যাক্টর একটি নিয়ম পরিবর্তনের পক্ষে যথেষ্ট পরিমাণে হতে পারে যা অবদানকারীরা কেবলমাত্র স্ট্যান্ডার্ড অ্যালগরিদমগুলি ব্যবহার করতে পারে না।
মাইপটেলিয়ন

1
নীচ থেকে জিরো-ইনডেক্সিং, টেপযুক্ত ওভার সারিগুলি (0,2,4,6) বা (1,3,5)? কিছু ASCII শিল্প সহায়ক হবে।
সাইনস্ট্যাকএফএল্ট

উত্তর:


6

এই বটটি সমস্ত নিশ্চিত বিজয় গ্রহণ করে এবং প্রতিদ্বন্দ্বীদের অবরুদ্ধ করতে পিছনে পড়ে, দ্বিতীয়টি অনুভূমিক এবং অনুভূমিকভাবে অনুমান করে বা এলোমেলো পদক্ষেপ করে।

প্রিন্ট, গণিত, সংগ্রহ, অনুলিপি আমদানি করুন
Def zsani_bot_2 (দেখুন, ঘুরুন, অবস্থা):
    যদি রাষ্ট্র == কোনওটি নয়: # প্রথম নিজস্ব পালা - সর্বদা মাঝারি জন্য
        রাজ্য = (১, ২) যদি ঘুরেন == 0 অন্য (২, ১) # (আমার_সঙ্কিত, আপনার প্রতীক)
        # মুদ্রণ (pprint.pformat (দেখুন) + 'টার্ন:' + স্ট্রিং (টার্ন) + 'প্লেয়ার:' + স্টার (রাষ্ট্র [0]))
        3 ফেরত, রাষ্ট্র

    সুস্পষ্ট পয়েন্টগুলি তালিকান #
    আমার সীমার জন্য (1, 6): # প্রথম সারিতে স্কিপ দিন
        জে রেঞ্জের জন্য (লেন (দেখুন [i]): # টিডো: জিপ দিয়ে অনুকূলিত করুন এখন স্পষ্টতা জন্য যান
            যদি [i] [j]! = 0 এবং [i-1] [জে] == 0 দেখুন:
                [i-1] [জে] = অবস্থা [1]
    শত্রু_পয়েন্টগুলি = গণিত.ফ্লোয়ার (টার্ন / 2)
    ++ শত্রু_পয়েন্টগুলি যদি রাষ্ট্র [0] == 2 অন্য শত্রু_বিন্দুতে থাকে
    জ্ঞাত_পয়েন্টগুলি = সমষ্টি ([আইকুউন্ট (রাজ্য [1]) আমার দৃষ্টিতে রয়েছে])
    অনুপস্থিত_পয়েন্টগুলি = শত্রু_ পয়েন্ট - পরিচিত_পয়েন্টগুলি

    # নিশ্চিত হোন যে কোনও দিকেই জিতছে
    পরিসীমা j এর জন্য (0, 7): # প্রতিটি কলাম
        আমার সীমাতে (4, -1, -1):
            যদি [i] [জে] দেখুন! = 0:
                #find সর্বোচ্চ পরিচিত ভরাট পয়েন্টটি ভাঙ্গুন break
        যদি (অনুপস্থিত_পয়েন্টগুলি বা আই +1 1 3 1, 3, 5}):
            ভিউ 1 = অনুলিপি.দীপকপি (দেখুন)
            প্রচেষ্টা = প্রয়োগ_মোভ (দর্শন 1, রাজ্য [0], জে)
            যদি চেষ্টা == বিজয়ী:
               # মুদ্রণ (pprint.pformat (দেখুন) + 'টার্ন:' + স্ট্রিং (টার্ন) + 'প্লেয়ার:' + স্টার (রাষ্ট্র [0]) + 'বিজয়ী পদক্ষেপ')
                রিটার্ন জে, রাজ্য

    নিশ্চিত করুন যে কোনও দিকে শত্রু জিততে পারে
    পরিসীমা জে জন্য (0, 7):
        আমার সীমাতে (4, -1, -1):
            যদি [i] [জে] দেখুন! = 0:
                #find সর্বোচ্চ পরিচিত ভরাট পয়েন্টটি ভাঙ্গুন break
        যদি (অনুপস্থিত_পয়েন্টগুলি বা (i + 1 in {1, 3, 5})):
            ভিউ 1 = অনুলিপি.দীপকপি (দেখুন)
            প্রচেষ্টা = প্রয়োগ_মোভ (দর্শন 1, রাষ্ট্র [1], জে)
            যদি চেষ্টা == বিজয়ী:
              # মুদ্রণ (pprint.pformat (দেখুন) + 'টার্ন:' + স্ট্রিং (টার্ন) + 'প্লেয়ার:' + স্টার (রাষ্ট্র [0]) + 'সংরক্ষণের পদক্ষেপ')
                রিটার্ন জে, রাজ্য

    # ব্লক দেয়াল
    আমার সীমার জন্য (0, 3): # কলামটি পূর্ণ হয়ে গেলে পরপর 4 টি পাওয়া অসম্ভব
        পরিসীমা জে জন্য (0, 6):
            যদি [i] [j]! = 0 এবং দেখুন [i] [j] == দেখুন [i + 1] [জে] এবং দেখুন [i + 2] [জে] == দেখুন [আমি + 3] [জে ] == 0:
             # মুদ্রণ (pprint.pformat (দেখুন) + 'টার্ন:' + স্ট্রিং (টার্ন) + 'প্লেয়ার:' + স্টার (রাষ্ট্র [0]) + 'কলাম মুভ')
                রিটার্ন জে, রাজ্য

    # অবরুদ্ধ প্ল্যাটফর্মগুলি নীচে এবং ড্রপ পয়েন্টে নিখুঁত তথ্য পোজ দিলে
    আমার সীমাতে (0, 5):
        পরিসীমা জে জন্য (0, 3):
            পরিসংখ্যান = সংগ্রহসমূহ ounউত্তর ([দেখুন [আমি] [জে], দেখুন [আমি] [জে + ১], দেখুন [আমি] [জে + ২], দেখুন [আমি] [জে + ৩]])
            যদি পরিসংখ্যান [0] == 2 এবং (পরিসংখ্যান [রাষ্ট্র [0]] == 2 বা পরিসংখ্যান [রাষ্ট্র [0]] == 2):
                পরিসরে K এর জন্য (0, 3):
                    যদি [i] [জে + কে] == 0:
                        বিরতি
                যদি (i == 0 বা দেখুন [i-1] [জে + কে]! = 0) এবং (নিখোঁজ_পয়েন্ট বা আমি {1, 3, 5} এ নেই):
                    # মুদ্রণ (pprint.pformat (দেখুন) + 'টার্ন:' + স্ট্রিং (টার্ন) + 'প্লেয়ার:' + স্টার (রাষ্ট্র [0]) + 'প্ল্যাটফর্ম সরানো')
                    রিটার্ন জে + কে, স্টেট
                অন্য:
                    এল রেঞ্জের জন্য (কে, 3):
                        যদি [i] [জে + এল] == 0:
                            বিরতি
                        যদি (i == 0 বা দেখুন [i-1] [জে + এল]! = 0) এবং (অনুপস্থিত_পয়েন্টগুলি বা আমি {1, 3, 5 in এ নেই):
                     # মুদ্রণ (pprint.pformat (দেখুন) + 'টার্ন:' + স্ট্রিং (টার্ন) + 'প্লেয়ার:' + স্টার (রাষ্ট্র [0]) + 'প্ল্যাটফর্ম সরানো')
                            রিটার্ন জে + এল, রাষ্ট্র

    # ফলব্যাক -> এলোমেলো
    যদিও সত্য:
        j = random.randrange (0, 7)
        যদি [-1] [জে] == 0:
            # মুদ্রণ (pprint.pformat (দেখুন) + 'টার্ন:' + স্ট্রিং (টার্ন) + 'প্লেয়ার:' + স্টার (রাষ্ট্র [0]) + 'এলোমেলো পদক্ষেপ')
            রিটার্ন জে, রাজ্য

রান_গেম ঠিক করার জন্য আপনাকে ধন্যবাদ!

পরিবর্তণের:

  • ভি 2 অনুভূমিক ব্লকিং যোগ করে - যদি 4 এর সারিতে, একই প্লেয়ার দ্বারা দুটি খালি দাগ এবং দুটি দাগ ভরা থাকে, তবে এটির একটির সারিতে তিনটি রাখার / প্রতিপক্ষের সারিতে ব্লক করার চেষ্টা করবে, যা আশাবাদী নিম্নলিখিত ঘুরে উপর মূলধন করা।

3
সাইটে স্বাগতম। আমি কোডটি পরিবর্তন করতে সম্পাদনাটি প্রত্যাখ্যান করার পক্ষে মতামত দিয়েছিলাম, এটি একটি মন্তব্য হিসাবে সবচেয়ে ভাল হবে, এইভাবে ওপি কোডটি দিয়ে কী করবে তা সিদ্ধান্ত নিতে পারে।
অ্যাডহক গার্ফ হান্টার

মূল পোস্টে মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই। আমি কীভাবে একটি সম্পাদনা প্রত্যাহার করব?
সিফার পোলস্কি

সম্পাদনাটি প্রত্যাহারের দরকার নেই (আমি মনে করি না আপনি যেভাবে পারেন)) ভবিষ্যতে মন্তব্য করা যথেষ্ট হবে তবে যেহেতু আপনি আপনার উত্তরে এটি বলেছেন, সম্ভবত এটি ওপি দেখবে। প্লাস আমি মনে করি যে ওপি দেখতে পাবে যে আপনি প্রস্তাবিত এবং সম্পাদনা করলেও তা প্রত্যাখ্যান করা হলেও।
অ্যাডহক গারফ হান্টার

আমি সম্পাদনাটি প্রত্যাহার করতে চাইার কারণ হ'ল পরিবর্তনের মধ্যে আমি একটি লাইন মিস করেছি, এটি ছাড়া সম্পাদিত কোডটি পুরোপুরি চলতে ব্যর্থ হবে। আমি এটিকে আমার পোস্টে সম্পাদনা পরামর্শে অন্তর্ভুক্ত করেছি। আপনার সাহায্যের জন্য ধন্যবাদ!
সাইফার পোলস্কি

2

নরমালবট এই অনুমানের উপর নির্ভর করে যে মাঝের দাগগুলি প্রান্তে দাগের চেয়ে বেশি মূল্যবান। সুতরাং, এটির পছন্দগুলি নির্ধারণ করার জন্য এটি মাঝখানে কেন্দ্রিক একটি সাধারণ বিতরণ ব্যবহার করে।

def normalBot(view, turn, state):
    randomNumber = round(np.random.normal(3, 1.25))
    fullColumns = []
    for i in range(7):
        if view[-1][i] != 0:
            fullColumns.append(i)
    while (randomNumber > 6) or (randomNumber < 0) or (randomNumber in fullColumns):
        randomNumber = round(np.random.normal(3, 1.25))
    return randomNumber, state

-1

এটি স্পষ্টতই অ-প্রতিযোগিতামূলক, তবে তবুও এটি ডিবাগিংয়ের জন্য খুব দরকারী ... এবং আশ্চর্যজনকভাবে মজাদার, আপনি যদি নিজের বটটি প্রতারণার পক্ষে যথেষ্ট জানেন: ডি তাই আরও জমা দেওয়ার অনুপ্রেরণার আশায় আমি পোস্ট করছি:

import math, pprint
def manual_bot(view, turn, state):
    if state == None:
        state = (1, 2) if turn == 0 else (2, 1) #(my_symbol, your symbol)

#locate obvious points
    for row in range (1, 6):
        for j in range(len(view[row])):
            if view[row][j] != 0 and view[row-1][j] == 0:
                view[row-1][j] = state[1]

#if you're second, the opponent has one more point than half the turns
    enemy_points = math.ceil(turn/2)
    known_points = sum([row.count(state[1]) for row in view])
    missing_points = enemy_points - known_points

    print(pprint.pformat(view) + ' Turn: ' + str(turn) + ' Player: ' + str(state[0]) + ' Missing points: ' + str(missing_points))
    while True:
        try:
            move = int(input("What is your move?(0-6) "))
        except ValueError:
            continue
        if move in {0, 1, 2, 3, 4, 5, 6}:
            return move, state

গ্রিডটি উল্টোদিকে রয়েছে (নীচের সারিটি সর্বোচ্চ) is বিজয়ীর ঘোষণা পেতে, আপনাকে জয়টি ফিরিয়ে দেওয়ার আগে একটি মুদ্রণ বিবৃতি যুক্ত করে গেম নিয়ামককে প্যাচ করতে হবে:

elif outcome == WON:
    print(pprint.pformat(board) + ' Turn: ' + str(turn) +' Winner: '+ str(p))
    return p

[[0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 0 প্লেয়ার: 1 মিসিং পয়েন্ট: 0
আপনার পদক্ষেপটি কি? (0-6) 3
[[0, 0, 0, 1, 0, 0, 0],
 [0, 0, 0, 2, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 2 প্লেয়ার: 1 মিসিং পয়েন্ট: 0
আপনার পদক্ষেপ কি? (0-6) 2
[[0, 0, 1, 1, 0, 0, 0],
 [0, 0, 0, 2, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 4 প্লেয়ার: 1 মিসিং পয়েন্ট: 1
আপনার পদক্ষেপ কি? (0-6) 4
[[0, 0, 1, 1, 1, 0, 0],
 [0, 0, 0, 2, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 6 প্লেয়ার: 1 মিসিং পয়েন্ট: 2
আপনার পদক্ষেপ কি? (0-6) 1
[[2, 1, 1, 1, 1, 2, 0],
 [0, 0, 0, 2, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 6 বিজয়ী: 1
[[0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 1 প্লেয়ার: 2 মিসিং পয়েন্ট: 1
আপনার পদক্ষেপ কি? (0-6) 2
[[0, 0, 2, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 3 প্লেয়ার: 2 মিসিং পয়েন্ট: 2
আপনার পদক্ষেপটি কি? (0-6) 3
[[0, 0, 2, 1, 0, 0, 0],
 [0, 0, 1, 2, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 5 প্লেয়ার: 2 মিসিং পয়েন্ট: 1
আপনার পদক্ষেপ কি? (0-6) 4
[[0, 0, 2, 1, 2, 0, 0],
 [0, 0, 1, 2, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 7 প্লেয়ার: 2 মিসিং পয়েন্ট: 2
আপনার পদক্ষেপ কি? (0-6) 1
[[0, 2, 2, 1, 2, 0, 0],
 [0, 0, 1, 2, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]] ঘুরুন: 9 প্লেয়ার: 2 মিসিং পয়েন্ট: 1
আপনার পদক্ষেপ কি? (0-6) 2
[[0, 2, 2, 1, 2, 0, 0],
 [0, 0, 1, 2, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0],
 [0, 0, 2, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0]] টার্ন: 11 প্লেয়ার: 2 মিসিং পয়েন্ট: 1
আপনার পদক্ষেপ কি? (0-6) 4
[[0, 2, 2, 1, 2, 0, 0],
 [0, 0, 1, 2, 2, 0, 0],
 [0, 0, 1, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0],
 [0, 0, 2, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0]] ঘুরুন: 13 প্লেয়ার: 2 মিসিং পয়েন্ট: 2
আপনার পদক্ষেপ কি? (0-6) 4
[[0, 2, 2, 1, 2, 0, 0],
 [0, 1, 1, 2, 2, 0, 0],
 [0, 0, 1, 0, 1, 0, 0],
 [0, 0, 1, 0, 2, 0, 0],
 [0, 0, 2, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0]] ঘুরুন: 15 প্লেয়ার: 2 মিসিং পয়েন্ট: 1
আপনার পদক্ষেপটি কি? (0-6) 3
[[0, 2, 2, 1, 2, 0, 0],
 [0, 1, 1, 2, 2, 0, 0],
 [0, 0, 1, 2, 1, 0, 0],
 [0, 0, 1, 0, 2, 0, 0],
 [0, 0, 2, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0]] ঘুরুন: 17 প্লেয়ার: 2 মিসিং পয়েন্ট: 2
আপনার পদক্ষেপটি কি? (0-6) 5
[[0, 2, 2, 1, 2, 1, 1],
 [0, 1, 1, 2, 2, 2, 1],
 [0, 0, 1, 2, 1, 0, 0],
 [0, 0, 1, 0, 2, 0, 0],
 [0, 0, 2, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0]] ঘুরুন: 19 প্লেয়ার: 2 মিসিং পয়েন্ট: 0
আপনার পদক্ষেপ কি? (0-6) 
আপনার পদক্ষেপ কি? (0-6) 6
[[0, 2, 2, 1, 2, 1, 1],
 [0, 1, 1, 2, 2, 2, 1],
 [0, 0, 1, 2, 1, 0, 2],
 [0, 0, 1, 0, 2, 0, 0],
 [0, 0, 2, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0]] ঘুরুন: 21 প্লেয়ার: 2 মিসিং পয়েন্ট: 1
আপনার পদক্ষেপ কি? (0-6) 1
[[0, 2, 2, 1, 2, 1, 1],
 [0, 1, 1, 2, 2, 2, 1],
 [0, 2, 1, 2, 1, 0, 2],
 [0, 1, 1, 0, 2, 0, 0],
 [0, 0, 2, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0]] ঘুরুন: 23 প্লেয়ার: 2 মিসিং পয়েন্ট: 1
আপনার পদক্ষেপটি কি? (0-6) 3
[[0, 2, 2, 1, 2, 1, 1],
 [0, 1, 1, 2, 2, 2, 1],
 [0, 2, 1, 2, 1, 0, 2],
 [0, 1, 1, 2, 2, 0, 0],
 [0, 0, 2, 0, 0, 0, 0],
 [0, 0, 1, 0, 0, 0, 0]] ঘুরুন: 25 প্লেয়ার: 2 মিসিং পয়েন্ট: 2
আপনার পদক্ষেপ কি? (0-6) 6
[[0, 2, 2, 1, 2, 1, 1],
 [0, 1, 1, 2, 2, 2, 1],
 [0, 2, 1, 2, 1, 0, 2],
 [0, 1, 1, 2, 2, 0, 2],
 [0, 0, 2, 1, 0, 0, 0],
 [0, 0, 1, 1, 0, 0, 0]] ঘুরুন: 27 প্লেয়ার: 2 মিসিং পয়েন্ট: 1
আপনার পদক্ষেপটি কি? (0-6) 5
[[1, 2, 2, 1, 2, 1, 1],
 [1, 1, 1, 2, 2, 2, 1],
 [0, 2, 1, 2, 1, 2, 2],
 [0, 1, 1, 2, 2, 0, 2],
 [0, 0, 2, 1, 0, 0, 0],
 [0, 0, 1, 1, 0, 0, 0]] ঘুরুন: 29 প্লেয়ার: 2 মিসিং পয়েন্ট: 0
আপনার পদক্ষেপটি কি? (0-6) 5
[[1, 2, 2, 1, 2, 1, 1],
 [1, 1, 1, 2, 2, 2, 1],
 [0, 2, 1, 2, 1, 2, 2],
 [0, 1, 1, 2, 2, 2, 2],
 [0, 0, 2, 1, 0, 0, 0],
 [0, 0, 1, 1, 0, 0, 0]] ঘুরুন: 29 বিজয়ী: 2
1 এর 1 রাউন্ড

নাম স্কোর হেরেছে স্কোর
ম্যানুয়াল_বোট: 0 0 2 1.000 zsani_bot_2: 0 2 0 -1.000

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.