// $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++; } }