exit('IN');

本を読んで得た学びとか

【CodeWars】1/17 ~ 1/23に解いた問題たち

記事の内容

1/17 ~ 1/23にCodeWarsで解いた問題です。
JavaScriptを使用しています。
朝解いているので、すぐ解ける簡単な問題ばかりです。

Super Duper Easy

問題の概要 引数が数字なら計算して返却。文字列ならErrorを出す。

www.codewars.com

コード

function problem(x){
  return typeof x === "number" ? x * 50 + 6 : "Error";
}

The falling speed of petals

問題の概要 花弁の落ちる速度が与えられるので、何秒で地面に到達するかを返却。

www.codewars.com

コード

function sakuraFall(v) {
  return v > 0 ? 400 / v : 0;
}

String matchup

問題の概要 配列の要素がもう片方の配列に何回登場するかをカウントする。

www.codewars.com

コード

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を計算して値に応じた出力をする。

www.codewars.com

コード

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を用いて奇数の配列を作成する。

www.codewars.com

コード

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

問題の概要 文字列に含まれるポーランド語アルファベットを置換する。

www.codewars.com

コード

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()と同様のことができた。