Advertisement
poiffu

Untitled

Nov 19th, 2014
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.39 KB | None | 0 0
  1. import java.io.PrintWriter
  2. import scala.io.Source._
  3. import scala.Some
  4. import scala.collection.{mutable => m}
  5.  
  6. /**
  7.  * @author sugak andrey
  8.  */
  9. object Task1 {
  10.   val parser = new ExprParser()
  11.   //  var data = new m.HashMap[Expr, m.Set[(Implication, Int)]]() with m.MultiMap[Expr, (Implication, Int)]
  12.   var ctx = m.HashMap[Expr, (Implication, Int)]()
  13.   var stored = m.HashMap[Expr, (Expr, Int)]()
  14.  
  15.   def isAxiom(expr: Expr): Option[Axiom] = expr match {
  16.     case Implication(a, Implication(_, b)) if a == b => Some(Axiom(1))
  17.     case Implication(Implication(a, b), Implication(Implication(c, Implication(d, e)), Implication(f, g)))
  18.       if (a, b, e) == (c, d, g) && a == f => Some(Axiom(2))
  19.     case Implication(a, Implication(b, Conj(c, d))) if (a, b) ==(c, d) => Some(Axiom(3))
  20.     case Implication(Conj(a, _), c) if a == c => Some(Axiom(4))
  21.     case Implication(Conj(_, b), c) if b == c => Some(Axiom(5))
  22.     case Implication(a, Disj(b, c)) if a == b => Some(Axiom(6))
  23.     case Implication(a, Disj(b, c)) if a == c => Some(Axiom(7))
  24.     case Implication(Implication(a, b), Implication(Implication(c, d), Implication(Disj(e, f), g)))
  25.       if (a, b, c) == (e, g, f) && b == d => Some(Axiom(8))
  26.     case Implication(Implication(a, b), Implication(Implication(c, Negation(d)), Negation(e)))
  27.       if (a, b) == (c, d) && a == e => Some(Axiom(9))
  28.     case Implication(Negation(Negation(a)), b) if a == b => Some(Axiom(10))
  29.     case _ => None
  30.   }
  31.  
  32.   def MP(e: Expr): Reason = {
  33.     ctx.get(e) match {
  34.       case Some((impl: Implication, i: Int)) => stored.get(impl.lhs) match {
  35.         case Some((x: Expr, j: Int)) => ModusPonens(j + 1, i + 1)
  36.         case _ => Mistake()
  37.       }
  38.       case _ => Mistake()
  39.     }
  40.   }
  41.  
  42.   def showReason(e: Expr): String = isAxiom(e) match {
  43.     case Some(axiom) => axiom.toString
  44.     case _ => MP(e).toString
  45.   }
  46.  
  47.   def saveEntries(entry: (Expr, Int)): Unit = {
  48.     stored += (entry._1 -> entry)
  49.     entry._1 match {
  50.       case i@Implication(_, second) => ctx += (second -> (i, entry._2 ))
  51.       case _ => None
  52.     }
  53.   }
  54.  
  55.   def process(s: (String, Int)): String = {
  56.     val e = parser.parse(s._1).get
  57.     saveEntries(e, s._2)
  58.     s"${s._1} ${showReason(e)}"
  59.   }
  60.  
  61.   def main(args: Array[String]) {
  62.     val out = new PrintWriter("out1.txt")
  63.     fromFile("in.txt").getLines().zipWithIndex.map(process).foreach(s => out.write(s + "\n"))
  64.     out.close()
  65.   }
  66.  
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement