#!/usr/bin/ruby## Aubergine -- Programmation plutt machine et obscure#$a = 0$b = 0$i = 0$stuff = readlines.join('').split('').collect { |c| c[0] }$stufflen = $stuff.lengthdef oops code = $stuff[$i,3].collect { |c| (c >= 0 or c <= 255) ? c.chr : ' ' }.join('') puts "Error: a=%d, b=%d, i=%d, code=%s" % [$a, $b, $i, code] exit 1enddef from(x) thing = case $stuff[x] when ?a $a when ?A oops if $a < 0 or $a >= $stufflen $stuff[$a] when ?b $b when ?B oops if $b < 0 or $b >= $stufflen $stuff[$b] when ?i $i when ?o STDIN.getc when ?1 1 else oops end return thingendwhile ($i >= 0) and ($i < $stufflen - 3) case $stuff[$i] when ?= case $stuff[$i+1] when ?a $a = from($i+2) when ?A oops if $a < 0 or $a >= $stufflen $stuff[$a] = from($i+2) when ?b $b = from($i+2) when ?B oops if $b < 0 or $b >= $stufflen $stuff[$b] = from($i+2) when ?i $i = from($i+2) when ?o out = from($i+2) oops if out < 0 or out > 255 print out.chr else oops end when ?+ case $stuff[$i+1] when ?a $a += from($i+2) when ?A oops if $a < 0 or $a >= $stufflen $stuff[$a] += from($i+2) when ?b $b += from($i+2) when ?B oops if $b < 0 or $b >= $stufflen $stuff[$b] += from($i+2) when ?i $i += from($i+2) else oops end when ?- case $stuff[$i+1] when ?a $a -= from($i+2) when ?A oops if $a < 0 or $a >= $stufflen $stuff[$a] -= from($i+2) when ?b $b -= from($i+2) when ?B oops if $b < 0 or $b >= $stufflen $stuff[$b] -= from($i+2) when ?i $i -= from($i+2) else oops end when ?: $i = from($i+1) if from($i+2) != 0 else oops end $i += 3end