exit('IN');

本を読んで得た学びとか

【CodeWars】1/24 ~ 1/30に解いた問題たち

記事の内容

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

get character from ASCII Value

問題の概要 受け取った数字をASCIIでの値に変換する。

www.codewars.com

コード

function getChar(c) {
  return String.fromCharCode(c)
}

Can we divide it?

問題の概要 変数numberが変数a, bでそれぞれ割り切れるかどうか。

www.codewars.com

コード

function isDivideBy(number, a, b) {
  return number % a === 0 && number  % b === 0 ? true : false;
}

今回はa, b2つと決まっていたが、何個あるかわからない場合はevery()とかを使う感じかな。

Limit string length - 1

問題の概要 文字列の指定された位置から「…」に置き換える。

www.codewars.com

コード

function solution(string,limit){
  
  if (string.length <= limit) {
    return string;
  }
  
  let result = string.substr(0, limit);
  return result + "...";
}

Love vs friendship

問題の概要

コード

1回目

function wordsToMarks(string){
  const alphabets = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5,
    f: 6,
    g: 7,
    h: 8,
    i: 9,
    j: 10,
    k: 11,
    l: 12,
    m: 13,
    n: 14,
    o: 15,
    p: 16,
    q: 17,
    r: 18,
    s: 19,
    t: 20,
    u: 21,
    v: 22,
    w: 23,
    x: 24,
    y: 25,
    z: 26
  }
  
  const charArray = string.split('');
  let stringValue = 0;
  
  charArray.forEach(char => {
    stringValue += alphabets[char];
  })
  
  return stringValue;
}

特に何も考えずに実装。 ひどいことになった。 わかりやすいかもしれないけど…。

2回目

function wordsToMarks(string) {
  let stringValue = 0;
  for (let i = 0; i < string.length; i++)
    stringValue += string.charCodeAt(i) - 96;
  return stringValue;
}

他の人がString.prototype.charCodeAt()を使っていたので、真似てみた。
周りが文字コードを知っているならこれを使ってもいいかもしれない。

Incorrect division method

問題の概要 割り算の答えが返ってくるようにコードを修正する。(コメントアウトの部分)

www.codewars.com

コード

// const solve = (x, y) => x // y;

const solve = function(x, y) {
  return x / y;
}

問題が簡単だったので、下に関数式を書いてみた。

[Code Golf] Return Odd No Matter What

問題の概要 12文字以下で処理を書く。(関数の名前は除く)

www.codewars.com

コード

const alwaysOdd=n=>n%2?n:n-1

Averages of numbers

問題の概要

配列の隣り合う要素の平均を配列で返す。

www.codewars.com

コード

const averages = numbers => {
  
  let result = [];
  
  if (numbers === null) {
    return result;
  }
  
  for (let i = 0; i < numbers.length; i++) {
    if (i !== numbers.length -1) {
      result.push((numbers[i] + numbers[i + 1]) / 2);
    }
  }
  
  return result;
}

空の配列のlengthプロパティにアクセスしようとすると、エラーが返ってくるのはあまり納得が行かない。
0が返ってきたらいいのに。