Skip to content

Instantly share code, notes, and snippets.

@d-lobanov
Last active April 10, 2019 10:13
Show Gist options
  • Select an option

  • Save d-lobanov/60318f2e170cea720302135db5d327ec to your computer and use it in GitHub Desktop.

Select an option

Save d-lobanov/60318f2e170cea720302135db5d327ec to your computer and use it in GitHub Desktop.

Revisions

  1. d-lobanov renamed this gist Apr 10, 2019. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. d-lobanov revised this gist Apr 10, 2019. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions gin_and_rooms.js
    Original file line number Diff line number Diff line change
    @@ -4,12 +4,12 @@
    const GIN_IN_ROOM = true;
    const GIN_NOT_IN_ROOM = false;

    function generateArray(length, fillWith) {
    function generateRooms(length, fillWith) {
    return Array.apply(null, Array(length)).map(_ => fillWith);
    }

    function moveGin(rooms) {
    let resultRooms = generateArray(rooms.length, GIN_NOT_IN_ROOM);
    let resultRooms = generateRooms(rooms.length, GIN_NOT_IN_ROOM);

    for (let i = 0, total = rooms.length - 1; i <= total; i++) {
    if (rooms[i] === GIN_IN_ROOM) {
    @@ -32,7 +32,7 @@ function isGinGone(rooms) {
    }

    function main(numberOfRooms) {
    let rooms = generateArray(numberOfRooms, GIN_IN_ROOM);
    let rooms = generateRooms(numberOfRooms, GIN_IN_ROOM);
    let totalSteps = 0;

    for (let i = 1; i < numberOfRooms - 1; i++) {
  3. d-lobanov created this gist Apr 10, 2019.
    50 changes: 50 additions & 0 deletions gin_and_rooms.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    /**
    * This code sloves the problem with gin in rooms.
    */
    const GIN_IN_ROOM = true;
    const GIN_NOT_IN_ROOM = false;

    function generateArray(length, fillWith) {
    return Array.apply(null, Array(length)).map(_ => fillWith);
    }

    function moveGin(rooms) {
    let resultRooms = generateArray(rooms.length, GIN_NOT_IN_ROOM);

    for (let i = 0, total = rooms.length - 1; i <= total; i++) {
    if (rooms[i] === GIN_IN_ROOM) {
    if (i > 0) resultRooms[i - 1] = GIN_IN_ROOM;
    if (i < total) resultRooms[i + 1] = GIN_IN_ROOM;
    }
    }

    return resultRooms;
    }

    function openRoom(rooms, roomIndex) {
    rooms[roomIndex] = GIN_NOT_IN_ROOM;

    return moveGin(rooms);
    }

    function isGinGone(rooms) {
    return rooms.every(room => room === GIN_NOT_IN_ROOM);
    }

    function main(numberOfRooms) {
    let rooms = generateArray(numberOfRooms, GIN_IN_ROOM);
    let totalSteps = 0;

    for (let i = 1; i < numberOfRooms - 1; i++) {
    rooms = openRoom(rooms, i);
    totalSteps++;
    }

    for (let i = numberOfRooms - 2; i >= 1; i--) {
    rooms = openRoom(rooms, i);
    totalSteps++;
    }

    console.log(isGinGone(rooms) ? 'done' : 'error');
    console.log('Total: ' + totalSteps);
    }