--------------020604010506010408090403 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Ruby Quiz wrote: > This week's quiz is to write a program that displays LCD style numbers at > adjustable sizes. Here we go. I decided to add support for "-" and ".". My implementation does not actually enforce the argument to be a valid number thus also allowing it to render IP numbers: > C:\dev\ruby\quizes\14>ruby lcd.rb -s 5 127.0.0.1 > ----- ----- ----- ----- > | | | | | | | | > | | | | | | | | > | | | | | | | | > | | | | | | | | > | | | | | | | | > ----- ----- ----- ----- > | | | | | | | | | | | | | | > | | | | | | | | | | | | | | > | | | | | | | | | | | | | | > | | | | | | | | | | | | | | > | | | | | | | | | | | | | | > ----- ----- ----- ----- ----- ----- I decided to store the representation of digits as binary bit masks. I created a few helpers methods (line, horizontal, vertical, digit) so that I did not need to duplicate code. I used .transpose in combination with .join for rendering the digits (which are represented as an Array of lines) next to each other instead of below each other. --------------020604010506010408090403 Content-Type: application/x-ruby; name cd.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename cd.rb" bW9kdWxlIExDRA0KICBleHRlbmQgc2VsZg0KDQogICMgRGlnaXRzIGFyZSByZXByZXNlbnRl ZCBieSBzaW1wbGUgYml0IG1hc2tzLiBFYWNoIGJpdCBpZGVudGlmaWVzIHdoZXRoZXIgYSBs aW5lDQogICMgc2hvdWxkIGJlIGRpc3BsYXllZCBvciBub3QuIFRoZSBmb2xsb3dpbmcgQVND SUkgZ3JhcGhpYyBzaG93cyB0aGUgbWFwcGluZyBmcm9tDQogICMgYml0IHBvc2l0aW9uIHRv IHRoZSBiZWxvbmdpbmcgbGluZS4NCiAgIw0KICAjICA9Ng0KICAjIDUgIDQNCiAgIyAgPTMN CiAgIyAyICAxDQogICMgID0wDQogIERpZ2l0cyA9IFswYjExMTAxMTEsIDBiMDEwMDEwMCwg MGIxMDExMTAxLCAwYjExMDExMDEsIDBiMDEwMTExMCwNCiAgICAgICAgICAgIDBiMTEwMTAx MSwgMGIxMTExMDExLCAwYjAxMDAxMDEsIDBiMTExMTExMSwgMGIxMTAxMTExLA0KICAgICAg ICAgICAgMGIwMDAxMDAwLCAwYjExMTEwMDBdICMgTWludXMsIERvdA0KICBUb3AsIFRvcExl ZnQsIFRvcFJpZ2h0LCBNaWRkbGUsIEJvdHRvbUxlZnQsIEJvdHRvbVJpZ2h0LCBCb3R0b20g PSAqMCAuLiA2DQogIFNwZWNpYWxEaWdpdHMgPSB7ICItIiA9PiAxMCwgIi4iID0+IDExIH0N Cg0KDQogIHByaXZhdGUNCg0KICBkZWYgbGluZShkaWdpdCwgYml0LCBjaGFyID0gInwiKQ0K ICAgIChkaWdpdCAmIDEgPDwgYml0KS56ZXJvPyA/ICIgIiA6IGNoYXINCiAgZW5kDQoNCiAg ZGVmIGhvcml6b250YWwoZGlnaXQsIHNpemUsIGJpdCkNCiAgICBbIiAiICsgbGluZShkaWdp dCwgYml0LCAiLSIpICogc2l6ZSArICIgIl0NCiAgZW5kDQoNCiAgZGVmIHZlcnRpY2FsKGRp Z2l0LCBzaXplLCBsZWZ0X2JpdCwgcmlnaHRfYml0KQ0KICAgIFtsaW5lKGRpZ2l0LCBsZWZ0 X2JpdCkgKyAiICIgKiBzaXplICsgbGluZShkaWdpdCwgcmlnaHRfYml0KV0gKiBzaXplDQog IGVuZA0KDQogIGRlZiBkaWdpdChkaWdpdCwgc2l6ZSkNCiAgICBkaWdpdCA9IERpZ2l0c1tk aWdpdC50b19pXQ0KICAgIGhvcml6b250YWwoZGlnaXQsIHNpemUsIFRvcCkgKw0KICAgIHZl cnRpY2FsKGRpZ2l0LCBzaXplLCBUb3BMZWZ0LCBUb3BSaWdodCkgKw0KICAgIGhvcml6b250 YWwoZGlnaXQsIHNpemUsIE1pZGRsZSkgKw0KICAgIHZlcnRpY2FsKGRpZ2l0LCBzaXplLCBC b3R0b21MZWZ0LCBCb3R0b21SaWdodCkgKw0KICAgIGhvcml6b250YWwoZGlnaXQsIHNpemUs IEJvdHRvbSkNCiAgZW5kDQoNCg0KICBwdWJsaWMNCg0KICBkZWYgcmVuZGVyKG51bWJlciwg c2l6ZSA9IDEpDQogICAgbnVtYmVyID0gbnVtYmVyLnRvX3MNCiAgICByYWlzZShBcmd1bWVu dEVycm9yLCAic2l6ZSBoYXMgdG8gYmUgPiAwIikgdW5sZXNzIHNpemUgPiAwDQogICAgcmFp c2UoQXJndW1lbnRFcnJvciwgIkludmFsaWQgbnVtYmVyIikgdW5sZXNzIG51bWJlclsvXEFb XGQuLV0rXFovXQ0KDQogICAgbnVtYmVyLnNjYW4oLy4vKS5tYXAgZG8gfGRpZ2l0fA0KICAg ICAgZGlnaXQoU3BlY2lhbERpZ2l0c1tkaWdpdF0gfHwgZGlnaXQsIHNpemUpDQogICAgZW5k LnRyYW5zcG9zZS5tYXAgZG8gfGxpbmV8DQogICAgICBsaW5lLmpvaW4oIiAiKQ0KICAgIGVu ZC5qb2luKCJcbiIpDQogIGVuZA0KZW5kDQoNCmlmIF9fRklMRV9fID09ICQwDQogIHJlcXVp cmUgJ29wdHBhcnNlJw0KDQogIG9wdGlvbnMgPSB7IDpzaXplID0+IDIgfQ0KDQogIG51bWJl ciA9IEFSR1YucG9wDQoNCiAgQVJHVi5vcHRpb25zIGRvIHxvcHRzfA0KICAgIHNjcmlwdF9u YW1lID0gRmlsZS5iYXNlbmFtZSgkMCkNCiAgICBvcHRzLmJhbm5lciA9ICJVc2FnZTogcnVi eSAje3NjcmlwdF9uYW1lfSBbb3B0aW9uc10gbnVtYmVyIg0KDQogICAgb3B0cy5zZXBhcmF0 b3IgIiINCg0KICAgIG9wdHMub24oIi1zIiwgIi0tc2l6ZSBzaXplIiwgTnVtZXJpYywNCiAg ICAgICJTcGVjaWZ5IHRoZSBzaXplIG9mIGxpbmUgc2VnbWVudHMuIiwNCiAgICAgICJEZWZh dWx0OiAyIg0KICAgICkgeyB8b3B0aW9uc1s6c2l6ZV18IH0NCiAgICANCiAgICBvcHRzLnNl cGFyYXRvciAiIg0KDQogICAgb3B0cy5vbigiLWgiLCAiLS1oZWxwIiwNCiAgICAgICJTaG93 IHRoaXMgaGVscCBtZXNzYWdlLiIpIGRvDQogICAgICBwdXRzIG9wdHM7IGV4aXQNCiAgICBl bmQNCg0KICAgIG9wdHMucGFyc2UhDQogIGVuZCANCg0KICBwdXRzIExDRC5yZW5kZXIobnVt YmVyLCBvcHRpb25zWzpzaXplXSkNCmVuZA0K --------------020604010506010408090403--