Skip to content

Instantly share code, notes, and snippets.

@theodoreLee
Created March 20, 2015 13:25
Show Gist options
  • Save theodoreLee/d3eccb4ada069da53bd3 to your computer and use it in GitHub Desktop.
Save theodoreLee/d3eccb4ada069da53bd3 to your computer and use it in GitHub Desktop.
import java.io.FileOutputStream
import scala.io.Source
object Consonants {
val INPUT = "test.in"
val OUTPUT = INPUT.takeWhile(_ != '.') + ".out"
def main(args: Array[String]): Unit = {
val itr = Source.fromFile(INPUT).getLines()
val sets = itr.next().toInt
// val writer = new FileOutputStream(OUTPUT)
val writer = Console.out
try {
Console.withOut(writer) {
for (set <- 1 to sets) {
val Array(letters,countStr) = itr.next().split(' ')
println(f"Case #${set}: ${solve(letters, countStr.toInt)}")
}
}
} finally {
writer.close()
}
}
def solve(letters:String, minimumConstants:Int):Int = {
val vowels = Set('a','e','i','o','u')
var cnt = 0
val ret = for {
letter <- letters
} yield {
if(vowels.contains(letter)) {
cnt = 0
} else cnt += 1
cnt
}
val zipRet = ret.zipWithIndex.map(x => (x._1, x._2 + 1))
// val matchedCount =zipRet.filter(_._1 >= minimumConstants)
// letters.length - minimumConstants + 1
// 1 2 3
// // 2 => 2 - 2 + 1 = 1 , 3 - 2 + 1= 1
// 1 2 3
// println(ret)
val arr = zipRet.toArray
val matchedSet =zipRet.filter(_._1 >= minimumConstants)
(for {
i <- 0 until matchedSet.size
} yield {
val (x,index) = matchedSet(i)
val r = if(i == 0 ) {
(index - minimumConstants + 1) * (letters.length - index +1)
} else {
(index - minimumConstants + 1 - matchedSet(i-1)._2 + 1) * (letters.length - index +1)
}
if(minimumConstants == 3) {
println(r, index, minimumConstants, letters.length, index)
}
r
}).sum
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment