Skip to content

Instantly share code, notes, and snippets.

View 197291's full-sized avatar
:octocat:

Yuriy Provotorov 197291

:octocat:
  • Taganrog
View GitHub Profile
class LinkedList {
constructor(...values) {
this.head = null;
this.length = 0;
this.addToHead(...values);
}
_addSingleItemToHead(value) {
const newNode = { value };
newNode.next = this.head;
@197291
197291 / Time with offset of timeZone
Created December 4, 2018 09:11
Time with timeZone offset
calcTime(city: any, offset: any) {
// create Date object for current location
const d = new Date();
// convert to msec
// add local time zone offset
// get UTC time in msec
const utc = d.getTime() + (d.getTimezoneOffset() * 60000);
@197291
197291 / class Api
Created October 27, 2018 06:22
Api
import axios, { AxiosRequestConfig } from 'axios';
import queryString from 'query-string';
import { Store } from 'redux';
import { isNil, omitBy, flow } from 'lodash';
import { BASE_URL } from 'redux/constants';
import { showError } from 'redux/actions';
import { isIe } from 'helpers';
const processConfig = (config: AxiosRequestConfig): AxiosRequestConfig => {
@197291
197291 / Cancelable promise
Created October 27, 2018 06:20
Cancelable promise
export interface CancelablePromise<T> {
promise: Promise<T>;
cancel(): void;
}
/**
* Make a Promise cancelable
*/
export const makeCancelablePromise = <T>(promise: Promise<T>): CancelablePromise<T> => {
let hasCanceled = false;

Алгоритм расчёта итогового размера с flex-shrink

Ниже описан механизм расчёта размеров элементов, когда места в контейнере не хватает:

1 шаг. Рассчитываем отрицательное пространство (ОП) во флекс-контейнере:

ОП = Ширина контейнера - Сумма базовых размеров элементов

2 шаг. Находим сумму произведений базовых размеров (СПБР) элементов на их коэффициенты сжатия:

СПБР = (Базовый размер1 * flex-shrink1) + (Базовый размер2 * flex-shrink2) + … + (Базовый размерn * flex-shrinkn)

3 шаг. Для каждого элемента считаем «нормированный коэффициент сжатия» (НКС), для чего произведение базового размера элемента на его коэффициент сжатия делим на СПБР:

4 шаг. Базовый размер элемента уменьшаем на часть ОП пропорциональную НКС элемента:

Итоговый размер = Базовый размер - (НКС * ОП)

Алгоритм расчёта итогового размера с flex-grow

1 шаг. Рассчитываем свободное место во флекс-контейнере:

Свободное место = Ширина контейнера - Сумма базовых размеров элементов

2 шаг. Считаем размер минимальной доли свободного места:

Доля свободного места = Свободное место / Сумма flex-grow всех элементов

3 шаг. Базовый размер каждого флекс-элемента увеличиваем на размер минимальной доли свободного места умноженной на значение flex-grow этого элемента:

Итоговый размер = Базовый размер + (Доля свободного места * flex-grow)

Для верхнего блока хочется задать коэффициенты 1 и 2. Но нужные размеры блоков получаются с коэффициентами 1 и 3. Давайте посчитаем:

Свободное место = 300px - (50px * 2) = 200px
@197291
197291 / BST
Created June 12, 2018 07:05
Binary Search Tree
class Node {
constructor(data, left = null, right = null) {
this.data = data;
this.left = left;
this.right = right;
}
}
class BST {
constructor() {
@197291
197291 / Queue
Created June 12, 2018 06:58
Queue
function Queue () {
collection = [];
this.print = function() {
console.log(collection);
};
this.enqueue = function(element) {
collection.push(element);
};
this.dequeue = function() {
return collection.shift();
@197291
197291 / Stack
Created June 12, 2018 06:56
Stack
/* Stacks! */
// functions: push, pop, peek, length
var letters = []; // this is our stack
var word = "freeCodeCamp"
var rword = "";
class HashMap {
constructor () {
this._size = 0;
this._map = {};
}
put (key, value) {
if (!this.containsKey(key)) {
this._size++;