TIL_92. プログラマJSコードテスト問題
12718 ワード
JSコードテスト練習
2021. 11. 16(火)
最近react APIを主に勉強して、頭が混乱しています.
まだ学習段階にあり、reactを実用的なプロジェクトに応用する程度ではないので、学習の過程で知識の増加に対する達成感があるかもしれませんが、何か問題を解決したり、何かを創造したりした達成感には、もう長い間感じています.
そこで、今日はJSの基本的な方法などの文法を復習し、プログラマーのJSコードテストの問題を解くことにしました.
JSで解決できる問題は思ったより多いので、低難易度から順に解答します.
質問する
平均値を求める
整数を含む配列arrの平均値を返す関数を完了します.
携帯番号を隠す
電話番号に文字列phone numberが付与されている場合、電話番号の後ろ4桁を除いて、他の数字がすべて*で上書きされている文字列は、関数に戻って解決策を完了してください.
パリティ
整数numが偶数の場合は「Even」、奇数の場合は「Odd」の関数を返します.解決策を完了してください.
ハザード数
正の整数xを下のスケール数にするには、xをxの桁数の和で除算する必要があります.例えば、18の桁数の和は1+8=9であり、18は9で除算されるので、18は下付き文字数となる.自然数xを入力し、xがハザード数の関数かどうかをチェックし、解を完了します.
間隔xのn個の数字
関数解は、整数xと自然数nを含むリストを返さなければなりません.xからxで増加するnの数字です.次の制限条件を見て、条件を満たす関数、解を完成してください.
長方形で撮影
この問題には、標準入力として2つの整数nとmがあります.
アスタリスク(*)を使用して、長さn、長さmの長方形を出力します.
コラズの推測
1937年にCollatzが提案したこの推測は,与えられた数が1になる前に次のタスクを繰り返し実行すれば,すべての数を1にすることができるということである.操作は次のとおりです.
1-1. 入力した数字が偶数の場合は2に分けられます.
1-2. 入力した数字が奇数の場合、3を掛けて1を加算します.
2.結果が1になるまで、同じ操作を繰り返します.
例えば、入力された数字が6であれば、6→3→10→5→16→8→4→2→1の計8回が1となる.上記の操作を何回繰り返すかを示す関数を返します.解決策を完了します.ただし、タスクを500回繰り返しても1未満の場合は、-1を返します.
2021. 11. 16(火)
最近react APIを主に勉強して、頭が混乱しています.
まだ学習段階にあり、reactを実用的なプロジェクトに応用する程度ではないので、学習の過程で知識の増加に対する達成感があるかもしれませんが、何か問題を解決したり、何かを創造したりした達成感には、もう長い間感じています.
そこで、今日はJSの基本的な方法などの文法を復習し、プログラマーのJSコードテストの問題を解くことにしました.
JSで解決できる問題は思ったより多いので、低難易度から順に解答します.
質問する
平均値を求める
整数を含む配列arrの平均値を返す関数を完了します.
function solution(a) {
return a.reduce((p, c) => p + c) / a.length;
};
reduce()
メソッドは最近知ったもので、問題を見ると思い出してすぐに適用されます.携帯番号を隠す
電話番号に文字列phone numberが付与されている場合、電話番号の後ろ4桁を除いて、他の数字がすべて*で上書きされている文字列は、関数に戻って解決策を完了してください.
function solution(phone_number) {
return phone_number
.replace(/.{1,}(?=....$)/g, "*".repeat(phone_number.length - 4));
};
正規表現がはっきり覚えていないので、少し複雑に解けます.より効率的な表現で代用するために、時間があれば時間を見つけて、表現をより深く勉強します.本来は式と一致する部分を1文字ずつ折って*で代わろうと思っていたのですが、repeat()
の方法でした.この部分も式で解決できます.パリティ
整数numが偶数の場合は「Even」、奇数の場合は「Odd」の関数を返します.解決策を完了してください.
function solution(num) {
return num % 2 ? "Odd" : "Even";
};
個人的には3つの演算子と論理演算子で論理を実現するのが一番好きです.ハザード数
正の整数xを下のスケール数にするには、xをxの桁数の和で除算する必要があります.例えば、18の桁数の和は1+8=9であり、18は9で除算されるので、18は下付き文字数となる.自然数xを入力し、xがハザード数の関数かどうかをチェックし、解を完了します.
function solution(x) {
let sum = 0;
let num = x;
while(num>0) {
sum += parseInt(num % 10);
num = parseInt(num/10);
};
return !(x%sum);
};
数学が苦手なので、最初は文字列で近づこうと思っていましたが、演技のために数学を選びました.間隔xのn個の数字
関数解は、整数xと自然数nを含むリストを返さなければなりません.xからxで増加するnの数字です.次の制限条件を見て、条件を満たす関数、解を完成してください.
function solution(x, n) {
let answer = [];
for (let i = 1; i <= n; i++) {
answer.push(x*i);
};
return answer;
};
最も正式な方法で説明した.長方形で撮影
この問題には、標準入力として2つの整数nとmがあります.
アスタリスク(*)を使用して、長さn、長さmの長方形を出力します.
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const [a, b] = [Number(data.split(" ")[0]), Number(data.split(" ")[1])];
console.log(`${"*".repeat(a)}\n`.repeat(b));
});
入力値を構造分解して使用してみます.コラズの推測
1937年にCollatzが提案したこの推測は,与えられた数が1になる前に次のタスクを繰り返し実行すれば,すべての数を1にすることができるということである.操作は次のとおりです.
1-1. 入力した数字が偶数の場合は2に分けられます.
1-2. 入力した数字が奇数の場合、3を掛けて1を加算します.
2.結果が1になるまで、同じ操作を繰り返します.
例えば、入力された数字が6であれば、6→3→10→5→16→8→4→2→1の計8回が1となる.上記の操作を何回繰り返すかを示す関数を返します.解決策を完了します.ただし、タスクを500回繰り返しても1未満の場合は、-1を返します.
function solution(num) {
if (num === 1) return 0;
for(let i = 1; i <= 500; i++) {
num % 2 ? num = num * 3 + 1 : num /= 2
if (num === 1) return i;
};
return -1;
};
Reference
この問題について(TIL_92. プログラマJSコードテスト問題), 我々は、より多くの情報をここで見つけました https://velog.io/@drrobot409/TIL92.-JS-코딩테스트-연습テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol