Sync
This commit is contained in:
parent
6f050a029e
commit
776bba907c
3887 changed files with 59894 additions and 7280 deletions
36
Task/Balanced-brackets/Scala/balanced-brackets-1.scala
Normal file
36
Task/Balanced-brackets/Scala/balanced-brackets-1.scala
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import scala.collection.mutable.ListBuffer
|
||||
import scala.util.Random
|
||||
|
||||
object BalancedBrackets extends App {
|
||||
|
||||
val random = new Random()
|
||||
def generateRandom: List[String] = {
|
||||
import scala.util.Random._
|
||||
val shuffleIt: Int => String = i => shuffle(("["*i+"]"*i).toList).foldLeft("")(_+_)
|
||||
(1 to 20).map(i=>(random.nextDouble*100).toInt).filter(_>2).map(shuffleIt(_)).toList
|
||||
}
|
||||
|
||||
def generate(n: Int): List[String] = {
|
||||
val base = "["*n+"]"*n
|
||||
var lb = ListBuffer[String]()
|
||||
base.permutations.foreach(s=>lb+=s)
|
||||
lb.toList.sorted
|
||||
}
|
||||
|
||||
def checkBalance(brackets: String):Boolean = {
|
||||
def balI(brackets: String, depth: Int):Boolean = {
|
||||
if (brackets == "") depth == 0
|
||||
else brackets(0) match {
|
||||
case '[' => ((brackets.size > 1) && balI(brackets.substring(1), depth + 1))
|
||||
case ']' => (depth > 0) && ((brackets.size == 1) || balI(brackets.substring(1), depth -1))
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
balI(brackets, 0)
|
||||
}
|
||||
|
||||
println("arbitrary random order:")
|
||||
generateRandom.map(s=>Pair(s,checkBalance(s))).foreach(p=>println((if(p._2) "balanced: " else "unbalanced: ")+p._1))
|
||||
println("\n"+"check all permutations of given length:")
|
||||
(1 to 5).map(generate(_)).flatten.map(s=>Pair(s,checkBalance(s))).foreach(p=>println((if(p._2) "balanced: " else "unbalanced: ")+p._1))
|
||||
}
|
||||
32
Task/Balanced-brackets/Scala/balanced-brackets-2.scala
Normal file
32
Task/Balanced-brackets/Scala/balanced-brackets-2.scala
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import scala.util.Random
|
||||
|
||||
object BalancedParensApp extends App {
|
||||
|
||||
val triesCount = 10
|
||||
|
||||
(0 until triesCount).foreach { i =>
|
||||
val str = randomString(length = i)
|
||||
val msg = if (isBalanced(str)) "ok" else "NOT ok"
|
||||
println(s"$str - $msg")
|
||||
}
|
||||
|
||||
def randomString(length: Int) = {
|
||||
val parensPairs = ("[]" * length).toSeq
|
||||
val parensOfGivenLength = parensPairs.take(length)
|
||||
val shuffledParens = Random.shuffle(parensOfGivenLength)
|
||||
shuffledParens.mkString
|
||||
}
|
||||
|
||||
def isBalanced(parensString: String): Boolean = {
|
||||
var balance = 0
|
||||
parensString.foreach { char =>
|
||||
char match {
|
||||
case '[' => balance += 1
|
||||
case ']' => balance -= 1
|
||||
}
|
||||
if (balance < 0) return false;
|
||||
}
|
||||
balance == 0
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue