Skip to content

Instantly share code, notes, and snippets.

@testerez
Last active July 2, 2019 22:14
Show Gist options
  • Select an option

  • Save testerez/9e378643667de78a7962120eb1fa3226 to your computer and use it in GitHub Desktop.

Select an option

Save testerez/9e378643667de78a7962120eb1fa3226 to your computer and use it in GitHub Desktop.

Revisions

  1. testerez revised this gist Jul 2, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ticTacToe-getWinner.ts
    Original file line number Diff line number Diff line change
    @@ -12,7 +12,7 @@ const getWinner = (grid: string[][], target: number) => {
    for (const y0 in grid) {
    for (const x0 in grid[y0]) {
    for (const direction of directions) {
    let x = Number(x0)g
    let x = Number(x0);
    let y = Number(y0);
    const player = grid[y][x];
    let total = 0;
  2. testerez renamed this gist Jun 27, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion tic tac toe getWinner → ticTacToe-getWinner.ts
    Original file line number Diff line number Diff line change
    @@ -12,7 +12,7 @@ const getWinner = (grid: string[][], target: number) => {
    for (const y0 in grid) {
    for (const x0 in grid[y0]) {
    for (const direction of directions) {
    let x = Number(x0);
    let x = Number(x0)g
    let y = Number(y0);
    const player = grid[y][x];
    let total = 0;
  3. testerez created this gist Jun 27, 2019.
    68 changes: 68 additions & 0 deletions tic tac toe getWinner
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,68 @@
    import * as assert from 'assert';

    type Direction = (x: number, y: number) => [number, number];
    const directions: Direction[] = [
    (x, y) => [x + 1, y + 1],
    (x, y) => [x - 1, y + 1],
    (x, y) => [x, y + 1],
    (x, y) => [x + 1, y],
    ];

    const getWinner = (grid: string[][], target: number) => {
    for (const y0 in grid) {
    for (const x0 in grid[y0]) {
    for (const direction of directions) {
    let x = Number(x0);
    let y = Number(y0);
    const player = grid[y][x];
    let total = 0;
    while (player && grid[y] && player === grid[y][x]) {
    total++;
    if (total === target) {
    return player;
    }
    [x, y] = direction(x, y);
    }
    }
    }
    }
    };

    // tests

    const X = 'X';
    const O = 'O';
    const _ = '';

    assert.equal(getWinner([
    [_, _, _],
    [X, X, X],
    [_, _, _]
    ], 3), X);

    assert.equal(getWinner([
    [_, _, _],
    [X, X, _],
    [_, _, _]
    ], 3), undefined);

    assert.equal(getWinner([
    [_, _, O, _],
    [_, _, O, _],
    [_, _, O, _],
    [_, _, O, _],
    ], 4), O);

    assert.equal(getWinner([
    [_, _, O, _],
    [_, _, X, _],
    [_, X, O, _],
    [X, _, O, _],
    ], 3), X);

    assert.equal(getWinner([
    [_, _, O, _],
    [_, _, _, _],
    [_, X, O, _],
    [X, _, O, _],
    ], 3), undefined);