1
0

CodeWars オススメ問題 #1

Posted at

はじめに

個人的に好きなアルゴリズム学習サイト「CodeWars」の問題をシェア。

週1くらいのペースで、全10回を目指す予定。

CodeWarsはいいぞ!の紹介はこちら

CodeWarsの始め方はこちら

オススメ問題

末尾の0を削除してくれ、という問題です。

1450 -> 145
960000 -> 96
1050 -> 105
-1050 -> -105

難易度

分類は 8kyu(最も簡単)ですが、個人的には 7kyu 相当です。

オススメの回答

「評価が高い回答」の中から、学びの多い回答をピックアップしてご紹介。

条件設定と繰り返し処理

https://www.codewars.com/kata/reviews/570bb3f1c631137326000047/groups/570c6c52f616a83d6e000b0b

function noBoringZeros(n) {
  while (n % 10 === 0 && n !== 0) {
    n = n / 10
  }
  return n
}

%(剰余)と!==(等しくない)を使用し、丁寧に書かれているコードです。
再帰ではなくwhileを使用しているため、

  • 何が条件か
  • どんな処理をしているか

がわかりやすいのがいいですね。

再帰を使ったケースはこちら

正規表現

https://www.codewars.com/kata/reviews/570bb3f1c631137326000047/groups/5711a541b25a4600a10006f2

function noBoringZeros(n) {
  return +`${n}`.replace(/0*$/, "");
}

正規表現/0*$/(行末までの0の繰り返し)にマッチし、""(無)にreplaceしていますね。無駄がない。

ここからは少しむずかしいのですが、

  • 数値から文字列への変換にテンプレート記法${}を使用
  • +を最初につけることで、最後に文字列から数値に再変換している

この書き方がスマートでかっこいいです。

難しい部分の話がわかりにくかった方は、こちらの解答もオススメです。

番外編:記号だけでプログラミング

長いので省略します

[][(![]+[])[+!![]]+(!![]+[])[+[]]][([]+[][(![]+[])[+!![]]+(!![]+[])[+[]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+!![]]+(!![]+[])[+[]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(![]+[])[!
![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+[][(![]+[])[+!![]]+(!![]+[])[+[]]])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+!![]]+(!![]+[])[+[]]]
)[+!![]+[+[]]]+(!![]+[])[+!![]]]((!![]+[

こんなことが延々と書いてあります。
これでもちゃんと動くんです。
こちらは別記事にまとめました。

おわりに

以上、CodeWarsオススメ問題でした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0