Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import scala.io.Source
- object Main extends App {
- val pattern = "XXYY"
- val pattern2 = "XYYX"
- val words = Source.fromFile("resources/words.txt").getLines.toList
- val patternWords = groupByPattern(pattern,words)
- val pattern2Words = groupByPattern(pattern2,words)
- println(patternWords.take(10))
- println(pattern2Words.take(10))
- def groupByPattern(pattern: String, words: List[String]): List[String] = {
- words.filter(filterPattern(pattern, _))
- }
- def filterPattern(pattern: String, word: String): Boolean = {
- matchPattern(pattern, pattern, word, word, breakDownPattern(pattern))
- }
- def matchPattern(pattern: String, remainingPattern: String, currentWord: String, matchingWord: String, brokenDownPattern: Map[String, String]): Boolean = {
- if (currentWord.length < pattern.length || matchingWord.isEmpty) false
- else {
- remainingPattern match {
- case "" => true
- case _ =>
- val updatedMap = updateMap(brokenDownPattern, remainingPattern, matchingWord)
- if (matchingWord.head.toString == updatedMap(remainingPattern.head.toString))
- matchPattern(pattern, remainingPattern.tail, currentWord, matchingWord.tail, updatedMap)
- else
- matchPattern(pattern, pattern, currentWord.tail, currentWord.tail, breakDownPattern(pattern))
- }
- }
- }
- def updateMap(brokenDownMap: Map[String, String], remainingPattern: String, matchingWord: String): Map[String, String] = {
- if (brokenDownMap(remainingPattern.head.toString) != "")
- brokenDownMap
- else
- brokenDownMap.updated(remainingPattern.head.toString, matchingWord.head.toString)
- }
- def breakDownPattern(pattern: String): Map[String, String] = {
- pattern.map(letter => (letter.toString, "")).toMap
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement