Skip to content

Instantly share code, notes, and snippets.

View TiagoFuelber's full-sized avatar

Tiago Fuelber TiagoFuelber

View GitHub Profile
@TiagoFuelber
TiagoFuelber / compare-branches.js
Created April 6, 2023 00:03
Which branch of the tree is bigger?
function compareBranches(arr) {
// Helper function to traverse the tree recursively
function sum(node) {
if (!node) {
return 0;
}
return node + sum(arr.shift() && arr.shift() ? node * 2 : null) + sum(arr.shift() && arr.shift() ? node * 2 + 1 : null);
}
const leftSum = sum(arr.shift());
@TiagoFuelber
TiagoFuelber / arrayFlat.ts
Created November 2, 2022 23:48
how to flat an array
function flatten(collection: any[]) {
return collection.reduce((result, current) => {
let value = current
if (Array.isArray(current)) {
value = flatten(current)
}
return result.concat(value)
}, [])
}
@TiagoFuelber
TiagoFuelber / jsonType.ts
Created October 10, 2022 19:15
JSON type
type Primitive = string | number | boolean | null
type JSONObject = { [k: string]: JSONValue }
type JSONArray = JSONValue[]
type JSONValue = Primitive | JSONArray | JSONObject
@TiagoFuelber
TiagoFuelber / useKeyPress.js
Created September 12, 2022 12:54
React hook to listen to a key pressed
const useKeyPress = (targetKey) => {
const [keyPressed, setKeyPressed] = React.useState(false);
const downHandler = ({ key }) => {
if (key === targetKey) setKeyPressed(true);
};
const upHandler = ({ key }) => {
if (key === targetKey) setKeyPressed(false);
};
React.useEffect(() => {
window.addEventListener("keydown", downHandler);
const options = [
"quarterpipe",
"big hubba",
"small hubba",
"flatrail",
"vault",
"vault gap",
"stairs",
"ledge",
"manual pad",
@TiagoFuelber
TiagoFuelber / download.js
Created October 23, 2019 17:54
Download file function that works on IE
import { IS_IE } from '../view/ui/styles/constants';
const getByteArray = arquivo => {
const byteCharacters = atob(arquivo);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
@TiagoFuelber
TiagoFuelber / hexToRgbA.js
Created October 23, 2019 17:53
Transform a HEX color to RGBA
export default function hexToRgbA(hex, alpha = 1) {
var c;
if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {
c = hex.substring(1).split('');
if (c.length == 3) {
c = [c[0], c[0], c[1], c[1], c[2], c[2]];
}
@TiagoFuelber
TiagoFuelber / slugify.js
Created October 23, 2019 17:52
transform a string to a slug
export default str =>
str
.toLowerCase()
.replace(/[àÀáÁâÂãäÄÅåª]+/g, 'a') // Special Characters #1
.replace(/[èÈéÉêÊëË]+/g, 'e') // Special Characters #2
.replace(/[ìÌíÍîÎïÏ]+/g, 'i') // Special Characters #3
.replace(/[òÒóÓôÔõÕöÖº]+/g, 'o') // Special Characters #4
.replace(/[ùÙúÚûÛüÜ]+/g, 'u') // Special Characters #5
.replace(/[ýÝÿŸ]+/g, 'y') // Special Characters #6
.replace(/[ñÑ]+/g, 'n') // Special Characters #7
@TiagoFuelber
TiagoFuelber / toShortElapsedTime.js
Created October 23, 2019 17:51
Converts a Date to short Elapsed Time
/**
* @param date datetime object
*
* @returns string
*
* ex menos de 1 min: (< 1 m)
* menos de 1 hora: (35 m)
* menos de 1 dia: (16 h)
* menos de 1 semana: (5 D)
* menos de 1 mês: (2 sem)
@TiagoFuelber
TiagoFuelber / Enum.js
Last active October 23, 2019 17:50
Enum constructor
class Enum {
constructor() {
this.innerEnum = {};
}
declare({ key, value, description, isFlag = false }) {
this.innerEnum[key] = {
key,
id: value,
description,