------_=_NextPart_001_01C5B801.85C39956 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable =20<<quiz_46_ndiff.rb>> This quiz made me delve into the darkened alleyways of undocumented standard libraries (well, bigdecimal). Luckily the whole thing worked exactly as guessed - probably why nobody has bothered documenting it yet. Is there a library that adds the median/average/etc. methods to array? I rolled that myself because I didn't see it in the std lib. Also, the statistics bit in the quiz description had "Average" and "Mean" - I take it that was meant to be Mean and Median? That's what I implemented. #########################################################################= ############ This email has been scanned by MailMarshal, an email content filter. #########################################################################= ############ ------_=_NextPart_001_01C5B801.85C39956 Content-Type: application/octet-stream; name="quiz_46_ndiff.rb" Content-Transfer-Encoding: base64 Content-Description: quiz_46_ndiff.rb Content-Disposition: attachment; filename="quiz_46_ndiff.rb" cmVxdWlyZSAnZ2VuZXJhdG9yJw0KcmVxdWlyZSAncGF0aG5hbWUnDQpyZXF1aXJlICdvcHRwYXJz ZScNCnJlcXVpcmUgJ2JpZ2RlY2ltYWwnDQoNCmNsYXNzIE51bWJlckxpbmUNCglpbmNsdWRlIEVu dW1lcmFibGUNCglkZWYgaW5pdGlhbGl6ZShsaW5lKQ0KCQlAbGluZSA9IGxpbmUNCgllbmQNCglk ZWYgZWFjaA0KCQlAbGluZS5zY2FuKC8oKC0pPyhbMC05XSt8XC4pXC4/KFswLTldKyk/W0VlXT8o Wy0rXT9bMC05XSspPykvKSBkbyB8bWF0Y2h8DQoJCQl5aWVsZCBCaWdEZWNpbWFsLm5ldyhtYXRj aFswXSkNCgkJZW5kCQ0KCWVuZA0KCWRlZiB0b19zDQoJCUBsaW5lDQoJZW5kDQplbmQNCg0KY2xh c3MgTnVtZXJpY2FsRGlmZmVyZW5jZXINCglhdHRyX2FjY2Vzc29yIDpkaWdpdHMsIDp0b2xlcmFu Y2UNCglkZWYgaW5pdGlhbGl6ZQ0KCQlAZGlnaXRzID0gMA0KCQlAdG9sZXJhbmNlID0gMC4wDQoJ ZW5kDQoJZGVmIGVhY2hfZGlmZihmaWxlMSwgZmlsZTIpDQoJCWxpbmUgPSAwDQoJCWRpZmYgPSBu aWwNCgkJU3luY0VudW1lcmF0b3IubmV3KGZpbGUxLCBmaWxlMikuZWFjaCBkbyB8bGluZTEsIGxp bmUyfA0KCQkJbGluZTEsIGxpbmUyID0gTnVtYmVyTGluZS5uZXcobGluZTEpLCBOdW1iZXJMaW5l Lm5ldyhsaW5lMikNCgkJCWxpbmUgKz0gMQ0KCQkJbnVtX2VudW0gPSAgU3luY0VudW1lcmF0b3Iu bmV3KGxpbmUxLCBsaW5lMikNCgkJCWlmIG51bV9lbnVtLmFsbD8gZG8gfGEsYnwNCgkJCQlhLGIg PSBhLnJvdW5kKEBkaWdpdHMtMSksIGIucm91bmQoQGRpZ2l0cy0xKSB1bmxlc3MgQGRpZ2l0cyA9 PSAwDQoJCQkJKGEgLSBiKS5hYnMgPD0gQHRvbGVyYW5jZSANCgkJCWVuZA0KCQkJCWlmIGRpZmYN CgkJCQkJeWllbGQgZGlmZg0KCQkJCQlkaWZmID0gbmlsDQoJCQkJZW5kDQoJCQllbHNlDQoJCQkJ ZGlmZiA9IE51bWVyaWNhbERpZmYubmV3KGxpbmUpIHVubGVzcyBkaWZmDQoJCQkJZGlmZi5hZGRf bGluZXMobGluZTEsIGxpbmUyKQ0KCQkJZW5kDQoJCWVuZA0KCQl5aWVsZCBkaWZmIGlmIGRpZmYN CgllbmQNCmVuZA0KDQpjbGFzcyBOdW1lcmljYWxEaWZmDQoJYXR0cl9yZWFkZXIgOnN0YXJ0X2xp bmUsIDpsZWZ0LCA6cmlnaHQNCglkZWYgaW5pdGlhbGl6ZShzdGFydF9saW5lKQ0KCQlAc3RhcnRf bGluZSA9IHN0YXJ0X2xpbmUNCgkJQGxlZnQgPSBbXQ0KCQlAcmlnaHQgPSBbXQ0KCWVuZA0KCWRl ZiBhZGRfbGluZXMobGluZTEsIGxpbmUyKQ0KCQlAbGVmdCA8PCBsaW5lMQ0KCQlAcmlnaHQgPDwg bGluZTINCgllbmQNCglkZWYgdG9fcw0KCQlsaW5lcyA9ICIje0BzdGFydF9saW5lfSwje0BzdGFy dF9saW5lICsgQGxlZnQubGVuZ3RoIC0gMX0iDQoJCXN0ciA9ICIje2xpbmVzfWMje2xpbmVzfVxu Ig0KCQlzdHIgPDwgQGxlZnQuY29sbGVjdCB7IHx4fCAiPCAje3h9IiB9LmpvaW4NCgkJc3RyIDw8 ICItLS1cbiINCgkJc3RyIDw8IEByaWdodC5jb2xsZWN0IHsgfHh8ICI+ICN7eH0iIH0uam9pbg0K CWVuZA0KZW5kDQoNCmRpZmZlciA9IE51bWVyaWNhbERpZmZlcmVuY2VyLm5ldw0KcXVpZXQgPSBm YWxzZQ0Kc3RhdGlzdGljcyA9IGZhbHNlDQoNCm9wdHMgPSBPcHRpb25QYXJzZXIubmV3IGRvIHxv cHRzfA0KICAgICAgICBvcHRzLmJhbm5lciA9ICJVc2FnZTogI3skMH0gW29wdGlvbnNdIGZpbGUx IGZpbGUyIg0KDQogICAgICAgIG9wdHMuc2VwYXJhdG9yICIiDQogICAgICAgIG9wdHMuc2VwYXJh dG9yICJOdW1lcmljYWxseSBjb21wYXJlIGZpbGVzIGxpbmUgYnkgbGluZSwgbnVtZXJpY2FsIGZp ZWxkIGJ5IG51bWVyaWNhbCBmaWVsZC4iDQogICAgICAgIG9wdHMuc2VwYXJhdG9yICIiDQogICAg ICAgIG9wdHMub24oIi1kIiwgIi0tZGlnaXRzIElOVCIsIEludGVnZXIsDQogICAgICAgICAgICAg ICAgIk1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyB0aGF0IHNob3VsZCBtYXRj aC4iLCIoZGVmYXVsdDogMCkiKSBkbyB8ZGlnaXRzfA0KICAgICAgICAgIGRpZmZlci5kaWdpdHMg PSBkaWdpdHMNCiAgICAgICAgZW5kDQogICAgICAgIG9wdHMub24oIi10IiwgIi0tdG9sZXJhbmNl IERCTCIsIFN0cmluZywgDQogICAgICAgICAgICAgICAgIlRvbGVyYXRlIDw9IERCTCBkaXN0YW5j ZSBiZXR3ZWVuIG51bWJlcnMuIiwiKGRlZmF1bHQ6IDAuMCkiKSBkbyB8dG9sZXJhbmNlfA0KICAg ICAgICAgIGRpZmZlci50b2xlcmFuY2UgPSBCaWdEZWNpbWFsLm5ldyh0b2xlcmFuY2UpDQogICAg ICAgIGVuZAkNCiAgICAgICAgb3B0cy5vbigiLWgiLCAiLS1oZWxwIiwgIk91dHB1dCB0aGlzIGhl bHAuIikgZG8gfGhlbHB8DQoJCXB1dHMgb3B0cw0KCQlleGl0IDANCiAgICAgICAgZW5kDQoJb3B0 cy5vbigiLXEiLCAiLS1xdWlldCIsICJObyBvdXRwdXQsIGp1c3QgZXhpdCBjb2RlLiIpIGRvIHx2 YWx1ZXwNCgkJcXVpZXQgPSB2YWx1ZQ0KCWVuZA0KCW9wdHMub24oIi1zIiwgIi0tc3RhdGlzdGlj cyIsICJQcm92aWRlIGNvbXBhcmlzb24gc3RhdGlzdGljcyBvbmx5LiIpIGRvIHx2YWx1ZXwNCgkJ c3RhdGlzdGljcyA9IHZhbHVlDQoJZW5kCQ0KZW5kDQoNCmJlZ2luDQoJb3B0cy5wYXJzZSEoQVJH VikNCglyYWlzZSAiLS1xdWlldCBhbmQgLS1zdGF0aXN0aWNzIGFyZSBtdXR1YWxseSBleGNsdXNp dmUiIAlpZiBxdWlldCAmJiBzdGF0aXN0aWNzDQoJcmFpc2UgIk11c3QgcGFzcyB0d28gZmlsZW5h bWVzIiB1bmxlc3MgQVJHVi5sZW5ndGggPT0gMg0KCWZpbGVzID0gQVJHVi5jb2xsZWN0IHsgfHh8 IFBhdGhuYW1lLm5ldyh4KSB9DQoJZmlsZXMuZWFjaCBkbyB8ZnwgDQoJCXVubGVzcyBmLmV4aXN0 PyAmJiBmLmZpbGU/DQoJCQlyYWlzZSAiJyN7Zn0nIGRvZXMgbm90IGV4aXN0Ig0KCQllbmQNCgll bmQNCglGaWxlLm9wZW4oZmlsZXNbMF0pIGRvIHxmaWxlMXwNCgkJRmlsZS5vcGVuKGZpbGVzWzFd KSBkbyB8ZmlsZTJ8DQoJCQlpZihzdGF0aXN0aWNzKQ0KCQkJCWRpc3RhbmNlcyA9IFtdDQoJCQkJ U3luY0VudW1lcmF0b3IubmV3KGZpbGUxLCBmaWxlMikuZWFjaCBkbyB8bGluZTEsIGxpbmUyfA0K CQkJCQlsaW5lMSwgbGluZTIgPSBOdW1iZXJMaW5lLm5ldyhsaW5lMSksIE51bWJlckxpbmUubmV3 KGxpbmUyKQ0KCQkJCQlTeW5jRW51bWVyYXRvci5uZXcobGluZTEsIGxpbmUyKS5jb2xsZWN0IHsg fG51bTEsIG51bTJ8IGRpc3RhbmNlcyA8PCAobnVtMSAtIG51bTIpLmFicyB9DQoJCQkJZW5kDQoJ CQkJY2xhc3MgPDwgZGlzdGFuY2VzDQoJCQkJCWRlZiBtZWRpYW4NCgkJCQkJCXNvcnRlZCA9IHNl bGYuc29ydA0KCQkJCQkJbWlkID0gc29ydGVkLnNpemUgLyAyDQoJCQkJCQlpZiBzb3J0ZWQuc2l6 ZSAlIDIgPT0gMA0KCQkJCQkJICAgIChzb3J0ZWRbbWlkXSArIHNvcnRlZFttaWQgLSAxXSkgLyAy DQoJCQkJCQllbHNlDQoJCQkJCQkgICAgc29ydGVkW21pZF0NCgkJCQkJCWVuZA0KCQkJCQllbmQN CgkJCQkJZGVmIG1lYW4NCgkJCQkJCXNlbGYuaW5qZWN0KDApIHsgfHgsIHN1bXwgc3VtICsgeCAv IHNlbGYuc2l6ZX0NCgkJCQkJZW5kDQoJCQkJZW5kDQoJCQkJcHV0cyg8PC1FT0YpDQpOdW1iZXJz IGNvbXBhcmVkOiAje2Rpc3RhbmNlcy5zaXplfQ0KRGlzdGFuY2UgcmFuZ2U6ICN7ZGlzdGFuY2Vz Lm1pbn0uLiN7ZGlzdGFuY2VzLm1heH0NCk1lZGlhbiBkaXN0YW5jZTogI3tkaXN0YW5jZXMubWVk aWFufQkJCQ0KTWVhbiBkaXN0YW5jZTogI3tkaXN0YW5jZXMubWVhbn0NCgkJCQlFT0YNCgkJCWVs c2lmKHF1aWV0KQ0KCQkJCWRpZmZlci5lYWNoX2RpZmYoZmlsZTEsIGZpbGUyKSBkbyB8ZGlmZnwN CgkJCQkJZXhpdCAxDQoJCQkJZW5kDQoJCQkJZXhpdCAwDQoJCQllbHNlDQoJCQkJZGlmZmVyZW50 ID0gZmFsc2UNCgkJCQlkaWZmZXIuZWFjaF9kaWZmKGZpbGUxLCBmaWxlMikgZG8gfGRpZmZ8DQoJ CQkJCWRpZmZlcmVudCA9IHRydWUNCgkJCQkJcHV0cyBkaWZmDQoJCQkJZW5kDQoJCQkJZXhpdChk aWZmZXJlbnQgPyAxIDogMCkNCgkJCWVuZA0KCQllbmQNCgllbmQJDQpyZXNjdWUgPT4gZQ0KCXdh cm4gZQ0KCXdhcm4gb3B0cw0KCWV4aXQgMQ0KZW5kDQoNCg0KDQo= ------_=_NextPart_001_01C5B801.85C39956--