infixAfix hermanos fierro

Run Settings
LanguageScala
Language Version
Run Command
object infixAfix extends App { import scala.collection.mutable.ListBuffer class Stack(val stack: ListBuffer[String]) { def isEmpty: Boolean = { if (stack.isEmpty) true else false } def push(input: String): Unit = { stack += input } def pop(): String = { stack.remove ( stack.length - 1 ) } def peek(): String = { stack.last } def length(): Int = { stack.length } } val oS = new Stack ( ListBuffer [String]( ) ) val eS: ListBuffer[String] = ListBuffer ( ) val chars: Seq[String] = (('a' to 'z') ++ ('A' to 'Z') ++ ('0' to '9')).mkString.split ( "" ).toList val nums: Seq[String] = ('0' to '9').mkString.split ( "" ).toList val ops: List[String] = List ( "+", "*", "/", "(", ")", "-" ) val h = "(-456*13) - ((3789/204) * -3)" def parser(h: String): ListBuffer[String] = { val w: ListBuffer[String] = ListBuffer ( ) for (i <- h) { if (i.toString != " ") w += i.toString } for (i <- 0 until (w.length - 1)) { if (nums contains w ( i )) { if (nums contains w ( i + 1 )) { w ( i + 1 ) = w ( i ) + w ( i + 1 ) } } } for (i <- w.indices) { if (w ( i ).length > 1) w ( i - 1 ) = "!" } for (i <- w) { if (i == "!") w -= i } for (i <- 1 until w.length) { if (w ( i - 1 ).length > 1 && !(ops contains w ( i ))) { w ( i - 1 ) = w ( i - 1 ) + w ( i ) w ( i ) = "!" } } for (i <- w.indices) { if (i == 0) { if (w ( i ) == "-") { w ( i + 1 ) = w ( i ) + w ( i + 1 ) w ( i ) = "!" } } if (w ( i ) == "-") { if (w ( i - 1 ) == "(" | (ops contains w ( i - 1 )) && !(ops contains w ( i + 1 ))) { w ( i + 1 ) = w ( i ) + w ( i + 1 ) w ( i ) = "!" } } } for (i <- w) if (i == "!") w -= i w } println ( parser ( h ) ) val ops2: Seq[String] = ops.filter ( _ != ")" ) def toPostFix(w: ListBuffer[String]) { while (w.nonEmpty) { for (i <- w) { i match { case i if nums contains i => oS.push ( i ) w -= i println ( oS.stack ) println ( w ) case i if ops2 contains i => oS.push ( i ) w -= i println ( oS.stack ) println ( w ) case i if chars contains i => eS += i w -= i println ( oS.stack ) println ( w ) case i if i.length > 1 => eS += i w -= i println ( oS.stack ) println ( w ) case i if i == ")" => if (oS.peek ( ) != "(") { eS += oS.peek ( ) oS.pop ( ) w -= i println ( oS.stack ) println ( w ) } case _ => null } } } } toPostFix ( parser ( h ) ) println ( oS.stack ) println ( eS ) }
Editor Settings
Theme
Key bindings
Full width
Lines