]> Cypherpunks.ru repositories - gostls13.git/commitdiff
test/turing: refactor
authorRob Pike <r@golang.org>
Sat, 4 Sep 2010 00:40:00 +0000 (10:40 +1000)
committerRob Pike <r@golang.org>
Sat, 4 Sep 2010 00:40:00 +0000 (10:40 +1000)
R=gri
CC=golang-dev
https://golang.org/cl/2116043

test/turing.go

index 462bb916843f6d8892036da6919ffc376fbe5446..0af39de8b203d692c27f28db99be37629903de02 100644 (file)
@@ -8,48 +8,45 @@ package main
 
 // brainfuck
 
+var p, pc int
+var a [30000]byte
+const prog = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.!"
+
+func scan(dir int) {
+       for nest := dir; dir*nest > 0; pc += dir {
+               switch prog[pc+dir] {
+                       case ']':
+                               nest--
+                       case '[':
+                               nest++
+               }
+       }
+}
+
 func main() {
-       var a [30000]byte;
-       prog := "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.!";
-       p := 0;
-       pc := 0;
        for {
                switch prog[pc] {
                        case '>':
-                                       p++;
+                                       p++
                        case '<':
-                                       p--;
+                                       p--
                        case '+':
-                                       a[p]++;
+                                       a[p]++
                        case '-':
-                                       a[p]--;
+                                       a[p]--
                        case '.':
-                                       print(string(a[p]));
+                                       print(string(a[p]))
                        case '[':
                                if a[p] == 0 {
-                                       for nest := 1; nest > 0; pc++ {
-                                               switch prog[pc+1] {
-                                                       case ']':
-                                                               nest--;
-                                                       case '[':
-                                                               nest++;
-                                               }
-                                       }
+                                       scan(1)
                                }
                        case ']':
                                if a[p] != 0 {
-                                       for nest := -1; nest < 0; pc-- {
-                                               switch prog[pc-1] {
-                                                       case ']':
-                                                               nest--;
-                                                       case '[':
-                                                               nest++;
-                                               }
-                                       }
+                                       scan(-1)
                                }
                        default:
-                                       return;
+                                       return
                }
-               pc++;
+               pc++
        }
 }