exit('IN');

本を読んで得た学びとか

【CodeWars】1/31 ~ 2/6に解いた問題たち

記事の内容

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

Alphabet war

www.codewars.com

コード

function alphabetWar(fight)
{
  const left = {
    w: 4,
    p: 3,
    b: 2,
    s: 1
  }
  
  const right = {
    m: 4,
    q: 3,
    d: 2,
    z: 1
  }
  
  const alphabetArray = fight.split('');
  let leftValue = 0;
  let rightValue = 0;
  
  alphabetArray.forEach(alphabet => {
    if (alphabet in left) {
      leftValue += left[alphabet];
    } else if (alphabet in right) {
      rightValue += right[alphabet];
    }  
  })
  
  if (leftValue === rightValue) {
    return "Let's fight again!"; 
  } else if (leftValue > rightValue) {
    return "Left side wins!";
  } else {
    return "Right side wins!";
  }
}

おそらくかなりひどい。
他の人の解答を見ると、map()やreduce()などを使うと短く書けるみたい。

Convert a Boolean to a String

問題の概要 booleanを文字列にして返却する。

www.codewars.com

コード

function booleanToString(b){
  return b.toString();
}

booleanにtoStringが使えるとは思わなかった。
Object.prototype.toString()なので、何にでも使えるのか。

My head is at the wrong end!

問題の概要 配列の先頭と末尾を入れ替えた配列を返却する。

www.codewars.com

コード

function fixTheMeerkat(arr) {
  return arr.reverse();
}

Do I get a bonus?

問題の概要 bool値によって給料の額を10倍にして返却。

www.codewars.com

コード

const bonusTime = (salary, bonus) => bonus === true ? `£${salary * 10}` : `£${salary}`;

FIXME: Get Full Name

問題の概要 クラスのメソッドを修正して適切な出力がされるようにする。

www.codewars.com

コード(1回目)

class Dinglemouse{
  
  
  constructor( firstName, lastName){
    this.first = firstName;
    this.last = lastName;
  }
  
  getFullName(){
    if (!this.first && !this.last) {
      return '';
    } else if (!this.first && this.last) {
      return this.last;
    } else if (this.first && !this.last) {
      return this.first;
    } else {
      return `${this.first} ${this.last}`;
    }
    
  }
  
}

引数から渡ってきた2つの変数名に悩んだ末に、firstとlastというよくわからない名前をつけてしまった。
条件分岐は書きたくなかったが、上手いやり方を思いつかなかったので仕方なく。

コード(2回目)

class Dinglemouse{

  constructor( firstName, lastName ){
    this._firstName = firstName;
    this._lastName = lastName;
  }
  
  getFullName(){
    return `${this._firstName} ${this._lastName}`.trim();
  }
  
}

他の人の解答を見てやり直し。
trimは思いつかなかった。

Number to digit tiers

問題の概要 n桁の数値を1~n桁目までそれぞれ区切って配列に格納する。

www.codewars.com

コード

const createArrayOfTiers = num => {
  const numString = num.toString();
  let result = [];
  
  for (let i = 1; i <= numString.length; i++) {
    result.push(numString.substr(0, i));
  }
  
  return result;
}

https://www.codewars.com/kata/586bca7fa44cfc833e00005c