Skip to content

Instantly share code, notes, and snippets.

View gkucmierz's full-sized avatar
💻

Grzegorz Kućmierz gkucmierz

💻
View GitHub Profile
// const Sunday = 0;
// const Monday = 1;
const TUESDAY = 2;
// const Wednesday = 3;
// const Thursday = 4;
// const Friday = 5;
// const Saturday = 6;
const firstDayOfMonth = (year, month, weekDay) => {
@gkucmierz
gkucmierz / macbook_setup.md
Last active September 25, 2020 09:56 — forked from hrishimittal/macbook_setup.md
Setting up a new MacBook for Ruby on Rails web development
  1. Install Google Chrome
  2. Install Homebrew - http://brew.sh/
  3. Install GnuPG - brew install gnupg2
  4. Generate SSH key - ssh-keygen -t rsa -b 4096 -C "gkucmierz@gmail.com"
  5. Install node, npm, n
  6. Git - brew install git
  7. Add SSH public key to Github, Bitbucket.
  8. Restore pgp key https://dev.to/gkucmierz/how-to-make-my-git-contributions-verified-2e76
  9. To delete words with alt+backspace in Terminal, go to Preferences > (your profile) > Keyboard > Use option as meta key.
  10. Sublime Text shortcut: sudo ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl
// find_value.js
const arr = ['a', 'b', 'c', 'd'];
const stopAt = 'c';
console.log(
arr.findIndex((...args) => {
console.log('args', args);
if (args[0] === stopAt) return true;
return false;
const BYTE = 8;
const BITS = 64;
const SEGMENTS = 8;
const SEGMENT = BITS / SEGMENTS;
const METHODS_MAP = {
8: ['getUint8', 'setUint8', 'getInt8', 'setInt8'],
16: ['getUint16', 'setUint16', 'getInt16', 'setInt16'],
32: ['getUint32', 'setUint32', 'getInt32', 'setInt32'],
};
const solveFor = (target, input, solveFn) => {
let solved = false;
const sort = arr => arr.sort((a, b) => a-b);
const nums = input.map(n => +n);
const ops = [...'+*'];
const fns = {
'+': (a, b) => a + b,
'*': (a, b) => a * b,
@gkucmierz
gkucmierz / mortgage_register_checksum.js
Created May 5, 2020 17:13
MortgageRegister calculate and verify checksum
// https://ekw.ms.gov.pl/
class MortgageRegister {
static check(str) {
const m = str.match(/([A-Z0-9]{4}\/[0-9]{8})\/([0-9])/);
if (m) {
return this.checksum(m[1]) === +m[2];
}
return false;
@gkucmierz
gkucmierz / alphametic_solver.js
Last active May 4, 2020 03:24
alphametic puzzle solver (brute force)
// alphametic puzzle solver (brute force)
const solve = (a, b, c, s) => {
const uniq = [...new Set([...(a+b+c+s)])];
const res = [];
const rec = nums => {
if (nums.length >= uniq.length) {
const an = +[...a].map(l => nums[uniq.indexOf(l)]).join``;
const bn = +[...b].map(l => nums[uniq.indexOf(l)]).join``;
const cn = +[...c].map(l => nums[uniq.indexOf(l)]).join``;
@gkucmierz
gkucmierz / test_perf.js
Created May 4, 2020 00:06
JSON stringify/parse performance test
// http://instacode.dev/#Y29uc3QgcGVyZlRlc3QgPSAobmFtZSwgY2FsbGJhY2spID0+IHsKCWNvbnN0IGQwID0gK25ldyBEYXRlKCk7CiAgY2FsbGJhY2soKTsKICBjb25zdCBkMSA9ICtuZXcgRGF0ZSgpOwogIGNvbnNvbGUubG9nKGBUZXN0ICR7bmFtZX06ICR7ZDEtZDB9bXNgKTsKfTsKCgpjb25zdCBSRVBTID0gMTA7CmNvbnN0IFNJWkUgPSAxZTU7Cgpjb25zdCBhcnIgPSBbXTsKZm9yIChsZXQgaSA9IDA7IGkgPCBTSVpFOyArK2kpIHsKICBhcnJbaV0gPSB7aSwgcm5kOiBNYXRoLnJhbmRvbSgpfTsKfQpjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShhcnIpOwoKcGVyZlRlc3QoJ3N0cmluZ2lmeScsICgpID0+IHsKICBmb3IgKGxldCBpID0gMDsgaSA8IFJFUFM7ICsraSkgewogIAlKU09OLnN0cmluZ2lmeShhcnIpOwogIH0KfSk7CgpwZXJmVGVzdCgncGFyc2UnLCAoKSA9PiB7CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBSRVBTOyArK2kpIHsKICAJSlNPTi5wYXJzZShzdHIpOwogIH0KfSk7
const perfTest = (name, callback) => {
const d0 = +new Date();
callback();
const d1 = +new Date();
console.log(`Test ${name}: ${d1-d0}ms`);
};
@gkucmierz
gkucmierz / generate_permutations.js
Created April 28, 2020 15:03
Generate Permutations
const genPermutations = size => {
const perms = [];
const gen = (res, used, shift) => {
if (used === size) {
perms.push(res);
}
for (let i = 0; i < (size-used); ++i) {
gen([...res, shift[i]], used + 1, [...shift.slice(0, i), ...shift.slice(i + 1)]);
}
};
@gkucmierz
gkucmierz / ipv4_ipv6_ip_regular_expressions.js
Last active April 25, 2020 16:11
ipv4 ipv6 ip match regular expressions
const matchIpv4 = str => {
const re = /(^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)/g;
return str.match(re) | [];
};
const matchIpv6 = str => {
const re = /(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{