1// run 2 3// Copyright 2009 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// Test simulating a Turing machine, sort of. 8 9package main 10 11// brainfuck 12 13var p, pc int 14var a [30000]byte 15 16const prog = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.!" 17 18func scan(dir int) { 19 for nest := dir; dir*nest > 0; pc += dir { 20 switch prog[pc+dir] { 21 case ']': 22 nest-- 23 case '[': 24 nest++ 25 } 26 } 27} 28 29func main() { 30 r := "" 31 for { 32 switch prog[pc] { 33 case '>': 34 p++ 35 case '<': 36 p-- 37 case '+': 38 a[p]++ 39 case '-': 40 a[p]-- 41 case '.': 42 r += string(a[p]) 43 case '[': 44 if a[p] == 0 { 45 scan(1) 46 } 47 case ']': 48 if a[p] != 0 { 49 scan(-1) 50 } 51 default: 52 if r != "Hello World!\n" { 53 panic(r) 54 } 55 return 56 } 57 pc++ 58 } 59} 60