|      1 // Part 1 about an Interpreter for the Brainf*** language |      1 // Part 1 about an Interpreter for the Brainf*** language | 
|      2 //======================================================== |      2 //======================================================== | 
|      3  |      3  | 
|         |      4  | 
|      4 object CW10a {   |      5 object CW10a {   | 
|      5  |         | 
|      6 type Mem = Map[Int, Int] |         | 
|      7  |         | 
|      8  |      6  | 
|      9 import io.Source |      7 import io.Source | 
|     10 import scala.util._ |      8 import scala.util._ | 
|         |      9  | 
|         |     10  | 
|         |     11 type Mem = Map[Int, Int] | 
|         |     12  | 
|     11  |     13  | 
|     12 // (1) Write a function that takes a file name as argument and |     14 // (1) Write a function that takes a file name as argument and | 
|     13 // and requests the corresponding file from disk. It returns the |     15 // and requests the corresponding file from disk. It returns the | 
|     14 // content of the file as a String. If the file does not exists, |     16 // content of the file as a String. If the file does not exists, | 
|     15 // the function should return the empty string. |     17 // the function should return the empty string. | 
|     90       case '<' => (pc + 1, mp - 1, mem) |     92       case '<' => (pc + 1, mp - 1, mem) | 
|     91       case '+' => (pc + 1, mp, write(mem, mp, sread(mem, mp) + 1)) |     93       case '+' => (pc + 1, mp, write(mem, mp, sread(mem, mp) + 1)) | 
|     92       case '-' => (pc + 1, mp, write(mem, mp, sread(mem, mp) - 1)) |     94       case '-' => (pc + 1, mp, write(mem, mp, sread(mem, mp) - 1)) | 
|     93       case '.' => { print(sread(mem, mp).toChar); (pc + 1, mp, mem) } |     95       case '.' => { print(sread(mem, mp).toChar); (pc + 1, mp, mem) } | 
|     94       case ',' => (pc + 1, mp, write(mem, mp, Console.in.read().toByte)) |     96       case ',' => (pc + 1, mp, write(mem, mp, Console.in.read().toByte)) | 
|         |     97       //case ',' => (pc + 1, mp, write(mem, mp, scala.io.StdIn.readByte())) | 
|     95       case '['  =>  |     98       case '['  =>  | 
|     96 	if (sread(mem, mp) == 0) (jumpRight(prog, pc + 1, 0), mp, mem) else (pc + 1, mp, mem)  |     99 	if (sread(mem, mp) == 0) (jumpRight(prog, pc + 1, 0), mp, mem) else (pc + 1, mp, mem)  | 
|     97       case ']'  =>  |    100       case ']'  =>  | 
|     98 	if (sread(mem, mp) != 0) (jumpLeft(prog, pc - 1, 0), mp, mem) else (pc + 1, mp, mem)  |    101 	if (sread(mem, mp) != 0) (jumpLeft(prog, pc - 1, 0), mp, mem) else (pc + 1, mp, mem)  | 
|     99       case _ => (pc + 1, mp, mem) |    102       case _ => (pc + 1, mp, mem) | 
|    170 //outputs the square numbers up to 10000 |    173 //outputs the square numbers up to 10000 | 
|    171 run("""++++[>+++++<-]>[<+++++>-]+<+[ |    174 run("""++++[>+++++<-]>[<+++++>-]+<+[ | 
|    172     >[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+ |    175     >[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+ | 
|    173     >>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<] |    176     >>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<] | 
|    174     <<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]""") |    177     <<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]""") | 
|         |    178  | 
|    175  |    179  | 
|    176 //collatz numbers (needs a number to be typed in) |    180 //collatz numbers (needs a number to be typed in) | 
|    177 run(""">,[[----------[ |    181 run(""">,[[----------[ | 
|    178       >>>[>>>>]+[[-]+<[->>>>++>>>>+[>>>>]++[->+<<<<<]]<<<] |    182       >>>[>>>>]+[[-]+<[->>>>++>>>>+[>>>>]++[->+<<<<<]]<<<] | 
|    179       ++++++[>------<-]>--[>>[->>>>]+>+[<<<<]>-],<]>]>>>++>+>>[ |    183       ++++++[>------<-]>--[>>[->>>>]+>+[<<<<]>-],<]>]>>>++>+>>[ |