paizaオンラインハッカソン7 にScalaで挑戦
恋愛SLG: プログラミングで彼女をつくる|paizaオンラインハッカソン7
見てるだけで悲しくなる題名ですが、そういうのにあえて挑戦するのが私です。あー彼女欲しい。
この先答え↓
「つり目セット」の問題
簡単。
object Main { def main(args: Array[String]) = { val input = scala.io.Source.stdin val lines: Seq[String] = input.getLines.toSeq val num: Int = Integer.parseInt(lines(0)) for (i <- 1 to num) { print("Ann") } } }
「眼帯」の問題
・ScalaではListの差集合がとれるので、せっかくだし使いましょう。実務で使うこと無いし…
object Main { // N // M1 // x_1 x_2 ... x_M1 // M2 // y_1 y_2 ... y_M2 def main(args: Array[String]) = { val input = scala.io.Source.stdin val lines: Seq[String] = input.getLines.toSeq // N は、ある本の出版されている巻の総数です。 // 出版されているのは、1 巻から始まり、N 巻までです。 val N: Int = Integer.parseInt(lines(0)) // M1 は、あなたの持っている巻の総数を表します。 val M1: Int = Integer.parseInt(lines(1)) // 次の行には、あなたの持っている巻のリストが与えられます。 val x: List[Int] = lines(2).split(" ").map { line => Integer.parseInt(line.trim) }.toList // M2 は、中古本屋で売られている巻のリストの総数を表します。 val M2: Int = Integer.parseInt(lines(3)) // 次の行には、中古本屋で売られている巻のリストが与えられます。 val y: List[Int] = lines(4).split(" ").map { line => Integer.parseInt(line.trim) }.toList if (N == M1) { println("None") } else { val result: List[Int] = (y diff x).sorted // ここでソートしないとテストに通らない if (result.isEmpty) { println("None") } else { println(result.mkString(" ")) } } } }
「ショートヘアセット」の問題
object Main { // a // b def main(args: Array[String]) = { val input = scala.io.Source.stdin val lines: Seq[String] = input.getLines.toSeq val a = Integer.parseInt(lines(0)) val b = Integer.parseInt(lines(1)) println(a+b) } }
「ロングヘアセット」の問題
・ScalaではCollectionに関数を渡してなんやらかんやらできるので使いましょう。高階関数です。
object Main { // yes // no def main(args: Array[String]) = { val input = scala.io.Source.stdin val lines: Seq[String] = input.getLines.toSeq val yes: Int = lines.count(e => e == "yes") val no: Int = lines.count(e => e == "no") if (yes > no) { println("yes") } else { println("no") } } }
「ポニーテールセット」の問題
・Scalaのfor文は若干特殊ですが、このようなこともできます
object Main { // n def main(args: Array[String]) = { val input = scala.io.Source.stdin val lines: Seq[String] = input.getLines.toSeq val n = Integer.parseInt(lines(0)) for (i <- n to 0 by -1) { if (i==0) { println("0!!") } else { println(i) } } } }
「ツインテールセット」の問題
・Scalaの除算はInt型、それに注意する Scala: Int同士の割り算は、Intが戻り値なので注意 - Qiita
・関数内に関数を書くよ
object Main { // c_1 p_1 // c_2 p_2 def main(args: Array[String]) = { val input = scala.io.Source.stdin val lines: Seq[String] = input.getLines.toSeq def drink(line: String): Float = { val c: Int = Integer.parseInt(line.split(" ")(0)) val p: Int = Integer.parseInt(line.split(" ")(1)) val f: Float = if (p != 0) { c.toFloat / p.toFloat } else { 0 } f } val drink1: Float = drink(lines(0)) val drink2: Float = drink(lines(1)) if (drink1 > drink2) { println("1") } else { println("2") } } }
「セーラー服セット」の問題
・これなどは一行で書けたりします、head/tail/init/lastは使い勝手が良いです(ちなみにHaskell由来)
object Main { // n // s_1 // s_2 // ... // s_n def main(args: Array[String]) = { val input = scala.io.Source.stdin val lines: Seq[String] = input.getLines.toSeq println(lines.tail.mkString("_")) } }
「カーディガン」の問題
・なかなか使いドコロのないfoldLeftを使ってみたかった Scalaでリスト処理
object Main { // n def main(args: Array[String]) = { val input = scala.io.Source.stdin val lines: Seq[String] = input.getLines.toSeq println( (1 to Integer.parseInt(lines(0))).toList.foldLeft(1)(_ * _) ) } }
「縞ニーソセット」の問題
・飽きてきた上に結構めんどくさかったので適当に解いてしまった
object Main { // n - 幅 // m - 全体 // RRRWWWRRRW def main(args: Array[String]) = { val input = scala.io.Source.stdin val lines: Seq[String] = input.getLines.toSeq val n = Integer.parseInt(lines(0)) val m = Integer.parseInt(lines(1)) val size = m / n for (i <- 1 to size) { if (i%2 != 0) { (1 to n).toList.foreach { _ => print("R") } } else { (1 to n).toList.foreach { _ => print("W") } } } val rest = m - n * size if (rest > 0) { val l = if (size % 2 != 0) "W" else "R" (1 to rest).foreach { _ => print(l) } } } }
残りは明日?(最後のやつは結構難しそう)