1
0
mirror of https://github.com/golang/go synced 2024-11-26 20:11:26 -07:00
go/test/turing.go
Rob Pike bc2f5f1dce fix bug depot:
1) fix print statements, panic statements (parentheses required)
	2) len is now allowed as a var name (bug053)

R=gri
OCL=14106
CL=14106
2008-08-11 22:07:49 -07:00

56 lines
974 B
Go

// $G $F.go && $L $F.$A && ./$A.out
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
// brainfuck
func main() {
var a [30000]byte;
prog := "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.!";
p := 0;
pc := 0;
for {
switch prog[pc] {
case '>':
p++;
case '<':
p--;
case '+':
a[p]++;
case '-':
a[p]--;
case '.':
print(string(a[p]));
case '[':
if a[p] == 0 {
for nest := 1; nest > 0; pc++ {
switch prog[pc+1] {
case ']':
nest--;
case '[':
nest++;
}
}
}
case ']':
if a[p] != 0 {
for nest := -1; nest < 0; pc-- {
switch prog[pc-1] {
case ']':
nest--;
case '[':
nest++;
}
}
}
default:
return;
}
pc++;
}
}