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