-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLadder.php
620 lines (569 loc) · 36.6 KB
/
Ladder.php
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
<?php
/**
* This program simulates every permutation of wins and losses for a set number
* of games and maps the results to their corresponding Hearthstone ladder rank.
* The algorithm works by looking at the previous game, slicing every value in
* half, and mapping it to two new values (one for a win, one for a loss)
* according to Hearthstone ladder rules. The values from game to game are 100%
* precise by using the BCMath library.
*/
$number_of_games = 1205;
$output_file = './results.json';
$time_start = microtime(true);
bcscale($number_of_games);
// The "values" array - 4 dimensions, all string
// $values[game][rank][star][streak]
$streaks = array_fill(0, 3, '0.0');
$stars = array_fill(0, 6, $streaks);
$ranks = array_fill(0, 26, $stars);
$values = array_fill(0, $number_of_games + 1, $ranks);
// The "results" array - 2 dimensions - all float
// $results[game][rank]
$groups = array_fill(0, 26, 0.0);
$results = array_fill(1, $number_of_games, $groups);
// Initialize Game 0:
// 100% of players are Rank 25, Star 0, Streak 0
$values[0][25][0][0] = '1.0';
// The "slicer" loop
// bcdiv(x, 2) means x/2
// bcadd(x, y) means x+y
for ($g = 1; $g <= $number_of_games; $g++) {
// Rank 0 - Legend
// Note: $values[$g-1][0][0][0] is the only value that doesn't get sliced in 2 because
// a Legend player will stay Legend with a win OR a loss.
$values[$g][0][0][0] = bcadd($values[$g-1][0][0][0], bcdiv($values[$g-1][1][5][0], 2));
$results[$g][0] = floatval($values[$g][0][0][0]);
// Rank 1 - Innkeeper
$values[$g][1][5][0] = bcdiv($values[$g-1][1][4][0], 2);
$values[$g][1][4][0] = bcadd(bcdiv($values[$g-1][1][5][0], 2), bcdiv($values[$g-1][1][3][0], 2));
$values[$g][1][3][0] = bcadd(bcdiv($values[$g-1][1][4][0], 2), bcdiv($values[$g-1][1][2][0], 2));
$values[$g][1][2][0] = bcadd(bcdiv($values[$g-1][1][3][0], 2), bcdiv($values[$g-1][1][1][0], 2));
$values[$g][1][1][0] = bcadd(bcdiv($values[$g-1][1][2][0], 2), bcadd(bcdiv($values[$g-1][1][0][0], 2), bcdiv($values[$g-1][2][5][0], 2)));
$values[$g][1][0][0] = bcdiv($values[$g-1][1][1][0], 2);
$results[$g][1] = floatval(
bcadd($values[$g][1][5][0],
bcadd($values[$g][1][4][0],
bcadd($values[$g][1][3][0],
bcadd($values[$g][1][2][0],
bcadd($values[$g][1][1][0],
$values[$g][1][0][0]))))));
// Rank 2 - The Black Knight
$values[$g][2][5][0] = bcdiv($values[$g-1][2][4][0], 2);
$values[$g][2][4][0] = bcadd(bcdiv($values[$g-1][2][5][0], 2), bcadd(bcdiv($values[$g-1][2][3][0], 2), bcdiv($values[$g-1][1][0][0], 2)));
$values[$g][2][3][0] = bcadd(bcdiv($values[$g-1][2][4][0], 2), bcdiv($values[$g-1][2][2][0], 2));
$values[$g][2][2][0] = bcadd(bcdiv($values[$g-1][2][3][0], 2), bcdiv($values[$g-1][2][1][0], 2));
$values[$g][2][1][0] = bcadd(bcdiv($values[$g-1][2][2][0], 2), bcadd(bcdiv($values[$g-1][2][0][0], 2), bcdiv($values[$g-1][3][5][0], 2)));
$values[$g][2][0][0] = bcdiv($values[$g-1][2][1][0], 2);
$results[$g][2] = floatval(
bcadd($values[$g][2][5][0],
bcadd($values[$g][2][4][0],
bcadd($values[$g][2][3][0],
bcadd($values[$g][2][2][0],
bcadd($values[$g][2][1][0],
$values[$g][2][0][0]))))));
// Rank 3 - Molten Giant
$values[$g][3][5][0] = bcdiv($values[$g-1][3][4][0], 2);
$values[$g][3][4][0] = bcadd(bcdiv($values[$g-1][3][5][0], 2), bcadd(bcdiv($values[$g-1][3][3][0], 2), bcdiv($values[$g-1][2][0][0], 2)));
$values[$g][3][3][0] = bcadd(bcdiv($values[$g-1][3][4][0], 2), bcdiv($values[$g-1][3][2][0], 2));
$values[$g][3][2][0] = bcadd(bcdiv($values[$g-1][3][3][0], 2), bcdiv($values[$g-1][3][1][0], 2));
$values[$g][3][1][0] = bcadd(bcdiv($values[$g-1][3][2][0], 2), bcadd(bcdiv($values[$g-1][3][0][0], 2), bcdiv($values[$g-1][4][5][0], 2)));
$values[$g][3][0][0] = bcdiv($values[$g-1][3][1][0], 2);
$results[$g][3] = floatval(
bcadd($values[$g][3][5][0],
bcadd($values[$g][3][4][0],
bcadd($values[$g][3][3][0],
bcadd($values[$g][3][2][0],
bcadd($values[$g][3][1][0],
$values[$g][3][0][0]))))));
// Rank 4 - Mountain Giant
$values[$g][4][5][0] = bcdiv($values[$g-1][4][4][0], 2);
$values[$g][4][4][0] = bcadd(bcdiv($values[$g-1][4][5][0], 2), bcadd(bcdiv($values[$g-1][4][3][0], 2), bcdiv($values[$g-1][3][0][0], 2)));
$values[$g][4][3][0] = bcadd(bcdiv($values[$g-1][4][4][0], 2), bcdiv($values[$g-1][4][2][0], 2));
$values[$g][4][2][0] = bcadd(bcdiv($values[$g-1][4][3][0], 2), bcdiv($values[$g-1][4][1][0], 2));
$values[$g][4][1][0] = bcadd(bcdiv($values[$g-1][4][2][0], 2), bcadd(bcdiv($values[$g-1][4][0][0], 2), bcdiv($values[$g-1][5][5][0], 2)));
$values[$g][4][0][0] = bcdiv($values[$g-1][4][1][0], 2);
$results[$g][4] = floatval(
bcadd($values[$g][4][5][0],
bcadd($values[$g][4][4][0],
bcadd($values[$g][4][3][0],
bcadd($values[$g][4][2][0],
bcadd($values[$g][4][1][0],
$values[$g][4][0][0]))))));
// Rank 5 - Sea Giant
$values[$g][5][5][0] = bcdiv($values[$g-1][5][4][0], 2);
$values[$g][5][4][0] = bcadd(bcdiv($values[$g-1][5][5][0], 2), bcadd(bcdiv($values[$g-1][5][3][0], 2), bcdiv($values[$g-1][4][0][0], 2)));
$values[$g][5][3][0] = bcadd(bcdiv($values[$g-1][5][4][0], 2), bcdiv($values[$g-1][5][2][0], 2));
$values[$g][5][2][0] = bcadd(bcdiv($values[$g-1][5][3][0], 2), bcdiv($values[$g-1][5][1][0], 2));
$values[$g][5][1][0] = bcadd(bcdiv($values[$g-1][5][2][0], 2), bcadd(bcdiv($values[$g-1][5][0][0], 2), bcadd(bcdiv($values[$g-1][6][5][2], 2), bcadd(bcdiv($values[$g-1][6][5][1], 2), bcdiv($values[$g-1][6][4][2], 2)))));
$values[$g][5][0][0] = bcdiv($values[$g-1][5][1][0], 2);
$results[$g][5] = floatval(
bcadd($values[$g][5][5][0],
bcadd($values[$g][5][4][0],
bcadd($values[$g][5][3][0],
bcadd($values[$g][5][2][0],
bcadd($values[$g][5][1][0],
$values[$g][5][0][0]))))));
// Rank 6 - Ancient of War
$values[$g][6][5][2] = bcadd(bcdiv($values[$g-1][6][4][1], 2), bcdiv($values[$g-1][6][3][2], 2));
$values[$g][6][5][1] = bcdiv($values[$g-1][6][4][0], 2);
$values[$g][6][4][2] = bcadd(bcdiv($values[$g-1][6][3][1], 2), bcdiv($values[$g-1][6][2][2], 2));
$values[$g][6][4][1] = bcdiv($values[$g-1][6][3][0], 2);
$values[$g][6][4][0] = bcadd(bcdiv($values[$g-1][6][5][2], 2), bcadd(bcdiv($values[$g-1][6][5][1], 2), bcdiv($values[$g-1][5][0][0], 2)));
$values[$g][6][3][2] = bcadd(bcdiv($values[$g-1][6][2][1], 2), bcdiv($values[$g-1][6][1][2], 2));
$values[$g][6][3][1] = bcdiv($values[$g-1][6][2][0], 2);
$values[$g][6][3][0] = bcadd(bcdiv($values[$g-1][6][4][2], 2), bcadd(bcdiv($values[$g-1][6][4][1], 2), bcdiv($values[$g-1][6][4][0], 2)));
$values[$g][6][2][2] = bcadd(bcdiv($values[$g-1][6][1][1], 2), bcdiv($values[$g-1][7][5][2], 2));
$values[$g][6][2][1] = bcdiv($values[$g-1][6][1][0], 2);
$values[$g][6][2][0] = bcadd(bcdiv($values[$g-1][6][3][2], 2), bcadd(bcdiv($values[$g-1][6][3][1], 2), bcdiv($values[$g-1][6][3][0], 2)));
$values[$g][6][1][2] = bcadd(bcdiv($values[$g-1][7][5][1], 2), bcdiv($values[$g-1][7][4][2], 2));
$values[$g][6][1][1] = bcdiv($values[$g-1][6][0][0], 2);
$values[$g][6][1][0] = bcadd(bcdiv($values[$g-1][6][2][2], 2), bcadd(bcdiv($values[$g-1][6][2][1], 2), bcdiv($values[$g-1][6][2][0], 2)));
$values[$g][6][0][0] = bcadd(bcdiv($values[$g-1][6][1][2], 2), bcadd(bcdiv($values[$g-1][6][1][1], 2), bcdiv($values[$g-1][6][1][0], 2)));
$results[$g][6] = floatval(
bcadd($values[$g][6][5][2],
bcadd($values[$g][6][5][1],
bcadd($values[$g][6][4][2],
bcadd($values[$g][6][4][1],
bcadd($values[$g][6][4][0],
bcadd($values[$g][6][3][2],
bcadd($values[$g][6][3][1],
bcadd($values[$g][6][3][0],
bcadd($values[$g][6][2][2],
bcadd($values[$g][6][2][1],
bcadd($values[$g][6][2][0],
bcadd($values[$g][6][1][2],
bcadd($values[$g][6][1][1],
bcadd($values[$g][6][1][0],
$values[$g][6][0][0])))))))))))))));
// Rank 7 - Sunwalker
$values[$g][7][5][2] = bcadd(bcdiv($values[$g-1][7][4][1], 2), bcdiv($values[$g-1][7][3][2], 2));
$values[$g][7][5][1] = bcdiv($values[$g-1][7][4][0], 2);
$values[$g][7][4][2] = bcadd(bcdiv($values[$g-1][7][3][1], 2), bcdiv($values[$g-1][7][2][2], 2));
$values[$g][7][4][1] = bcdiv($values[$g-1][7][3][0], 2);
$values[$g][7][4][0] = bcadd(bcdiv($values[$g-1][7][5][2], 2), bcadd(bcdiv($values[$g-1][7][5][1], 2), bcdiv($values[$g-1][6][0][0], 2)));
$values[$g][7][3][2] = bcadd(bcdiv($values[$g-1][7][2][1], 2), bcdiv($values[$g-1][7][1][2], 2));
$values[$g][7][3][1] = bcdiv($values[$g-1][7][2][0], 2);
$values[$g][7][3][0] = bcadd(bcdiv($values[$g-1][7][4][2], 2), bcadd(bcdiv($values[$g-1][7][4][1], 2), bcdiv($values[$g-1][7][4][0], 2)));
$values[$g][7][2][2] = bcadd(bcdiv($values[$g-1][7][1][1], 2), bcdiv($values[$g-1][8][5][2], 2));
$values[$g][7][2][1] = bcdiv($values[$g-1][7][1][0], 2);
$values[$g][7][2][0] = bcadd(bcdiv($values[$g-1][7][3][2], 2), bcadd(bcdiv($values[$g-1][7][3][1], 2), bcdiv($values[$g-1][7][3][0], 2)));
$values[$g][7][1][2] = bcadd(bcdiv($values[$g-1][8][5][1], 2), bcdiv($values[$g-1][8][4][2], 2));
$values[$g][7][1][1] = bcdiv($values[$g-1][7][0][0], 2);
$values[$g][7][1][0] = bcadd(bcdiv($values[$g-1][7][2][2], 2), bcadd(bcdiv($values[$g-1][7][2][1], 2), bcdiv($values[$g-1][7][2][0], 2)));
$values[$g][7][0][0] = bcadd(bcdiv($values[$g-1][7][1][2], 2), bcadd(bcdiv($values[$g-1][7][1][1], 2), bcdiv($values[$g-1][7][1][0], 2)));
$results[$g][7] = floatval(
bcadd($values[$g][7][5][2],
bcadd($values[$g][7][5][1],
bcadd($values[$g][7][4][2],
bcadd($values[$g][7][4][1],
bcadd($values[$g][7][4][0],
bcadd($values[$g][7][3][2],
bcadd($values[$g][7][3][1],
bcadd($values[$g][7][3][0],
bcadd($values[$g][7][2][2],
bcadd($values[$g][7][2][1],
bcadd($values[$g][7][2][0],
bcadd($values[$g][7][1][2],
bcadd($values[$g][7][1][1],
bcadd($values[$g][7][1][0],
$values[$g][7][0][0])))))))))))))));
// Rank 8 - Frostwolf Warlord
$values[$g][8][5][2] = bcadd(bcdiv($values[$g-1][8][4][1], 2), bcdiv($values[$g-1][8][3][2], 2));
$values[$g][8][5][1] = bcdiv($values[$g-1][8][4][0], 2);
$values[$g][8][4][2] = bcadd(bcdiv($values[$g-1][8][3][1], 2), bcdiv($values[$g-1][8][2][2], 2));
$values[$g][8][4][1] = bcdiv($values[$g-1][8][3][0], 2);
$values[$g][8][4][0] = bcadd(bcdiv($values[$g-1][8][5][2], 2), bcadd(bcdiv($values[$g-1][8][5][1], 2), bcdiv($values[$g-1][7][0][0], 2)));
$values[$g][8][3][2] = bcadd(bcdiv($values[$g-1][8][2][1], 2), bcdiv($values[$g-1][8][1][2], 2));
$values[$g][8][3][1] = bcdiv($values[$g-1][8][2][0], 2);
$values[$g][8][3][0] = bcadd(bcdiv($values[$g-1][8][4][2], 2), bcadd(bcdiv($values[$g-1][8][4][1], 2), bcdiv($values[$g-1][8][4][0], 2)));
$values[$g][8][2][2] = bcadd(bcdiv($values[$g-1][8][1][1], 2), bcdiv($values[$g-1][9][5][2], 2));
$values[$g][8][2][1] = bcdiv($values[$g-1][8][1][0], 2);
$values[$g][8][2][0] = bcadd(bcdiv($values[$g-1][8][3][2], 2), bcadd(bcdiv($values[$g-1][8][3][1], 2), bcdiv($values[$g-1][8][3][0], 2)));
$values[$g][8][1][2] = bcadd(bcdiv($values[$g-1][9][5][1], 2), bcdiv($values[$g-1][9][4][2], 2));
$values[$g][8][1][1] = bcdiv($values[$g-1][8][0][0], 2);
$values[$g][8][1][0] = bcadd(bcdiv($values[$g-1][8][2][2], 2), bcadd(bcdiv($values[$g-1][8][2][1], 2), bcdiv($values[$g-1][8][2][0], 2)));
$values[$g][8][0][0] = bcadd(bcdiv($values[$g-1][8][1][2], 2), bcadd(bcdiv($values[$g-1][8][1][1], 2), bcdiv($values[$g-1][8][1][0], 2)));
$results[$g][8] = floatval(
bcadd($values[$g][8][5][2],
bcadd($values[$g][8][5][1],
bcadd($values[$g][8][4][2],
bcadd($values[$g][8][4][1],
bcadd($values[$g][8][4][0],
bcadd($values[$g][8][3][2],
bcadd($values[$g][8][3][1],
bcadd($values[$g][8][3][0],
bcadd($values[$g][8][2][2],
bcadd($values[$g][8][2][1],
bcadd($values[$g][8][2][0],
bcadd($values[$g][8][1][2],
bcadd($values[$g][8][1][1],
bcadd($values[$g][8][1][0],
$values[$g][8][0][0])))))))))))))));
// Rank 9 - Silver Hand Knight
$values[$g][9][5][2] = bcadd(bcdiv($values[$g-1][9][4][1], 2), bcdiv($values[$g-1][9][3][2], 2));
$values[$g][9][5][1] = bcdiv($values[$g-1][9][4][0], 2);
$values[$g][9][4][2] = bcadd(bcdiv($values[$g-1][9][3][1], 2), bcdiv($values[$g-1][9][2][2], 2));
$values[$g][9][4][1] = bcdiv($values[$g-1][9][3][0], 2);
$values[$g][9][4][0] = bcadd(bcdiv($values[$g-1][9][5][2], 2), bcadd(bcdiv($values[$g-1][9][5][1], 2), bcdiv($values[$g-1][8][0][0], 2)));
$values[$g][9][3][2] = bcadd(bcdiv($values[$g-1][9][2][1], 2), bcdiv($values[$g-1][9][1][2], 2));
$values[$g][9][3][1] = bcdiv($values[$g-1][9][2][0], 2);
$values[$g][9][3][0] = bcadd(bcdiv($values[$g-1][9][4][2], 2), bcadd(bcdiv($values[$g-1][9][4][1], 2), bcdiv($values[$g-1][9][4][0], 2)));
$values[$g][9][2][2] = bcadd(bcdiv($values[$g-1][9][1][1], 2), bcdiv($values[$g-1][10][5][2], 2));
$values[$g][9][2][1] = bcdiv($values[$g-1][9][1][0], 2);
$values[$g][9][2][0] = bcadd(bcdiv($values[$g-1][9][3][2], 2), bcadd(bcdiv($values[$g-1][9][3][1], 2), bcdiv($values[$g-1][9][3][0], 2)));
$values[$g][9][1][2] = bcadd(bcdiv($values[$g-1][10][5][1], 2), bcdiv($values[$g-1][10][4][2], 2));
$values[$g][9][1][1] = bcdiv($values[$g-1][9][0][0], 2);
$values[$g][9][1][0] = bcadd(bcdiv($values[$g-1][9][2][2], 2), bcadd(bcdiv($values[$g-1][9][2][1], 2), bcdiv($values[$g-1][9][2][0], 2)));
$values[$g][9][0][0] = bcadd(bcdiv($values[$g-1][9][1][2], 2), bcadd(bcdiv($values[$g-1][9][1][1], 2), bcdiv($values[$g-1][9][1][0], 2)));
$results[$g][9] = floatval(
bcadd($values[$g][9][5][2],
bcadd($values[$g][9][5][1],
bcadd($values[$g][9][4][2],
bcadd($values[$g][9][4][1],
bcadd($values[$g][9][4][0],
bcadd($values[$g][9][3][2],
bcadd($values[$g][9][3][1],
bcadd($values[$g][9][3][0],
bcadd($values[$g][9][2][2],
bcadd($values[$g][9][2][1],
bcadd($values[$g][9][2][0],
bcadd($values[$g][9][1][2],
bcadd($values[$g][9][1][1],
bcadd($values[$g][9][1][0],
$values[$g][9][0][0])))))))))))))));
// Rank 10 - Ogre Magi
$values[$g][10][5][2] = bcadd(bcdiv($values[$g-1][10][4][1], 2), bcdiv($values[$g-1][10][3][2], 2));
$values[$g][10][5][1] = bcdiv($values[$g-1][10][4][0], 2);
$values[$g][10][4][2] = bcadd(bcdiv($values[$g-1][10][3][1], 2), bcdiv($values[$g-1][10][2][2], 2));
$values[$g][10][4][1] = bcdiv($values[$g-1][10][3][0], 2);
$values[$g][10][4][0] = bcadd(bcdiv($values[$g-1][10][5][2], 2), bcadd(bcdiv($values[$g-1][10][5][1], 2), bcdiv($values[$g-1][9][0][0], 2)));
$values[$g][10][3][2] = bcadd(bcdiv($values[$g-1][10][2][1], 2), bcdiv($values[$g-1][10][1][2], 2));
$values[$g][10][3][1] = bcdiv($values[$g-1][10][2][0], 2);
$values[$g][10][3][0] = bcadd(bcdiv($values[$g-1][10][4][2], 2), bcadd(bcdiv($values[$g-1][10][4][1], 2), bcdiv($values[$g-1][10][4][0], 2)));
$values[$g][10][2][2] = bcadd(bcdiv($values[$g-1][10][1][1], 2), bcdiv($values[$g-1][11][4][2], 2));
$values[$g][10][2][1] = bcdiv($values[$g-1][10][1][0], 2);
$values[$g][10][2][0] = bcadd(bcdiv($values[$g-1][10][3][2], 2), bcadd(bcdiv($values[$g-1][10][3][1], 2), bcdiv($values[$g-1][10][3][0], 2)));
$values[$g][10][1][2] = bcadd(bcdiv($values[$g-1][11][4][1], 2), bcdiv($values[$g-1][11][3][2], 2));
$values[$g][10][1][1] = bcdiv($values[$g-1][10][0][0], 2);
$values[$g][10][1][0] = bcadd(bcdiv($values[$g-1][10][2][2], 2), bcadd(bcdiv($values[$g-1][10][2][1], 2), bcdiv($values[$g-1][10][2][0], 2)));
$values[$g][10][0][0] = bcadd(bcdiv($values[$g-1][10][1][2], 2), bcadd(bcdiv($values[$g-1][10][1][1], 2), bcdiv($values[$g-1][10][1][0], 2)));
$results[$g][10] = floatval(
bcadd($values[$g][10][5][2],
bcadd($values[$g][10][5][1],
bcadd($values[$g][10][4][2],
bcadd($values[$g][10][4][1],
bcadd($values[$g][10][4][0],
bcadd($values[$g][10][3][2],
bcadd($values[$g][10][3][1],
bcadd($values[$g][10][3][0],
bcadd($values[$g][10][2][2],
bcadd($values[$g][10][2][1],
bcadd($values[$g][10][2][0],
bcadd($values[$g][10][1][2],
bcadd($values[$g][10][1][1],
bcadd($values[$g][10][1][0],
$values[$g][10][0][0])))))))))))))));
// Rank 11 - Big Game Hunter
$values[$g][11][4][2] = bcadd(bcdiv($values[$g-1][11][3][1], 2), bcdiv($values[$g-1][11][2][2], 2));
$values[$g][11][4][1] = bcdiv($values[$g-1][11][3][0], 2);
$values[$g][11][3][2] = bcadd(bcdiv($values[$g-1][11][2][1], 2), bcdiv($values[$g-1][11][1][2], 2));
$values[$g][11][3][1] = bcdiv($values[$g-1][11][2][0], 2);
$values[$g][11][3][0] = bcadd(bcdiv($values[$g-1][11][4][2], 2), bcadd(bcdiv($values[$g-1][11][4][1], 2), bcdiv($values[$g-1][10][0][0], 2)));
$values[$g][11][2][2] = bcadd(bcdiv($values[$g-1][11][1][1], 2), bcdiv($values[$g-1][12][4][2], 2));
$values[$g][11][2][1] = bcdiv($values[$g-1][11][1][0], 2);
$values[$g][11][2][0] = bcadd(bcdiv($values[$g-1][11][3][2], 2), bcadd(bcdiv($values[$g-1][11][3][1], 2), bcdiv($values[$g-1][11][3][0], 2)));
$values[$g][11][1][2] = bcadd(bcdiv($values[$g-1][12][4][1], 2), bcdiv($values[$g-1][12][3][2], 2));
$values[$g][11][1][1] = bcdiv($values[$g-1][11][0][0], 2);
$values[$g][11][1][0] = bcadd(bcdiv($values[$g-1][11][2][2], 2), bcadd(bcdiv($values[$g-1][11][2][1], 2), bcdiv($values[$g-1][11][2][0], 2)));
$values[$g][11][0][0] = bcadd(bcdiv($values[$g-1][11][1][2], 2), bcadd(bcdiv($values[$g-1][11][1][1], 2), bcdiv($values[$g-1][11][1][0], 2)));
$results[$g][11] = floatval(
bcadd($values[$g][11][4][2],
bcadd($values[$g][11][4][1],
bcadd($values[$g][11][3][2],
bcadd($values[$g][11][3][1],
bcadd($values[$g][11][3][0],
bcadd($values[$g][11][2][2],
bcadd($values[$g][11][2][1],
bcadd($values[$g][11][2][0],
bcadd($values[$g][11][1][2],
bcadd($values[$g][11][1][1],
bcadd($values[$g][11][1][0],
$values[$g][11][0][0]))))))))))));
// Rank 12 - Warsong Commander
$values[$g][12][4][2] = bcadd(bcdiv($values[$g-1][12][3][1], 2), bcdiv($values[$g-1][12][2][2], 2));
$values[$g][12][4][1] = bcdiv($values[$g-1][12][3][0], 2);
$values[$g][12][3][2] = bcadd(bcdiv($values[$g-1][12][2][1], 2), bcdiv($values[$g-1][12][1][2], 2));
$values[$g][12][3][1] = bcdiv($values[$g-1][12][2][0], 2);
$values[$g][12][3][0] = bcadd(bcdiv($values[$g-1][12][4][2], 2), bcadd(bcdiv($values[$g-1][12][4][1], 2), bcdiv($values[$g-1][11][0][0], 2)));
$values[$g][12][2][2] = bcadd(bcdiv($values[$g-1][12][1][1], 2), bcdiv($values[$g-1][13][4][2], 2));
$values[$g][12][2][1] = bcdiv($values[$g-1][12][1][0], 2);
$values[$g][12][2][0] = bcadd(bcdiv($values[$g-1][12][3][2], 2), bcadd(bcdiv($values[$g-1][12][3][1], 2), bcdiv($values[$g-1][12][3][0], 2)));
$values[$g][12][1][2] = bcadd(bcdiv($values[$g-1][13][4][1], 2), bcdiv($values[$g-1][13][3][2], 2));
$values[$g][12][1][1] = bcdiv($values[$g-1][12][0][0], 2);
$values[$g][12][1][0] = bcadd(bcdiv($values[$g-1][12][2][2], 2), bcadd(bcdiv($values[$g-1][12][2][1], 2), bcdiv($values[$g-1][12][2][0], 2)));
$values[$g][12][0][0] = bcadd(bcdiv($values[$g-1][12][1][2], 2), bcadd(bcdiv($values[$g-1][12][1][1], 2), bcdiv($values[$g-1][12][1][0], 2)));
$results[$g][12] = floatval(
bcadd($values[$g][12][4][2],
bcadd($values[$g][12][4][1],
bcadd($values[$g][12][3][2],
bcadd($values[$g][12][3][1],
bcadd($values[$g][12][3][0],
bcadd($values[$g][12][2][2],
bcadd($values[$g][12][2][1],
bcadd($values[$g][12][2][0],
bcadd($values[$g][12][1][2],
bcadd($values[$g][12][1][1],
bcadd($values[$g][12][1][0],
$values[$g][12][0][0]))))))))))));
// Rank 13 -Dread Corsair
$values[$g][13][4][2] = bcadd(bcdiv($values[$g-1][13][3][1], 2), bcdiv($values[$g-1][13][2][2], 2));
$values[$g][13][4][1] = bcdiv($values[$g-1][13][3][0], 2);
$values[$g][13][3][2] = bcadd(bcdiv($values[$g-1][13][2][1], 2), bcdiv($values[$g-1][13][1][2], 2));
$values[$g][13][3][1] = bcdiv($values[$g-1][13][2][0], 2);
$values[$g][13][3][0] = bcadd(bcdiv($values[$g-1][13][4][2], 2), bcadd(bcdiv($values[$g-1][13][4][1], 2), bcdiv($values[$g-1][12][0][0], 2)));
$values[$g][13][2][2] = bcadd(bcdiv($values[$g-1][13][1][1], 2), bcdiv($values[$g-1][14][4][2], 2));
$values[$g][13][2][1] = bcdiv($values[$g-1][13][1][0], 2);
$values[$g][13][2][0] = bcadd(bcdiv($values[$g-1][13][3][2], 2), bcadd(bcdiv($values[$g-1][13][3][1], 2), bcdiv($values[$g-1][13][3][0], 2)));
$values[$g][13][1][2] = bcadd(bcdiv($values[$g-1][14][4][1], 2), bcdiv($values[$g-1][14][3][2], 2));
$values[$g][13][1][1] = bcdiv($values[$g-1][13][0][0], 2);
$values[$g][13][1][0] = bcadd(bcdiv($values[$g-1][13][2][2], 2), bcadd(bcdiv($values[$g-1][13][2][1], 2), bcdiv($values[$g-1][13][2][0], 2)));
$values[$g][13][0][0] = bcadd(bcdiv($values[$g-1][13][1][2], 2), bcadd(bcdiv($values[$g-1][13][1][1], 2), bcdiv($values[$g-1][13][1][0], 2)));
$results[$g][13] = floatval(
bcadd($values[$g][13][4][2],
bcadd($values[$g][13][4][1],
bcadd($values[$g][13][3][2],
bcadd($values[$g][13][3][1],
bcadd($values[$g][13][3][0],
bcadd($values[$g][13][2][2],
bcadd($values[$g][13][2][1],
bcadd($values[$g][13][2][0],
bcadd($values[$g][13][1][2],
bcadd($values[$g][13][1][1],
bcadd($values[$g][13][1][0],
$values[$g][13][0][0]))))))))))));
// Rank 14 - Raid Leader
$values[$g][14][4][2] = bcadd(bcdiv($values[$g-1][14][3][1], 2), bcdiv($values[$g-1][14][2][2], 2));
$values[$g][14][4][1] = bcdiv($values[$g-1][14][3][0], 2);
$values[$g][14][3][2] = bcadd(bcdiv($values[$g-1][14][2][1], 2), bcdiv($values[$g-1][14][1][2], 2));
$values[$g][14][3][1] = bcdiv($values[$g-1][14][2][0], 2);
$values[$g][14][3][0] = bcadd(bcdiv($values[$g-1][14][4][2], 2), bcadd(bcdiv($values[$g-1][14][4][1], 2), bcdiv($values[$g-1][13][0][0], 2)));
$values[$g][14][2][2] = bcadd(bcdiv($values[$g-1][14][1][1], 2), bcdiv($values[$g-1][15][4][2], 2));
$values[$g][14][2][1] = bcdiv($values[$g-1][14][1][0], 2);
$values[$g][14][2][0] = bcadd(bcdiv($values[$g-1][14][3][2], 2), bcadd(bcdiv($values[$g-1][14][3][1], 2), bcdiv($values[$g-1][14][3][0], 2)));
$values[$g][14][1][2] = bcadd(bcdiv($values[$g-1][15][4][1], 2), bcdiv($values[$g-1][15][3][2], 2));
$values[$g][14][1][1] = bcdiv($values[$g-1][14][0][0], 2);
$values[$g][14][1][0] = bcadd(bcdiv($values[$g-1][14][2][2], 2), bcadd(bcdiv($values[$g-1][14][2][1], 2), bcdiv($values[$g-1][14][2][0], 2)));
$values[$g][14][0][0] = bcadd(bcdiv($values[$g-1][14][1][2], 2), bcadd(bcdiv($values[$g-1][14][1][1], 2), bcdiv($values[$g-1][14][1][0], 2)));
$results[$g][14] = floatval(
bcadd($values[$g][14][4][2],
bcadd($values[$g][14][4][1],
bcadd($values[$g][14][3][2],
bcadd($values[$g][14][3][1],
bcadd($values[$g][14][3][0],
bcadd($values[$g][14][2][2],
bcadd($values[$g][14][2][1],
bcadd($values[$g][14][2][0],
bcadd($values[$g][14][1][2],
bcadd($values[$g][14][1][1],
bcadd($values[$g][14][1][0],
$values[$g][14][0][0]))))))))))));
// Rank 15 - Silvermoon Guardian
$values[$g][15][4][2] = bcadd(bcdiv($values[$g-1][15][3][1], 2), bcdiv($values[$g-1][15][2][2], 2));
$values[$g][15][4][1] = bcdiv($values[$g-1][15][3][0], 2);
$values[$g][15][3][2] = bcadd(bcdiv($values[$g-1][15][2][1], 2), bcdiv($values[$g-1][15][1][2], 2));
$values[$g][15][3][1] = bcdiv($values[$g-1][15][2][0], 2);
$values[$g][15][3][0] = bcadd(bcdiv($values[$g-1][15][4][2], 2), bcadd(bcdiv($values[$g-1][15][4][1], 2), bcdiv($values[$g-1][14][0][0], 2)));
$values[$g][15][2][2] = bcadd(bcdiv($values[$g-1][15][1][1], 2), bcdiv($values[$g-1][16][3][2], 2));
$values[$g][15][2][1] = bcdiv($values[$g-1][15][1][0], 2);
$values[$g][15][2][0] = bcadd(bcdiv($values[$g-1][15][3][2], 2), bcadd(bcdiv($values[$g-1][15][3][1], 2), bcdiv($values[$g-1][15][3][0], 2)));
$values[$g][15][1][2] = bcadd(bcdiv($values[$g-1][16][3][1], 2), bcdiv($values[$g-1][16][2][2], 2));
$values[$g][15][1][1] = bcdiv($values[$g-1][15][0][0], 2);
$values[$g][15][1][0] = bcadd(bcdiv($values[$g-1][15][2][2], 2), bcadd(bcdiv($values[$g-1][15][2][1], 2), bcdiv($values[$g-1][15][2][0], 2)));
$values[$g][15][0][0] = bcadd(bcdiv($values[$g-1][15][1][2], 2), bcadd(bcdiv($values[$g-1][15][1][1], 2), bcdiv($values[$g-1][15][1][0], 2)));
$results[$g][15] = floatval(
bcadd($values[$g][15][4][2],
bcadd($values[$g][15][4][1],
bcadd($values[$g][15][3][2],
bcadd($values[$g][15][3][1],
bcadd($values[$g][15][3][0],
bcadd($values[$g][15][2][2],
bcadd($values[$g][15][2][1],
bcadd($values[$g][15][2][0],
bcadd($values[$g][15][1][2],
bcadd($values[$g][15][1][1],
bcadd($values[$g][15][1][0],
$values[$g][15][0][0]))))))))))));
// Rank 16 - Questing Adventurer
$values[$g][16][3][2] = bcadd(bcdiv($values[$g-1][16][2][1], 2), bcdiv($values[$g-1][16][1][2], 2));
$values[$g][16][3][1] = bcdiv($values[$g-1][16][2][0], 2);
$values[$g][16][2][2] = bcadd(bcdiv($values[$g-1][16][1][1], 2), bcdiv($values[$g-1][17][3][2], 2));
$values[$g][16][2][1] = bcdiv($values[$g-1][16][1][0], 2);
$values[$g][16][2][0] = bcadd(bcdiv($values[$g-1][16][3][2], 2), bcadd(bcdiv($values[$g-1][16][3][1], 2), bcdiv($values[$g-1][15][0][0], 2)));
$values[$g][16][1][2] = bcadd(bcdiv($values[$g-1][17][3][1], 2), bcdiv($values[$g-1][17][2][2], 2));
$values[$g][16][1][1] = bcdiv($values[$g-1][16][0][0], 2);
$values[$g][16][1][0] = bcadd(bcdiv($values[$g-1][16][2][2], 2), bcadd(bcdiv($values[$g-1][16][2][1], 2), bcdiv($values[$g-1][16][2][0], 2)));
$values[$g][16][0][0] = bcadd(bcdiv($values[$g-1][16][1][2], 2), bcadd(bcdiv($values[$g-1][16][1][1], 2), bcdiv($values[$g-1][16][1][0], 2)));
$results[$g][16] = floatval(
bcadd($values[$g][16][3][2],
bcadd($values[$g][16][3][1],
bcadd($values[$g][16][2][2],
bcadd($values[$g][16][2][1],
bcadd($values[$g][16][2][0],
bcadd($values[$g][16][1][2],
bcadd($values[$g][16][1][1],
bcadd($values[$g][16][1][0],
$values[$g][16][0][0])))))))));
// Rank 17 - Tauren Warrior
$values[$g][17][3][2] = bcadd(bcdiv($values[$g-1][17][2][1], 2), bcdiv($values[$g-1][17][1][2], 2));
$values[$g][17][3][1] = bcdiv($values[$g-1][17][2][0], 2);
$values[$g][17][2][2] = bcadd(bcdiv($values[$g-1][17][1][1], 2), bcdiv($values[$g-1][18][3][2], 2));
$values[$g][17][2][1] = bcdiv($values[$g-1][17][1][0], 2);
$values[$g][17][2][0] = bcadd(bcdiv($values[$g-1][17][3][2], 2), bcadd(bcdiv($values[$g-1][17][3][1], 2), bcdiv($values[$g-1][16][0][0], 2)));
$values[$g][17][1][2] = bcadd(bcdiv($values[$g-1][18][3][1], 2), bcdiv($values[$g-1][18][2][2], 2));
$values[$g][17][1][1] = bcdiv($values[$g-1][17][0][0], 2);
$values[$g][17][1][0] = bcadd(bcdiv($values[$g-1][17][2][2], 2), bcadd(bcdiv($values[$g-1][17][2][1], 2), bcdiv($values[$g-1][17][2][0], 2)));
$values[$g][17][0][0] = bcadd(bcdiv($values[$g-1][17][1][2], 2), bcadd(bcdiv($values[$g-1][17][1][1], 2), bcdiv($values[$g-1][17][1][0], 2)));
$results[$g][17] = floatval(
bcadd($values[$g][17][3][2],
bcadd($values[$g][17][3][1],
bcadd($values[$g][17][2][2],
bcadd($values[$g][17][2][1],
bcadd($values[$g][17][2][0],
bcadd($values[$g][17][1][2],
bcadd($values[$g][17][1][1],
bcadd($values[$g][17][1][0],
$values[$g][17][0][0])))))))));
// Rank 18 - Sorcerer's Apprentice
$values[$g][18][3][2] = bcadd(bcdiv($values[$g-1][18][2][1], 2), bcdiv($values[$g-1][18][1][2], 2));
$values[$g][18][3][1] = bcdiv($values[$g-1][18][2][0], 2);
$values[$g][18][2][2] = bcadd(bcdiv($values[$g-1][18][1][1], 2), bcdiv($values[$g-1][19][3][2], 2));
$values[$g][18][2][1] = bcdiv($values[$g-1][18][1][0], 2);
$values[$g][18][2][0] = bcadd(bcdiv($values[$g-1][18][3][2], 2), bcadd(bcdiv($values[$g-1][18][3][1], 2), bcdiv($values[$g-1][17][0][0], 2)));
$values[$g][18][1][2] = bcadd(bcdiv($values[$g-1][19][3][1], 2), bcdiv($values[$g-1][19][2][2], 2));
$values[$g][18][1][1] = bcdiv($values[$g-1][18][0][0], 2);
$values[$g][18][1][0] = bcadd(bcdiv($values[$g-1][18][2][2], 2), bcadd(bcdiv($values[$g-1][18][2][1], 2), bcdiv($values[$g-1][18][2][0], 2)));
$values[$g][18][0][0] = bcadd(bcdiv($values[$g-1][18][1][2], 2), bcadd(bcdiv($values[$g-1][18][1][1], 2), bcdiv($values[$g-1][18][1][0], 2)));
$results[$g][18] = floatval(
bcadd($values[$g][18][3][2],
bcadd($values[$g][18][3][1],
bcadd($values[$g][18][2][2],
bcadd($values[$g][18][2][1],
bcadd($values[$g][18][2][0],
bcadd($values[$g][18][1][2],
bcadd($values[$g][18][1][1],
bcadd($values[$g][18][1][0],
$values[$g][18][0][0])))))))));
// Rank 19 - Novice Engineer
$values[$g][19][3][2] = bcadd(bcdiv($values[$g-1][19][2][1], 2), bcdiv($values[$g-1][19][1][2], 2));
$values[$g][19][3][1] = bcdiv($values[$g-1][19][2][0], 2);
$values[$g][19][2][2] = bcadd(bcdiv($values[$g-1][19][1][1], 2), bcdiv($values[$g-1][20][3][2], 2));
$values[$g][19][2][1] = bcdiv($values[$g-1][19][1][0], 2);
$values[$g][19][2][0] = bcadd(bcdiv($values[$g-1][19][3][2], 2), bcadd(bcdiv($values[$g-1][19][3][1], 2), bcdiv($values[$g-1][18][0][0], 2)));
$values[$g][19][1][2] = bcadd(bcdiv($values[$g-1][20][3][1], 2), bcdiv($values[$g-1][20][2][2], 2));
$values[$g][19][1][1] = bcdiv($values[$g-1][19][0][0], 2);
$values[$g][19][1][0] = bcadd(bcdiv($values[$g-1][19][2][2], 2), bcadd(bcdiv($values[$g-1][19][2][1], 2), bcdiv($values[$g-1][19][2][0], 2)));
$values[$g][19][0][0] = bcadd(bcdiv($values[$g-1][19][1][2], 2), bcadd(bcdiv($values[$g-1][19][1][1], 2), bcdiv($values[$g-1][19][1][0], 2)));
$results[$g][19] = floatval(
bcadd($values[$g][19][3][2],
bcadd($values[$g][19][3][1],
bcadd($values[$g][19][2][2],
bcadd($values[$g][19][2][1],
bcadd($values[$g][19][2][0],
bcadd($values[$g][19][1][2],
bcadd($values[$g][19][1][1],
bcadd($values[$g][19][1][0],
$values[$g][19][0][0])))))))));
// Rank 20 - Shieldbearer
$values[$g][20][3][2] = bcadd(bcdiv($values[$g-1][20][2][1], 2), bcdiv($values[$g-1][20][1][2], 2));
$values[$g][20][3][1] = bcdiv($values[$g-1][20][2][0], 2);
$values[$g][20][2][2] = bcadd(bcdiv($values[$g-1][20][1][1], 2), bcdiv($values[$g-1][21][2][2], 2));
$values[$g][20][2][1] = bcdiv($values[$g-1][20][1][0], 2);
$values[$g][20][2][0] = bcadd(bcdiv($values[$g-1][20][3][2], 2), bcadd(bcdiv($values[$g-1][20][3][1], 2), bcdiv($values[$g-1][19][0][0], 2)));
$values[$g][20][1][2] = bcadd(bcdiv($values[$g-1][21][2][1], 2), bcdiv($values[$g-1][21][1][2], 2));
$values[$g][20][1][1] = bcadd(bcdiv($values[$g-1][20][0][0], 2), bcdiv($values[$g-1][21][2][0], 2));
$values[$g][20][1][0] = bcadd(bcdiv($values[$g-1][20][2][2], 2), bcadd(bcdiv($values[$g-1][20][2][1], 2), bcdiv($values[$g-1][20][2][0], 2)));
$values[$g][20][0][0] = bcadd(bcdiv($values[$g-1][20][1][2], 2), bcadd(bcdiv($values[$g-1][20][1][1], 2), bcadd(bcdiv($values[$g-1][20][1][0], 2), bcdiv($values[$g-1][20][0][0], 2))));
$results[$g][20] = floatval(
bcadd($values[$g][20][3][2],
bcadd($values[$g][20][3][1],
bcadd($values[$g][20][2][2],
bcadd($values[$g][20][2][1],
bcadd($values[$g][20][2][0],
bcadd($values[$g][20][1][2],
bcadd($values[$g][20][1][1],
bcadd($values[$g][20][1][0],
$values[$g][20][0][0])))))))));
// Rank 21 - Southsea Deckhand
$values[$g][21][2][2] = bcadd(bcdiv($values[$g-1][21][1][1], 2), bcdiv($values[$g-1][22][2][2], 2));
$values[$g][21][2][1] = bcdiv($values[$g-1][21][1][0], 2);
$values[$g][21][2][0] = bcadd(bcdiv($values[$g-1][21][2][2], 2), bcadd(bcdiv($values[$g-1][21][2][1], 2), bcdiv($values[$g-1][21][2][0], 2)));
$values[$g][21][1][2] = bcadd(bcdiv($values[$g-1][22][2][1], 2), bcdiv($values[$g-1][22][1][2], 2));
$values[$g][21][1][1] = bcdiv($values[$g-1][22][2][0], 2);
$values[$g][21][1][0] = bcadd(bcdiv($values[$g-1][21][1][2], 2), bcadd(bcdiv($values[$g-1][21][1][1], 2), bcdiv($values[$g-1][21][1][0], 2)));
$results[$g][21] = floatval(
bcadd($values[$g][21][2][2],
bcadd($values[$g][21][2][1],
bcadd($values[$g][21][2][0],
bcadd($values[$g][21][1][2],
bcadd($values[$g][21][1][1],
$values[$g][21][1][0]))))));
// Rank 22 - Murloc Raider
$values[$g][22][2][2] = bcadd(bcdiv($values[$g-1][22][1][1], 2), bcdiv($values[$g-1][23][2][2], 2));
$values[$g][22][2][1] = bcdiv($values[$g-1][22][1][0], 2);
$values[$g][22][2][0] = bcadd(bcdiv($values[$g-1][22][2][2], 2), bcadd(bcdiv($values[$g-1][22][2][1], 2), bcdiv($values[$g-1][22][2][0], 2)));
$values[$g][22][1][2] = bcadd(bcdiv($values[$g-1][23][2][1], 2), bcdiv($values[$g-1][23][1][2], 2));
$values[$g][22][1][1] = bcdiv($values[$g-1][23][2][0], 2);
$values[$g][22][1][0] = bcadd(bcdiv($values[$g-1][22][1][2], 2), bcadd(bcdiv($values[$g-1][22][1][1], 2), bcdiv($values[$g-1][22][1][0], 2)));
$results[$g][22] = floatval(
bcadd($values[$g][22][2][2],
bcadd($values[$g][22][2][1],
bcadd($values[$g][22][2][0],
bcadd($values[$g][22][1][2],
bcadd($values[$g][22][1][1],
$values[$g][22][1][0]))))));
// Rank 23 - Argent Squire
$values[$g][23][2][2] = bcadd(bcdiv($values[$g-1][23][1][1], 2), bcdiv($values[$g-1][24][2][2], 2));
$values[$g][23][2][1] = bcdiv($values[$g-1][23][1][0], 2);
$values[$g][23][2][0] = bcadd(bcdiv($values[$g-1][23][2][2], 2), bcadd(bcdiv($values[$g-1][23][2][1], 2), bcdiv($values[$g-1][23][2][0], 2)));
$values[$g][23][1][2] = bcadd(bcdiv($values[$g-1][24][2][1], 2), bcdiv($values[$g-1][24][1][2], 2));
$values[$g][23][1][1] = bcdiv($values[$g-1][24][2][0], 2);
$values[$g][23][1][0] = bcadd(bcdiv($values[$g-1][23][1][2], 2), bcadd(bcdiv($values[$g-1][23][1][1], 2), bcdiv($values[$g-1][23][1][0], 2)));
$results[$g][23] = floatval(
bcadd($values[$g][23][2][2],
bcadd($values[$g][23][2][1],
bcadd($values[$g][23][2][0],
bcadd($values[$g][23][1][2],
bcadd($values[$g][23][1][1],
$values[$g][23][1][0]))))));
// Rank 24 - Leper Gnome
$values[$g][24][2][2] = bcadd(bcdiv($values[$g-1][24][1][1], 2), bcdiv($values[$g-1][25][2][2], 2));
$values[$g][24][2][1] = bcdiv($values[$g-1][24][1][0], 2);
$values[$g][24][2][0] = bcadd(bcdiv($values[$g-1][24][2][2], 2), bcadd(bcdiv($values[$g-1][24][2][1], 2), bcdiv($values[$g-1][24][2][0], 2)));
$values[$g][24][1][2] = bcdiv($values[$g-1][25][2][1], 2);
$values[$g][24][1][1] = bcdiv($values[$g-1][25][2][0], 2);
$values[$g][24][1][0] = bcadd(bcdiv($values[$g-1][24][1][2], 2), bcadd(bcdiv($values[$g-1][24][1][1], 2), bcdiv($values[$g-1][24][1][0], 2)));
$results[$g][24] = floatval(
bcadd($values[$g][24][2][2],
bcadd($values[$g][24][2][1],
bcadd($values[$g][24][2][0],
bcadd($values[$g][24][1][2],
bcadd($values[$g][24][1][1],
$values[$g][24][1][0]))))));
// Rank 25 - Angry Chicken
$values[$g][25][2][2] = bcdiv($values[$g-1][25][1][1], 2);
$values[$g][25][2][1] = bcdiv($values[$g-1][25][1][0], 2);
$values[$g][25][2][0] = bcadd(bcdiv($values[$g-1][25][2][2], 2), bcadd(bcdiv($values[$g-1][25][2][1], 2), bcdiv($values[$g-1][25][2][0], 2)));
$values[$g][25][1][1] = bcdiv($values[$g-1][25][0][0], 2);
$values[$g][25][1][0] = bcadd(bcdiv($values[$g-1][25][1][1], 2), bcdiv($values[$g-1][25][1][0], 2));
$values[$g][25][0][0] = bcdiv($values[$g-1][25][0][0], 2);
$results[$g][25] = floatval(
bcadd($values[$g][25][2][2],
bcadd($values[$g][25][2][1],
bcadd($values[$g][25][2][0],
bcadd($values[$g][25][1][1],
bcadd($values[$g][25][1][0],
$values[$g][25][0][0]))))));
}
file_put_contents($output_file, json_encode($results, JSON_NUMERIC_CHECK));
$time_end = microtime(true);
echo "Time: " . ($time_end - $time_start) . " seconds";