結果

問題 No.294 SuperFizzBuzz
ユーザー くわいくわい
提出日時 2015-11-20 17:47:22
言語 Scala(Beta)
(3.4.0)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,555 bytes
コンパイル時間 7,983 ms
コンパイル使用メモリ 230,956 KB
最終ジャッジ日時 2023-09-11 21:39:55
合計ジャッジ時間 8,603 ms
ジャッジサーバーID
(参考情報)
judge11 / judge15
このコードへのチャレンジ(β)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
-- [E040] Syntax Error: Main.scala:55:32 ---------------------------------------
55 |  def main(args: Array[String]) {
   |                                ^
   |                                '=' expected, but '{' found
1 error found

ソースコード

diff #

import scala.annotation.tailrec
import scala.collection.immutable.IndexedSeq
import scala.io.StdIn

object Problem294 {

  def ncr(n: BigInt, r: BigInt): Int = {
    val numer = (n to n - r + 1 by -1).product
    val denom = (r to 1 by -1).product
    (numer / denom).toInt
  }

  def makeResult(resultBits: BigInt, ansLen: Int): String = {
    val temp = (resultBits.bitLength - 1 to 0 by -1).foldLeft("") { (sum, x) =>
      val b = if (resultBits.testBit(x)) "5" else "3"
      sum + b
    }

    "3" * (ansLen - resultBits.bitLength) + temp
  }

  @tailrec
  def findNth[A](n: Int, list: Seq[A], f: A => Boolean): A = {
    if (f(list.head)) {
      if (n == 1) {
        list.head
      } else {
        findNth(n - 1, list.tail, f)
      }
    } else {
      findNth(n, list.tail, f)
    }
  }

  def proc(N: Int): String = {
    val counts: IndexedSeq[Int] = (1 to 25).scanLeft(0) { (totalCount, len) =>
      val numOf5: Int = len - len % 3
      val count = (3 to numOf5 by 3).fold(0)((sum, x) =>
        sum + ncr(len - 1, len - x)
      )
      totalCount + count
    }

    val (small, large) = counts.zipWithIndex.span(x => x._1 < N)
    val start = small.last._1
    val ansLen = large.head._2

    val searchRange = 0 until Math.pow(2, ansLen - 1).toInt
    val f: Int => Boolean = Integer.bitCount(_) % 3 == 2
    val resultBits = (findNth(N - start, searchRange, f) << 1) + 1

    makeResult(resultBits, ansLen)
  }

  def main(args: Array[String]) {
    val N = StdIn.readInt()
    val result: String = proc(N)
    println(result)
  }
}
0