-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpoker-evaluator.ts
179 lines (146 loc) · 6.96 KB
/
poker-evaluator.ts
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { expect } from "chai";
import { ethers } from "hardhat";
import { exit } from "process";
import { DpTables__factory, Evaluator7__factory, Flush1__factory, Flush2__factory, Flush3__factory, NoFlush10__factory, NoFlush11__factory, NoFlush12__factory, NoFlush13__factory, NoFlush14__factory, NoFlush15__factory, NoFlush16__factory, NoFlush17__factory, NoFlush1__factory, NoFlush2__factory, NoFlush3__factory, NoFlush4__factory, NoFlush5__factory, NoFlush6__factory, NoFlush7__factory, NoFlush8__factory, NoFlush9__factory } from "./types";
// Evaluator
// 1. Rank
// 2. Big in Rank
// Note
// 1. compile long time, do not touch flush/
async function deploy_flushs(
owner : SignerWithAddress,
using_previous_deploy : boolean
) {
if (using_previous_deploy) {
return [
'0x0c4471deDaE2dB1e53a4927ca598A9236A9cD773',
'0xd9402769415035d59dE98733Dd166c4e903B4f8C',
'0x48F8e25562EB57c9Fb1b12145d34f09b1b8bd1D6'
]
}
let flushs = []
flushs.push((await (new Flush1__factory(owner)).deploy()).address)
flushs.push((await (new Flush2__factory(owner)).deploy()).address)
flushs.push((await (new Flush3__factory(owner)).deploy()).address)
return flushs
}
async function deploy_no_flushs(
owner : SignerWithAddress,
using_previous_deploy : boolean
) {
let noflushs =[]
if (using_previous_deploy) {
return [
'0x07766aD370370af9d2564A2B44f34be626d3E2e0',
'0xabEc9277CBC275131b61c41081cc5b5a08C267a3',
'0x91b1bf08A37EB91294FC8dc59b0951A2EEF1522a',
'0x608242cB19bcBBfeC14CA47A7DA146048d407098',
'0x0A7C5f090Be105EfAb0Cf6705e4f7135c267A3E9',
'0x432D0AF948bab85e65D6672de68D20B2cE13E1a6',
'0xcC9a29f1C7EFF7F21B2ebee2ea5039c7b507f30a',
'0xA610bE3F3220C932D7215dA9C16f1105F1b278C2',
'0xDe3fFd98d7030c057b2B75913732d43ec1978408',
'0xbFF54DEA53D243E35389e3f2C7F9c148b0113104',
'0xE0837d7477A7b19b19e153750aC263513dA2E5d2',
'0x9ffA320029C5883852428db23cF5449477a04626',
'0xA9B7E7Cbe38DB57c35CbCff3F77CB98d28D218e3',
'0x8F8a52Ee35A15F29c789b7a635aA78bC10628B87',
'0x968A20D6241BCCaBe710136950876aD1Bf31512f',
'0x1C254319da64bD459A361B0f4568306DabcCF6E2',
'0xF3E8A05937d2f02192604b0B59Ed311808662Ff9'
]
}
noflushs.push((await (new NoFlush1__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush2__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush3__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush4__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush5__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush6__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush7__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush8__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush9__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush10__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush11__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush12__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush13__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush14__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush15__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush16__factory(owner)).deploy()).address)
noflushs.push((await (new NoFlush17__factory(owner)).deploy()).address)
return noflushs
}
async function main(
) {
const owners = await ethers.getSigners()
let owner : SignerWithAddress = owners[0]
console.log("owner : ", owner.address, " balance : ", await owner.getBalance())
const dpTable = await (new DpTables__factory(owner)).deploy()
console.log("dpTable.address : ", dpTable.address)
let flushs = await deploy_flushs(owner, process.env.USING_PREDEPLOY_FLUSHS == undefined ? false : true)
console.log("flushs : ", flushs)
let noflushs = await deploy_no_flushs(owner, process.env.USING_PREDEPLOY_FLUSHS == undefined ? false : true)
console.log("noflushs : ", noflushs)
const eva = await (new Evaluator7__factory(owner)).deploy(
dpTable.address,
flushs,
noflushs,
{gasLimit : 10000000}
)
console.log("eva.address : " , eva.address)
enum RANK {
STRAIGHT_FLUSH = 0,
FOUR_OF_A_KIND = 1,
FULL_HOUSE = 2,
FLUSH = 3,
STRAIGHT = 4,
THREE_OF_A_KIND = 5,
TWO_PAIR = 6,
ONE_PAIR = 7,
HIGH_CARD = 8
}
let eva_win, eva_lose
// Spades "2/3/4/5/6/7/8"
const CARDS_SPADES_2345678 = [0, 4, 8, 12, 16, 20, 24]
expect(await eva.handRankV2(CARDS_SPADES_2345678)).eq(RANK.STRAIGHT_FLUSH)
console.log("flush_gas : ", await eva.estimateGas.handRankV2(CARDS_SPADES_2345678))
// Spades "2/3/4/5/6" Hearts"2" Diamonds"2"
const CARDS_SPADES_23456 = [0, 4, 8, 12, 16, 1, 2]
expect(await eva.handRankV2(CARDS_SPADES_23456)).eq(RANK.STRAIGHT_FLUSH)
// Compare STRAIGHT_FLUSH
expect(await eva.evaluateV2(CARDS_SPADES_2345678)).lt(await eva.evaluateV2(CARDS_SPADES_23456))
// Spades "2/3/4/5/7" Hearts"2" Diamonds"2"
const CARDS_SPADES_23457 = [0, 4, 8, 12, 20, 1, 2]
expect(await eva.handRankV2(CARDS_SPADES_23457)).eq(RANK.FLUSH)
// "Spades 2/2/2", "Spades 3", "Spades4", "SpadesQ", "SpadesK"
const CARDS_SPADES_234QK = [0, 1, 2, 4, 8, 40, 44]
expect(await eva.handRankV2(CARDS_SPADES_234QK)).eq(RANK.FLUSH)
// Compare FLUSH
expect(await eva.evaluateV2(CARDS_SPADES_234QK)).lt(await eva.evaluateV2(CARDS_SPADES_23457))
// "2/2/2/2", "3/3", "4"
expect(await eva.handRankV2([0, 1, 2, 3, 4, 5, 8])).eq(RANK.FOUR_OF_A_KIND)
// "2/2/2", "3/3", "4/4"
expect(await eva.handRankV2([0, 1, 2, 4, 5, 8, 9])).eq(RANK.FULL_HOUSE)
// "2/3/4/5/6", "A/A"
expect(await eva.handRankV2([0, 5, 10, 14, 18, 48, 49])).eq(RANK.STRAIGHT)
// "2/2/2", "3", "4", "Q", "K"
expect(await eva.handRankV2([0, 1, 2, 4, 8, 41, 44])).eq(RANK.THREE_OF_A_KIND)
// "2/2", "3/3", "4", "Q", "K"
expect(await eva.handRankV2([0, 1, 4, 5, 8, 41, 44])).eq(RANK.TWO_PAIR)
// "2/2", "3", "4", "5", "Q", "K"
expect(await eva.handRankV2([0, 1, 4, 8, 14, 41, 44])).eq(RANK.ONE_PAIR)
const CARDS_HIGH_46JQK = [0, 4, 8, 18, 39, 41, 44]
expect(await eva.handRankV2(CARDS_HIGH_46JQK)).eq(RANK.HIGH_CARD)
// "2", "3", "4", "5", "J", "Q", "K"
const CARDS_HIGH_45JQK = [0, 4, 8, 14, 39, 41, 44]
expect(await eva.handRankV2(CARDS_HIGH_45JQK)).eq(RANK.HIGH_CARD)
console.log("unflush gas : ", await eva.estimateGas.handRankV2(CARDS_HIGH_45JQK))
// Compare High Cards
expect(await eva.evaluateV2(CARDS_HIGH_46JQK)).lt(await eva.evaluateV2(CARDS_HIGH_45JQK))
}
main()
.then(() => process.exit(0))
.catch(error => {
console.error(error);
process.exit(1);
});