main_solution5/bfc.scala
author Christian Urban <christian.urban@kcl.ac.uk>
Mon, 21 Jul 2025 16:38:07 +0100
changeset 494 253d1ccb65de
parent 482 769bda18a43d
permissions -rw-r--r--
updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
     1
// Main Part 5 about a "Compiler" for the Brainf*** language
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
     2
//============================================================
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
     3
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     4
404
bf20a9fa5c29 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 399
diff changeset
     5
object M5b {
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     6
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     7
// !!! Copy any function you need from file bf.scala !!!
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     8
//
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     9
// If you need any auxiliary function, feel free to 
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    10
// implement it, but do not make any changes to the
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    11
// templates below.
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    12
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    13
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    14
// DEBUGGING INFORMATION FOR COMPILERS!!!
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    15
//
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    16
// Compiler, even real ones, are fiendishly difficult to get
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    17
// to produce correct code. One way to debug them is to run
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    18
// example programs ``unoptimised''; and then optimised. Does
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    19
// the optimised version still produce the same result?
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    20
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    21
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    22
// for timing purposes
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    23
def time_needed[T](n: Int, code: => T) ={
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    24
  val start = System.nanoTime()
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    25
  for (i <- 0 until n) code
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    26
  val end = System.nanoTime()
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    27
  (end - start)/(n * 1.0e9)
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    28
}
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    29
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    30
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    31
type Mem = Map[Int, Int]
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    32
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    33
import io.Source
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    34
import scala.util._
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    35
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    36
// ADD YOUR CODE BELOW
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    37
//======================
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    38
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    39
def compute(prog: String, pc: Int, mp: Int, mem: Mem) : Mem = 
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    40
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    41
    if(pc<0 || pc>= prog.length())
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    42
        mem
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    43
    else
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    44
        prog.charAt(pc) match
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    45
            case '>' => compute(prog, pc+1, mp+1, mem)
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    46
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    47
            case '<' => compute(prog, pc+1, mp-1, mem)
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    48
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    49
            case '+' => compute(prog, pc+1, mp, write(mem, mp, sread(mem, mp)+1))
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    50
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    51
            case '-' => compute(prog, pc+1, mp, write(mem, mp, sread(mem, mp)-1))
233
38ea26f227af updated
Christian Urban <urbanc@in.tum.de>
parents: 232
diff changeset
    52
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    53
            case '.' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    54
                compute(prog, pc+1, mp, mem)
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    55
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    56
            case '[' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    57
                if(sread(mem, mp) == 0) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    58
                    compute(prog, jumpRight(prog, pc+1, 0), mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    59
                else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    60
                    compute(prog, pc+1, mp, mem) 
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    61
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    62
            case ']' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    63
                if(sread(mem, mp) == 0) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    64
                    compute(prog, pc+1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    65
                else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    66
                    compute(prog, jumpLeft(prog, pc-1, 0), mp, mem) 
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    67
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    68
            case _ => compute(prog, pc + 1, mp, mem)
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    69
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    70
233
38ea26f227af updated
Christian Urban <urbanc@in.tum.de>
parents: 232
diff changeset
    71
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    72
def run(prog: String, m: Mem = Map()) = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    73
    compute(prog, 0, 0, m)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    74
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    75
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    76
// (6) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    77
def jumpRight(prog: String, pc: Int, level: Int) : Int = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    78
    if (pc<0 || pc>= prog.length() )
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    79
        pc
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    80
    else
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    81
        prog(pc) match
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    82
            case '[' => jumpRight(prog, pc+1, level+1)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    83
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    84
            case ']' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    85
                {
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    86
                    if (level == 0)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    87
                        pc+1           
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    88
                    else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    89
                        jumpRight(prog, pc+1, level-1)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    90
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    91
                }
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    92
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    93
            case _ => jumpRight(prog, pc+1, level)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    94
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    95
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    96
def jumpLeft(prog: String, pc: Int, level: Int) : Int = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    97
    if (pc<0 || pc>= prog.length() )
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    98
          pc
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
    99
    else
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   100
        prog(pc) match
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   101
            case '[' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   102
                {
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   103
                    if (level == 0)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   104
                        pc+1 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   105
                    else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   106
                        jumpLeft(prog, pc-1, level-1)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   107
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   108
                }
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   109
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   110
            case ']' => jumpLeft(prog, pc-1, level+1)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   111
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   112
            case _ => jumpLeft(prog, pc-1, level)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   113
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   114
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   115
def jtable(pg: String) : Map[Int, Int] = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   116
    val b1 = (0 until pg.length)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   117
      .filter(n => pg.substring(n, n+1) == "[")
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   118
      .map(n => n -> jumpRight(pg, n + 1, 0)).toMap
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   119
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   120
    val b2 = (0 until pg.length)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   121
       .filter(n => pg.substring(n, n+1) == "]")
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   122
       .map(n => n -> jumpLeft(pg, n-1, 0)).toMap
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   123
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   124
    b1++b2
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   125
233
38ea26f227af updated
Christian Urban <urbanc@in.tum.de>
parents: 232
diff changeset
   126
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   127
// testcase
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   128
//
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   129
// jtable("""+++++[->++++++++++<]>--<+++[->>++++++++++<<]>>++<<----------[+>.>.<+<]""")
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   130
// =>  Map(69 -> 61, 5 -> 20, 60 -> 70, 27 -> 44, 43 -> 28, 19 -> 6)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   131
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   132
def load_bff(name: String) : String =  
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   133
    try 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   134
       Source.fromFile(name).mkString
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   135
    catch
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   136
        case e: Exception => ""
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   137
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   138
def sread(mem: Mem, mp: Int) : Int = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   139
    mem.getOrElse(mp,0)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   140
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   141
def write(mem: Mem, mp: Int, v: Int) : Mem = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   142
    mem + (mp -> v)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   143
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   144
def compute2(pg: String, tb: Map[Int, Int], pc: Int, mp: Int, mem: Mem) : Mem = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   145
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   146
    if(pc<0 || pc>= pg.length())
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   147
        mem
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   148
    else
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   149
        pg.charAt(pc) match
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   150
            case '>' => compute2(pg,tb, pc+1, mp+1, mem)
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   151
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   152
            case '<' => compute2(pg,tb, pc+1, mp-1, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   153
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   154
            case '+' => compute2(pg,tb, pc+1, mp, write(mem, mp, sread(mem, mp)+1))
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   155
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   156
            case '-' => compute2(pg,tb, pc+1, mp, write(mem, mp, sread(mem, mp)-1))
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   157
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   158
            case '.' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   159
                compute2(pg,tb, pc+1, mp, mem)
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   160
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   161
            case '[' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   162
                if(sread(mem, mp) == 0) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   163
                    compute2(pg, tb, tb(pc), mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   164
                else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   165
                    compute2(pg, tb, pc+1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   166
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   167
            case ']' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   168
                if(sread(mem, mp) == 0) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   169
                    compute2(pg, tb, pc+1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   170
                else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   171
                    compute2(pg, tb, tb(pc), mp, mem)  
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   172
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   173
            case _ => compute2(pg,tb,pc + 1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   174
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   175
def run2(pg: String, m: Mem = Map()) = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   176
    compute2(pg, jtable(pg), 0, 0, m)
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   177
233
38ea26f227af updated
Christian Urban <urbanc@in.tum.de>
parents: 232
diff changeset
   178
// testcases
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   179
// time_needed(1, run2(load_bff("benchmark.bf")))
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   180
// time_needed(1, run2(load_bff("sierpinski.bf")))
233
38ea26f227af updated
Christian Urban <urbanc@in.tum.de>
parents: 232
diff changeset
   181
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   182
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   183
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   184
// (7) 
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   185
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   186
def optimise(s: String) : String = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   187
    val notCommand = """[^<>+\-.\[\]]""".r
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   188
    val occurrence = """\[-\]""".r
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   189
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   190
    val deleted = notCommand.replaceAllIn(s, "")
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   191
    occurrence.replaceAllIn(deleted, "0")
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   192
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   193
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   194
def compute3(pg: String, tb: Map[Int, Int], pc: Int, mp: Int, mem: Mem) : Mem = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   195
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   196
    if(pc<0 || pc>= pg.length())
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   197
        mem
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   198
    else
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   199
        pg.charAt(pc) match
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   200
            case '>' => compute3(pg,tb, pc+1, mp+1, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   201
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   202
            case '<' => compute3(pg,tb, pc+1, mp-1, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   203
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   204
            case '+' => compute3(pg,tb, pc+1, mp, write(mem, mp, sread(mem, mp)+1))
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   205
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   206
            case '-' => compute3(pg,tb, pc+1, mp, write(mem, mp, sread(mem, mp)-1))
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   207
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   208
            case '.' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   209
                compute3(pg,tb, pc+1, mp, mem)
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   210
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   211
            case '[' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   212
                if(sread(mem, mp) == 0) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   213
                    compute3(pg, tb, tb(pc), mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   214
                else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   215
                    compute3(pg, tb, pc+1, mp, mem)
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   216
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   217
            case ']' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   218
                if(sread(mem, mp) == 0) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   219
                    compute3(pg, tb, pc+1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   220
                else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   221
                    compute3(pg, tb, tb(pc), mp, mem)  
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   222
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   223
            case _ => compute3(pg,tb,pc + 1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   224
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   225
def run3(pg: String, m: Mem = Map()) = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   226
    val opt = optimise(pg)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   227
    compute3(opt, jtable(opt), 0, 0, m)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   228
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   229
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   230
234
c51305a2217f updated
Christian Urban <urbanc@in.tum.de>
parents: 233
diff changeset
   231
// testcases
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   232
//
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   233
// optimise(load_bff("benchmark.bf"))          // should have inserted 0's
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   234
// optimise(load_bff("mandelbrot.bf")).length  // => 11205
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   235
// 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   236
// time_needed(1, run3(load_bff("benchmark.bf")))
232
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   237
0855c4478f27 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   238
384
6e1237691307 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 348
diff changeset
   239
494
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   240
// (8)  
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   241
// consider if the char does not exist\\
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   242
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   243
def counterHelper(chars: List[Char], consec: Int, charToCount: Char): Int =
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   244
    chars match 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   245
          case head :: tail if ((head == charToCount && head == tail.headOption.getOrElse(' ')) )=>
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   246
            counterHelper(tail, consec + 1, charToCount)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   247
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   248
          case head :: tail if (head == charToCount && head != tail.headOption.getOrElse(' '))=>
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   249
            consec+1
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   250
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   251
          case head :: tail if (head != charToCount && head != tail.headOption.getOrElse(' '))=>
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   252
            consec
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   253
   
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   254
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   255
def counter(input: String, charToCount: Char): Int = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   256
    counterHelper(input.toList, 0, charToCount)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   257
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   258
def handleCharacter(orgin: String, newstr: String, sindex: Int, letterMap: Map[Int, Char], charToCount: Char): String = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   259
    val num = counter(orgin.substring(sindex), charToCount)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   260
    val lett = letterMap.getOrElse(num, "")
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   261
    combineHelper(orgin, newstr + charToCount + lett, sindex + num, letterMap)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   262
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   263
def combineHelper(orgin: String, newstr: String, sindex: Int, letterMap: Map[Int, Char] ): String = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   264
    if (sindex >= orgin.length())
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   265
      newstr
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   266
    else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   267
      val result = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   268
        orgin.charAt(sindex) match 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   269
            case '>' => handleCharacter(orgin, newstr, sindex, letterMap, '>')
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   270
            case '<' => handleCharacter(orgin, newstr, sindex, letterMap, '<')
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   271
            case '+' => handleCharacter(orgin, newstr, sindex, letterMap, '+')
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   272
            case '-' => handleCharacter(orgin, newstr, sindex, letterMap, '-')
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   273
            case _ => combineHelper(orgin, newstr + orgin.charAt(sindex), sindex + 1, letterMap)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   274
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   275
      result
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   276
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   277
def combine(s: String) : String = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   278
    val letterMap = (1 to 26).zip('A' to 'Z').toMap
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   279
    combineHelper(s,"",0, letterMap)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   280
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   281
// testcase
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   282
// combine(load_bff("benchmark.bf"))
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   283
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   284
def compute4(pg: String, tb: Map[Int, Int], pc: Int, mp: Int, mem: Mem) : Mem = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   285
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   286
    if(pc<0 || pc>= pg.length())
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   287
            mem
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   288
    else
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   289
        pg.charAt(pc) match
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   290
            case '>' => compute4(pg,tb, pc+1, mp+1, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   291
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   292
            case '<' => compute4(pg,tb, pc+1, mp-1, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   293
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   294
            case '+' => compute4(pg,tb, pc+1, mp, write(mem, mp, sread(mem, mp)+1))
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   295
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   296
            case '-' => compute4(pg,tb, pc+1, mp, write(mem, mp, sread(mem, mp)-1))
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   297
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   298
            case '.' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   299
                compute4(pg,tb, pc+1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   300
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   301
            case '[' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   302
                if(sread(mem, mp) == 0) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   303
                    compute4(pg, tb, tb(pc), mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   304
                else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   305
                    compute4(pg, tb, pc+1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   306
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   307
            case ']' => 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   308
                if(sread(mem, mp) == 0) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   309
                    compute4(pg, tb, pc+1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   310
                else 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   311
                    compute4(pg, tb, tb(pc), mp, mem)  
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   312
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   313
            case _ => compute4(pg,tb,pc + 1, mp, mem)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   314
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   315
// should call first optimise and then combine on the input string
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   316
//
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   317
def run4(pg: String, m: Mem = Map()) = 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   318
    val opt = optimise(pg)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   319
    val com= combine(opt)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   320
    compute4(com, jtable(com), 0, 0, m)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   321
    
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   322
 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   323
// testcases
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   324
// combine(optimise(load_bff("benchmark.bf"))) // => """>A+B[<A+M>A-A]<A[[....."""
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   325
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   326
// testcases (they should now run much faster)
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   327
// time_needed(1, run4(load_bff("benchmark.bf")))
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   328
// time_needed(1, run4(load_bff("sierpinski.bf"))) 
253d1ccb65de updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 482
diff changeset
   329
// time_needed(1, run4(load_bff("mandelbrot.bf")))
384
6e1237691307 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 348
diff changeset
   330
6e1237691307 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 348
diff changeset
   331
290
2186e204a26c updated
Christian Urban <urbanc@in.tum.de>
parents: 251
diff changeset
   332
}
336
25d9c3b2bc99 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 290
diff changeset
   333
482
769bda18a43d updated jars
Christian Urban <christian.urban@kcl.ac.uk>
parents: 481
diff changeset
   334