------ art_20564_27343375.1173623500925 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 3/11/07, Robert Dober <robert.dober / gmail.com> wrote: > Code's slow :( > post's fast ;) > > hopefully I find some time to profile and optimise the whole thing. > Interesting case of the profiler showing bad design, the Neighborhood class was really bad this one makes the code run twice as fast, still slow but less so 590/91 > cat torus.rb --------------------------- <snip> class Neighborhood include Enumerable # Neighborhood gives us the following indexed view to the underlying # torus # +---+---+ +-----------+-----------+ # | 0 | 1 | | @top,@lft | @top,@rgt | # +---+---+ +-----------+-----------+ # | 3 | 2 | | @bot,@lft | @bot,@rgt | # +---+---+ +-----------+-----------+ # def initialize *args @torus, @top, @bottom, @left, @right args @names [@top, @left], [@top, @right], [@bottom, @right], [@bottom, @left] ] end def [] n @torus[ *@names[n%4] ] end def [] , val @torus[ *@names[n%4] ] al end def each 4.times do | idx | yield self[idx] end end def recalc if any?{|v| v ICE} then 4.times do | idx | self[ idx ] CE if self[ idx ] VAPOR end else rotate( rand(2) ) end end def rotate dir x elf[0] 3.times do | n | self[ n + 2*dir*n ] elf[ n + 1 + dir*2*n.succ ] end # 3.times do self[ 3 + 2 * dir ] end # def rotate dir end # class Neighborhood ------ art_20564_27343375.1173623500925 Content-Type: application/x-ruby; name=torus.rb Content-Transfer-Encoding: base64 X-Attachment-Id: f_ez5joa46 Content-Disposition: attachment; filename="torus.rb" IyB2aW06IHN3PTIgc3RzPTIgbnUgdHc9MCBleHBhbmR0YWIgbm93cmFwOg0KIw0KIw0KDQpJQ0Ug PSBDbGFzcy5uZXcNClZBUE9SID0gQ2xhc3MubmV3DQpWQUNVVU0gPSBDbGFzcy5uZXcNCg0KDQoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMNCiMNCiMgYSBzbWFsbCByZWZlcmVuY2UgdG8gUHl0aG9uIDspDQojDQojIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmRl ZiBUb3J1cyggcm93cywgY29scywgdmFwb3JzLCBzdGFydCA9IG5pbCApDQogIFRvcnVzXy5uZXco IHJvd3MudG9faSwgY29scy50b19pLCB2YXBvcnMudG9fZiwgc3RhcnQgKQ0KZW5kDQoNCmNsYXNz IFRvcnVzXw0KDQogICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIw0KICAjDQogICMgICAgVG9ydXNfDQogICMNCiAgIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQog IGF0dHJfcmVhZGVyIDpsaW5lcywgOmNvbHVtbnMNCiAgYXR0cl9yZWFkZXIgOmdlbmVyYXRpb24N CiAgYXR0cl9hY2Nlc3NvciA6Zm9ybWF0dGVyLCA6bmFtZQ0KICBkZWYgaW5pdGlhbGl6ZSByb3dz LCBjb2xzLCB2YXBvcnMsIHN0YXJ0DQogICAgQGxpbmVzID0gcm93cw0KICAgIEBjb2x1bW5zID0g Y29scw0KICAgIEB2YXBvcnMgPSB2YXBvcnMNCiAgICBAZ2VuZXJhdGlvbiA9IDANCiAgICBpZiBz dGFydCB0aGVuDQogICAgICBAc3RhcnQgPSBzdGFydC5zcGxpdCgiQCIpLm1hcHt8ZXwgZS50b19p fQ0KICAgIGVsc2UNCiAgICAgIEBzdGFydCB8fD0gWyByb3dzLzIsIGNvbHMgLzIgXQ0KICAgIGVu ZA0KICAgIEBuaG9vZHMgPSBbXSAgIyB3ZSB3aWxsIHN0b3JlIG5laWdoYm9yaG9vZHMgaWRlbnRp ZmllZCBieQ0KICAgICMgdGhlaXIgdXBwZXIgbGVmdCBjb3JuZXIgaW5kZXgsIG9kZCBpcyBmb3Ig ZXZlbiBnZW5lcmF0aW9ucw0KICAgICMgYW5kIGV2ZW4gaXMgZm9yIG9kZCBnZW5lcmF0aW9ucywg d2hpY2ggbWlnaHQgc2VlbSBvZGQuDQogICAgcmVzZXRfdmFsdWVzDQogICAgc2V0X3ZhcG9ycw0K ICBlbmQNCg0KICBkZWYgW10gbGluZSwgY29sPW5pbA0KICAgIHJldHVybiBAdmFsdWVzW2xpbmVd IHVubGVzcyBjb2wNCiAgICBAdmFsdWVzW2xpbmVdW2NvbF0NCiAgZW5kICMgZGVmIFtdKGxpbmUs IGNvbD1uaWwpDQogIGRlZiBbXT0gbGluZSwgY29sLCB2YWwNCiAgICBAdmFsdWVzW2xpbmVdW2Nv bF0gPSB2YWwNCiAgZW5kDQogIGRlZiBlYWNoX2NlbGwgDQogICAgKDEuLkBsaW5lcykuZWFjaCBk bw0KICAgICAgfCBsaW5lIHwNCiAgICAgICgxLi5AY29sdW1ucykuZWFjaCBkbw0KICAgICAgICB8 IGNvbHVtbiB8DQogICAgICAgIHlpZWxkIEB2YWx1ZXNbbGluZS0xXVtjb2x1bW4tMV0sIGxpbmUt MSwgY29sdW1uLTENCiAgICAgIGVuZCAjICgwLi5AY29sdW1ucykuZWFjaCBkbw0KICAgIGVuZCAj ICgwLi5AbGluZXMpLmVhY2ggZG8NCiAgZW5kICMgZGVmIGVhY2hfY2VsbCAmYmxrDQoNCiAgZGVm IGVhY2hfbGluZQ0KICAgIEB2YWx1ZXMuZWFjaHsgfGxpbmV8IHlpZWxkIGxpbmUgfQ0KICBlbmQN Cg0KICBkZWYgZWFjaF9uYmgNCiAgICByID0gYyA9IEBnZW5lcmF0aW9uICUgMg0KICAgIGxvb3Ag ZG8NCiAgICAgIHlpZWxkIEBuaG9vZHNbIGxpbmVhcl9pZHgoIHIsIGMgKSBdIHx8PSANCiAgICAg ICAgICBOZWlnaGJvcmhvb2QubmV3KCBzZWxmLCByLCByLnN1Y2MgJSBAbGluZXMsIGMsIGMuc3Vj YyAlIEBjb2x1bW5zICkNCiAgICAgIGMgKz0gMg0KICAgICAgciArPSAyIHVubGVzcyBjIDwgQGNv bHVtbnMNCiAgICAgIHJldHVybiB1bmxlc3MgciA8IEBsaW5lcw0KICAgICAgYyAlPSBAY29sdW1u cw0KICAgICAgciAlPSBAbGluZXMNCiAgICBlbmQNCiAgZW5kDQoNCiAgZGVmIHNldF9mcm9tX3N0 ciBzdHINCiAgICBAdmFsdWVzID0gW10NCiAgICBzdHIuc3RyaXAuc3BsaXQoIlxuIikuZWFjaCBk bw0KICAgICAgfCBsaW5lX3N0ciB8DQogICAgICBAdmFsdWVzIDw8IFtdDQogICAgICBsaW5lX3N0 ci5lYWNoX2J5dGUgZG8NCiAgICAgICAgIHwgY2hhciB8DQogICAgICAgICBAdmFsdWVzLmxhc3Qg PDwgY2FzZSBjaGFyLmNocg0KICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElDRS50b19z DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgSUNFDQogICAgICAgICAgICAgICAgICAgICAg ICAgIHdoZW4gVkFDVVVNLnRvX3MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUNVVU0N CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBWQVBPUi50b19zDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgVkFQT1INCiAgICAgICAgICAgICAgICAgICAgICAgICBlbmQNCg0KICAg ICAgZW5kDQogICAgZW5kDQogIGVuZA0KDQogIGRlZiBzdGFydF9zaW0NCiAgICB1bnRpbCBub19t b3JlX3ZhcG9yPyBkbw0KICAgICAgdGljaw0KICAgICAgd3JpdGUNCiAgICBlbmQNCiAgZW5kICMg ZGVmIHN0YXJ0X3NpbQ0KDQogIGRlZiB0aWNrDQogICAgcHV0cyAiU2ltdWxhdGlvbiAje0BuYW1l fSBnZW5lcmF0aW9uICN7QGdlbmVyYXRpb259OiINCiAgICBAZ2VuZXJhdGlvbiArPSAxDQogICAg ZWFjaF9uYmggZG8NCiAgICAgIHwgbmJoIHwNCiAgICAgIG5iaC5yZWNhbGMNCiAgICBlbmQgDQog IGVuZA0KDQogIHByaXZhdGUNCg0KICBkZWYgbm9fbW9yZV92YXBvcj8NCiAgICAhIEB2YWx1ZXMu YW55P3sgfGxpbmV8DQogICAgICBsaW5lLmFueT97IHx2fCB2ID09IFZBUE9SIH0NCiAgICB9DQog IGVuZA0KDQogIGRlZiByZXNldF92YWx1ZXMNCiAgICBAdmFsdWVzID0gQXJyYXkubmV3KEBsaW5l cyl7DQogICAgICBBcnJheS5uZXcoQGNvbHVtbnMpew0KICAgICAgICBWQUNVVU0NCiAgICAgIH0N CiAgICB9DQogIGVuZA0KICBkZWYgc2V0X3ZhcG9ycw0KICAgIHRvdGFsID0gQGxpbmVzICogQGNv bHVtbnMNCiAgICB2ID0gKCBAdmFwb3JzICogICh0b3RhbC0xKSApLnRvX2kNCiAgICB4ID0gWyow Li50b3RhbC0yXQ0KICAgIGF0ID0gW10NCiAgICB2LnRpbWVzIGRvDQogICAgICBhdCA8PCB4LmRl bGV0ZV9hdCggcmFuZCh4LnNpemUpICkNCiAgICBlbmQNCiAgICBhdC5lYWNoIGRvDQogICAgICB8 IGluZGV4IHwNCiAgICAgIGwsYyA9IG1hdHJpeF9pZHggaW5kZXgNCiAgICAgIEB2YWx1ZXNbbF1b Y10gPSBWQVBPUg0KICAgIGVuZA0KICAgIEB2YWx1ZXNbQGxpbmVzLTFdW0Bjb2x1bW5zLTFdID0g QHZhbHVlc1tAc3RhcnQuZmlyc3RdW0BzdGFydC5sYXN0XQ0KICAgIEB2YWx1ZXNbQHN0YXJ0LmZp cnN0XVtAc3RhcnQubGFzdF0gPSBJQ0UNCiAgZW5kICMgZGVmIHNldF92YXBvcnMNCg0KICBkZWYg bGluZWFyX2lkeCByLCBjDQogICAgciAqIEBjb2x1bW5zICsgYw0KICBlbmQNCiAgZGVmIG1hdHJp eF9pZHggbA0KICAgIHJldHVybiBsIC8gQGNvbHVtbnMsIGwgJSBAY29sdW1ucw0KICBlbmQNCg0K ICBkZWYgd3JpdGUNCiAgICBAZm9ybWF0dGVyLnRvX2ZpbGUgc2VsZiwgIm91dHB1dC8je0BuYW1l fS4lMDhkIiAlIEBnZW5lcmF0aW9uDQogIGVuZCAjIGRlZiB3cml0ZQ0KICANCmVuZCAjIGNsYXNz IFRvcnVzXw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMNCiMNCiMgICAgTmVpZ2hib3Job29kIGlzIGltcGxlbWVudGluZyBh IDJ4MiB3aW5kb3cgdG8gYW55IG9iamVjdA0KIyAgICB0aGF0IHJlc3BvbmRzIHRvICNbXW4sbSBh bmQgI1tdPW4sbSx2YWx1ZQ0KIyAgICBJdCBpbXBsZW1lbnRzIHRoZSBvcGVyYXRpb24gb2Ygcm90 YXRpb24uDQojDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMNCmNsYXNzIE5laWdoYm9yaG9vZCANCiAgaW5jbHVkZSBFbnVtZXJh YmxlDQoNCiAgIyBOZWlnaGJvcmhvb2QgZ2l2ZXMgdXMgdGhlIGZvbGxvd2luZyBpbmRleGVkIHZp ZXcgdG8gdGhlIHVuZGVybHlpbmcNCiAgIyB0b3J1cw0KICAjICAgICArLS0tKy0tLSsgICAgICst LS0tLS0tLS0tLSstLS0tLS0tLS0tLSsNCiAgIyAgICAgfCAwIHwgMSB8ICAgICB8IEB0b3AsQGxm dCB8IEB0b3AsQHJndCB8DQogICMgICAgICstLS0rLS0tKyAgICAgKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKw0KICAjICAgICB8IDMgfCAyIHwgICAgIHwgQGJvdCxAbGZ0IHwgQGJvdCxAcmd0IHwN CiAgIyAgICAgKy0tLSstLS0rICAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rDQogICMNCg0K ICBkZWYgaW5pdGlhbGl6ZSAqYXJncw0KICAgIEB0b3J1cywgQHRvcCwgQGJvdHRvbSwgQGxlZnQs IEByaWdodCA9ICphcmdzDQogICAgQG5hbWVzID0gWyBbQHRvcCwgQGxlZnRdLCBbQHRvcCwgQHJp Z2h0XSwgW0Bib3R0b20sIEByaWdodF0sIFtAYm90dG9tLCBAbGVmdF0gXQ0KICBlbmQNCg0KICBk ZWYgW10gbg0KICAgIEB0b3J1c1sgKkBuYW1lc1tuJTRdICBdDQogIGVuZA0KICBkZWYgW109IG4s IHZhbA0KICAgIEB0b3J1c1sgKkBuYW1lc1tuJTRdIF0gPSB2YWwNCiAgZW5kDQoNCiAgZGVmIGVh Y2gNCiAgICA0LnRpbWVzIGRvDQogICAgICB8IGlkeCB8DQogICAgICB5aWVsZCBzZWxmW2lkeF0N CiAgICBlbmQNCiAgZW5kDQoNCiAgZGVmIHJlY2FsYw0KICAgIGlmIGFueT97fHZ8IHYgPT0gSUNF fSB0aGVuDQogICAgICA0LnRpbWVzIGRvDQogICAgICAgIHwgaWR4IHwNCiAgICAgICAgc2VsZlsg aWR4IF0gPSBJQ0UgaWYgc2VsZlsgaWR4IF0gPT0gVkFQT1INCiAgICAgIGVuZA0KICAgIGVsc2UN CiAgICAgIHJvdGF0ZSggcmFuZCgyKSApDQogICAgZW5kDQogIGVuZA0KDQogIGRlZiByb3RhdGUg ZGlyDQogICAgeCA9IHNlbGZbMF0NCiAgICAzLnRpbWVzIGRvDQogICAgICB8IG4gfA0KICAgICAg c2VsZlsgbiArIDIqZGlyKm4gXSA9IHNlbGZbIG4gKyAxICsgZGlyKjIqbi5zdWNjIF0NCiAgICBl bmQgIyAzLnRpbWVzIGRvDQogICAgc2VsZlsgMyArIDIgKiBkaXIgXSA9IHgNCiAgZW5kICMgZGVm IHJvdGF0ZSBkaXINCg0KZW5kICMgY2xhc3MgTmVpZ2hib3Job29kDQoNCg ------ art_20564_27343375.1173623500925--