@@ -54,19 +54,6 @@ type NSC<B extends GameState, N extends Columns, R extends Rows, C extends Colum
54
54
: B [ 'board' ] [ R ] [ C ]
55
55
: B [ 'board' ] [ R ] [ C ] ;
56
56
57
- type NextState < B extends GameState , N extends Columns > =
58
- [ B [ 'state' ] ] extends [ Connect4Chips ]
59
- ? [ NextBoard < B , N > ] extends [ infer NB extends Board ]
60
- ? [ HasWon < NB , B [ 'state' ] > ] extends [ false ]
61
- ? B [ 'board' ] [ number ] [ number ] extends Connect4Chips
62
- ? 'Draw'
63
- : B [ 'state' ] extends '🔴'
64
- ? '🟡'
65
- : '🔴'
66
- : `${B [ 'state' ] } Won`
67
- : B [ 'state' ]
68
- : never ;
69
-
70
57
type NextStateN < NB extends Board , C extends Connect4Chips > =
71
58
HasWon < NB , C > extends false
72
59
? NB [ number ] [ number ] extends Connect4Chips
@@ -76,40 +63,6 @@ type NextStateN<NB extends Board, C extends Connect4Chips> =
76
63
: '🔴'
77
64
: `${C } Won`
78
65
79
-
80
- type NextStateXX < B extends GameState , N extends Columns > =
81
- // [B['state']] extends [Connect4Chips]
82
- HasWon < NextBoard < B , N > , '🔴' > ;
83
- // : B['state']
84
- // : never;
85
-
86
- type NextStateXXX < B extends Board > =
87
- // [B['state']] extends [Connect4Chips]
88
- HasWon < B , '🔴' > ;
89
-
90
-
91
- type NextStateX < B extends GameState , N extends Columns > =
92
- [ B [ 'state' ] ] extends [ Connect4Chips ]
93
- ? [ NextBoard < B , N > ] extends [ infer NB extends Board ]
94
- ? HasWon < NB , B [ 'state' ] >
95
- : B [ 'state' ]
96
- : never ;
97
-
98
- type NextStateXZ < B extends [ GameState , Columns ] > =
99
- [ B [ 0 ] [ 'state' ] ] extends [ Connect4Chips ]
100
- ? [ NextBoard < B [ 0 ] , B [ 1 ] > ] extends [ infer NB extends Board ]
101
- ? HasWon < NB , B [ 0 ] [ 'state' ] >
102
- : B [ 0 ] [ 'state' ]
103
- : never ;
104
-
105
- type NextStateY < B extends GameState , N extends Columns > =
106
- [ B [ 'state' ] ] extends [ Connect4Chips ]
107
- ? [ NextBoard < B , N > ] extends [ infer NB extends Board ]
108
- ? [ NB , B [ 'state' ] ]
109
- : B [ 'state' ]
110
- : never ;
111
-
112
-
113
66
type Connect4 < B extends GameState , N extends Columns > =
114
67
NextBoard < B , N > extends infer NB extends Board
115
68
? B [ 'state' ] extends Connect4Chips
@@ -120,25 +73,6 @@ type Connect4<B extends GameState, N extends Columns> =
120
73
: never
121
74
: never ;
122
75
123
- type x = [ 1 , 1 , 1 , any ] extends [ 1 , 1 , 1 , 2 ] ? true : false ;
124
- // ^?
125
- type y = [ 1 , 1 , 1 , 2 ] extends ( [ 1 , 1 , 1 , any ] | [ any , 1 , 1 , 1 , any ] ) ? true : false ;
126
- // ^?
127
-
128
- type test_move1_actual1 = NextBoard < {
129
- board : [
130
- [ " " , " " , " " , " " , " " , " " , " " ] ,
131
- [ " " , " " , " " , " " , " " , " " , " " ] ,
132
- [ " " , " " , " " , " " , " " , " " , " " ] ,
133
- [ "🟡" , " " , " " , " " , " " , " " , " " ] ,
134
- [ "🔴" , " " , " " , " " , " " , " " , " " ] ,
135
- [ "🟡" , " " , " " , " " , " " , " " , " " ] ,
136
- ] ;
137
- state : "🔴" ;
138
- } , 0 > ;
139
-
140
- // ^?
141
-
142
76
// Longest line including diagonals is 7.
143
77
type Connected4Sets < T extends Connect4Chips > =
144
78
| [ T , T , T , T ]
@@ -194,38 +128,3 @@ type HasWon<B extends Board, C extends Connect4Chips> = IsTuple<(
194
128
| [ B [ 0 ] [ 3 ] , B [ 1 ] [ 2 ] , B [ 2 ] [ 1 ] , B [ 3 ] [ 0 ] ]
195
129
196
130
) & Connected4Sets < C > ) > ;
197
-
198
-
199
- import { Expect , Equal } from "type-testing" ;
200
-
201
- type test_move1_actual = Connect4 < NewGame , 0 > ;
202
- // ^?
203
- type test_move1_expected = {
204
- board : [
205
- [ " " , " " , " " , " " , " " , " " , " " ] ,
206
- [ " " , " " , " " , " " , " " , " " , " " ] ,
207
- [ " " , " " , " " , " " , " " , " " , " " ] ,
208
- [ " " , " " , " " , " " , " " , " " , " " ] ,
209
- [ " " , " " , " " , " " , " " , " " , " " ] ,
210
- [ "🟡" , " " , " " , " " , " " , " " , " " ] ,
211
- ] ;
212
- state : "🔴" ;
213
- } ;
214
-
215
- type test_move1 = Expect < Equal < test_move1_actual , test_move1_expected > > ;
216
- type testmove1b = HasWon < test_move1_actual [ 'board' ] , '🟡' >
217
- type testmove1bc = IsTuple < HasWon < test_move1_actual [ 'board' ] , '🟡' > >
218
- type testmove1c = NextState < NewGame , 0 >
219
- type testmove1cx = NextStateX < NewGame , 0 >
220
- type testmove1cxx = NextStateXX < NewGame , 0 >
221
- type testmove1cxxx = NextStateXXX < NextBoard < NewGame , 0 > >
222
- type testmove1cxyzx = NextStateXZ < [ NewGame , 0 ] >
223
- type testmove1cxy = NextStateY < NewGame , 0 >
224
- type testmove1cxyz = HasWon < testmove1cxy [ 0 ] , testmove1cxy [ 1 ] >
225
- // type testmove1cxyzx = NextStateXZ<[testmove1cxy[0], 0]>
226
- type testmove1cde = IsNever < NextState < NewGame , 0 > >
227
- type testmove1cdef = IsTuple < NextState < NewGame , 0 > >
228
- type testmove1cd = HasWon < NextBoard < NewGame , 0 > , '🟡' >
229
- type testmove1cdx = HasWon < NextBoard < NewGame , 0 > , '🟡' > extends false ? 'yay' : 'nay'
230
-
231
- type testmove11 = test_move1_actual [ 'board' ] [ 3 ]
0 commit comments