--------------090207040103080909040600 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Here is my solution. No fancy graphics, the kids didn't give me enough time for that ;) -Doug Seifert --------------090207040103080909040600 Content-Type: application/x-ruby; name utomaton.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename utomaton.rb" Y2xhc3MgQXV0b21hdG9uCiAgYXR0cl9hY2Nlc3NvciA6cnVsZV9udW1iZXIKICBhdHRyX3Jl YWRlciA6cnVsZV9tYXAKCiAgRklMTEVEX0NIQVIgPSAnIycKICBFTVBUWV9DSEFSID0gJzAn CgogICMgQ29uc3RydWN0IGEgbmV3IEF1dG9tYXRvbiB3aXRoIHRoZSBnaXZlbiBydWxlIG51 bWJlciBhbmQgaW5pdGlhbAogICMgbGluZSB3aWR0aAogIGRlZiBpbml0aWFsaXplKHJ1bGVf bnVtYmVyLCBpbml0aWFsX3N0YXRlKQogICAgQHJ1bGVfbnVtYmVyID0gcnVsZV9udW1iZXIK ICAgIEBjaGFycyA9IGluaXRpYWxfc3RhdGUubGVuZ3RoCiAgICBAbnVtID0gMAogICAgaW5p dGlhbF9zdGF0ZS5yZXZlcnNlLnNwbGl0KC8vKS5lYWNoX3dpdGhfaW5kZXggZG8gfGMsIGlk eHwKICAgICAgQG51bSArPSAyICoqIGlkeCBpZiAnMScgPT0gYwogICAgZW5kCiAgICBpbml0 aWFsaXplX3J1bGVfbWFwCiAgZW5kCgogICMgU2V0cyB1cCB0aGUgYXV0b21hdG9uIHJ1bGUg bWFwLiAgR2l2ZW4gYSAzIGJ5dGUgbmVpZ2hib3Job29kCiAgIyBhcyBhbiBpbnRlZ2VyLCB0 ZWxscyB3aGV0aGVyIHRoZSBuZXcgY2VudGVyIGNlbGwgaXMgZmlsbGVkIG9yIG5vdC4KICBk ZWYgaW5pdGlhbGl6ZV9ydWxlX21hcAogICAgQHJ1bGVfbWFwID0gW10KICAgIG4gPSBAcnVs ZV9udW1iZXIKICAgICgwLi43KS5lYWNoIGRvIHxpZHh8CiAgICAgIEBydWxlX21hcFtpZHhd ID0gbiAmIDEgIT0gMCA/IDEgOiAwCiAgICAgIG4gPSBuID4+IDEgdW5sZXNzIG4gPT0gMAog ICAgZW5kCiAgZW5kCgogICMgUnVuIHRoZSBhdXRvbWF0b24uICBCeSBkZWZhdWx0IHJ1bnMg MjAgaXRlcmF0aW9ucy4KICBkZWYgcnVuKGl0ZXJzID0gMjApCiAgICBjb2xzID0gQGNoYXJz ICsgaXRlcnMgKiAyCiAgICAoMC4uaXRlcnMpLmVhY2ggZG8gfGl8CiAgICAgIEBudW0gPSBw cmludF9saW5lKEBudW0sIEBjaGFycywgaSwgY29scykKICAgICAgQGNoYXJzICs9IDIKICAg IGVuZAogIGVuZAoKICAjIFByaW50IHRoZSBhdXRvbWF0b24gbGluZSBhbmQgcmV0dXJucyBu ZXh0IHZhbHVlIGFzIGFuIGludGVnZXIuICBUaGUKICAjIHZhbHVlIGlzIGNhbGN1bGF0ZWQg YnkgYXNzdW1pbmcgdGhlIGxpbmUgaXMgYSBiaW5hcnkgbnVtYmVyIHdpdGgKICAjIGZpbGxl ZCBjaGFyYWN0ZXJzIGJlaW5nIDEncyBhbmQgZW1wdHkgY2hhcmFjdGVycyBiZWluZyB6ZXJv cy4KICBkZWYgcHJpbnRfbGluZShudW0sIGNoYXJzLCBpdGVyLCBjb2xzKQogICAgCiAgICAj IEZpcnN0IGl0ZXIsIGp1c3QgcHJpbnQgbnVtIGFzIGEgYmluYXJ5CiAgICBpZiBpdGVyID09 IDAKICAgICAgI3B1dHMgIm51bSAje251bX0gaXRlciAje2l0ZXJ9IgogICAgICBwdXRzICgi JTAje2NoYXJzfWIiICUgbnVtKS5nc3ViKCIxIiwgRklMTEVEX0NIQVIpLmdzdWIoIjAiLCBF TVBUWV9DSEFSKS5jZW50ZXIoY29scykKICAgICAgcmV0dXJuIG51bQogICAgZW5kCgogICAg IyBzcGVjaWFsIGNhc2UsIG51bSA9IDAKICAgIGlmIG51bSA9PSAwCiAgICAgIHB1dHMgKEVN UFRZX0NIQVIgKiBjaGFycykuY2VudGVyKGNvbHMpCiAgICAgIHJldHVybiAwCiAgICBlbmQK CiAgICAjIHNoaWZ0IGl0IHR3aWNlIHRvIGdldCB0d28gdHJhaWxpbmcgemVyb3MKICAgIG51 bSA9IG51bSA8PCAyCgogICAgIyB0cmFjayByZXR1cm4gdmFsdWUKICAgIHJldCA9IDAKCiAg ICAjIGNhbGN1bGF0ZSBhbmQgcHJpbnQgdGhlIGxpbmUKICAgIGxpbmUgPSAiIgogICAgKDAu LmNoYXJzLTEpLmVhY2ggZG8gfGNvdW50fAogICAgICAjIG1hc2sgb2ZmIGV2ZXJ5dGhpbmcg YnV0IHRoZSBsYXN0IHRocmVlIGJpdHMgdG8gZ2V0CiAgICAgICMgdGhlIGluZGV4IGludG8g dGhlIHJ1bGVfbWFwCiAgICAgIGlkeCA9IG51bSAmIDcKICAgICAgaWYgQHJ1bGVfbWFwW2lk eF0gPT0gMQogICAgICAgIGxpbmUgPDwgRklMTEVEX0NIQVIKICAgICAgICByZXQgKz0gMiAq KiBjb3VudAogICAgICBlbHNlCiAgICAgICAgbGluZSA8PCBFTVBUWV9DSEFSCiAgICAgIGVu ZAogICAgICAjIFNoaWZ0IHRvIHRoZSBuZXh0IHBvc2l0aW9uCiAgICAgIG51bSA9IG51bSA+ PiAxCiAgICBlbmQKCiAgICAjIFJldmVyc2UgdGhlIGxpbmUgYW5kIHByaW50IGl0IGNlbnRl cmVkCiAgICBwdXRzIGxpbmUucmV2ZXJzZS5jZW50ZXIoY29scykKCiAgICAjIFJldHVybiB0 aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgbGluZQogICAgcmV0dXJuIHJldAogIGVuZAplbmQK CgppZiBfX0ZJTEVfXyA9PSAkMCAKICByZXF1aXJlICdvc3RydWN0JwogIHJlcXVpcmUgJ29w dHBhcnNlJwoKICBvcHRpb25zID0gT3BlblN0cnVjdC5uZXcKICBvcHRpb25zLnJ1bGVfbnVt ID0gbmlsCiAgb3B0aW9ucy5zdGFydF9zdGF0ZSA9ICcxJwogIG9wdGlvbnMuaXRlcmF0aW9u cyA9IDIwCiAgb3B0aW9ucy52ZXJib3NlID0gZmFsc2UKCiAgb3B0cyA9IE9wdGlvblBhcnNl ci5uZXcgZG8gfG9wdHN8CiAgICBvcHRzLmJhbm5lciA9ICJVc2FnZTogcnVieSBhdXRvbWF0 YS5yYiBbb3B0aW9uc10iCiAgICBvcHRzLnNlcGFyYXRvciAiIgoKICAgIG9wdHMub24oIi1y IiwgIi0tcnVsZS1udW1iZXIgTlVNQkVSIiwKICAgICAgIlNldCB0aGUgYXV0b21hdGEgcnVs ZSBudW1iZXIsIDAtMjU1LiIpIGRvIHxybnwKICAgICAgICBvcHRpb25zLnJ1bGVfbnVtID0g cm4udG9faQogICAgZW5kCgogICAgb3B0cy5vbigiLWMiLCAiLS1jZWxsLXN0YXRlIEJJTkFS WV9TVFJJTkciLAogICAgICAiU2V0IHRoZSBhdXRvbWF0YSBzdGFydGluZyBzdGF0ZSwgZGVm YXVsdHMgdG8gMS4iKSBkbyB8c258CiAgICAgICAgb3B0aW9ucy5zdGFydF9zdGF0ZSA9IHNu CiAgICBlbmQKCiAgICBvcHRzLm9uKCItcyIsICItLXN0ZXBzIE5VTUJFUiIsCiAgICAgICJT ZXQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLCBkZWZhdWx0cyB0byAyMC4iKSBkbyB8aXwK ICAgICAgICBvcHRpb25zLml0ZXJhdGlvbnMgPSBpLnRvX2kKICAgIGVuZAoKICAgIG9wdHMu b24oIi12IiwgIi0tdmVyYm9zZSIsCiAgICAgICJUdXJuIG9uIHZlcmJvc2UgZGlhZ25vc3Rp YyBvdXRwdXQuIikgZG8KICAgICAgICBvcHRpb25zLnZlcmJvc2UgPSB0cnVlCiAgICBlbmQK CiAgICBvcHRzLm9uX3RhaWwoIi1oIiwgIi0taGVscCIsICJTaG93IHRoaXMgbWVzc2FnZSIp IGRvCiAgICAgIHB1dHMgb3B0cwogICAgICBleGl0IDEKICAgIGVuZAogIGVuZAoKICBvcHRz LnBhcnNlIShBUkdWKQoKICBpZiBvcHRpb25zLnJ1bGVfbnVtLm5pbD8KICAgIHB1dHMgIlJ1 bGUgbnVtYmVyIG11c3QgYmUgc3BlY2lmaWVkLiIKICAgIHB1dHMgb3B0cwogICAgZXhpdCAy CiAgZW5kCgogIGlmIG9wdGlvbnMucnVsZV9udW0gPCAwIHx8IG9wdGlvbnMucnVsZV9udW0g PiAyNTUKICAgIHB1dHMgIlJ1bGUgbnVtYmVyIG11c3QgYmUgPj0wIGFuZCA8PSAyNTUuIgog ICAgcHV0cyBvcHRzCiAgICBleGl0IDMKICBlbmQKCiAgYSA9IEF1dG9tYXRvbi5uZXcob3B0 aW9ucy5ydWxlX251bSwgb3B0aW9ucy5zdGFydF9zdGF0ZSkKICBpZiBvcHRpb25zLnZlcmJv c2UKICAgIHB1dHMgInN0YXJ0IHN0YXRlID0gJyN7b3B0aW9ucy5zdGFydF9zdGF0ZX0nIgog ICAgcHV0cyAicnVsZV9tYXA6IgogICAgKDAuLjcpLmVhY2ggeyB8bnwgcHJpbnQgIiUwM2Ii ICUgbjsgcHJpbnQgIiAiIH0KICAgIHB1dHMKICAgIGEucnVsZV9tYXAuZWFjaCB7IHxufCBw cmludCAiJTNiIiAlIG47IHByaW50ICIgIiB9CiAgICBwdXRzCiAgZW5kCiAgYS5ydW4ob3B0 aW9ucy5pdGVyYXRpb25zKQplbmQK --------------090207040103080909040600--