blob: 462bb916843f6d8892036da6919ffc376fbe5446 [file] [log] [blame]
Robert Griesemer9bc7b082008-05-08 17:12:15 -07001// $G $F.go && $L $F.$A && ./$A.out
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
7package main
8
9// brainfuck
10
11func main() {
Rob Pikec0c30252008-05-15 15:20:59 -070012 var a [30000]byte;
Rob Pike126150d2008-06-06 13:28:03 -070013 prog := "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.!";
Rob Pikec0c30252008-05-15 15:20:59 -070014 p := 0;
15 pc := 0;
16 for {
17 switch prog[pc] {
18 case '>':
19 p++;
20 case '<':
21 p--;
22 case '+':
23 a[p]++;
24 case '-':
25 a[p]--;
26 case '.':
Rob Pikebc2f5f12008-08-11 22:07:49 -070027 print(string(a[p]));
Rob Pikec0c30252008-05-15 15:20:59 -070028 case '[':
29 if a[p] == 0 {
30 for nest := 1; nest > 0; pc++ {
31 switch prog[pc+1] {
32 case ']':
33 nest--;
34 case '[':
35 nest++;
36 }
37 }
38 }
39 case ']':
40 if a[p] != 0 {
41 for nest := -1; nest < 0; pc-- {
42 switch prog[pc-1] {
43 case ']':
44 nest--;
45 case '[':
46 nest++;
47 }
48 }
49 }
50 default:
51 return;
52 }
53 pc++;
54 }
Robert Griesemer9bc7b082008-05-08 17:12:15 -070055}