NFAで数を補って1の数を偶数に調整する関数を作りました

精霊の箱 上: チューリングマシンをめぐる冒険』の最初の貧者の像と富者の像が元ネタです。nfa.rbはここに載せているのと同じです。像の裏に書いてある命令から設計図を作って、個々の命令を要素と見なした正規表現に変換して、それをポストフィックス記法にしたものをcompile関数に与えると、NFAに変換するので、それを実行して実行しています。

#!/usr/bin/env ruby
require './nfa.rb'
require 'minitest/autorun'

class MainTest < MiniTest::Test
  def test_rich_and_poor
    a = "00->"
    b = "11->"
    c = " 1->"
    d = " 0->"
    s = compile("#{a}#{b}#{a}*.#{b}.|*#{d}#{b}#{a}*.#{c}.|.")
    m = Machine.new(s)
    assert_equal "0101101", m.exec("010110 ")
  end
end