------ art_46858_25543943.1228679360192 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline This was a nice quiz, maybe not too challenging, but as Tom put it correctly the different codes can easily get mangled up. I have found a solution that seems to handle the few testcases well, we will see if it pleases ;). My additional challenge was to make my solution work with HighLine, Facets and Term::Ansicolor, and that is what I did :). The solution can be found here too: http://pastie.org/333319 And to test all libraries simply type > for i in term/ansicolor facets/ansicode highline; do ruby1.9 rd-185-sol.rb -f $i; done > ruby1.9 rd-185-sol.rb runs, transparently, with a random library of all registered HYLI Robert P.S. I do not recall ever have answered 3 RQ in a row before :-P ------ art_46858_25543943.1228679360192 Content-Type: application/x-ruby; name=rd-185-sol.rb Content-Transfer-Encoding: base64 X-Attachment-Id: f_fog3ukix0 Content-Disposition: attachment; filename=rd-185-sol.rb IyEvdXNyL2Jpbi9ydWJ5CiMKIyAgQXMgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIGxpYnJhcnkgdG8g aGVscCB1cyB3aXRoIHRoaXMsIGFuZAojICBhcyB3ZSBhcHByZWNpYXRlIEZhY2V0cyBhbmQgSGln aGxpbmUgbGV0IHVzIHRyeSB0byBjb21lIHVwCiMgIHdpdGggYSBsaWJyYXJ5IGRpc3BhdGNoZXIg d2hpY2ggd2lsbCBhbGxvdyB0aGUgY29kZSB0byBydW4KIyAgb24gZWFjaCBwbGF0Zm9ybSB0aGF0 IGhhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIHJlcXVpcmVkIGxpYgojICBhdmFpbGFibGUuIFRoYXQg aXMsIHVubGVzcyB0aGUgdXNlciBoYXMgZm9yY2VkIHVzIHRvIHVzZSBhCiMgIHNwZWNpZmljIGxp YiB3aXRoIHRoZSAtZnwtLWZvcmNlIG9wdGlvbi4KCmJlZ2luCiAgcmVxdWlyZSAncnVieWdlbXMn CnJlc2N1ZSBMb2FkRXJyb3IKICAiV2UgZ290dGEgaGF2ZSB0byBkbyB3aXRob3V0IEdlbXMgOyki CmVuZAoKQHVzZV9saWIgPSAKICAoIEFSR1YuZmlyc3QgPT0gJy1mJyB8fCBBUkdWLmZpcnN0ID09 ICctLWZvcmNlJyAgKSAmJgogICAgQVJHVlsxXQoKTGlicmFyaWVzID0ge30KCiMKIyAgRm9yIGEg bGlicmFyeSB0byByZWdpc3RlciBmb3IgdXNlIGl0IGhhcyB0byBwcm92aWRlCiMgIHVzIHdpdGgg YSB3YXkgdG8gZ2V0IGFuIGFuc2kgY29kZSwgZS5nLiBmb3IgYSBjb2xvcgojICBFaXRoZXIgaXQg cHJvdmlkZXMgYSBwcm9jIHRoYXQgd2lsbCBmaW5hbGx5IGJlIHVzZWQKIyAgdG8gZGVmaW5lIGEg X19jb2xvcl8gbWV0aG9kIGluIHRoZSBBTlNJU3RyaW5nIGNsYXNzCiMgIG9yIGl0IHNpbXBseSBy ZXR1cm5zIGEgTW9kdWxlIG9iamVjdCB0aGF0IHRoZSBjbGFzcwojICBjYW4gaW1wb3J0LCBhbmQg dGhhdCBoYXMgdG8gZGVmaW5lIHRoZSBzYW1lIG1ldGhvZC4KIyAgVGhlIG1vZHVsZSBpcyBpZ25v cmVkIGlmIGEgYmxvY2sgaGFzIGJlZW4gcHJvdmlkZWQuCiMKZGVmIHJlZ2lzdGVyX2xpYiBsaWJf cGF0aCwgYV9tb2R1bGUgPSBuaWwsICZibGsKICByZXR1cm4gaWYgQHVzZV9saWIgJiYgbGliX3Bh dGggIT0gQHVzZV9saWIKICByZXF1aXJlIGxpYl9wYXRoCiAgTGlicmFyaWVzWyBsaWJfcGF0aCBd ID0gYmxrIHx8IGFfbW9kdWxlCmVuZAoKIyMjIHJlZ2lzdGVyIGxpYnJhcmllcyBoZXJlIHZ2dnZ2 dnZ2dnZ2dnZ2CgpyZWdpc3Rlcl9saWIgImhpZ2hsaW5lIiBkbyB8IGNvbG9yIHwKICBAX19oaWdo bGluZV9fICB8fD0gSGlnaExpbmU6Om5ldwogIEBfX2hpZ2hsaW5lX18uY29sb3IoICIiLCBjb2xv ci50b19zeW0gKS5zdWIoIlxlWzBtIiwiIikKZW5kCgpyZWdpc3Rlcl9saWIgImZhY2V0cy9hbnNp Y29kZSIgZG8gfGNvbG9yfAogIEFOU0lDb2RlLnNlbmQgY29sb3IKZW5kCgpyZWdpc3Rlcl9saWIg InRlcm0vYW5zaWNvbG9yIiBkbyB8IGNvbG9yIHwKICBUZXJtOjpBTlNJQ29sb3Iuc2VuZCBjb2xv cgplbmQKIyMjIHJlZ2lzdGVyIGxpYnJhcmllcyBoZXJlIF5eXl5eXl5eXl5eXl5eCgoKY2xhc3Mg QU5TSVN0cmluZwogIHVzZWRfbGliX25hbWUgPSBMaWJyYXJpZXMua2V5c1sgcmFuZCggTGlicmFy aWVzLmtleXMuc2l6ZSApIF0KICBsaWIgPSBMaWJyYXJpZXNbIHVzZWRfbGliX25hbWUgXQogIGNh c2UgbGliCiAgd2hlbiBNb2R1bGUKICAgIGluY2x1ZGUgbGliCiAgd2hlbiBQcm9jCiAgICBkZWZp bmVfbWV0aG9kIDpfX2NvbG9yX18sICZsaWIKICBlbHNlCiAgICByYWlzZSBSdW50aW1lRXJyb3Is ICJOb29vb28gSSBoYXZlIGV4cGxhaW5lZCBleGFjdGx5IGhvdyB0byByZWdpc3RlciBsaWJyYXJp ZXMsIGhhcyBJIG5vdD8iCiAgZW5kCgogIEFOU0lFbmQgICAgPSAiXGVbMG0iCiAgQU5TSUVuZFJn eCA9ICVyeyg/OiN7UmVnZXhwOjplc2NhcGUoQU5TSUVuZCl9KSskfQoKICBkZWYgKyBvdGhlcgog ICAgb3RoZXIuYWRkX3JldmVyc2Ugc2VsZgogIHJlc2N1ZSBOb01ldGhvZEVycm9yICMgRG8gbm90 IGRvIHRoaXMgaW4gbGlicmFyaWVzIGJ1dCBmb3IgdGhlIFJ1YnlRdWl6IEkgY29tcHJvbWlzZSBm b3IgY29kZSBzaXplCiAgICBzZWxmLmNsYXNzOjpuZXcoICooIF9fZW5kX18gPDwgb3RoZXIgKSAp CiAgZW5kCgogIGRlZiBhZGRfcmV2ZXJzZSBhbl9hbnNpX3N0cgogICAgc2VsZi5jbGFzczo6bmV3 KCAqKAogICAgICBhbl9hbnNpX3N0ci5zZW5kKCA6X19lbmRfXyApICsgX19lbmRfXwogICAgKSAp CiAgZW5kCgogIGRlZiBlbmQKICAgIHNlbGYuY2xhc3M6Om5ldyggKiBfX2VuZF9fICkKICBlbmQK CiAgZGVmIG1ldGhvZF9taXNzaW5nIG5hbWUsICphcmdzLCAmYmxrCiAgICBzdXBlciggbmFtZSwg KmFyZ3MsICZibGsgKSB1bmxlc3MgYXJncy5lbXB0eT8gJiYgYmxrLm5pbD8KICAgIGNvbCA9IF9f Y29sb3JfXyggbmFtZSApCiAgICBjbGFzcyA8PCBzZWxmOyBzZWxmIGVuZC5tb2R1bGVfZXZhbCBk byAKICAgICAgZGVmaW5lX21ldGhvZCBuYW1lIGRvCglzZWxmLmNsYXNzOjpuZXcoICooW25hbWUu dG9fc3ltXSArIEBzdHJpbmdzKS5mbGF0dGVuICkKICAgICAgZW5kCiAgICBlbmQKICAgIHNlbmQg bmFtZQogIGVuZAoKICBkZWYgdG9fcwogICAgQHN0cmluZ3MubWFweyB8c3wgCiAgICAgIGNhc2Ug cwoJd2hlbiBTdHJpbmcKCSAgcwoJd2hlbiA6ZW5kCgkgIEFOU0lFbmQKCWVsc2UKCSAgX19jb2xv cl9fIHMKCWVuZAogICAgfS5qb2luLnN1YiggQU5TSUVuZFJneCwgQU5TSUVuZCApCiAgZW5kCgog IHByaXZhdGUKICBkZWYgX19lbmRfXwogICAgQHN0cmluZ3MucmV2ZXJzZS5maW5keyB8eHwgU3lt Ym9sID09PSB4fSA9PSA6ZW5kID8gCiAgICAgIEBzdHJpbmdzLmR1cCA6IEBzdHJpbmdzLmR1cCA8 PCA6ZW5kCiAgZW5kCgogIGRlZiBpbml0aWFsaXplICpzdHJpbmdzCiAgICBAc3RyaW5ncyA9IHN0 cmluZ3MuZHVwCiAgZW5kCmVuZAoKaWYgX19GSUxFX18gPT0gJDAgdGhlbgogIHJlcXVpcmUgJ3Rl c3QvdW5pdCcKICBjbGFzcyBSdWJ5UXVpejE4NSA8IFRlc3Q6OlVuaXQ6OlRlc3RDYXNlCiAgICBk ZWYgdGVzdF8wMDFfYmFzaWMKICAgICAgYSA9IEFOU0lTdHJpbmc6Om5ldyAiUnVieSBRdWl6IDE4 NSIKICAgICAgYXNzZXJ0X2VxdWFsICJSdWJ5IFF1aXogMTg1IiwgYS50b19zCiAgICAgIGFzc2Vy dF9lcXVhbCAiXGVbMzFtUnVieSBRdWl6IDE4NSIsIGEucmVkLnRvX3MKICAgICAgYXNzZXJ0X2Vx dWFsICJcZVsxbVxlWzMxbVJ1YnkgUXVpeiAxODUiLCBhLnJlZC5ib2xkLnRvX3MKICAgICAgYXNz ZXJ0X2VxdWFsICJcZVsxbVxlWzMxbVJ1YnkgUXVpeiAxODVcZVswbSIsIGEucmVkLmJvbGQuZW5k LnRvX3MKICAgIGVuZAoKICAgIGRlZiB0ZXN0XzAwMl9vcGVyYXRpb25zCiAgICAgIGEgPSBBTlNJ U3RyaW5nOjpuZXcgIlJ1YnkgUXVpeiIKICAgICAgYiA9IEFOU0lTdHJpbmc6Om5ldyAiMTg1Igog ICAgICBhc3NlcnRfZXF1YWwgIlxlWzMxbVJ1YnkgUXVpelxlWzBtIFxlWzFtMTg1XGVbMG0iLCAo IGEucmVkICsgIiAiICsgYi5ib2xkICkudG9fcwogICAgZW5kCiAgZW5kCmVuZAo------ art_46858_25543943.1228679360192--