bridges-cli 0.1.0 → 0.2.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.
- package/AGENTS.md +4 -1
- package/README.md +1 -0
- package/package.json +2 -2
- package/src/Game.tsx +37 -11
- package/src/__tests__/Game.test.tsx +298 -97
- package/src/components/HashiGrid.tsx +17 -1
- package/src/components/HashiRow.tsx +14 -1
- package/src/components/Messages.tsx +39 -6
- package/src/components/__tests__/HashiRow.test.tsx +28 -3
- package/src/components/__tests__/Messages.test.tsx +61 -38
- package/src/index.tsx +9 -1
- package/src/utils/bridges.ts +238 -14
- package/src/utils/puzzle-encoding.ts +101 -19
- package/src/utils/usePuzzleInput.ts +4 -2
|
@@ -245,42 +245,124 @@ export const samplePuzzles: PuzzleData[] = [
|
|
|
245
245
|
solution:
|
|
246
246
|
'9x9:a3=a5-a1a.1|a2#2-a3.||a##|b#.2|a#2|2=6.|3=8=4-1#.5=2#4=b5.#b##c|.4=a4#2=a3.a1-a4-a1a',
|
|
247
247
|
},
|
|
248
|
-
{
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
{
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
{
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
{
|
|
248
|
+
{
|
|
249
|
+
encoding: '9x9:3c1a3a3.b2b3c.3c2a2b.e4b6.3a4a8b3a.a1a3a2c.3a3a2b1a.c4a5b3.3a5a3b2a',
|
|
250
|
+
solution:
|
|
251
|
+
'9x9:3-b1a3-3.#a2-a3#a#.3a|a2#2a#.|a|a#4=a6.3-4=8=a3#.|1-3#2a|#.3-3#2#a1#.|a#4=5-a3.3=5-3=a2a',
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
encoding: '9x9:4a3b3a1a.a3b4a1a3.4h.b3a3a4a6.a1a1a2a2a.5a8a5a3b.h3.1a2a4b4a.a1a2b3a3',
|
|
255
|
+
solution:
|
|
256
|
+
'9x9:4=3-a3-1a.#3=a4|1-3.4|b#|b#.#|3-3|4=6.#1#1-2#2#.5=8=5-3##.|a#a#b#3.1a2a4=a4|.a1-2-a3=3',
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
encoding: '9x9:a1b4b3a.3b4d1.d2a1b.a3a8a3a4a.2c1c3.a4a3a3a4a.b1a3d.1d3b4.a4b4b1a',
|
|
260
|
+
solution:
|
|
261
|
+
'9x9:a1-a4=a3a.3=a4|b|1.|b#2-1||.|3=8=3-4|.2|a#1b#3.|4-3|3=4#.|#1-3|b#.1#b|3=a4.a4=a4-a1a',
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
encoding: '9x9:2a5a6b2a.a1d1a2.3a2b1a2a.a4b8a4b.3g3.b3a3b2a.a2a1b3a3.1a3d2a.a3b4a3a2',
|
|
265
|
+
solution:
|
|
266
|
+
'9x9:2-5=6=a2a.|1#a#a1-2.3|2a#1-2|.#4=a8=4||.3|b#a#|3.||3-3a#2#.|2#1-a3|3.1|3-c2|.a3=a4=3-2',
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
encoding: '9x9:3a3a2c1.a3d3b.b2b1c.4b2b8a4.a2e2a.4a5b1b2.c1b3b.b3b2a3a.2c2a3a3',
|
|
270
|
+
solution:
|
|
271
|
+
'9x9:3-3=2c1.#3-c3a|.##2-a1#a|.4#|2=a8=4.#2|c#2|.4-5-a1##2.|a#1-a3#|.|a3-a2-3|.2-b2-3=3',
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
encoding: '9x9:4a2b1b3.a2b3a3b.5a4b1c.h3.b5a4a5b.1h.c1b3a4.b2a3b2a.1b3b2a3',
|
|
275
|
+
solution:
|
|
276
|
+
'9x9:4=2b1-a3.#2=a3-3a#.5=4-a1#a#.|a|c#a3.|a5=4-5a|.1a#a|a#a|.b#1|a3-4.b2|3=a2#.1-a3-a2-3',
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
encoding: '9x9:1a2a3a4a3.a2a4a4a2a.1c2d.a5a4a2b3.b3a8b3a.3b1d3.b1b3a3a.a2b2d.4b4a3b3',
|
|
280
|
+
solution:
|
|
281
|
+
'9x9:1-2-3=4=3.a2-4-4=2|.1|a#2|b|.|5=4#2-a3.|#3=8=a3|.3#|1#b|3.##1|#3=3#.#2a|2|b#.4=a4-3-a3',
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
encoding: '9x9:a2b3a4a4.3a4b2a2a.a2a5b4b.5a4d3a.c2a3c.a2d2a4.b3b3a2a.a4a3b2a2.3a2a2b2a',
|
|
285
|
+
solution:
|
|
286
|
+
'9x9:a2=a3-4=4.3=4=a2|2#.|2=5=a4##.5=4|b|3#.#a#2-3||#.#2#b#2|4.##3-a3|2#.#4=3-a2|2.3-2-2-a2a',
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
encoding: '9x9:1a1a4a3a2.a3a2a2a3a.2g3.a2b3b3a.3b4a3b6.a3b4b3a.2g3.a4a2a1a2a.3a2a3a3a3',
|
|
290
|
+
solution:
|
|
291
|
+
'9x9:1a1-4=3-2.|3-2|2=3|.2#a||b|3.|2a|3=a3#.3=a4-3=a6.a3-a4=a3#.2#b|b|3.#4=2|1-2|.3-2-3-3=3',
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
encoding: '9x9:2a3a4a3a2.a2a2a2a1a.b1a3d.2d1b2.a3b8b4a.4b4d2.d3a2b.a1a4a1a1a.1a1a2a3a2',
|
|
295
|
+
solution:
|
|
296
|
+
'9x9:2-3=4=3-2.|2-2-2a1|.||1-3|a||.2|b#1a|2.|3=a8=a4|.4=a4#b|2.|b#3-2||.|1-4-1|1|.1a1-2-3-2',
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
encoding: '9x9:3a4a3a2a2.a2c3a3a.2a1e2.a3b2a1b.4a2b2a1a.a1b2a5a4.b2b3c.3c1a2b.a2a3a3b3',
|
|
300
|
+
solution:
|
|
301
|
+
'9x9:3=4-3-2-2.|2|a|3=3|.2#1a||a|2.|3-a2|1||.4-2-a2|1|.#1-a2-5-4.#a2=a3#a#.3-b1|2a#.a2=3-3-a3',
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
encoding: '9x9:2b4b5a4.b3b4a2a.f1b.1a2a3c4.a4a3a3a3a.2c4a5a4.b1f.a2a2b3b.3a5b4b3',
|
|
305
|
+
solution:
|
|
306
|
+
'9x9:2=a4=a5=4.b3=a4|2#.b|b#1##.1a2-3#a#4.|4=3#3-3#.2#a|4=5-4.|#1|b#a|.|2|2-a3a|.3=5=a4=a3',
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
encoding: '9x9:4a3a3b3a.a1a3b3a2.4a2a2b2a.a1a1e.2a5a8a4a4.e2a2a.a3b3a2a6.1a2b2a1a.a4b4a2a3',
|
|
310
|
+
solution:
|
|
311
|
+
'9x9:4=3-3=a3a.#1-3-a3|2.4-2|2a#2#.|1|1#a#|#.2|5=8=4|4.||#a#2-2#.|3#a3|2=6.1#2a|2-1#.a4=a4-2-3',
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
encoding: '9x9:2b5b4a2.a1e1a.d1a3b.a4a8a2a3a.3a1a3a3a3.a2a2a2a6a.b2a2d.a2e3a.4a3b1b2',
|
|
315
|
+
solution:
|
|
316
|
+
'9x9:2-a5=a4-2.|1a#b|1|.||a#1-3||.|4=8=2|3|.3|1#3=3#3.#2|2|2=6#.#|2-2b##.#2-d3#.4=3-a1b2',
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
encoding: '9x9:3a1a1a3a3.a2a1e.b2a7a4b.3d2b5.a2b4a3b.h3.3a2a3a4b.a2a3a3b4.2a3d2a',
|
|
320
|
+
solution:
|
|
321
|
+
'9x9:3-1a1a3-3.#2-1|a#a#.#|2=7=4a#.3|b#2=a5.|2-a4-3a|.|e#a3.3-2-3=4a#.|2=3-3=a4.2-3=c2a',
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
encoding: '9x9:1a3b3b3.a2g.2a3a1a2a6.a4a1a3a3a.b1a2c4.3d3a6a.a4b6a1a3.e1a2a.3a3a5a5a3',
|
|
325
|
+
solution:
|
|
326
|
+
'9x9:1-3-a3-a3.a2|b|b#.2#3-1|2=6.#4|1-3-3#.##1a2b#4.3#b#3=6#.|4=a6|1#3|.|c#1|2|.3=3-5=5=3',
|
|
327
|
+
},
|
|
264
328
|
{
|
|
265
329
|
encoding:
|
|
266
330
|
'9x16:a3a2a5a2a.2a3a2a2a2.e3c.a2b1a1b.4a4b4b4.a3b1a1b.2a2b5c.a4a4b2a4.d2d.3b5a3a2a.b1e3.d4b2a.3a3c2a4.a1a2e.1a2a3a3b.a2c2b3',
|
|
331
|
+
solution:
|
|
332
|
+
'9x16:a3-2-5=2a.2#3-2#2-2.###a|3|a|.#2#a1|1a|.4-4-a4-a4.|3-a1|1a#.2#2=a5|a#.|4=4a#2-4.|b#2#b|.3-a5#3-2|.|a1##b|3.|a|#4-a2#.3-3#|a2a4.|1|2|a#a#.1|2-3-3a#.a2-b2-a3',
|
|
267
333
|
},
|
|
268
334
|
{
|
|
269
335
|
encoding:
|
|
270
336
|
'9x16:a2a2a3a3a.2a2a4a1a2.e2a3a.a3b5a3a5.5a3b2a3a.a2f2.b3a4b3a.a3a1e.2a1a4a3a2.a4a2e.3a1a2b3a.a5a2b3a3.3a3b1c.a2a2c3a.2a3a2a3a2.a2a6a3a2a',
|
|
337
|
+
solution:
|
|
338
|
+
'9x16:a2-2-3=3a.2|2=4-1|2.#|b|2=3#.#3=a5-3=5.5=3a|2=3|.|2|a|b|2.|#3-4-a3|.|3|1|b||.2|1|4=3|2.|4-2|a|||.3#1-2a|3|.#5-2-a3#3.3#3-a1|##.|2#2b|3#.2-3#2=3|2.a2=6=3-2a',
|
|
271
339
|
},
|
|
272
340
|
{
|
|
273
341
|
encoding:
|
|
274
342
|
'9x16:2a3b2b2.a1b2d.2e1a3.b4a8b2a.2b1b2a4.e1c.1a1a4b2a.a3a2d2.2d3a3a.a5b5a2a4.c1e.3a2b2b3.a2b3a1b.4a4e3.d2b1a.3b4b2a3.',
|
|
343
|
+
solution:
|
|
344
|
+
'9x16:2-3-a2-a2.|1|a2c|.2||a#a1-3.||4=8=a2|.2||1#a2=4.||||#1b|.1|1|4|a2|.a3-2#|a#2.2|b#3-3|.#5=a5|2=4.##a1||b|.3#2||2-a3.|2#|3-1a|.4=4||c3.|b|2-a1#.3=a4-a2-3.',
|
|
275
345
|
},
|
|
276
346
|
{
|
|
277
347
|
encoding:
|
|
278
348
|
'13x22:1a2b2b3a2a2.i1a2a.3b3b3a3a1b.a3c1f2.b3c4b1c.3g2b4a.b5b2f3.i2a3a.3a4a1a1a1a1a5.e3c4c.a3a3c1d3.2d2c4a1a.c5c2e.2a1a3a3a3a5a4.a4a2i.3f3b4b.a4b3g2.3b3b3c2b.g4c2a.b1a1a2b3b4.a1a1i.2a2a3b3b2a3',
|
|
349
|
+
solution:
|
|
350
|
+
'13x22:1-2-a2-a3-2-2.h|1-2|.3=a3-a3-3-1||.|3-b1|d|2.|#3-b4-a1a||.3##c|a2-a4|.##5-a2|a|b#3.###b||a|2-3#.3#4-1|1a1|1-5.|#|b3=b4b#.|3|3-b1a|b3.2||#a2=b4-1|.|||5=b2d|.2|1|3-3-3=5=4.|4-2#a|c|a|.3#b#a|3-a4a|.#4-a3a|#b#a2.3|a3=a3#b2a|.||a|c4=b2|.||1|1a2=a3-a4.|1|1|g#.2-2a3=a3-a2-3',
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
encoding: '9x9:3b3b4a2.a2c1c.b1a4a2b.3d2b3.a2b5b1a.4b2a2b2.b1a3b2a.a1c2b1.2a3d3a',
|
|
354
|
+
solution:
|
|
355
|
+
'9x9:3-a3=a4-2.#2-b1|a|.#|1-4-2a|.3|b#2-a3.|2-a5|a1|.4=a2#2a|2.|a1-3|a2|.|1-b2a|1.2-3=c3a',
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
encoding: '9x9:4b4b4a4.b1a1d.2b1d3.d2a2b.4a4b3b4.a4b4b2a.2a1c2a2.a2e1a.2a4a3a4a2',
|
|
359
|
+
solution:
|
|
360
|
+
'9x9:4=a4-a4=4.#a1|1a|a#.2a|1|a|a3.b|a2-2a|.4=4-a3=a4.#4=a4-a2|.2#1a|a2|2.a2|a|a#1|.2=4-3-4-2',
|
|
279
361
|
},
|
|
280
|
-
{ encoding: '9x9:3b3b4a2.a2c1c.b1a4a2b.3d2b3.a2b5b1a.4b2a2b2.b1a3b2a.a1c2b1.2a3d3a' },
|
|
281
|
-
{ encoding: '9x9:4b4b4a4.b1a1d.2b1d3.d2a2b.4a4b3b4.a4b4b2a.2a1c2a2.a2e1a.2a4a3a4a2' },
|
|
282
362
|
{
|
|
283
363
|
encoding:
|
|
284
|
-
'21x35:a1a3b4a2a2a4b3a2b2.3c2b1e4b6a2b.b4c3a2c3d2a2a.a2a4a5a3b2b4a2d2.3a2a2a4a3c2c2d.a4a3a3a2b5b4a4a3a1a.3c4f4b3a3a2b.a2a2b3a4a3a2b5a4b5.4a2b4a1a3a7b2a1a1b.a2a3b5a4d1a3a3b4.3c4f2i.a2a2b4b5b5a3a3a4a4.e5b3a4f2a2a.4a3a5i1a2a2a3.a3a2a3a3a4b6b3a3a4a.3a2a3a2a2a4b2b4a3a3.a2a3e4k.4a4a2c2a3a5a3b5b3.a1a3b3b6c2b3d.1a3b3a3b1g2a2.a3a4b2b4b6b2a4c.2g2b2b2a2a3a2.a2a6a4a6d2b1a4c.5a4a4a2a2b4b8a3a1a2.a1a4a2a7b4b4a2a5a3a.b4e2b3b4c2b.3c6b7a3c2a2a1b3.a3a2o2a.3a5a5a3b3a4b5b2b3.e2a3e1d4b.
|
|
364
|
+
'21x35:a1a3b4a2a2a4b3a2b2.3c2b1e4b6a2b.b4c3a2c3d2a2a.a2a4a5a3b2b4a2d2.3a2a2a4a3c2c2d.a4a3a3a2b5b4a4a3a1a.3c4f4b3a3a2b.a2a2b3a4a3a2b5a4b5.4a2b4a1a3a7b2a1a1b.a2a3b5a4d1a3a3b4.3c4f2i.a2a2b4b5b5a3a3a4a4.e5b3a4f2a2a.4a3a5i1a2a2a3.a3a2a3a3a4b6b3a3a4a.3a2a3a2a2a4b2b4a3a3.a2a3e4k.4a4a2c2a3a5a3b5b3.a1a3b3b6c2b3d.1a3b3a3b1g2a2.a3a4b2b4b6b2a4c.2g2b2b2a2a3a2.a2a6a4a6d2b1a4c.5a4a4a2a2b4b8a3a1a2.a1a4a2a7b4b4a2a5a3a.b4e2b3b4c2b.3c6b7a3c2a2a1b3.a3a2o2a.3a5a5a3b3a4b5b2b3.e2a3e1d4b.3b2b3b2d2b2a3a.b2b3a3c5a5b5a5a3.4c1a3a3a3a2a2b1a4a.a3a5a5a3a2a3a4b2a1a2.4a4a4a4a3a3a3a4b4a4a',
|
|
365
|
+
solution:
|
|
366
|
+
'21x35:a1-3=a4-2a2-4=a3-2-a2.3=b2a|1|a|a|4=a6=2a|.|a4=b3|2a|a3#b#2-2|.|2#4=5=3|a2a#4-2#|a|2.3#2#2|4=3a|a2|a|2|a||.#4-3#3#2-a5=a4-4=3a1|.3|b4##|b|4=a3-3=2a|.|2-2##3|4=3#2=a5-4=a5.4=2|#4|1#3-7=a2#1|1a#.|2-3##5=4#a#a1-3|3|a4.3|a|4##b#a2d|#|a#.#2-2##4=a5-a5=3-3#4-4.#c#5-a3=4a#c|2#2|.4-3=5#d#a#a1-2a2#3.|3-2|3-3=4#a6=a3-3=4#.3#2|3-2-2#4a#2=a4=3-3.#2#3|c|4#a#h.4-4#2-b2#3a5=3-a5=a3.|1|3-a3=a6|a|2=a3#b|.1|3=a3-3a#1a|c|#2-2.a3-4=a2#a4=a6-a2|4|b.2|a|c#2-a2#a2|2#3-2.#2-6=4=6|b|2a#1|4|a|.5=4#4=2#2-a4=a8=3#1a2.|1#4#2=7=a4=a4#2-5=3|.||4##b|2=a3a#4|b2||.3|##6=a7=3a|a2#2-1#|3.#3#2#b#a|a|b#c#2#.3#5-5-3#a3a4-a5-a2#|3.|##a|2#3a#a#a1|b|4||.3##2|#3|a2a#a|2-a2#3|.##2#|3|3=b5-5-a5=5#3.4#a#1|3=3-3=2#2a#1|4#.#3-5=5=3-2-3=4#a2|1#2.4=4=4=4=3-3=3-4-a4=4a',
|
|
285
367
|
},
|
|
286
368
|
]
|
|
@@ -8,6 +8,7 @@ type UsePuzzleInputProps = {
|
|
|
8
8
|
puzzlesLength: number
|
|
9
9
|
rows: { value: number | '-' | '=' | '#' | ' ' | '|' }[][]
|
|
10
10
|
showSolution: boolean
|
|
11
|
+
enableSolutions: boolean
|
|
11
12
|
onPrev: () => void
|
|
12
13
|
onNext: () => void
|
|
13
14
|
onToggleSolution: () => void
|
|
@@ -136,6 +137,7 @@ export default function usePuzzleInput({
|
|
|
136
137
|
puzzlesLength,
|
|
137
138
|
rows,
|
|
138
139
|
showSolution,
|
|
140
|
+
enableSolutions,
|
|
139
141
|
onPrev,
|
|
140
142
|
onNext,
|
|
141
143
|
onToggleSolution,
|
|
@@ -280,7 +282,7 @@ export default function usePuzzleInput({
|
|
|
280
282
|
onPrev()
|
|
281
283
|
resetSelection()
|
|
282
284
|
return
|
|
283
|
-
} else if (input === 's') {
|
|
285
|
+
} else if (input === 's' && enableSolutions) {
|
|
284
286
|
onToggleSolution()
|
|
285
287
|
resetSelection()
|
|
286
288
|
return
|
|
@@ -366,7 +368,7 @@ export default function usePuzzleInput({
|
|
|
366
368
|
onNext()
|
|
367
369
|
} else if (input === 'p' && puzzleIndexRef.current - 1 >= 0) {
|
|
368
370
|
onPrev()
|
|
369
|
-
} else if (input === 's') {
|
|
371
|
+
} else if (input === 's' && enableSolutions) {
|
|
370
372
|
onToggleSolution()
|
|
371
373
|
} else if (input >= '1' && input <= '8') {
|
|
372
374
|
if (showSolutionRef.current) return
|