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