Skip to content

Instantly share code, notes, and snippets.

View ghaiklor's full-sized avatar

Eugene Obrezkov ghaiklor

View GitHub Profile
@ghaiklor
ghaiklor / nodejs-create-environment-method.cc
Created August 19, 2015 11:40
NodeJS Create Environment method
Environment* CreateEnvironment(Isolate* isolate, uv_loop_t* loop, Handle<Context> context, int argc, const char* const* argv, int exec_argc, const char* const* exec_argv) {
HandleScope handle_scope(isolate);
Context::Scope context_scope(context);
Environment* env = Environment::New(context, loop);
isolate->SetAutorunMicrotasks(false);
uv_check_init(env->event_loop(), env->immediate_check_handle());
uv_unref(reinterpret_cast<uv_handle_t*>(env->immediate_check_handle()));
@ghaiklor
ghaiklor / developers-days-in-year.es6
Created September 13, 2015 19:03
Script calculates developers days in year based on shifts
'use strict';
const CURRENT_YEAR = 2015;
// Generator that shifts days by bits
function* developersDayGenerator() {
let day = 1;
while (day < 365) {
yield day;
day = day << 1;
@ghaiklor
ghaiklor / hackathon-2015-09-19.es6
Created September 21, 2015 17:03
Listen to radio and record it to file
'use strict';
import fs from 'fs';
import program from 'commander';
import Speaker from 'speaker';
import { Decoder } from 'lame';
import Parser from 'icecast-parser';
program
.option('-s, --source <source>', 'Source station')
@ghaiklor
ghaiklor / aoc-1-1.js
Last active January 5, 2016 15:59
Advent of Code (Day 1 Part 1)
const fs = require('fs');
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('');
const result = INPUT.reduce((floor, direction) => direction === '(' ? ++floor : --floor, 0);
console.log(result);
@ghaiklor
ghaiklor / aoc-1-2.js
Last active January 5, 2016 16:02
Advent of Code (Day 1 Part 2)
const fs = require('fs');
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('');
let floor = 0;
let result = INPUT.map(direction => direction === '(' ? ++floor : --floor).indexOf(-1) + 1;
console.log(result);
@ghaiklor
ghaiklor / aoc-2-1.js
Last active January 5, 2016 16:05
Advent of Code (Day 2 Part 1)
const fs = require('fs');
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n');
const result = INPUT.reduce((total, _lwh) => {
const lwh = _lwh.split('x');
const length = lwh[0];
const width = lwh[1];
const height = lwh[2];
return total
+ (2 * length * width)
@ghaiklor
ghaiklor / aoc-2-2.js
Last active January 5, 2016 16:05
Advent of Code (Day 2 Part 2)
const fs = require('fs');
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('\n');
const result = INPUT.reduce((total, _lwh) => {
const lwh = _lwh.split('x').map(Number).sort((a, b) => a - b);
return total
+ (lwh[0] + lwh[0] + lwh[1] + lwh[1])
+ (lwh[0] * lwh[1] * lwh[2])
}, 0);
@ghaiklor
ghaiklor / aoc-3-1.js
Last active January 5, 2016 16:09
Advent of Code (Day 3 Part 1)
const fs = require('fs');
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('');
// Unique set of coordinates with the starting coordinates already added
const coordinates = new Set().add(`0x0`);
INPUT.reduce((curCoords, direction) => {
let newCoords = {x: 0, y: 0};
if (direction === '^') newCoords = {x: curCoords.x, y: curCoords.y + 1};
@ghaiklor
ghaiklor / aoc-3-2.js
Last active January 5, 2016 16:11
Advent of Code (Day 3 Part 2)
const fs = require('fs');
const INPUT = fs.readFileSync('./input.txt', 'utf-8').split('');
const santaDirections = INPUT.filter((item, index) => index % 2 === 0);
const roboSantaDirections = INPUT.filter((item, index) => index % 2 === 1);
// Get array of directions and return array of visited coordinates
const traverse = directions => {
let visitedCoordinates = ['0x0'];
let currentPosition = {x: 0, y: 0};
@ghaiklor
ghaiklor / aoc-4-1.js
Last active January 5, 2016 16:12
Advent of Code (Day 4 Part 1)
const crypto = require('crypto');
const INPUT = 'ckczppom';
const md5 = data => crypto.createHash('md5').update(data).digest('hex');
const isStartsWithFiveZeros = data => data.slice(0, 5) === '00000';
let counter = 0;
while (!isStartsWithFiveZeros(md5(`${INPUT}${counter}`))) counter++;
console.log(counter);