Q07:日付の2進数変換|プログラマ脳を鍛える数学パズル
プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問をやる。今回は、Q07:日付の2進数変換。
Q: 1964年10月10日から2020年7月24日の間で、YYYYMMDDの10進数を2進数に変換し、逆向きに並べ替えて10進数に戻した時、元の日付と同じになる日付を求める。
日付の操作が面倒なので、nscala-timeとJoda-Timeを使う。
import com.github.nscala_time.time.Imports._
import org.joda.time.Days
val start = new DateTime("1964-10-10")
val diff = Days.daysBetween(start, new DateTime("2020-07-24")).getDays
(0 to diff).map(d => (start + d.days).toString("YYYYMMdd").toInt).filter{ date =>
val bin = date.toBinaryString
bin.takeRight(4) == "1001" && java.lang.Integer.parseInt(bin.reverse, 2) == date
}
Link
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型