🐈
JS/TS marathon interview
[advanced 2]
1. validate if given string is palondrome (ignoring whitespace and puctuation)
function isPalindrome(str: string){
const cleanedStr = str.replace(/[^\w]/g,"")
console.log(cleanedStr)
const reversedStr = cleanedStr.split("").reverse().join("")
console.log(reversedStr)
if (cleanedStr === reversedStr){
console.log("given string "+str+" is palindrome")
}
}
isPalindrome("abb... a")
// abba
// abba
// given string abb... a is palindrome
[basic 2]
9. reverse words without using built-in method
const outcome = [];
const sentence = 'I am fine.';
for (let i = sentence.split(' ').length - 1; 0 <= i; i--) {
outcome.push(sentence.split(' ')[i]);
}
// ["fine.", "am", "I"]
console.log(outcome);
8. sort array in ascending order
const arr = [8,7,6,5,4,3,2,1]
// [1,2,3,4,5,6,7,8]
console.log(arr.sort((a,b)=>a-b))
7. remove duplicated elemements from an array
const arr = [1,2,3,3,4]
const outcome = Array.from(new Set(arr) )
// [1,2,3,4]
console.log(outcome)
6. sum up all numbers in an array
function sumAllArray(arr: number[]) {
return arr.reduce((a: number, c: number) => a + c);
}
// 6
console.log(sumAllArray([1, 2, 3]));
5. check if given number is a prime number
function isPrime(num:number):boolean{
if (num ===1){
return false
}
if (num === 2){
return true
}
for(let i=2;i<num;i++){
if (num%i === 0){
return false}
return true
}}
//true
console.log(isPrime(3))
4. calculate factorial of given number
function factorial(num: number): number {
if (num === 1 || num === 0) {
return 1;
}
return num * (factorial(num - 1));
}
//120
console.log(factorial(5))
3. create a new array that contains no duplicated element
function uniqueArray(array: number[]){
const outcome = [...new Set(array)]
console.log(outcome)
}
// (6) [1, 2, 3, 4, 5, 6]
uniqueArray([1,2,3,4,5,5,5,6,6])
// Mapを使ったオブジェクトの重複排除
const originalArray = [
{ id: '11', num: 1 },
{ id: '22', num: 2 },
{ id: '11', num: 3 },
{ id: '22', num: 4 },
{ id: '33', num: 5 },
];
const outcomeArray = [...new Map(originalArray.map((el) => [el.id, el])).values()];
console.log(outcomeArray)
2. find the largest and smallest number in array
const arr = [1,2,3,4,5]
console.log(arr.sort((a, b) => b-a)[0] + " is Max")
console.log(arr.sort((a, b) => a-b)[0] + " is Min")
// 5 is Max
// 1 is Min
1. reverse a string without using the built-in reverse() method
const outcome =[]
const str = "ikemen"
// 最後の文字を最初の文字に入れ替える、まずは6番目の文字nからはじめ、6,5,4,3,2,1と降順で繰り返し、0に達したら止める。
for (let i = str.length; 0 <= i; i--) {
outcome.push(str[i])
}
// nemeki
console.log(outcome.join(""));
[advanced]
9. check if given strings are anagram
function isAnagrams(str:string, str2:string):boolean{
//aaabb
//aaabb
console.log(str.toLowerCase().split("").sort().join(""))
console.log(str2.toLowerCase().split("").sort().join(""))
return str.toLowerCase().split("").sort().join("")===str2.toLowerCase().split("").sort().join("")
}
//true
console.log(isAnagrams("babaa","ababa"))
8. flatten nested arrays into a single array
const flattenArray = (nestedArray: [number,number,number,number, number[]]): {} => {
return nestedArray.flat(Infinity);
};
//(6) [1, 2, 3, 3, 4, 5]
console.log(flattenArray([1,2,3,3,[4,5]]))
7. LinkedList
FYI: https://www.ryokatsu.dev/blog/2021/0701/
6. T/F if the given string is palindrome
function isPalindrome(str: string) {
//与えられた文字列を小文字化する
const cleanStr = str.replace(/\W/g,"").toLowerCase();
const reversedStr = cleanStr.split("").reverse().join("");
console.log(reversedStr)
console.log(cleanStr)
console.log(cleanStr === reversedStr);
}
// abba
// abba
// true
isPalindrome("Abba")
5. merge two arrays into a single array
const arr1: number[] = [1, 2, 3];
const arr2: number[] = [4, 5, 6];
const combined: number[] = [];
combined.push(...arr1, ...arr2);
const combined2: number[] = combined.sort((a, b) => b - a);
// (6) [6, 5, 4, 3, 2, 1]
console.log(combined2);
4. calculate the factorial of a given number
function factorial(n: number) {
if (n === 0 || n === 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
const outcome = factorial(3)
// 3*2*1=6
console.log(outcome)
3. imprement a deep clone function
var homes = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}
];
deepClone(homes)
function deepClone(obj:{} = {}) {
const outcome = JSON.parse(JSON.stringify(obj));
console.log(outcome)
}
// ↑ ディープコピーの場合は、オブジェクトとメモリ上のデータの両方をコピーするため、独立したオブジェクトを作ることができます。この方法は(Dateオブジェクトや関数、undefinedなどが入ってる場合)破壊的コピーをするのでおすすめできない
// わかりやすい説明:
// https://zenn.dev/luvmini511/articles/722cb85067d4e9
2. sort array order by dscending order based on a key
var homes = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}
];
const outcome = homes.sort((a, b) => parseFloat(b.price) - parseFloat(a.price));
console.log(outcome)
// ニューヨーク、ビバリーヒルズ、ダラスの順番に並び替わる
1. demonstrate debounce and throttle
// 負荷軽減のため、イベントの呼び出しは指定した時間が経過した際に発生するようthrottleやdebounceを使用して処理することがある。
// 一般的にはlodashのthrottleやdebounceが使用されることが多い。
// throttle
// 繰り返し大量に発生する処理を一定間隔で間引くもの。
// よく使う例として、スクロールのイベントがあります。
// debounce
// 繰り返し大量に発生する処理が終わった時に最後の1回だけ実行するもの。
// よく使う例として、ウィンドウのリサイズイベントがあります。
// debounceとthrottleローダッシュを使って
var hello = _.debounce(insertHello, 1000)
window.addEventListener('scroll', hello)
var hello = _.throttle(insertHello, 1000)
window.addEventListener('scroll', hello)
[basic]
10. convert a string to title case (capitalize the first letter of each word)
// string is "hi there chris"
// convert it into array ["hi", "there", "chris"]
// capitalize every word into array ["Hi","There","Chris"]
// join altogether with a space "Hi There Chris"
const str:string="hi there chris"
const outcome = []
outcome.push(str.split(" "))
const outcome2= []
for (let word of str.split(" "))
{outcome2.push(word[0].toUpperCase()+word.slice(1))}
console.log(outcome2.join(" "))
function toTitleCase(str: string) {
//正規表現を使い「単語の最初の\w」「すべての英数字\b」をアローファンクションで大文字に変換する)
return str.replace(/\b\w/g, theFirstLetter => theFirstLetter.toUpperCase());
}
console.log(toTitleCase("hi there chris"))
9. Fibonacci with memoization
function memoize(fn) {
const cache = {};
console.log(cache)
return function (...args) {
if (cache[args]) {
return cache[args];
}
const result = fn.apply(this, args);
cache[args] = result;
return result;
};
}
// slowFibでnのフィボナッチ数を求めることができるがパフォーマンスが遅くなる
// exponential runtime: f(n) = n^2
function slowFib(n) {
if (n < 2) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
const fib = memoize(slowFib);
console.log("Fibonacci of 11 is "+slowFib(11))
// 👇console.log(cache)
// 0: 0
// 1: 1
// 2: 1
// 3: 2
// 4: 3
// 5: 5
// 6: 8
// 7: 13
// 8: 21
// 9: 34
// 10: 55
// Fibonacci of 11 is 89
8. find the largest number in nested array
const arr = [[12,45,75], [54,485,2],[23,4,78,2804]];
// 2804
console.log(
arr.flat().sort(
(a,b)=>
b-a
)[0]
)
what does "splice()" do?
let array: string[] = ["Doraemon","Shizuka","Nobita","Giant","Suneo"]
// インデックス#1から#3「静香」「のび太」「ジャイアン」と「挿入」をトルカエする
console.log(array.splice(1,3,"挿入"))
// (3) ["Doraemon", "挿入", "Suneo"]
console.log(array)
7. validate if n is prime number
function isPrime(n: number){
if (n === 1) {return true}
if (n === 2) {return false}
for (let i = 2;i<n;i++)
{
if (n%i ===0)
return false
}
}
// 素数の条件:1とn自身で割り切れる(nがn以外の数字で割り切れる=素数でない)
// 1は素数ではない、2は素数である、これ暗記
// 1〜100までの素数一覧表を紹介!全部で25個 👉 https://terakoya.ameba.jp/a000001446/
6. calculate the factorial of a given number
function factorial(n: number) {
if (n === 0 || n === 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
const outcome = factorial(9)
console.log(outcome)
// 9! = 1*2*3*4*5*6*7*8*9 = 362880
// 正の整数 n に対して, 1 から n までの整数を全てかけあわせたものを n の階乗(かいじょう,英語ではファクトリアルfactorial)と言い, n! で表す
5. filter only even numbers in array
function filterEvenNumbers(numbers: number[]) {
//余り0のエレメントだけ抽出する
return numbers.filter((num: number) => num % 2 === 0);
}
console.log(filterEvenNumbers([1,2,3,4,5,6]))
//他の解答
mixedArr = [1,2,3,4,5,6,7,8,9,10]
const evenArr = []
for (i of mixedArr){
if (mixedArr[i]%2 == 0)
{
evenArr.push(mixedArr[i])}
}
console.log(evenArr)
4. reverse a given string
let str: string = "Doraemon"
const reverseString = (str: string) => str.split("").reverse().join("");
console.log(reverseString(str))
// nomearoD
3. check if given string is palindrome
let str: string = "ABBA"
let str2: string = "Doraemon"
const splittedStr: string[] =[]
const splittedStr2: string[] =[]
const reversedStr = str.split("").reverse().join("")
const reversedStr2 = str2.split("").reverse().join("")
console.log(reversedStr)
console.log(reversedStr2)
console.log(str === reversedStr)
console.log(str === reversedStr2)
// ABBA
// nomearoD
// true
// false
2. find a max number of array
const arr = [299,199,499,39]
const sortedDesc = arr.sort((a,b)=>b-a)
console.log(sortedDesc[0])
// 499
1. sum of two numbers
const sumOfTwo =(a: number,b: number): number=>{
return a+b
}
console.log(sumOfTwo(2,3))
// 5
Discussion