fork(2) download
  1. object Solution {
  2. type MyMap = Array[Array[Char]]
  3.  
  4. def main(args: Array[String]) {
  5. val xdt = (1 to 10).map(l => readLine.trim.toCharArray.map(c => if (c == '-') true else false)).toArray
  6. val words = readLine.trim.split(";").toList
  7. // println(words)
  8. val ydt =
  9. (for (x <- 0 to 9)
  10. yield (for (y <- 0 to 9)
  11. yield xdt(y)(x)).toArray).toArray
  12.  
  13. def findFragment(l: List[Boolean]): List[Tuple2[Int, Int]] = {
  14. def find(l: List[Tuple2[Boolean, Int]]): List[Tuple2[Int, Int]] = {
  15. val s = l.dropWhile(_._1 == false)
  16. if (s.isEmpty)
  17. Nil
  18. else {
  19. val e = s.dropWhile(_._1 == true)
  20. (s.head._2, e.head._2 - s.head._2) +: find(e)
  21.  
  22. }
  23. }
  24. val l2 = (l :+ false).zipWithIndex
  25. find(l2).filter(t => t._2 > 1)
  26. }
  27. val zx = xdt.zipWithIndex
  28. val zy = ydt.zipWithIndex
  29. //println(xdt.toList.map(_.toList))
  30.  
  31. val xe = zx.map(t => findFragment(t._1.toList).map(v => (v._1, t._2, v._2, (1, 0)))).filter(!_.isEmpty)
  32. val ye = zy.map(t => findFragment(t._1.toList).map(v => (t._2, v._1, v._2, (0, 1)))).filter(!_.isEmpty)
  33. val aa = (xe ++ ye).flatten
  34.  
  35. // println(aa.mkString)
  36. val DEFAULTCHAR = '+'
  37. val map = Array.ofDim[Char](10, 10)
  38. for (y <- 0 to 9; x <- 0 to 9) { map(x)(y) = DEFAULTCHAR }
  39.  
  40. def dupArray(src: MyMap): MyMap = {
  41. val dst = Array.ofDim[Char](10, 10)
  42. for (y <- 0 to 9; x <- 0 to 9) { dst(x)(y) = src(x)(y) }
  43. dst
  44. }
  45.  
  46. def fill(map: MyMap, word: String, x: Int, y: Int, ox: Int, oy: Int): Option[MyMap] = {
  47. if (word.isEmpty) {
  48. Option(map)
  49. } else {
  50. if (map(x)(y) != DEFAULTCHAR && map(x)(y) != word.head) {
  51. None
  52. } else {
  53. map(x)(y) = word.head
  54. fill(map, word.tail, x + ox, y + oy, ox, oy)
  55. }
  56. }
  57. }
  58.  
  59. words.permutations.foreach { p =>
  60. val zipped = p.zip(aa)
  61. // println(zipped.filter(e => e._1.length == e._2._3).size)
  62. if (zipped.filter(e => e._1.length == e._2._3).size == words.size) {
  63. // println(zipped)
  64. val newMap = dupArray(map)
  65. val stat = zipped.map(z => {
  66. val z2 = z._2
  67. //(String, (Int, Int, Int, (Int, Int)))]
  68. fill(newMap, z._1, z2._1, z2._2, z2._4._1, z2._4._2)
  69. })
  70. if (stat.collect { case Some(x) => x }.size == zipped.size) {
  71. dump(newMap)
  72. }
  73. }
  74. }
  75.  
  76. def dump(map: MyMap) = {
  77. for (y <- 0 to 9) {
  78. for (x <- 0 to 9) {
  79. print(map(x)(y))
  80. }
  81. println
  82. }
  83. }
  84. }
  85. }
  86.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
/opt/scala/bin/scalac: line 50: /dev/null: Permission denied
spoj: The program compiled successfully, but Main.class was not found.
      Class Main should contain method: def main(args: Array[String]).
stdout
Standard output is empty