【CodeWars】1/31 ~ 2/6に解いた問題たち
記事の内容
1/31 ~ 2/6にCodeWarsで解いた問題です。
JavaScriptを使用しています。
朝解いているので、すぐ解ける簡単な問題ばかりです。
Alphabet war
コード
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を文字列にして返却する。
コード
function booleanToString(b){ return b.toString(); }
booleanにtoStringが使えるとは思わなかった。
Object.prototype.toString()なので、何にでも使えるのか。
My head is at the wrong end!
問題の概要 配列の先頭と末尾を入れ替えた配列を返却する。
コード
function fixTheMeerkat(arr) { return arr.reverse(); }
Do I get a bonus?
問題の概要 bool値によって給料の額を10倍にして返却。
コード
const bonusTime = (salary, bonus) => bonus === true ? `£${salary * 10}` : `£${salary}`;
FIXME: Get Full Name
問題の概要 クラスのメソッドを修正して適切な出力がされるようにする。
コード(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桁目までそれぞれ区切って配列に格納する。
コード
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; }