This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const crypto = require('crypto'); | |
const INPUT = 'ckczppom'; | |
const md5 = data => crypto.createHash('md5').update(data).digest('hex'); | |
const isStartsWithSixZeros = data => data.slice(0, 6) === '000000'; | |
let counter = 0; | |
while (!isStartsWithSixZeros(md5(`${INPUT}${counter}`))) counter++; | |
console.log(counter); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n'); | |
// Dictionary of letters that need to be checked against the rules | |
const VOWELS = ['a', 'e', 'i', 'o', 'u']; | |
const DOUBLE_LETTERS = 'abcdefghijklmnopqrstuvwxyz'.split('').map(item => item + item); | |
const RESTRICTED_LETTERS = ['ab', 'cd', 'pq', 'xy']; | |
// Methods to check the rules | |
const isContainThreeVowels = string => string.split('').reduce((vowels, char) => VOWELS.indexOf(char) === -1 ? vowels : ++vowels, 0) >= 3; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n'); | |
// Part 1 was written with pure functions but Part 2 I've decided to write with RegExp | |
const isContainPair = string => /([a-z][a-z]).*\1/.test(string); | |
const isContainRepeatLetter = string => /([a-z])[a-z]\1/.test(string); | |
const isNiceString = string => !!(isContainPair(string) && isContainRepeatLetter(string)); | |
const result = INPUT.reduce((total, string) => isNiceString(string) ? ++total : total, 0); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n'); | |
// Parse command from string and return object | |
const parseCommand = _command => { | |
let command = _command.match(/(turn on|turn off|toggle) (\d+),(\d+) through (\d+),(\d+)/); | |
return {command: command[1], x1: +command[2], y1: +command[3], x2: +command[4], y2: +command[5]}; | |
}; | |
// Map of our lights |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n'); | |
const COMMANDS_REGEX = /(turn on|turn off|toggle) (\d+),(\d+) through (\d+),(\d+)/; | |
// Parse command from string and return object | |
const parseCommand = _command => { | |
let command = _command.match(COMMANDS_REGEX); | |
return {command: command[1], x1: +command[2], y1: +command[3], x2: +command[4], y2: +command[5]}; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n'); | |
const COMMAND_REGEX = /[A-Z]+/g; | |
const ARGUMENTS_REGEX = /[a-z0-9]+/g; | |
// Our parsed wires in format {wire: value} or {wire: instruction} | |
const WIRES = new Map(); | |
// Dictionary of our bitwise methods | |
const BITWISE_METHODS = { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n'); | |
const COMMAND_REGEX = /[A-Z]+/g; | |
const ARGUMENTS_REGEX = /[a-z0-9]+/g; | |
// Our parsed wires in format {wire: value} or {wire: instruction} | |
const WIRES = new Map(); | |
// Dictionary of our bitwise methods | |
const BITWISE_METHODS = { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n'); | |
const result = INPUT.reduce((acc, line) => acc + (line.length - eval(line).length), 0); | |
console.log(result); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n'); | |
const result = INPUT.reduce((acc, line) => acc + (2 + line.replace(/\\/g, '\\\\').replace(/"/g, '\\"').length - line.length), 0); | |
console.log(result); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n'); | |
const DIRECTION_REGEX = /(\w+) to (\w+) = (\d+)/; | |
// Takes input and builds map of all possible distances between two points | |
const buildDistanceMap = input => { | |
const map = new Map(); | |
input.forEach(direction => { | |
const parsed = direction.match(DIRECTION_REGEX); |