Advertisement
Guest User

Untitled

a guest
Feb 16th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.79 KB | None | 0 0
  1. import scala.io.Source
  2.  
  3. object Main extends App {
  4.  
  5.   val pattern = "XXYY"
  6.   val pattern2 = "XYYX"
  7.  
  8.   val words = Source.fromFile("resources/words.txt").getLines.toList
  9.  
  10.   val patternWords = groupByPattern(pattern,words)
  11.   val pattern2Words = groupByPattern(pattern2,words)
  12.  
  13.  
  14.   println(patternWords.take(10))
  15.   println(pattern2Words.take(10))
  16.  
  17.   def groupByPattern(pattern: String, words: List[String]): List[String] = {
  18.     words.filter(filterPattern(pattern, _))
  19.   }
  20.  
  21.   def filterPattern(pattern: String, word: String): Boolean = {
  22.     matchPattern(pattern, pattern, word, word, breakDownPattern(pattern))
  23.   }
  24.  
  25.   def matchPattern(pattern: String, remainingPattern: String, currentWord: String, matchingWord: String, brokenDownPattern: Map[String, String]): Boolean = {
  26.     if (currentWord.length < pattern.length || matchingWord.isEmpty) false
  27.     else {
  28.       remainingPattern match {
  29.         case "" => true
  30.         case _ =>
  31.           val updatedMap = updateMap(brokenDownPattern, remainingPattern, matchingWord)
  32.           if (matchingWord.head.toString == updatedMap(remainingPattern.head.toString))
  33.             matchPattern(pattern, remainingPattern.tail, currentWord, matchingWord.tail, updatedMap)
  34.           else
  35.             matchPattern(pattern, pattern, currentWord.tail, currentWord.tail, breakDownPattern(pattern))
  36.       }
  37.     }
  38.   }
  39.  
  40.   def updateMap(brokenDownMap: Map[String, String], remainingPattern: String, matchingWord: String): Map[String, String] = {
  41.     if (brokenDownMap(remainingPattern.head.toString) != "")
  42.       brokenDownMap
  43.     else
  44.       brokenDownMap.updated(remainingPattern.head.toString, matchingWord.head.toString)
  45.   }
  46.  
  47.   def breakDownPattern(pattern: String): Map[String, String] = {
  48.     pattern.map(letter => (letter.toString, "")).toMap
  49.   }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement