diff options
Diffstat (limited to 'test/disabled/run/coder2/Coder2.scala')
-rw-r--r-- | test/disabled/run/coder2/Coder2.scala | 72 |
1 files changed, 36 insertions, 36 deletions
diff --git a/test/disabled/run/coder2/Coder2.scala b/test/disabled/run/coder2/Coder2.scala index abe284a398..43b2e9bcb8 100644 --- a/test/disabled/run/coder2/Coder2.scala +++ b/test/disabled/run/coder2/Coder2.scala @@ -5,31 +5,31 @@ import collection.parallel._//immutable._ class SeqCoder(words: List[String]) { - + private val m = Map( - '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", + '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ") - + /** Invert the mnemnonics map to give a map from chars 'A' ... 'Z' to '2' ... '9' */ - private val charCode: Map[Char, Char] = + private val charCode: Map[Char, Char] = for ((digit, letters) <- m; letter <- letters) yield letter -> digit - - /** Maps a word to the digit string it represents, + + /** Maps a word to the digit string it represents, * e.g. `Java` -> `5282` */ private def wordCode(word: String): String = word.toUpperCase map charCode - - /** A map from digit strings to the words that represent + + /** A map from digit strings to the words that represent * them e.g. `5282` -> List(`Java`, `Kata`, `Lava`, ...) */ - val wordsForNum: Map[String, Seq[String]] = + val wordsForNum: Map[String, Seq[String]] = (words groupBy wordCode).map(t => (t._1, t._2.toSeq)) withDefaultValue Seq() - + val memo = collection.mutable.Map[String, Set[Seq[String]]]("" -> Set(Seq())) val wfnmemo = collection.mutable.Map[(String, String), Set[Seq[String]]]() val subsmemo = collection.mutable.Map[(String, String, String), Set[Seq[String]]]() - + /** All ways to encode a number as a list of words */ - def encode(number: String): Set[Seq[String]] = + def encode(number: String): Set[Seq[String]] = if (number.isEmpty) Set(Seq()) else { val splits = (1 to number.length).toSet @@ -51,38 +51,38 @@ class SeqCoder(words: List[String]) { memo += number -> r r } - - /** Maps a number to a list of all word phrases that can + + /** Maps a number to a list of all word phrases that can * represent it */ def translate(number: String): Set[String] = encode(number) map (_ mkString " ") - + def ??? : Nothing = throw new UnsupportedOperationException } class ParCoder(words: List[String]) { - + private val m = Map( - '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", + '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ") - + /** Invert the mnemnonics map to give a map from chars 'A' ... 'Z' to '2' ... '9' */ - private val charCode: Map[Char, Char] = + private val charCode: Map[Char, Char] = for ((digit, letters) <- m; letter <- letters) yield letter -> digit - - /** Maps a word to the digit string it represents, + + /** Maps a word to the digit string it represents, * e.g. `Java` -> `5282` */ private def wordCode(word: String): String = word.toUpperCase map charCode - - /** A map from digit strings to the words that represent + + /** A map from digit strings to the words that represent * them e.g. `5282` -> List(`Java`, `Kata`, `Lava`, ...) */ - val wordsForNum: Map[String, ParSeq[String]] = + val wordsForNum: Map[String, ParSeq[String]] = (words groupBy wordCode).map(t => (t._1, t._2.toSeq.par)) withDefaultValue ParSeq() - + val comparison = new SeqCoder(words) - + /** All ways to encode a number as a list of words */ - def encode(number: String): ParSet[ParSeq[String]] = + def encode(number: String): ParSet[ParSeq[String]] = if (number.isEmpty) ParSet(ParSeq()) else { val splits = (1 to number.length).toSet.par @@ -105,7 +105,7 @@ class ParCoder(words: List[String]) { assertNumber(number, r) r } - + def assertSubs(num: String, subsfrom: String, word: String, r: ParSet[ParSeq[String]]) { val m = comparison.subsmemo((num, subsfrom, word)) if (r != m) { @@ -115,7 +115,7 @@ class ParCoder(words: List[String]) { error("r != m") } } - + def assertWfn(num: String, split: String, dropped: String, r: ParSeq[ParSeq[String]]) { val m = comparison.wfnmemo((num, split)) val rs = r.toSet.par @@ -139,7 +139,7 @@ class ParCoder(words: List[String]) { error("rs != m") } } - + def assertNumber(num: String, r: ParSet[ParSeq[String]]) { val m = comparison.memo(num) if (r != m) { @@ -149,14 +149,14 @@ class ParCoder(words: List[String]) { error("r != m") } } - - /** Maps a number to a list of all word phrases that can + + /** Maps a number to a list of all word phrases that can * represent it */ def translate(number: String): ParSet[String] = { comparison.translate(number) encode(number) map (_.seq mkString " ") } - + def ??? : Nothing = throw new UnsupportedOperationException } @@ -165,18 +165,18 @@ class ParCoder(words: List[String]) { object Test { val code = "2328437472947"//36262633"//837976"//"6477323986225453446" //val code = "747294736262633" - + /* */ def main(args : Array[String]) { for (i <- 0 until 10) { val seqcoder = new SeqCoder(Dictionary.wordlist) val sts = seqcoder.translate(code) //println("Translation check: " + st.size) - + val parcoder = new ParCoder(Dictionary.wordlist) val pts = parcoder.translate(code) //println("Translation check: " + pt.size) - + val st = sts.toList.sorted val pt = pts.toList.sorted if (st.size != pt.size) { |