feat(hunt): Add bingo board to hunts
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import { describe, expect, it } from 'bun:test';
|
||||
import { bingoDone, findBingo } from './bingo';
|
||||
|
||||
describe('Bingo', () => {
|
||||
it('no bingo', () => {
|
||||
expect(bingoDone([])).toBeFalse();
|
||||
expect(bingoDone(new Array(9).fill(false))).toBeFalse();
|
||||
|
||||
expect(findBingo([])).toBe(0);
|
||||
expect(findBingo(new Array(9).fill(false))).toBe(0);
|
||||
});
|
||||
|
||||
it('bingo', () => {
|
||||
expect(
|
||||
bingoDone([true, true, true, false, false, false, false, false, false])
|
||||
).toBeTrue();
|
||||
expect(
|
||||
bingoDone([true, false, false, true, false, false, true, false, false])
|
||||
).toBeTrue();
|
||||
expect(
|
||||
bingoDone([true, false, false, false, true, false, false, false, true])
|
||||
).toBeTrue();
|
||||
expect(
|
||||
bingoDone([true, false, true, true, true, false, false, false, true])
|
||||
).toBeTrue();
|
||||
expect(bingoDone(new Array(9).fill(true))).toBeTrue();
|
||||
|
||||
expect(
|
||||
findBingo([true, true, true, false, false, false, false, false, false])
|
||||
).toBe(1);
|
||||
expect(
|
||||
findBingo([true, false, false, true, false, false, true, false, false])
|
||||
).toBe(1);
|
||||
expect(
|
||||
findBingo([true, false, false, false, true, false, false, false, true])
|
||||
).toBe(1);
|
||||
expect(
|
||||
findBingo([true, false, true, true, true, false, false, false, true])
|
||||
).toBe(1);
|
||||
expect(
|
||||
findBingo([true, false, false, true, true, false, true, false, true])
|
||||
).toBe(2);
|
||||
expect(
|
||||
findBingo([true, false, true, true, true, false, true, false, true])
|
||||
).toBe(3);
|
||||
expect(findBingo(new Array(9).fill(true))).toBe(8);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,31 @@
|
||||
const possibleCombos = [
|
||||
// horizontal
|
||||
[0, 1, 2],
|
||||
[3, 4, 5],
|
||||
[6, 7, 8],
|
||||
// vertical
|
||||
[0, 3, 6],
|
||||
[1, 4, 7],
|
||||
[2, 5, 8],
|
||||
// diagonal
|
||||
[0, 4, 8],
|
||||
[2, 4, 6]
|
||||
];
|
||||
|
||||
export function bingoDone(fields: boolean[]) {
|
||||
// TODO: Support different sizes
|
||||
if (fields.length < 9) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return possibleCombos.some((combo) => combo.every((ci) => fields[ci]));
|
||||
}
|
||||
export function findBingo(fields: boolean[]) {
|
||||
// TODO: Support different sizes
|
||||
if (fields.length < 9) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return possibleCombos.filter((combo) => combo.every((ci) => !!fields[ci]))
|
||||
.length;
|
||||
}
|
||||
Reference in New Issue
Block a user