Gudo

From Esolang
Jump to navigation Jump to search

Gudo is Turing-complete 2-dimensional language.

Commands

Gudo consists of two commands ( / and @ ) and 5 classes. Every movement adds 1 to class.

class 1:
 / reflect direction, set class to 0
 @ reflect to other way, set class to 0

class 2:
 @ increment, class = 1
 / return point, class = 0

class 3:
 / jump to topmost return point if cell is true, class = 0
   ends program if no return point
 @ decrement, class = 2

class 4:
 / next cell, class = 3
 @ previous cell, class = 3

class 5:
 / print cell, class = 3
 @ input cell, class = 3

Brainfuck to Gudo

Brainfuck can easily be converted to Gudo. I made converter with Perl.

if (($#ARGV + 1) != 2) {
  print "Usage: perl bftogudo.pl input output\n";
  exit;
}

my $bf;
open(I, "<", $ARGV[0]);

while () {
  $bf = "$bf$_";
}
close(I);

my $gudo = ;
my $class = 1;
my $dir = 0;

while ($bf =~ /(.)/g) {
  if ($1 =~ /^\+$/) {
    $gudo = "$gudo @    ";
  }
  if ($1 =~ /^\-$/) {
    $gudo = "$gudo  @   ";
  }
  if ($1 =~ /^\<$/) {
    $gudo = "$gudo   @  ";
  }
  if ($1 =~ /^\>$/) {
    $gudo = "$gudo   /  ";
  }
  if ($1 =~ /^\[$/) {
    $gudo = "$gudo /";
  }
  if ($1 =~ /^\]$/) {
    $gudo = "$gudo  /";
  }
  if ($1 =~ /^\.$/) {
    $gudo = "$gudo    /  ";
  }
  if ($1 =~ /^\,$/) {
    $gudo = "$gudo    @  ";
  }
}
$gudo = "$gudo  /";

print $gudo;

open(TARGET, ">", $ARGV[1]);
print TARGET $gudo;
close(TARGET);