Comment detail

マルバツゲーム (Nested Flatten)

MARU: 5765 BATU: 2707 DRAW: 1528 となりました。

RandPlayer.prototype.think の部分を修正することで Player を差し替えることができます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
var Board = function(){ this.init(); };
Board.prototype = {
    cell : [],
    size : 3,
    init : function(){
        for( var i = 0; i < this.size; i++ ){
            this.cell[i] = [];
        }
    },
    isVacant : function( x, y ){ return this.cell[x][y] == undefined; },
    put : function( x, y, id ){ this.cell[x][y] = id; },
    judge : function( x, y ){
        var i;
        var size = this.size;
        var cell = this.cell;
        for( i = 1; i < size; i++ ){
            if( cell[i-1][y] == undefined || cell[i-1][y] != cell[i][y] )
                break;
        }
        if( i == size ) return true;
        for( i = 1; i < size; i++ ){
            if( cell[x][i-1] == undefined || cell[x][i-1] != cell[x][i] )
                break;
        }
        if( i == size ) return true;
        if( x == y ){
            for( i = 1; i < size; i++ ){
                if( cell[i-1][i-1] == undefined || cell[i-1][i-1] != cell[i][i] )
                    break;
            }
            if( i == size ) return true;
        }
        if( x + y == size - 1 ){
            for( i = 1; i < size; i++ ){
                if( cell[i-1][size-1] == undefined || cell[i-1][size-i] != cell[i][size-i-1] )
                    break;
            }
            if( i == size ) return true;
        }
        return false;
    }
};

var Player = function(){};
Player.prototype = {
    put : function( b, x, y ){ b.put( x, y ); },
    think: undefined,
    win : 0
};
var RandPlayer = function(){};
RandPlayer.prototype = new Player();
RandPlayer.prototype.think = function( b ){
    var x,y,tmp;
    var size = b.size
    var max = size * size;
    while(1){
        tmp = Math.floor(Math.random() * max );
        x = Math.floor( tmp / size );
        y = tmp % size;
        if( b.isVacant( x, y ) ) break;
    }
    return {x:x, y:y};
};

var b = new Board();
var max = b.size * b.size;
var target;
var p = [ new RandPlayer(),  new RandPlayer() ];

for( var i = 0; i < 10000; i++ ){
    b.init();
    for( j = 0; j < max; j++ ){
        target = p[j%2].think( b );
        b.put(target.x, target.y, j%2 );
        if( b.judge( target.x, target.y ) )
            break;
    }
    if( j != max ){
        p[j%2].win++;
    }
}

document.write("MARU: " + p[0].win + "<br/>" );
document.write("BATU: " + p[1].win + "<br/>" );
document.write("DRAW: " + (10000 - p[0].win - p[1].win) + "<br/>" );

Index

Feed

Other

Link

Pathtraq

loading...