Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io._;
- import scala.io._;
- object Skyscraper_BruteForce extends App {
- def isCorrect(
- hintNumber:Int,
- rowOrColumn:Array[Array[Int]],
- puzzleSize:Int,
- rowOrColumnNumber:Int,
- whatSide:String
- ):Boolean =
- {
- var observedSkyscrapers:Int = 0;
- var prev:Int = -1;
- for (i:Int<-0 to puzzleSize-1)
- {
- if(whatSide=="West")
- {
- if(rowOrColumn(i)(rowOrColumnNumber-1)>prev)
- {
- observedSkyscrapers=observedSkyscrapers+1;
- }
- }
- else if(whatSide=="North")
- {
- if(rowOrColumn(rowOrColumnNumber-1)(i)>prev)
- {
- observedSkyscrapers=observedSkyscrapers+1;
- }
- }
- else if(whatSide=="South")
- {
- if(rowOrColumn(rowOrColumnNumber-1)(puzzleSize-1-i)>prev)
- {
- observedSkyscrapers=observedSkyscrapers+1;
- }
- }
- else if(whatSide=="East")
- {
- if(rowOrColumn(puzzleSize-1-i)(rowOrColumnNumber-1)>prev)
- {
- observedSkyscrapers=observedSkyscrapers+1;
- }
- }
- prev=i;
- }
- if(observedSkyscrapers==hintNumber)
- return true;
- else
- return false;
- }
- val inputdir = """C:\skyscraper\Input""";
- val outputdir = """C:\skyscraper\Output""";
- val dir = new File(inputdir);
- for(f<-dir.listFiles()){
- solveSkySkraper(f)
- }
- def solveSkySkraper(f:File):Unit = {
- f.getName();
- val lines = Source.fromFile(f).mkString;
- val numPuzzles = lines(0);
- val out = new PrintWriter( new File(outputdir+"\\"+f.getName()) , "UTF-8");
- out.println(numPuzzles);
- println(numPuzzles);
- var lineOffset:Int = 0;
- for(i<-0 until numPuzzles.asDigit)
- {
- var puzzleSize = 0;
- var tracker = 0;
- var northHints:Array[String] = Array();
- var westHints:Array[String] = Array();
- var eastHints:Array[String] = Array();
- var southHints:Array[String] = Array();
- for (line <- Source.fromFile(f).getLines)
- {
- if(tracker==1+lineOffset)
- {
- puzzleSize = augmentString(line).toInt;
- }
- else if(tracker==2+lineOffset)
- {
- northHints = line split " ";
- }
- else if(tracker==3+lineOffset)
- {
- westHints = line split " ";
- }
- else if(tracker==4+lineOffset)
- {
- eastHints = line split " ";
- }
- else if(tracker==5+lineOffset)
- {
- southHints = line split " ";
- }
- tracker=tracker+1;
- }
- var solved:Boolean=false;
- var puzzleBoardTest = Array.fill[Int](puzzleSize, puzzleSize){1};
- var currentBoard = 0;
- while(solved==false)
- {
- //initializes all fields to 1
- for(k<-0 to puzzleSize-1)
- {
- for(l<-0 to puzzleSize-1)
- {
- puzzleBoardTest(k)(l)=1;
- }
- }
- puzzleBoardTest(0)(0)=puzzleBoardTest(0)(0)+currentBoard;
- currentBoard = currentBoard+1;
- //println(puzzleBoardTest(0)(0));
- //checks if a field has a higher value than the highest allowed value. If it does, it subtracts the highest allowed value from that field,
- //and adds 1 to the next field until the field is below the allowed value
- for(k<-0 to puzzleSize-1)
- {
- for(l<-0 to puzzleSize-1)
- {
- var fieldValue = puzzleBoardTest(k)(l);
- while(fieldValue>puzzleSize)
- {
- puzzleBoardTest(k)(l)=fieldValue-puzzleSize;
- fieldValue = puzzleBoardTest(k)(l);
- if(l<puzzleSize-1)
- {
- val nextFieldValue=puzzleBoardTest(k)(l+1);
- puzzleBoardTest(k)(l+1)=nextFieldValue+1;
- }
- else if(k<puzzleSize-1)
- {
- val nextFieldValue=puzzleBoardTest(k+1)(0);
- puzzleBoardTest(k+1)(0)=nextFieldValue+1;
- }
- }
- }
- }
- println(puzzleBoardTest(3)(3));
- solved=true;
- for (n<-1 to puzzleSize)
- {
- if(isCorrect(northHints(n-1).toInt,puzzleBoardTest, puzzleSize, n, "North")==false)
- {
- solved=false;
- }
- if(isCorrect(eastHints(n-1).toInt,puzzleBoardTest, puzzleSize, n, "East")==false)
- {
- solved=false;
- }
- if(isCorrect(southHints(n-1).toInt,puzzleBoardTest, puzzleSize, n, "South")==false)
- {
- solved=false;
- }
- if(isCorrect(westHints(n-1).toInt,puzzleBoardTest, puzzleSize, n, "West")==false)
- {
- solved=false;
- }
- }
- }
- var solutionString:String="";
- out.println(puzzleSize);
- println(puzzleSize);
- for(i<-0 to (puzzleSize-1))
- {
- for(n<-0 to (puzzleSize-1))
- {
- solutionString=solutionString+puzzleBoardTest(n)(i)+" ";
- }
- out.println(solutionString);
- println(solutionString);
- solutionString="";
- }
- /*println(northHints.mkString);
- println(westHints.mkString);
- println(eastHints.mkString);
- println(southHints.mkString);*/
- lineOffset=lineOffset+5;
- }
- out.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement