exit('IN');

本を読んで得た学びとか

【CodeWars】10/25~10/31に解いた問題たち

Persistent Bugger.(10/25)

レベル

6kyu

概要

与えられた数字の1桁ずつを乗算する。
乗算の結果が一桁になるまで繰り返す。
繰り返した回数を返す。

書いたコード

答えを見てしまった…
はじめに自分で書いたコードはサンプルテストは合格したが、ランダムではうまくいかなかった。
array_productの存在に気づければもっと楽に解けたのに。

unction persistence(int $num): int {
  $count = 0;
  while ($num > 9) {
    $num = array_product(str_split($num));
    $count++;
  }
  return $count;
}

Convert boolean values to strings 'Yes' or 'No'.(10/26)

レベル

8kyu

概要

問題タイトルそのまま。
trueであれば"Yes", falseであれば"No"を返す。

書いたコード

「== true」は別になくてもいいことにあとで気づいた。
簡単な問題ではあるものの、他の人の解答を見ると様々なやり方があるので勉強になる。
ただ、やはりもうちょっと難しい問題を解いた方がいいかも。

function boolToWord($bool){
    return $bool == true ? 'Yes' : 'No';
}

Sum of odd numbers(10/27)

レベル

7kyu

概要

奇数から成るピラミッドのn段目の数の合計を求める。

書いたコード

各段がnの3乗でできているとわかればすぐできた。

function rowSumOddNumbers($n) {
  return pow($n, 3);
}

Pyramid Array(10/28)

レベル

6kyu

概要

n個の1から成る配列をn個作る。

書いたコード

1回目

function pyramid($n) {
  $array = [];
  for ($i = 1; $i <= $n; $i++) {
    $array[] = [];
    for ($j = 0; $j < $i; $j++) {
      array_push($array[$i - 1], 1);
    }
  }
  return $array;
}

2回目
array_fillを使ってもう一度。

function pyramid($n) {
  $array = [];
  for ($i = 1; $i <= $n; $i++) {
    $array[] = array_fill(0, $i, 1);
  }
  return $array;
}

Odd or Even?(10/29)

レベル

7kyu

概要

配列の値の合計が奇数か偶数か判定する。

書いたコード

function odd_or_even(array $a): string {
  if (empty($a)) {
    return "even";
  }
  return abs(array_sum($a)) % 2 == 1 ? "odd" : "even";
}

Valid Spacing(10/30)

レベル

7kyu

概要

文字列の中に不適切な空白(行頭・行末の空白, 連続した空白)が含まれていないかを調べて結果を返す。

書いたコード

行末の^は先に書くのに対し、行末の$は後に書かないといけない。

function valid_spacing($s) {
  return preg_match('/^\s|\s{2,}|\s$/', $s) ? false : true;
}

Dashatize it(10/31)

レベル

6kyu

概要

与えられた数字を「-」で区切る。
ただし、偶数が続く場合は区切らない。

書いたコード

昨日と今日に引き続き正規表現を利用する問題だったため、正規表現への抵抗が無くなった気がする。

function dashatize(int $num): string {
  $array = [];
  preg_match_all('/[02468]{2,}|\d/', $num, $array);
  return implode('-', $array[0]);
}