【CodeWars】1/17 ~ 1/23に解いた問題たち
記事の内容
1/17 ~ 1/23にCodeWarsで解いた問題です。
JavaScriptを使用しています。
朝解いているので、すぐ解ける簡単な問題ばかりです。
Super Duper Easy
問題の概要 引数が数字なら計算して返却。文字列ならErrorを出す。
コード
function problem(x){ return typeof x === "number" ? x * 50 + 6 : "Error"; }
The falling speed of petals
問題の概要 花弁の落ちる速度が与えられるので、何秒で地面に到達するかを返却。
コード
function sakuraFall(v) { return v > 0 ? 400 / v : 0; }
String matchup
問題の概要 配列の要素がもう片方の配列に何回登場するかをカウントする。
コード
function solve(a,b){ let count = 0; let result = []; for (let i= 0; i < b.length; i++){ count = 0; for (let j= 0; j < a.length; j++) { if (b[i] === a[j]) { count++; } } result.push(count); } return result; }
ゴリ押しでいってしまった…。
他の人の解答を見る感じmapとfilterを使うのが良いみたい。
Calculate BMI
問題の概要 BMIを計算して値に応じた出力をする。
コード
function bmi(weight, height) { const bmi = weight / height ** 2; let judge = ''; if (bmi > 30) { judge = "Obese"; } else if (bmi > 25.0){ judge = "Overweight"; } else if (bmi > 18.5) { judge = "Normal"; } else { judge = "Underweight"; } return judge; }
単純な条件が多くなるとswitchの方がいいかもしれない。
ただ、MDNをみた感じswitch文に不等号を使ってる例がないので推奨された書き方ではないのかも?
他に、return の位置をどうするか。
各分岐でreturnしてもいいが、1箇所でreturnする方が個人的にわかりやすい気がする。
Are arrow functions odd?
問題の概要 array.filterを用いて奇数の配列を作成する。
コード
function odds( values ){ return values.filter( value => value % 2 !== 0 ); }
まだfilterのような=>の使い方がわかってない。。
Take the Derivative
問題の概要
簡単な数値の計算をして、文字列として返却する。 www.codewars.com
コード
function derive(coefficient,exponent) { return `${coefficient*exponent}x^${exponent-1}` }
個人的には変数の展開には、+を使って連結するよりも↑で記述する方が楽かも。
Polish alphabet
問題の概要 文字列に含まれるポーランド語アルファベットを置換する。
コード
const polish = { ą: 'a', ć: 'c', ę: 'e', ł: 'l', ń: 'n', ó: 'o', ś: 's', ź: 'z', ż: 'z' }; function correctPolishLetters (str) { let result = ''; let regex = ''; Object.keys(polish).forEach(function (key) { regex = new RegExp(`${key}`, 'g'); str = str.replace(regex, polish[key]); }); return str; }
replaceAll()を使ったら「is not a function」とでた。
MDNにはメソッドとして記載されているけど、実行環境によっては使えない感じだろうか。
結局replaceに()グローバルフラグをつけるとreplaceAll()と同様のことができた。