Advertisement
Guest User

Untitled

a guest
Oct 13th, 2013
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. import java.io._;
  2. import scala.io._;
  3.  
  4. object Skyscraper extends App {
  5. def updateTrueValues(
  6. north:Array[String],
  7. west:Array[String],
  8. east:Array[String],
  9. south:Array[String],
  10. board:Array[Array[SkyscraperPuzzleField]],
  11. puzzleSize:Int
  12. ):Array[Array[SkyscraperPuzzleField]] =
  13. {
  14. var b = board.clone;
  15. for(n<-0 to puzzleSize-1)
  16. {
  17. if(north(n).toInt==1)
  18. {
  19. b(n)(0).setTrueList(puzzleSize);
  20. }
  21. if(east(n).toInt==1)
  22. {
  23. b(puzzleSize-1)(n).setTrueList(puzzleSize);
  24. }
  25. if(south(n).toInt==1)
  26. {
  27. b(n)(puzzleSize-1).setTrueList(puzzleSize);
  28. }
  29. if(west(n).toInt==1)
  30. {
  31. b(0)(n).setTrueList(puzzleSize);
  32. }
  33. if(north(n).toInt==puzzleSize)
  34. {
  35. for(i<-1 to puzzleSize)
  36. {
  37. b(n)(i-1).setTrueList(i);
  38. }
  39. }
  40. if(east(n).toInt==puzzleSize)
  41. {
  42. for(i<-puzzleSize to 1 by -1)
  43. {
  44. b(i-1)(n).setTrueList(i);
  45. }
  46. }
  47. if(south(n).toInt==puzzleSize)
  48. {
  49. for(i<-puzzleSize to 1 by -1)
  50. {
  51. b(n)(i-1).setTrueList(i);
  52. }
  53. }
  54. if(west(n).toInt==puzzleSize)
  55. {
  56. for(i<-1 to puzzleSize)
  57. {
  58. b(i-1)(n).setTrueList(i);
  59. }
  60. }
  61. //this is where I would process the hint numbers between 1 and puzzleSize once the algorithm was developed
  62. /*for(i<-2 to (puzzleSize-1))
  63. {
  64. if(north(n)==i)
  65. {
  66. b(n)(0).removeFromTrueList(...);
  67. }
  68. if(east(n)==i)
  69. {
  70. ...
  71. }
  72. if(south(n)==i)
  73. {
  74. ...
  75. }
  76. if(west(n)==i)
  77. {
  78. ...
  79. }
  80. }*/
  81. //etc unfinished algorithm
  82. }
  83.  
  84.  
  85. return b;
  86. }
  87.  
  88. val inputdir = """C:\skyscraper\Input""";
  89. val outputdir = """C:\skyscraper\Output""";
  90.  
  91. val dir = new File(inputdir);
  92. for(f<-dir.listFiles()){
  93. solveSkySkraper(f)
  94. }
  95.  
  96. def solveSkySkraper(f:File):Unit = {
  97. f.getName()
  98. val lines = Source.fromFile(f).mkString
  99. val numPuzzles = lines(0)
  100.  
  101. val out = new PrintWriter( new File(outputdir+"\\"+f.getName()) , "UTF-8")
  102. out.println(numPuzzles)
  103. var lineOffset:Int = 0;
  104.  
  105. for(i<-0 until numPuzzles.asDigit)
  106. {
  107. var puzzleSize = 0;
  108. var tracker = 0;
  109. var northHints:Array[String] = Array();
  110. var westHints:Array[String] = Array();
  111. var eastHints:Array[String] = Array();
  112. var southHints:Array[String] = Array();
  113.  
  114. for (line <- Source.fromFile(f).getLines)
  115. {
  116. if(tracker==1+lineOffset)
  117. {
  118. puzzleSize = augmentString(line).toInt;
  119. }
  120. else if(tracker==2+lineOffset)
  121. {
  122. northHints = line split " ";
  123. }
  124. else if(tracker==3+lineOffset)
  125. {
  126. westHints = line split " ";
  127. }
  128. else if(tracker==4+lineOffset)
  129. {
  130. eastHints = line split " ";
  131. }
  132. else if(tracker==5+lineOffset)
  133. {
  134. southHints = line split " ";
  135. }
  136.  
  137. tracker=tracker+1;
  138. }
  139.  
  140. val puzzleBoard = Array.fill[SkyscraperPuzzleField](puzzleSize, puzzleSize){new SkyscraperPuzzleField(puzzleSize)};
  141. val puzzleBoardRefined = updateTrueValues(northHints, westHints,eastHints,southHints,puzzleBoard,puzzleSize);
  142.  
  143. var solutionString:String="";
  144. out.println(puzzleSize);
  145. for(i<-0 to (puzzleSize-1))
  146. {
  147. for(n<-0 to (puzzleSize-1))
  148. {
  149. solutionString=solutionString+puzzleBoardRefined(n)(i).getTrueList.mkString+" ";
  150. }
  151. out.println(solutionString)
  152. solutionString="";
  153. }
  154. /*println(northHints.mkString);
  155. println(westHints.mkString);
  156. println(eastHints.mkString);
  157. println(southHints.mkString);*/
  158.  
  159. lineOffset=lineOffset+5;
  160. }
  161. out.close();
  162. }
  163.  
  164. }
  165.  
  166. class SkyscraperPuzzleField(size:Int) {
  167.  
  168. var trueList = for(i<-1 to size)yield i;
  169.  
  170. def removeFromTrueList(x:Int) =
  171. {
  172. trueList = for(i<-1 to size if (i!=x))yield i;
  173. }
  174. def setTrueList(x:Int) =
  175. {
  176. trueList = for(i<-1 to size if(i==x))yield i;
  177. }
  178. def getTrueListNumber():Int =
  179. {
  180. trueList(0);
  181. }
  182. def getTrueList =
  183. {
  184. trueList;
  185. }
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement