【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]); }