...
Run Format

Source file test/turing.go

Documentation: test

  // run
  
  // 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.
  
  // Test simulating a Turing machine, sort of.
  
  package main
  
  // brainfuck
  
  var p, pc int
  var a [30000]byte
  
  const prog = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.!"
  
  func scan(dir int) {
  	for nest := dir; dir*nest > 0; pc += dir {
  		switch prog[pc+dir] {
  		case ']':
  			nest--
  		case '[':
  			nest++
  		}
  	}
  }
  
  func main() {
  	r := ""
  	for {
  		switch prog[pc] {
  		case '>':
  			p++
  		case '<':
  			p--
  		case '+':
  			a[p]++
  		case '-':
  			a[p]--
  		case '.':
  			r += string(a[p])
  		case '[':
  			if a[p] == 0 {
  				scan(1)
  			}
  		case ']':
  			if a[p] != 0 {
  				scan(-1)
  			}
  		default:
  			if r != "Hello World!\n" {
  				panic(r)
  			}
  			return
  		}
  		pc++
  	}
  }
  

View as plain text