@haihire/baccarat-score-board-road 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -0
  3. package/dist/cjs/BigEyeRoad.js +399 -0
  4. package/dist/cjs/BigEyeRoad.js.map +1 -0
  5. package/dist/cjs/BigRoad.js +222 -0
  6. package/dist/cjs/BigRoad.js.map +1 -0
  7. package/dist/cjs/CockroachRoad.js +512 -0
  8. package/dist/cjs/CockroachRoad.js.map +1 -0
  9. package/dist/cjs/Expects.js +23 -0
  10. package/dist/cjs/Expects.js.map +1 -0
  11. package/dist/cjs/ScoreBoard.js +139 -0
  12. package/dist/cjs/ScoreBoard.js.map +1 -0
  13. package/dist/cjs/SmallRoad.js +505 -0
  14. package/dist/cjs/SmallRoad.js.map +1 -0
  15. package/dist/cjs/index.js +19 -0
  16. package/dist/cjs/index.js.map +1 -0
  17. package/dist/cjs/package.json +3 -0
  18. package/dist/cjs/types.js +11 -0
  19. package/dist/cjs/types.js.map +1 -0
  20. package/dist/esm/BigEyeRoad.js +395 -0
  21. package/dist/esm/BigEyeRoad.js.map +1 -0
  22. package/dist/esm/BigRoad.js +218 -0
  23. package/dist/esm/BigRoad.js.map +1 -0
  24. package/dist/esm/CockroachRoad.js +508 -0
  25. package/dist/esm/CockroachRoad.js.map +1 -0
  26. package/dist/esm/Expects.js +20 -0
  27. package/dist/esm/Expects.js.map +1 -0
  28. package/dist/esm/ScoreBoard.js +135 -0
  29. package/dist/esm/ScoreBoard.js.map +1 -0
  30. package/dist/esm/SmallRoad.js +501 -0
  31. package/dist/esm/SmallRoad.js.map +1 -0
  32. package/dist/esm/index.js +10 -0
  33. package/dist/esm/index.js.map +1 -0
  34. package/dist/esm/package.json +3 -0
  35. package/dist/esm/types.js +10 -0
  36. package/dist/esm/types.js.map +1 -0
  37. package/dist/types/BigEyeRoad.d.ts +24 -0
  38. package/dist/types/BigEyeRoad.d.ts.map +1 -0
  39. package/dist/types/BigRoad.d.ts +17 -0
  40. package/dist/types/BigRoad.d.ts.map +1 -0
  41. package/dist/types/CockroachRoad.d.ts +26 -0
  42. package/dist/types/CockroachRoad.d.ts.map +1 -0
  43. package/dist/types/Expects.d.ts +20 -0
  44. package/dist/types/Expects.d.ts.map +1 -0
  45. package/dist/types/ScoreBoard.d.ts +69 -0
  46. package/dist/types/ScoreBoard.d.ts.map +1 -0
  47. package/dist/types/SmallRoad.d.ts +25 -0
  48. package/dist/types/SmallRoad.d.ts.map +1 -0
  49. package/dist/types/index.d.ts +9 -0
  50. package/dist/types/index.d.ts.map +1 -0
  51. package/dist/types/types.d.ts +112 -0
  52. package/dist/types/types.d.ts.map +1 -0
  53. package/package.json +65 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 haihire
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,194 @@
1
+ # @haihire/baccarat-score-board-road
2
+
3
+ A baccarat scoreboard roadmap generator. Feed it a shoe's result log and it
4
+ builds the **Big Road** plus the three Chinese-style **derived roads** (Big Eye,
5
+ Small, Cockroach), with optional **next-hand prediction**.
6
+
7
+ [![types](https://img.shields.io/badge/types-included-blue)]()
8
+ [![modules](https://img.shields.io/badge/modules-ESM%20%2B%20CJS-blueviolet)]()
9
+ [![tests](https://img.shields.io/badge/tests-20%20passing-brightgreen)]()
10
+ [![dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)]()
11
+ [![license](https://img.shields.io/badge/license-MIT-green)]()
12
+
13
+ ```ts
14
+ import { ScoreBoard } from "@haihire/baccarat-score-board-road";
15
+
16
+ const board = new ScoreBoard(log);
17
+ const { bigRoad, bigEyeRoad, smallRoad, cockroachRoad } = board.getAllRoads();
18
+ const next = board.predict(); // { player: {...}, banker: {...} }
19
+ ```
20
+
21
+ ## Why this package
22
+
23
+ - **Fully typed** — proper unions and interfaces (`Winner`, `Mark`, `BigRoadCell`, …), not `any`. Real autocomplete and compile-time checks.
24
+ - **ESM + CommonJS** — dual build with an `exports` map, so it works in modern bundlers (tree-shakable) and legacy Node alike.
25
+ - **Zero runtime dependencies** — nothing pulled into your bundle.
26
+ - **One-line API** — the `ScoreBoard` facade hides the Big-Road→derived-road wiring. No manual `gubun`/`.old`/`col * 2` bookkeeping (the low-level classes are still exported if you want them).
27
+ - **Built-in prediction** — "ask the road" (問路) for both a hypothetical Player and Banker next hand.
28
+ - **MIT licensed** — free for commercial use.
29
+ - **Battle-tested** — the road algorithm runs in a live baccarat product, and the test suite verifies it against **real production shoes** (including the lossless-placement invariant: every Player/Banker/Tie result is preserved).
30
+
31
+ ---
32
+
33
+ ## Install
34
+
35
+ ```bash
36
+ npm install @haihire/baccarat-score-board-road
37
+ ```
38
+
39
+ ## Usage (recommended: `ScoreBoard`)
40
+
41
+ ```ts
42
+ import { ScoreBoard, RoundInput } from "@haihire/baccarat-score-board-road";
43
+
44
+ const log: RoundInput[] = [
45
+ { sWinner: "Player", sPair: "", sPlayer_Score: 8, sBanker_Score: 5 },
46
+ { sWinner: "Banker", sPair: "Banker_Pair", sPlayer_Score: 4, sBanker_Score: 7 },
47
+ // ...one entry per round of the shoe
48
+ ];
49
+
50
+ const board = new ScoreBoard(log, {
51
+ col: 13, // Big Road width (derived roads use col * 2). Default 13
52
+ cut: true, // drop the oldest columns past `col`. Default true
53
+ color: false, // Tie starts a new column (score-color mode). Default false
54
+ trimLeadingTie: true, // drop leading ties. Default true
55
+ });
56
+
57
+ // Everything in one pass (Big Road is computed only once):
58
+ const { bigRoad, bigEyeRoad, smallRoad, cockroachRoad } = board.getAllRoads();
59
+
60
+ // Or individually:
61
+ const big = board.getBigRoad(); // { old, new, gubunIndex, over }
62
+ const bigEye = board.getBigEyeRoad(); // MarkCell[][]
63
+
64
+ // Render the Big Road:
65
+ for (let col = 0; col < bigRoad.new.length; col++) {
66
+ for (let row = 0; row < bigRoad.new[col].length; row++) {
67
+ const cell = bigRoad.new[col][row];
68
+ if (cell.Win) draw(cell.Win, cell.Pair, cell.WinScore, cell.TieCount);
69
+ }
70
+ }
71
+ ```
72
+
73
+ ### Prediction (next hand)
74
+
75
+ ```ts
76
+ const next = board.predict();
77
+ // {
78
+ // player: { bigEye: "Player"|"Banker"|"", small: ..., cockroach: ... },
79
+ // banker: { bigEye: ..., small: ..., cockroach: ... },
80
+ // }
81
+ ```
82
+
83
+ `predict()` reproduces the "ask the road" technique: it appends a hypothetical
84
+ next round (once as a Player win, once as a Banker win), rebuilds the Big Road,
85
+ and reports the mark each derived road would draw.
86
+
87
+ ---
88
+
89
+ ## Input format
90
+
91
+ Each element of the log is one round. Only `sWinner`, `sPair`, and the two
92
+ scores are read — extra fields (raw card data, etc.) are ignored, so DB records
93
+ can be passed straight in.
94
+
95
+ ```ts
96
+ interface RoundInput {
97
+ sWinner: "Player" | "Banker" | "Tie"; // required
98
+ sPair?: "" | "Player_Pair" | "Banker_Pair" | "Player_Pair,Banker_Pair";
99
+ sPlayer_Score?: number | string; // used in color mode
100
+ sBanker_Score?: number | string;
101
+ }
102
+ ```
103
+
104
+ ## Output types
105
+
106
+ ### Big Road → `BigRoadResult`
107
+ ```ts
108
+ interface BigRoadResult {
109
+ old: BigRoadCell[][]; // untrimmed 6×200 source grid (input for derived roads)
110
+ new: BigRoadCell[][]; // trimmed/padded render grid
111
+ gubunIndex: ColumnBreak[]; // column breaks ("dragon tail")
112
+ over: boolean; // whether any column was cut off
113
+ }
114
+
115
+ interface BigRoadCell {
116
+ TieCount: number;
117
+ Win: "Player" | "Banker" | "Tie" | "";
118
+ Pair?: 0 | 1 | 2 | 3; // 0 none, 1 player, 2 banker, 3 both
119
+ WinScore?: number;
120
+ }
121
+ ```
122
+
123
+ ### Derived roads → `MarkCell[][]`
124
+ ```ts
125
+ interface MarkCell {
126
+ Mark: "Player" | "Banker" | ""; // Player = blue, Banker = red, "" = empty
127
+ }
128
+ ```
129
+ For the Chinese-style roads only the **color** is meaningful; it does not map
130
+ directly to an actual P/B win.
131
+
132
+ ---
133
+
134
+ ## Low-level API
135
+
136
+ If you need direct control, the road classes are exported. Note the wiring the
137
+ facade normally handles for you:
138
+
139
+ ```ts
140
+ import { BigRoad, BigEyeRoad, SmallRoad, CockroachRoad } from "@haihire/baccarat-score-board-road";
141
+
142
+ const Row = 6;
143
+ const g1 = new BigRoad({ array: log, row: Row, col: 13, cut: true, color: false }).getBigRoad();
144
+
145
+ const g2 = new BigEyeRoad({
146
+ gubun: g1.gubunIndex, // ★ the gubunIndex, under the key 'gubun'
147
+ row: Row,
148
+ col: 13 * 2, // ★ derived roads use col * 2
149
+ cut: true,
150
+ }).getBigEyeRoad(g1.old); // ★ pass g1.old (untrimmed), NOT g1.new
151
+
152
+ const g3 = new SmallRoad({ gubun: g1.gubunIndex, row: Row, col: 13 * 2, cut: true }).getSmallRoad(g1.old);
153
+ const g4 = new CockroachRoad({ gubun: g1.gubunIndex, row: Row, col: 13 * 2, cut: true }).getCockroachRoad(g1.old);
154
+ ```
155
+
156
+ Gotchas the facade removes for you:
157
+ 1. Derived roads consume **`g1.old`** (untrimmed), not `g1.new`.
158
+ 2. The constructor key is **`gubun`** (its value is `g1.gubunIndex`).
159
+ 3. Derived-road `col` is conventionally **`col * 2`**.
160
+ 4. `color` changes how the Big Road handles a Tie (new column vs. count).
161
+
162
+ For lower-level prediction, the derived roads accept `(bigRoad, inGame, who)` and
163
+ record the last mark on the exported `Expects` object.
164
+
165
+ ---
166
+
167
+ ## Build / publish (maintainers)
168
+
169
+ ```bash
170
+ npm install # install devDependencies (typescript, rimraf)
171
+ npm run build # src → dist/cjs (CommonJS) + dist/esm (ESM) + dist/types (.d.ts)
172
+ npm run typecheck # type-check only, no emit
173
+ npm publish # prepublishOnly runs build; publishes with --access public
174
+ ```
175
+
176
+ Build layout:
177
+ - `dist/cjs/` — CommonJS (`require`), tagged via `dist/cjs/package.json`
178
+ - `dist/esm/` — ES modules (`import`), tagged via `dist/esm/package.json`
179
+ - `dist/types/` — shared TypeScript declarations
180
+
181
+ ### Tests
182
+
183
+ ```bash
184
+ npm test # run the Vitest suite once
185
+ npm run test:watch
186
+ ```
187
+
188
+ Coverage includes placement rules, the `ScoreBoard` facade, and real shoes
189
+ exported from production (`test/fixtures/shoes.json`): a lossless-placement
190
+ invariant, a valid-mark invariant, and a regression snapshot.
191
+
192
+ ## License
193
+
194
+ MIT © haihire
@@ -0,0 +1,399 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BigEyeRoad = void 0;
4
+ const Expects_js_1 = require("./Expects.js");
5
+ /* eslint-disable no-loop-func */
6
+ class BigEyeRoad {
7
+ constructor(info) {
8
+ this.row = info.row;
9
+ this.col = info.col;
10
+ this.bigEyeRoad = [];
11
+ this.visited = [];
12
+ this.Before = [];
13
+ this.columnBreaks = info.gubun;
14
+ this.cut = info.cut;
15
+ }
16
+ getBigEyeRoad(bigRoad, inGame = false, Who = "") {
17
+ if (bigRoad.length === 0) {
18
+ return [];
19
+ }
20
+ this.bigEyeRoad = [];
21
+ let copyBigRoad = [];
22
+ let rows = [];
23
+ //i === row / j === col
24
+ for (let j = 0; j < bigRoad[0].length; j++) {
25
+ for (let i = 0; i < this.row; i++) {
26
+ if (this.visited.some((el) => el.i === i && el.j === j)) {
27
+ continue;
28
+ }
29
+ if (bigRoad[i][j].Win !== "") {
30
+ copyBigRoad.push(bigRoad[i][j].Win);
31
+ }
32
+ if (i === 5 && j === 0) {
33
+ let offset = 1;
34
+ while (bigRoad[i][j + offset] &&
35
+ bigRoad[i][j + offset].Win !== "" &&
36
+ bigRoad[i][j].Win === bigRoad[i][j + offset].Win &&
37
+ !this.columnBreaks.some((el) => el.rowIndex === i && el.colIndex === j + offset)) {
38
+ copyBigRoad.push(bigRoad[i][j + offset].Win);
39
+ this.visited.push({ i: i, j: j + offset });
40
+ offset += 1;
41
+ }
42
+ if (this.columnBreaks.some((el) => el.rowIndex === i && el.colIndex === j + offset)) {
43
+ copyBigRoad.push(bigRoad[i][j + offset].Win);
44
+ this.visited.push({ i: i, j: j + offset });
45
+ }
46
+ }
47
+ if ((i === 0 && j === 1) ||
48
+ (bigRoad[1][1].Win === "" && bigRoad[0][2].Win === "") ||
49
+ bigRoad[i][j].Win === "") {
50
+ continue;
51
+ }
52
+ if (!copyBigRoad.some((el) => el !== copyBigRoad[0])) {
53
+ continue;
54
+ }
55
+ this.evaluatePosition(bigRoad, i, j, copyBigRoad, rows);
56
+ }
57
+ }
58
+ this.bigEyeRoad = this.getCopy(rows);
59
+ if (inGame) {
60
+ if (Who === "Player") {
61
+ Expects_js_1.Expects.expectPGun2s = rows[rows.length - 1]
62
+ ? rows[rows.length - 1].Mark
63
+ : "";
64
+ }
65
+ else if (Who === "Banker") {
66
+ Expects_js_1.Expects.expectBGun2s = rows[rows.length - 1]
67
+ ? rows[rows.length - 1].Mark
68
+ : "";
69
+ }
70
+ }
71
+ return this.bigEyeRoad;
72
+ }
73
+ evaluatePosition(bigRoad, i, j, copyBigRoad, rows, re = false) {
74
+ if (this.checkBox(copyBigRoad) && bigRoad[i][j].Win !== "" && i !== 0) {
75
+ //박스완성
76
+ // cc.log('Banker-checkBox');
77
+ rows.push({ Mark: "Banker" });
78
+ }
79
+ else if (this.checkWillBox(copyBigRoad) &&
80
+ bigRoad[i][j].Win !== "" &&
81
+ i !== 0) {
82
+ // 박스 따라가는중
83
+ // cc.log('Banker-checkWillBox');
84
+ rows.push({ Mark: "Banker" });
85
+ }
86
+ else if (this.checkPlump(copyBigRoad) &&
87
+ bigRoad[i][j].Win !== "" &&
88
+ i === 0) {
89
+ //퐁당퐁당
90
+ // cc.log('Banker-checkPlump');
91
+ rows.push({ Mark: "Banker" });
92
+ }
93
+ else if (this.checkBoxComp(copyBigRoad) &&
94
+ bigRoad[i][j].Win !== "" &&
95
+ i === 0) {
96
+ // 박스 완성 후
97
+ // cc.log('Banker-checkBoxComp');
98
+ rows.push({ Mark: "Banker" });
99
+ }
100
+ else if (this.checkWillLine(copyBigRoad) && bigRoad[i][j].Win !== "") {
101
+ // 줄
102
+ // cc.log('Banker-checkWillLine');
103
+ rows.push({ Mark: "Banker" });
104
+ }
105
+ else if (bigRoad[i][j].Win !== "") {
106
+ // cc.log('Player-6번');
107
+ rows.push({ Mark: "Player" });
108
+ }
109
+ if (!re)
110
+ this.ChangeJul(bigRoad, i, j, copyBigRoad, rows);
111
+ }
112
+ ChangeJul(bigRoad, i, j, copyBigRoad, rows) {
113
+ let offset = 1;
114
+ while (bigRoad[i][j + offset] &&
115
+ bigRoad[i][j + offset].Win !== "" &&
116
+ bigRoad[i][j].Win === bigRoad[i][j + offset].Win &&
117
+ this.columnBreaks.some((el) => el.rowIndex === i && el.colIndex === j + offset)) {
118
+ // cc.log('특별1',this.columnBreaks);
119
+ copyBigRoad.push(bigRoad[i][j + offset].Win);
120
+ this.evaluatePosition(bigRoad, i, j + offset, copyBigRoad, rows, true);
121
+ this.visited.push({ i: i, j: j + offset });
122
+ offset += 1;
123
+ }
124
+ }
125
+ checkBoxComp(rows) {
126
+ const reRows = [...rows].reverse();
127
+ const reverseArray = [];
128
+ const LastArray = [];
129
+ for (let i = 0; i < reRows.length; i++) {
130
+ if (i === 0) {
131
+ reverseArray.push(reRows[i]);
132
+ }
133
+ else {
134
+ if (reverseArray.includes(reRows[i])) {
135
+ reverseArray.push(reRows[i]);
136
+ }
137
+ else {
138
+ if (LastArray.length === 3) {
139
+ continue;
140
+ }
141
+ LastArray.push([...reverseArray]);
142
+ reverseArray.length = 0;
143
+ reverseArray.push(reRows[i]);
144
+ }
145
+ }
146
+ }
147
+ if (LastArray.length <= 1) {
148
+ return false;
149
+ }
150
+ if (LastArray.length === 2) {
151
+ LastArray.push([...reverseArray]);
152
+ }
153
+ //최근 전적이 하나이며 전 전적과 전전 전적이 같다면 true mark 빨강
154
+ if (LastArray[0].length === 1 &&
155
+ LastArray[1].length === LastArray[2].length) {
156
+ return true;
157
+ }
158
+ else {
159
+ return false;
160
+ }
161
+ }
162
+ checkPlump(rows) {
163
+ const reRows = [...rows].reverse();
164
+ const reverseArray = [];
165
+ const LastArray = [];
166
+ for (let i = 0; i < reRows.length; i++) {
167
+ if (i === 0) {
168
+ reverseArray.push(reRows[i]);
169
+ }
170
+ else {
171
+ if (reverseArray.includes(reRows[i])) {
172
+ reverseArray.push(reRows[i]);
173
+ }
174
+ else {
175
+ if (LastArray.length === 3) {
176
+ continue;
177
+ }
178
+ LastArray.push([...reverseArray]);
179
+ reverseArray.length = 0;
180
+ reverseArray.push(reRows[i]);
181
+ }
182
+ }
183
+ }
184
+ if (LastArray.length < 2) {
185
+ return false;
186
+ }
187
+ if (LastArray.length === 2) {
188
+ LastArray.push([...reverseArray]);
189
+ }
190
+ //최근 전적 === 전 전적 === 전전 전적 갯수가 모두 1이면 true mark 빨강
191
+ if (LastArray[0].length === 1 &&
192
+ LastArray[1].length === 1 &&
193
+ LastArray[2].length === 1) {
194
+ return true;
195
+ }
196
+ else {
197
+ return false;
198
+ }
199
+ }
200
+ checkWillLine(rows) {
201
+ const reRows = [...rows].reverse();
202
+ const reverseArray = [];
203
+ const LastArray = [];
204
+ for (let i = 0; i < reRows.length; i++) {
205
+ if (i === 0) {
206
+ reverseArray.push(reRows[i]);
207
+ }
208
+ else {
209
+ if (reverseArray.includes(reRows[i])) {
210
+ reverseArray.push(reRows[i]);
211
+ }
212
+ else {
213
+ if (LastArray.length === 2) {
214
+ continue;
215
+ }
216
+ LastArray.push([...reverseArray]);
217
+ reverseArray.length = 0;
218
+ reverseArray.push(reRows[i]);
219
+ }
220
+ }
221
+ }
222
+ if (LastArray.length === 1) {
223
+ LastArray.push([...reverseArray]);
224
+ }
225
+ //최근 전적 갯수가 전 전적 갯수보다 2이상 많다면 true mark 빨강
226
+ if (LastArray[0].length - LastArray[1].length >= 2) {
227
+ return true;
228
+ }
229
+ else {
230
+ return false;
231
+ }
232
+ }
233
+ checkWillBox(rows) {
234
+ //박스가 되가는중
235
+ const reRows = [...rows].reverse();
236
+ const reverseArray = [];
237
+ const LastArray = [];
238
+ for (let i = 0; i < reRows.length; i++) {
239
+ if (i === 0) {
240
+ reverseArray.push(reRows[i]);
241
+ }
242
+ else {
243
+ if (reverseArray.includes(reRows[i])) {
244
+ reverseArray.push(reRows[i]);
245
+ }
246
+ else {
247
+ if (LastArray.length === 2) {
248
+ continue;
249
+ }
250
+ LastArray.push([...reverseArray]);
251
+ reverseArray.length = 0;
252
+ reverseArray.push(reRows[i]);
253
+ }
254
+ }
255
+ }
256
+ if (LastArray.length === 1) {
257
+ LastArray.push([...reverseArray]);
258
+ }
259
+ if (this.Before.length !== 0 &&
260
+ !this.arraysEqual(this.Before, LastArray[1])) {
261
+ this.Before = LastArray[1];
262
+ return false;
263
+ }
264
+ //최근 전적이 전 전적갯수보다 적다면 true mark 빨강
265
+ if (LastArray[0].length < LastArray[1].length) {
266
+ this.Before = LastArray[1];
267
+ return true;
268
+ }
269
+ else {
270
+ return false;
271
+ }
272
+ }
273
+ arraysEqual(arr1, arr2) {
274
+ if (arr1.length !== arr2.length) {
275
+ return false;
276
+ }
277
+ for (let i = 0; i < arr1.length; i++) {
278
+ if (arr1[i] !== arr2[i]) {
279
+ return false;
280
+ }
281
+ }
282
+ return true;
283
+ }
284
+ checkBox(rows) {
285
+ //박스 완성
286
+ const reRows = [...rows].reverse();
287
+ const reverseArray = [];
288
+ const LastArray = [];
289
+ for (let i = 0; i < reRows.length; i++) {
290
+ if (i === 0) {
291
+ reverseArray.push(reRows[i]);
292
+ }
293
+ else {
294
+ if (reverseArray.includes(reRows[i])) {
295
+ reverseArray.push(reRows[i]);
296
+ }
297
+ else {
298
+ if (LastArray.length === 2) {
299
+ continue;
300
+ }
301
+ LastArray.push([...reverseArray]);
302
+ reverseArray.length = 0;
303
+ reverseArray.push(reRows[i]);
304
+ }
305
+ }
306
+ }
307
+ if (LastArray.length === 1) {
308
+ LastArray.push([...reverseArray]);
309
+ }
310
+ //최근 전적과 전 전적갯수가 같다면 true mark 빨강
311
+ if (LastArray[0].length === LastArray[1].length) {
312
+ return true;
313
+ }
314
+ else {
315
+ return false;
316
+ }
317
+ }
318
+ getCopy(data) {
319
+ let copyLoad = [];
320
+ for (let i = 0; i < 6; i++) {
321
+ let rows = [];
322
+ for (let j = 0; j < 200; j++) {
323
+ rows.push({ Mark: "" });
324
+ }
325
+ copyLoad.push(rows);
326
+ }
327
+ let rowIndex = 0;
328
+ let colIndex = 0;
329
+ let tempColIndex = 0;
330
+ for (let i = 0; i < data.length; i++) {
331
+ if (data[i].Mark === copyLoad[rowIndex][colIndex].Mark) {
332
+ rowIndex += 1;
333
+ if (rowIndex >= 6 ||
334
+ copyLoad[rowIndex][colIndex].Mark !== "" ||
335
+ tempColIndex !== 0) {
336
+ rowIndex -= 1;
337
+ colIndex += 1;
338
+ if (tempColIndex === 0) {
339
+ tempColIndex = colIndex;
340
+ }
341
+ }
342
+ copyLoad[rowIndex][colIndex].Mark = data[i].Mark;
343
+ }
344
+ else if (data[i].Mark !== copyLoad[rowIndex][colIndex].Mark) {
345
+ colIndex += 1;
346
+ rowIndex = 0;
347
+ if (tempColIndex !== 0) {
348
+ colIndex = tempColIndex;
349
+ tempColIndex = 0;
350
+ }
351
+ if (i === 0) {
352
+ rowIndex = 0;
353
+ colIndex = 0;
354
+ }
355
+ copyLoad[rowIndex][colIndex].Mark = data[i].Mark;
356
+ }
357
+ }
358
+ return this.updateRows(copyLoad);
359
+ }
360
+ updateArr(tArr) {
361
+ let arr = [...tArr.reverse()];
362
+ for (let i = 0; i < arr.length; i++) {
363
+ if (arr[i].Mark !== "") {
364
+ arr = arr.slice(i);
365
+ break;
366
+ }
367
+ }
368
+ if (arr.length === 200) {
369
+ return [];
370
+ }
371
+ return arr.reverse();
372
+ }
373
+ updateRows(data) {
374
+ let t0 = this.updateArr(data[0]);
375
+ let t1 = this.updateArr(data[1]);
376
+ let t2 = this.updateArr(data[2]);
377
+ let t3 = this.updateArr(data[3]);
378
+ let t4 = this.updateArr(data[4]);
379
+ let t5 = this.updateArr(data[5]);
380
+ const arrays = [t0, t1, t2, t3, t4, t5];
381
+ const maxLength = Math.max(...arrays.map((array) => array.length));
382
+ const reMax = Math.max(maxLength, this.col);
383
+ const modifiedArrays = arrays.map((array) => {
384
+ const newArray = [...array];
385
+ while (newArray.length < reMax) {
386
+ newArray.push({ Mark: "" });
387
+ }
388
+ if (this.cut) {
389
+ while (newArray.length > this.col) {
390
+ newArray.shift();
391
+ }
392
+ }
393
+ return newArray;
394
+ });
395
+ return modifiedArrays;
396
+ }
397
+ }
398
+ exports.BigEyeRoad = BigEyeRoad;
399
+ //# sourceMappingURL=BigEyeRoad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigEyeRoad.js","sourceRoot":"","sources":["../../src/BigEyeRoad.ts"],"names":[],"mappings":"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"}