https://javascript.plainenglish.io/4-programming-problems-i-encountered-and-how-i-solved-each-one-of-them-a899d345861f