--------------040703040306080602010409 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Here's my first attempt to a ruby quiz :) I take a look at what is happening here all weeks since a certain amount of time now but have never posted a solution. First I'd like to say that I found the last week's quiz very interesting even if there was only a small participation. I wish I could have sent a solution but I didn't have the time for this. So, back to this week's quiz, my solution is simply a breadth-first tree walk. I believe there may be a simplier way to solve this but that's what I came with and it works. So I'm really happy with it :) However, even with the code part, I think it could be more rubyist, and so, prettier to read. Any comments on it are welcome. Thanks a lot for this quiz. I'm waiting for the other's solution and of course for the next quiz. Ghislain --------------040703040306080602010409 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name ubyquiz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename ubyquiz" IyEvdXNyL2Jpbi9lbnYgcnVieQojIC0qLSBjb2Rpbmc6IFVURi04IC0qLQoKCiMgQSBQb3Np dGlvbiBvbiB0aGUgY2hlc3MgYm9hcmQuIENhbiBiZSBjaGVja2VkIGlmIHZhbGlkIHVzaW5n IHRoZQojIFBvc2l0aW9uI3ZhbGlkPyBtZXRob2QuCmNsYXNzIFBvc2l0aW9uIDwgU3RyaW5n CgogICAjIENyZWF0ZSBhIG5ldyBwb3NpdGlvbi4gRGVmYXVsdCB0byAnYTEnLgogICBkZWYg aW5pdGlhbGl6ZSh2YWx1ZSA9ICdhMScpCiAgICAgIHN1cGVyKHZhbHVlKQogICBlbmQKCiAg ICMgQ2hlY2sgd2hldGhlciB0aGUgUG9zaXRpb24gaWYgdmFsaWQgKGJldHdlZW4gJ2ExJyB0 byAnaDgnKS4KICAgZGVmIHZhbGlkPwogICAgICBzZWxmID1+IC9bYS1oXVsxLThdLwogICBl bmQKCiAgICMgQXBwbHkgYSBtb3ZlIHRvIGEgUG9zaXRpb24sIHJldHVybmluZyBhIG5ldyBQ b3NpdGlvbi4KICAgZGVmIGNoYW5nZShtb3ZlKQogICAgICB2YWx1ZSA9IHNlbGYuZHVwCiAg ICAgIHZhbHVlWzBdICs9IG1vdmVbMF0KICAgICAgdmFsdWVbMV0gKz0gbW92ZVsxXQogICAg ICBQb3NpdGlvbi5uZXcodmFsdWUpCiAgIGVuZAplbmQKCgojIFJlcHJlc2VudCB0aGUgS25p Z2h0IHdoaWNoIHdpbGwgdHJ5IHRvIGZpbmQgaGlzIHdheSBvbiB0aGUgY2hlc3MgYm9hcmQK IyBsYWJ5cmludGggd2UgaW1hZ2luYXRlZCBmb3IgaGltLgpjbGFzcyBLbmlnaHQKCiAgICMg VGhlIG1vdmVzIHRoYXQgdGhlIEtuaWdodCBpcyBhbGxvd2VkIHRvIGRvLgogICBWQUxJRF9N T1ZFUyA9IFsKICAgICAgWy0yLCAtMV0sCiAgICAgIFstMSwgLTJdLAogICAgICBbIDEsIC0y XSwKICAgICAgWyAyLCAtMV0sCiAgICAgIFsgMiwgIDFdLAogICAgICBbIDEsICAyXSwKICAg ICAgWy0xLCAgMl0sCiAgICAgIFstMiwgIDFdCiAgIF0KCiAgICMgQ3JlYXRlIGEgbmV3IEtu aWdodC4KICAgZGVmIGluaXRpYWxpemUoaW5pdGlhbF9wb3NpdGlvbikKICAgICAgQHBvc2l0 aW9uID0gUG9zaXRpb24ubmV3KGluaXRpYWxfcG9zaXRpb24pCiAgICAgIEBwYXRoID0gbmls CiAgICAgIEBmb3JiaWRkZW5fcG9zaXRpb25zID0gW10KICAgZW5kCgogICAjIERlZmluZSB0 aGUgcG9zaXRpb25zIHdoZXJlIHRoZSBLbmlnaHQgaXMgbm90IGFsbG93ZWQgdG8gZ28uCiAg IGRlZiBmb3JiaWRkZW5fcG9zaXRpb25zPShmb3JiaWRkZW5fcG9zaXRpb25zKQogICAgICBm b3JiaWRkZW5fcG9zaXRpb25zLmVhY2ggZG8gfHBvc2l0aW9ufAogICAgICAgICBAZm9yYmlk ZGVuX3Bvc2l0aW9ucyA8PCBQb3NpdGlvbi5uZXcocG9zaXRpb24pCiAgICAgIGVuZAogICBl bmQKCiAgICMgQXNrIHRvIGZpbmQgdGhlIHBhdGggdG8gdGhlIGZpbmFsIFBvc2l0aW9uIF9m aW5hbF9wb3NpdGlvbl8uCiAgIGRlZiBmaW5kX3BhdGhfdG8oZmluYWxfcG9zaXRpb24pCiAg ICAgIEBmaW5hbF9wb3NpdGlvbiA9IFBvc2l0aW9uLm5ldyhmaW5hbF9wb3NpdGlvbikKICAg ICAgZmluZF9wYXRoCiAgIGVuZAoKICAgcHJpdmF0ZQoKICAgICAgIyBSZWN1cnNpdmUgbWV0 aG9kIHRvIHNlYXJjaCB0aGUgc2hvcnRlc3QgcGF0aC4KICAgICAgZGVmIGZpbmRfcGF0aChw YXRocyA9IFtbQHBvc2l0aW9uXV0pCiAgICAgICAgIGlmIG5vdCBAcGF0aCBhbmQgZmluaXNo ZWQ/KHBhdGhzKQogICAgICAgICAgICByZXR1cm4gQHBhdGgKICAgICAgICAgZWxzZQogICAg ICAgICAgICBuZXdfcGF0aHMgPSBbXQogICAgICAgICAgICBjaGFuZ2UgPSBmYWxzZQogICAg ICAgICAgICBwYXRocy5lYWNoIGRvIHxwYXRofAogICAgICAgICAgICAgICBwb3NzaWJsZV9w b3NpdGlvbnM/KHBhdGgpLmVhY2ggZG8gfHBvc2l0aW9ufAogICAgICAgICAgICAgICAgICBu ZXdfcGF0aHMgPDwgcGF0aC5kdXAucHVzaChwb3NpdGlvbikKICAgICAgICAgICAgICAgICAg Y2hhbmdlID0gdHJ1ZQogICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAg ICAgICAgIGZpbmRfcGF0aChuZXdfcGF0aHMpIGlmIGNoYW5nZQogICAgICAgICBlbmQKICAg ICAgZW5kCgogICAgICAjIENoZWNrIGlmIHRoZSBLbmlnaHQgaGFzIGZvdW5kIGlzIHdheSBv dXQgb2YgaGVyZS4KICAgICAgZGVmIGZpbmlzaGVkPyhwYXRocykKICAgICAgICAgcGF0aHMu ZWFjaCBkbyB8cGF0aHwKICAgICAgICAgICAgaWYgcGF0aC5sYXN0ID09IEBmaW5hbF9wb3Np dGlvbgogICAgICAgICAgICAgICBAcGF0aCA9IHBhdGhbMS4uLTFdCiAgICAgICAgICAgIGVu ZAogICAgICAgICBlbmQKICAgICAgICAgQHBhdGgKICAgICAgZW5kCgogICAgICAjIEZpbmQg dGhlIHBvc2l0aW9ucyB3aGVyZSB0aGUgS25pZ2h0IGNhbiBnbyBrbm93aW5nIHRoZSBwYXRo IGhlCiAgICAgICMgYWxyZWFkeSBoYXMgdGFrZW4uCiAgICAgIGRlZiBwb3NzaWJsZV9wb3Np dGlvbnM/KGFscmVhZHlfcGFzc2VkID0gW10pCiAgICAgICAgIHBvc3NpYmxlX3Bvc2l0aW9u cyA9IFtdCiAgICAgICAgIEtuaWdodDo6VkFMSURfTU9WRVMuZWFjaCBkbyB8bW92ZXwKICAg ICAgICAgICAgcG9zc2libGVfcG9zaXRpb24gPSBhbHJlYWR5X3Bhc3NlZC5sYXN0LmNoYW5n ZShtb3ZlKQogICAgICAgICAgICBpZiBwb3NzaWJsZV9wb3NpdGlvbi52YWxpZD8gYW5kCiAg ICAgICAgICAgICAgICAgIG5vdCBhbHJlYWR5X3Bhc3NlZC5pbmNsdWRlPyhwb3NzaWJsZV9w b3NpdGlvbikgYW5kCiAgICAgICAgICAgICAgICAgIG5vdCBAZm9yYmlkZGVuX3Bvc2l0aW9u cy5pbmNsdWRlPyhwb3NzaWJsZV9wb3NpdGlvbikKICAgICAgICAgICAgICAgcG9zc2libGVf cG9zaXRpb25zIDw8IHBvc3NpYmxlX3Bvc2l0aW9uCiAgICAgICAgICAgIGVuZAogICAgICAg ICBlbmQKICAgICAgICAgcG9zc2libGVfcG9zaXRpb25zCiAgICAgIGVuZAplbmQKCgoKaWYg QVJHVi5zaXplIDwgMgogICBwdXRzICJ1c2FnZTogcnVieSBrbmlnaHQucmIgaW5pdGlhbF9w b3NpdGlvbiBmaW5hbF9wb3NpdGlvbiBbKGZvcmJpZGRlbiBwb3NpdGlvbnMpKl0iCmVsc2UK ICAgIyBDaGVjayBpZiBhbGwgcG9zaXRpb25zIHBhc3NlZCBhcyBhcmd1bWVudCBhcmUgdmFs aWQKICAgYmVnaW4KICAgCUFSR1YuZWFjaCBkbyB8cG9zaXRpb258CiAgIAkgICByYWlzZSBF eGNlcHRpb24ubmV3KCJJbnZhbGlkIHBvc2l0aW9uICN7IHBvc2l0aW9uIH0iKSB1bmxlc3Mg UG9zaXRpb24ubmV3KHBvc2l0aW9uKS52YWxpZD8KICAgCWVuZAogICByZXNjdWUgRXhjZXB0 aW9uID0+IGUKICAgICAgcHV0cyBlCiAgICAgIGV4aXQKICAgZW5kCgogICAjIFNvbHZlIHRo ZSBwcm9ibGVtCiAgIGtuaWdodCA9IEtuaWdodC5uZXcoQVJHVlswXSkKICAga25pZ2h0LmZv cmJpZGRlbl9wb3NpdGlvbnM9KEFSR1ZbMi4uLTFdKQogICBwdXRzIGtuaWdodC5maW5kX3Bh dGhfdG8oQVJHVlsxXSkKZW5kCg --------------040703040306080602010409--