سؤال

أنا على الحصول على أكثر دراية VBA و أنا أحاول القيام آلة التعلم برنامج تيك تاك تو.أنا لا أريد أن مجرد رمز القرص الثابت الاحتمالات للفوز.

أفضل أنا قد يأتي مع الجهاز برنامج التعلم هو أن يكون هناك هيكل الشجرة مع جميع التحركات المحتملة التي يمكن أن تكون مصنوعة ، ومن ثم يكون الكمبيوتر قطع فروع الشجرة كلما فإنه يفقد مع ذلك الفرع.

على سبيل المثال مع الطريقة التالية للدلالة حيث كان الناس قد لعبت ترتيب الحروف كما هي مكتوبة ترتيب اللعبة تقدم

a|b|c
-----
d|e|f
-----
g|h|i

abdgfce - يعني الكمبيوتر انتصارات ، وقد لعبت لأول مرة ، ب الثانية ، د الثالثة....

أود الحصول على بيانات الشجرة التي تبدو مثل:

مستوى 0:a (الكمبيوتر يبدأ دائما مع)

المستوى 1:كل الحروف ما عدا ، كما سبق أن لعبت

المستوى 2:لكل حرف في المستوى 0 ، كل الحروف ما عدا واحدة قبل ذلك ،

و ذلك على كل المستويات من الشجرة حتى لا مزيد من التحركات المحتملة.

حاولت تبحث عن سبل لتنفيذ هذا الهيكل في VBA ولكن موقع مايكروسوفت من أي مساعدة و المنتديات فقط الكلام الثنائية أو الفرز الأشجار.شخص ما لي نقطة في الاتجاه الصحيح أو أن تعطيني بعض المؤشرات على ما يجب أن نحاول ؟ ما هي أفضل طريقة لحل هذه المشكلة إذا كان هذا الحل ليس ممكنا ؟

شكرا لك

كريم

هل كانت مفيدة؟

المحلول

هناك "فقط" 362,880 طريقة لملء تسعة أماكن في تيك تاك تو الجدول.مجموعة كاملة يمكن أن تتولد في العمود A من خلال وضع:

تعني وجود اختالفات

في الخلية B1 و تشغيل GetString():

Dim ll As Long
Dim CurrentRow As Long

Sub GetString()
    Dim InString As String
    InString = Sheets("Sheet1").Range("B1")
    ActiveSheet.Columns(1).Clear
    CurrentRow = 1
    Application.ScreenUpdating = False
        Call GetPermutation("", InString)
    Application.ScreenUpdating = True
End Sub

Sub GetPermutation(x As String, y As String)
    '   The source of this algorithm is unknown
    Dim i As Long, j As Long
    j = Len(y)
    If j < 2 Then
        Cells(CurrentRow, 1) = x & y
        CurrentRow = CurrentRow + 1
    Else
        For i = 1 To j
            Call GetPermutation(x + Mid(y, i, 1), _
            Left(y, i - 1) + Right(y, j - i))
        Next
    End If
End Sub

xx

وبطبيعة الحال ، فإن غالبية الألعاب ينتهي قبل كل تسعة أماكن تمتلئ.إذا كان الكمبيوتر يفقد هذا البند هو إزالتها ، إلخ.

تحرير#1:

واين G.دان واقترح عدد من الاختلافات قد تكون مخفضة.الكمبيوتر (لاعب#1) تسع ممكن يضعها مكان لها X. لاعب#2 ثم ثمانية الأماكن الممكنة لها مكان O. الخ.

هذا ينتج 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 أو 9 مضروب.

ومع ذلك ، فإن لعبة يمكن أن ينتهي قبل كل تسعة أماكن تمتلئ.وهكذا العديد من 362880 الاختلاف يمكن التخلص منها............أنا فقط لا أعرف كيف العديد من.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top