[#277137] executing VIM on a remote machine? — "Gian Holland" <gianmh@...>

Is is possible with ruby to execute vim on a remote machine to edit a file?

11 messages 2007/11/01

[#277159] Who required that!? — Trans <transfire@...>

Is there any way to ask a file what other file require/load 'd it? I

15 messages 2007/11/02
[#277180] Re: Who required that!? — "ara.t.howard" <ara.t.howard@...> 2007/11/02

[#277359] Unicode illegal characters problem — "Axel Etzold" <AEtzold@...>

Dear all,

16 messages 2007/11/03

[#277377] dragons and factorials (keyboard input) — Thufir <hawat.thufir@...>

I'm getting keyboard input successfully, but I'm getting a string. I

13 messages 2007/11/03

[#277385] x=[]; x[:bla][:some_key] does not work? — Joshua Muheim <forum@...>

Hi all

24 messages 2007/11/03

[#277517] Reading a class-file and calling it at runtime. — Miss Elaine Eos <Misc@...>

I'm trying to read-in a folder full of "plug-ins" and call each of them,

19 messages 2007/11/05
[#277534] Re: [n00b] Reading a class-file and calling it at runtime. — "Sean O'Halpin" <sean.ohalpin@...> 2007/11/05

On 11/5/07, Miss Elaine Eos <Misc@your-pants.playnaked.com> wrote:

[#277579] Re: Reading a class-file and calling it at runtime. — 7stud -- <bbxx789_05ss@...> 2007/11/05

Sean O'halpin wrote:

[#277615] Faking the refering page with Mechanize — Ehud Rosenberg <ehudros@...>

Hi,

13 messages 2007/11/06
[#277617] Re: Faking the refering page with Mechanize — Konrad Meyer <konrad@...> 2007/11/06

Quoth Ehud Rosenberg:

[#277719] Language Popularity - PHP vs Ruby? — Marc Heiler <shevegen@...>

Hi,

26 messages 2007/11/06
[#277773] Re: Language Popularity - PHP vs Ruby? — Ilan Berci <coder68@...> 2007/11/06

Marc Heiler wrote:

[#277881] Re: Language Popularity - PHP vs Ruby? — Alex Young <alex@...> 2007/11/07

Ilan Berci wrote:

[#277785] Re: JRuby performance questions answered — Isaac Gouy <igouy2@...>

Quoting Charles Oliver Nutter <charles.nutter / sun.com>:

23 messages 2007/11/06
[#277789] Re: JRuby performance questions answered — Roger Pack <rogerpack2005@...> 2007/11/06

[#278300] Re: JRuby performance questions answered — Roger Pack <rogerpack2005@...> 2007/11/09

[#278343] Re: JRuby performance questions answered — "Rick DeNatale" <rick.denatale@...> 2007/11/10

On 11/9/07, Roger Pack <rogerpack2005@gmail.com> wrote:

[#278385] Re: JRuby performance questions answered — "M. Edward (Ed) Borasky" <znmeb@...> 2007/11/10

Rick DeNatale wrote:

[#278397] Re: JRuby performance questions answered — Sean Surname <x3qh85202@...> 2007/11/10

M. Edward (Ed) Borasky wrote:

[#277797] Is there a "||" that treats "" also as false? — Joshua Muheim <forum@...>

Hi all

15 messages 2007/11/07

[#277900] a problem related string(250 score) — Johnson Wang <99100@163.com>

How to solve this problem in Ruby????

13 messages 2007/11/07

[#277931] Windows: Scheduled Ruby script won't run — bdezonia@...

Hello all,

12 messages 2007/11/07

[#277944] how to delete array — Surjit Nameirakpam <surjit.meitei@...>

Problem

21 messages 2007/11/07
[#277952] Re: how to delete array — "Leslie Viljoen" <leslieviljoen@...> 2007/11/07

On Nov 7, 2007 10:02 PM, Surjit Nameirakpam <surjit.meitei@gmail.com> wrote:

[#277954] Re: how to delete array — Surjit Nameirakpam <surjit.meitei@...> 2007/11/07

My business logic doesn't help me find which values i have to delete but

[#277955] Re: how to delete array — Surjit Nameirakpam <surjit.meitei@...> 2007/11/07

Surjit Nameirakpam wrote:

[#277980] alternate to case; generating a list of sub-classes — Thufir <hawat.thufir@...>

The below uses pseudo-random number generation to populate an array

11 messages 2007/11/07

[#278070] local variables, eval, and parsing — furtive.clown@...

17 messages 2007/11/08
[#278076] Re: local variables, eval, and parsing — furtive.clown@... 2007/11/08

val = 44

[#278089] Re: local variables, eval, and parsing — Randy Kramer <rhkramer@...> 2007/11/08

On Thursday 08 November 2007 11:25 am, furtive.clown@gmail.com wrote:

[#278099] Re: local variables, eval, and parsing — furtive.clown@... 2007/11/08

On Nov 8, 1:10 pm, Randy Kramer <rhkra...@gmail.com> wrote:

[#278130] Re: local variables, eval, and parsing — Randy Kramer <rhkramer@...> 2007/11/08

On Thursday 08 November 2007 01:45 pm, furtive.clown@gmail.com wrote:

[#278120] 'Class.inherited' v. 'inherited' syntax inside Class — 7stud -- <bbxx789_05ss@...>

How come when you redefine the inherited method in Class, you don't use

12 messages 2007/11/08

[#278171] Ruby/Fastcgi going into uninterruptible after random periods of time — "nate" <ruby@...>

Hello there -

11 messages 2007/11/09

[#278226] Current Quizmaster Retiring — James Edward Gray II <james@...>

When I started the Ruby Quiz project, I made some off-hand comment =20

28 messages 2007/11/09

[#278271] enterprise ruby — Roger Pack <rogerpack2005@...>

I am thinking of doing a 'side by side' distro of Ruby that includes the

50 messages 2007/11/09
[#278276] Re: enterprise ruby — Robert Klemme <shortcutter@...> 2007/11/09

On 09.11.2007 21:28, Roger Pack wrote:

[#278305] Re: enterprise ruby — Lionel Bouton <lionel-subscription@...> 2007/11/10

Robert Klemme wrote the following on 09.11.2007 22:05 :

[#278415] Re: enterprise ruby — Charles Oliver Nutter <charles.nutter@...> 2007/11/11

Lionel Bouton wrote:

[#278592] Re: enterprise ruby — Jay Levitt <jay+news@...> 2007/11/12

On Sun, 11 Nov 2007 22:32:14 -0500, M. Edward (Ed) Borasky wrote:

[#278616] Re: enterprise ruby — "M. Edward (Ed) Borasky" <znmeb@...> 2007/11/12

Jay Levitt wrote:

[#278310] equivalent injecting implementations? — Trans <transfire@...>

Are these strictly equivalent? I get the feeling no, but I haven't

14 messages 2007/11/10
[#278344] Re: equivalent injecting implementations? — "Rick DeNatale" <rick.denatale@...> 2007/11/10

On 11/9/07, Trans <transfire@gmail.com> wrote:

[#278354] The Man or Boy Recursion Test — Werner <wdahn@...>

Hello,

17 messages 2007/11/10
[#278392] Re: The Man or Boy Recursion Test — Tim Hunter <TimHunter@...> 2007/11/10

Werner wrote:

[#278410] Re: The Man or Boy Recursion Test — Lloyd Linklater <lloyd@2live4.com> 2007/11/10

Tim Hunter wrote:

[#278453] Re: The Man or Boy Recursion Test — Tim Hunter <TimHunter@...> 2007/11/11

Lloyd Linklater wrote:

[#278458] Re: The Man or Boy Recursion Test — "Rick DeNatale" <rick.denatale@...> 2007/11/11

On Nov 11, 2007 9:21 AM, Tim Hunter <TimHunter@nc.rr.com> wrote:

[#278413] ruby-1.8.6-p111 build on osx 10.5.0 fails; ok on 10.4.10. bug or config? — snowcrash+rubytalk <schneecrash+rubytalk@...>

hi,

11 messages 2007/11/11
[#278447] Re: ruby-1.8.6-p111 build on osx 10.5.0 fails; ok on 10.4.10. bug or config? — "Laurent Sansonetti" <laurent.sansonetti@...> 2007/11/11

On Nov 11, 2007 1:27 AM, snowcrash+rubytalk

[#278539] comp.lang.fortran challenge — Bil Kleb <Bil.Kleb@...>

Having Ruby fun with the comp.lang.fortran folks:

14 messages 2007/11/12

[#278575] does Ruby has method properties — Thilina Buddhika <thilinamb@...>

In java script it is possible to something like this,

16 messages 2007/11/12

[#278643] alias_method :tap, :affect — Josh Susser <josh@...>

46 messages 2007/11/12
[#278652] Re: alias_method :tap, :affect — "Rick DeNatale" <rick.denatale@...> 2007/11/12

On Nov 12, 2007 12:58 PM, Josh Susser <josh@hasmanythrough.com> wrote:

[#278657] Re: alias_method :tap, :affect — furtive.clown@... 2007/11/12

[#278663] Re: alias_method :tap, :affect — "Martin DeMello" <martindemello@...> 2007/11/12

On Nov 12, 2007 11:10 AM, <furtive.clown@gmail.com> wrote:

[#278675] Re: alias_method :tap, :affect — furtive.clown@... 2007/11/12

On Nov 12, 2:31 pm, Martin DeMello <martindeme...@gmail.com> wrote:

[#278678] Re: alias_method :tap, :affect — James Edward Gray II <james@...> 2007/11/12

On Nov 12, 2007, at 2:40 PM, furtive.clown@gmail.com wrote:

[#278685] Re: alias_method :tap, :affect — furtive.clown@... 2007/11/12

On Nov 12, 3:55 pm, James Edward Gray II <ja...@grayproductions.net>

[#278688] Re: alias_method :tap, :affect — James Edward Gray II <james@...> 2007/11/12

On Nov 12, 2007, at 3:25 PM, furtive.clown@gmail.com wrote:

[#278691] Re: alias_method :tap, :affect — furtive.clown@... 2007/11/12

On Nov 12, 4:37 pm, James Edward Gray II <ja...@grayproductions.net>

[#278692] Re: alias_method :tap, :affect — James Edward Gray II <james@...> 2007/11/12

On Nov 12, 2007, at 4:20 PM, furtive.clown@gmail.com wrote:

[#278693] Re: alias_method :tap, :affect — furtive.clown@... 2007/11/12

On Nov 12, 5:25 pm, James Edward Gray II <ja...@grayproductions.net>

[#278695] Re: alias_method :tap, :affect — James Edward Gray II <james@...> 2007/11/12

On Nov 12, 2007, at 4:35 PM, furtive.clown@gmail.com wrote:

[#278705] Re: alias_method :tap, :affect — furtive.clown@... 2007/11/12

>

[#278706] Re: alias_method :tap, :affect — James Edward Gray II <james@...> 2007/11/12

On Nov 12, 2007, at 5:30 PM, furtive.clown@gmail.com wrote:

[#278708] Re: alias_method :tap, :affect — furtive.clown@... 2007/11/12

On Nov 12, 6:39 pm, James Edward Gray II <ja...@grayproductions.net>

[#278710] Re: alias_method :tap, :affect — Raul Parolari <raulparolari@...> 2007/11/13

unknown wrote:

[#278742] Yielding an object and caring about the result: the cousin of Object#tap — furtive.clown@...

The idea of Object#tap is to insert a "listener" (like tapping a phone

36 messages 2007/11/13
[#278744] Re: Yielding an object and caring about the result: the cousin of Object#tap — furtive.clown@... 2007/11/13

[#278853] Re: Yielding an object and caring about the result: the cousin of Object#tap — "ara.t.howard" <ara.t.howard@...> 2007/11/13

[#278864] Re: Yielding an object and caring about the result: the cousin of Object#tap — furtive.clown@... 2007/11/13

Ara,

[#278884] Re: Yielding an object and caring about the result: the cousin of Object#tap — -a <ara.t.howard@...> 2007/11/13

[#278981] Re: Yielding an object and caring about the result: the cousin of Object#tap — furtive.clown@... 2007/11/14

Let's compare them again. I changed some variable names which will

[#278840] Why are so many people confused about "Enterprise" software? — "Kyle Schmitt" <kyleaschmitt@...>

Really, why are so many people confused about "Enterprise" software,

10 messages 2007/11/13

[#278871] Ordered Hash Usefulness — "Devi Web Development" <devi.webmaster@...>

On Nov 12, 2007 7:56 AM, James Edward Gray II <james@grayproductions.net> wrote:

19 messages 2007/11/13

[#278878] recursion with blocks — Mike Perham <mperham@...>

I have a tree structure where I want to walk the structure and find a

13 messages 2007/11/13

[#278928] rails incredibly slow (update) — Ron Jeffries <ronjeffries@...>

After 24 minutes of waiting, the Welcome Aboard window came up in my

75 messages 2007/11/14
[#278936] Re: rails incredibly slow (update) — Ron Jeffries <ronjeffries@...> 2007/11/14

On Tue, 13 Nov 2007 23:22:29 -0500, Mohit Sindhwani

[#279008] ruby incredibly slow (update 2) — Ron Jeffries <ronjeffries@...> 2007/11/14

On Wed, 14 Nov 2007 11:42:17 -0500, Tanner Burson

[#279418] Re: ruby incredibly slow (update 2) — Ron Jeffries <ronjeffries@...> 2007/11/17

On Fri, 16 Nov 2007 07:51:51 -0500, Bob Hutchison <hutch@recursive.ca>

[#279710] Re: ruby incredibly slow (update 2) — Bob Hutchison <hutch@...> 2007/11/19

[#279121] webrick alternative — Michael Conrad <list-ruby@...>

Hi,

20 messages 2007/11/15

[#279241] Alternative Ruby grammar — Markus Liedl <m.liedl@...>

I have spent the last months to write an alternative Ruby grammar now

23 messages 2007/11/16

[#279263] meta-class subclass relationships — Greg Weeks <greg.weeks@...>

Ruby exposes its singleton meta-classes, eg:

16 messages 2007/11/16
[#279288] Re: meta-class subclass relationships — "David A. Black" <dblack@...> 2007/11/16

Hi --

[#279347] Goedel (#147) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

21 messages 2007/11/16

[#279360] "instance_eval" (eg, sent to a class object) — Greg Weeks <greg.weeks@...>

I've poked around, but I don't get instance_eval at all.

11 messages 2007/11/16

[#279419] Composition: Build objects from other objects — Thufir <hawat.thufir@...>

<http://www.javaworld.com/javaworld/jw-06-2001/jw-0608-java101.html> has

22 messages 2007/11/17

[#279539] Five Top programming Languages — bicomplex@...

Five Top programming Languages

15 messages 2007/11/18

[#279564] GUI and ruby — ulazar <ulazar@...>

I would like to create an interface GUI with ruby. What I have to use? I

17 messages 2007/11/18

[#279642] Open-ended ranges? — Clifford Heath <no@...>

Folk,

21 messages 2007/11/19

[#279670] False positives in editing data — RichardOnRails <RichardDummyMailbox58407@...>

Hi All,

39 messages 2007/11/19

[#279671] Is there an equivalent in irb to command: history in bash? — Stephen Bannasch <stephen.bannasch@...>

Is there an equivalent in irb to the command history in bash?

11 messages 2007/11/19
[#279675] Re: Is there an equivalent in irb to command: history in bash? — Chris Shea <cmshea@...> 2007/11/19

On Nov 18, 10:44 pm, Stephen Bannasch <stephen.banna...@deanbrook.org>

[#279738] Read last line of a file — Shuaib Zahda <shuaib.zahda@...>

Hi all

17 messages 2007/11/19
[#279748] Re: Read last line of a file — Xavier Noria <fxn@...> 2007/11/19

On Nov 19, 2007, at 3:38 PM, Shuaib Zahda wrote:

[#279822] RubyGems 0.9.5 — Eric Hodel <drbrain@...7.net>

RubyGems 0.9.5 adds several new features and fixes several bugs.

56 messages 2007/11/20
[#279841] Re: RubyGems 0.9.5 — Michael Greenly <mgreenly@...> 2007/11/20

I got caught by some "tired at the end of the day" stupidity...

[#279903] Re: RubyGems 0.9.5 — "Rick DeNatale" <rick.denatale@...> 2007/11/20

On Nov 20, 2007 12:53 AM, Michael Greenly <mgreenly@gmail.com> wrote:

[#279907] Re: RubyGems 0.9.5 — Michael Greenly <mgreenly@...> 2007/11/20

Rick Denatale wrote:

[#279921] Re: RubyGems 0.9.5 — "M. Edward (Ed) Borasky" <znmeb@...> 2007/11/20

Michael Greenly wrote:

[#279928] Re: RubyGems 0.9.5 — "Austin Ziegler" <halostatue@...> 2007/11/20

On 11/20/07, M. Edward (Ed) Borasky <znmeb@cesmail.net> wrote:

[#279935] Re: RubyGems 0.9.5 — Michael Greenly <mgreenly@...> 2007/11/20

Austin Ziegler wrote:

[#280023] Re: RubyGems 0.9.5 — Eric Hodel <drbrain@...7.net> 2007/11/20

On Nov 20, 2007, at 08:18 , Michael Greenly wrote:

[#280086] Re: RubyGems 0.9.5 — Sylvain Joyeux <sylvain.joyeux@...> 2007/11/21

On Wed, Nov 21, 2007 at 08:09:18AM +0900, Eric Hodel wrote:

[#280119] Re: RubyGems 0.9.5 — "Austin Ziegler" <halostatue@...> 2007/11/21

On 11/21/07, Sylvain Joyeux <sylvain.joyeux@polytechnique.org> wrote:

[#279870] eigenvalues, eigenvectors in Ruby ??? — unbewusst.sein@... (Une B騅ue)

40 messages 2007/11/20

[#279877] read, write, seek method in a ring buffer class — Martin Durai <martin@...>

Could any body help me with creating a ring buffer class using a string.

12 messages 2007/11/20

[#279887] is there an nicer way for this expression? — Remco Hh <remco@...>

hi,

18 messages 2007/11/20

[#279896] Choosing a scripting language for scientific programming — deltaquattro <deltaquattro@...>

Hi,

14 messages 2007/11/20

[#279940] AJAX without Rails — Miki Vz <mikisvaz@...>

Hi, I'm pretty new to Ajax.

24 messages 2007/11/20
[#279953] Re: AJAX without Rails — Miki Vz <mikisvaz@...> 2007/11/20

Actually, I'm not sure I'm using eruby, I'm using mod_ruby and

[#279961] Re: AJAX without Rails — Deepak Vohra <dvohra09@...> 2007/11/20

http://www.regdeveloper.co.uk/2007/01/15/ajax_rails_tutorial/

[#279963] Re: AJAX without Rails — Miki Vz <mikisvaz@...> 2007/11/20

Isn't this precisely a rails tutorial? I'm trying not to use rails,

[#279967] Re: AJAX without Rails — Deepak Vohra <dvohra09@...> 2007/11/20

Ruby on Rails is the only Ajax framework for Ruby.

[#279984] Packet : A Pure Ruby Library for Event Driven Network Programming — hemant <gethemant@...>

Hi Folks,

11 messages 2007/11/20

[#280005] Ruby Tool Survey — Tim Bray <Tim.Bray@...>

I'm running a survey to find out what tools Ruby and Rails people

24 messages 2007/11/20

[#280091] porting java methods to ruby — Martin Durai <martin@...>

could any one help me out to solve this.

19 messages 2007/11/21

[#280232] How to give depth to arrays? — Chris Morales <primo.tertio@...>

Hi,

12 messages 2007/11/22

[#280316] Checking whether a string is a number in disguise? — Peter Bunyan <peter.bunyan@...>

I'm working on an RPN calculator (don't ask why...) and I'm having

10 messages 2007/11/22

[#280521] Iterating through class names using a block — Ge Bro <boomstik@...>

Hey all,

14 messages 2007/11/24

[#280542] Convert words to numbers and back? — Jordon Bedwell <jordon@...>

I was wondering if somebody could give me some insight and help on how

10 messages 2007/11/24

[#280645] Moving files matching Regex — Mark Woodward <markonlinux@...>

Hi all,

16 messages 2007/11/25

[#280664] specify start postion of Regexp matching — makoto kuwata <kwa@...>

Hi, all.

16 messages 2007/11/25

[#280670] Creating a rubygem - a story and help request — Phrogz <phrogz@...>

The Story

11 messages 2007/11/25

[#280708] European Ruby Conference 2008 in Prague, Czech Republic? — Karel Minařík <karel.minarik@...>

Hi all,

13 messages 2007/11/25

[#280818] Removing duplicates and substrings from an array — "Sam Larbi" <slarbi@...>

I've got an array of strings, say like:

12 messages 2007/11/26

[#280901] Most elegant way to do this? — rbysamppi@...

Are there any more elegant, concise, pithy, and more Rubyish ways of

31 messages 2007/11/27

[#280905] Bizarre Floating point errors in Ruby? Serious bug? — space.ship.traveller@...

Hi,

16 messages 2007/11/27

[#280921] FEATURE SUGGESTION: Accept default value for to_f and to_i — Mr Magpie <gazmcgheesubs@...>

I suggest that to_i() and to_f() have an optional parameter added with

13 messages 2007/11/27

[#280923] Ruby on OLPC?? — "M. Edward (Ed) Borasky" <znmeb@...>

I've been seriously considering the One Laptop Per Child Give One Get

25 messages 2007/11/27

[#280947] Re: "Why I Program In Ruby (And Maybe Why You Shouldn't)" — Raul Parolari <raulparolari@...>

Trollen Lord wrote:

36 messages 2007/11/27
[#281035] Re: "Why I Program In Ruby (And Maybe Why You Shouldn't)" — MonkeeSage <MonkeeSage@...> 2007/11/27

On Nov 27, 11:42 am, Trollen Lord <trollenl...@gmail.com> wrote:

[#281081] Re: "Why I Program In Ruby (And Maybe Why You Shouldn't)" — MonkeeSage <MonkeeSage@...> 2007/11/27

On Nov 27, 3:24 pm, Trollen Lord <trollenl...@gmail.com> wrote:

[#281012] Accessing a file server with ruby — Anthony <improvcornartist@...>

This seems like it should be a simple solution, but I don't know

15 messages 2007/11/27

[#281157] Equivalent for unix "read" command in rake tasks? — Rob Lucas <roblucas@...>

Hi,

10 messages 2007/11/28

[#281174] Ruby needs continuations... — "Just Another Victim of the Ambient Morality" <ihatespam@...>

Warning: I don't really know what I'm talking about so if I make any

26 messages 2007/11/28

[#281224] Im trying to make Thumbnail pics -- any suggestions? — wiz_pendases@...

Im trying to make Thumbnail pics -- any suggestions? (dont know wher

10 messages 2007/11/28

[#281273] Custom Protocol — thefed <fedzor@...>

I understand that I've asked a similar question that of custom packets.

16 messages 2007/11/28

[#281295] Creating Databases in Ruby — "Will Mueller" <will.liljon@...>

Hello All,

12 messages 2007/11/29

[#281331] Hash Sorting — Nathan Viswa <nathanv@...>

Can not understand how the block after sort works! Need help. thanks.

25 messages 2007/11/29

[#281385] Negate a character sequence in a regular expression? — crm_114@...

For the following string:

12 messages 2007/11/29

[#281432] when 1.9.0 will be released? — sayoyo Sayoyo <sayoyo@...>

Hi, does someone know when the 1.9.0 will be released?

17 messages 2007/11/30

[#281478] Postfix to Infix (#148) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

45 messages 2007/11/30

[#281519] Unicode in Regex — Greg Willits <lists@...>

This is mostly a Ruby thing, and partly a Rails thing.

33 messages 2007/11/30

[SUMMARY] Goedel (#147)

From: Ruby Quiz <james@...>
Date: 2007-11-29 15:25:18 UTC
List: ruby-talk #281356
This quiz is really just an optimization problem.  It's pretty trivial to do a
conversion to and from a Goedel number.  See Eric Lavigne's under-30-lines
solution for a great example of this.  The challenge arises when the message
gets big enough that finding all of the factors takes significant time.

Eric I. figured out how to cut quite a few corners on the decoding process, so I
want to take a look at his code.

Before we get into the actual encoding and decoding process though, let's talk a
bit about primes.  Obviously, we need a source of prime numbers to do our work. 
Ruby does ship with a standard mathn library that includes a Prime class.  Many
solutions did put that library to good use.  There are two downsides to that
approach though:  mathn is a pure Ruby library and the Prime class
implementation in Ruby 1.8 is not very clever.  Both of these slow us down.

To get around that, Eric built a drop-in replacement for the Prime class that
cheats.  It simply reads the numbers from a huge list you can download, skipping
any calculation effort.  This turns out to be faster for our needs.  Here's the
code:

	# Generates a stream of prime numbers as they're read from a sequence
	# of files with names such as "primes1.txt", "primes2.txt", and so
	# forth.  Such files can be downloaded from:
	#   http://primes.utm.edu/lists/small/millions/
	
	class Prime
	  def initialize
	    @current_file = 0
	    @io = open_next_file
	    @current_primes = []
	    @current_index = 0
	  end
	
	  def next
	    load_next_primes until value = @current_primes[@current_index]
	    @current_index += 1
	    value
	  end
	
	  private
	
	  def load_next_primes
	    while true
	      while line = @io.gets
	        if line =~ /^\s*\d+(\s+\d+)*\s*$/
	          @current_primes = line.split.map { |e| e.to_i }
	          @current_index = 0
	          return
	        end
	      end
	      @io.close
	      open_next_file
	    end
	  end
	
	  def open_next_file
	    @current_file += 1
	    filename = "primes%d.txt" % @current_file
	    begin
	      @io = open(filename)
	    rescue
	      raise "ran out of primes because couldn't open file \"%s\"" %
	        filename
	    end
	  end
	end

As you can see, this is simple stuff.  The class just opens a file called
primes1.txt when initialize()d (see open_next_file()).  As needed, lines are
read from this file, split() and converted into Integers, and tucked away inside
an Array (see load_next_primes()).  Primes are then just handed out from this
Array (see next()) and when the supply is exhausted new lines are read.  When we
run out of lines, the code will move on to a primes2.txt file.

The site linked to in the comment has the first 15 million primes available in
files like this.  That more than covers the needs of this code, so this turns
out to be a simple but effective cheat to save time.

With a zippy Prime class defined, we are ready to get down to the real work:

	require 'primes'  # or the standard mathn library
	
	# Put the coder in a separate class, so we have the potential to use
	# other coders, such as the one from the Starburst novel.
	class RubyQuizCoder
	  def encode(char)
	    char[0] + 1
	  end
	
	  def decode(number)
	    (number - 1).chr
	  end
	
	  def max_code
	    127
	  end
	end
	
	# ...

Here we see the require for the code that we just examined.  Note that this code
will work fine with a mathn require as well though.

The class defined here is the simple encoding described in the quiz.  As the
comment indicates, pulling this code into the class makes it easy to swap out
with other encoding schemes.

The work horse methods for the solution are encode() and decode(), of course. 
Here's the easy one:

	# ...
	
	def encode(input, primes, coder)
	  goedel_value = 1
	
	  input.each_line do |line|
	    0.upto(line.size - 1) do |i|
	      char = line[i, 1]
	      encoding = coder.encode char
	      next if encoding.nil?  # skip characters without encoding
	      goedel_value *= primes.next ** encoding
	    end
	  end
	
	  puts goedel_value
	end
	
	# ...

The code works its way line by line and character by character through the
input.  Each character is encoded using the RubyQuizCoder class we saw earlier,
used as an exponent for a prime based on its position, and finally multiplied
into the overall Goedel value.  When all of the characters have been dealt with,
the overall value is printed as a result.

The reverse operation is harder to digest, because it's where the optimizations
are hiding:

	# ...
	
	# Attempt to decode quickly by trying to perfectly divide by
	# prime**(2**6), prime**(2**5), prime**(2**4), ..., prime**(2**0) and
	# then adding the powers of 2 for which the division worked without a
	# remainder.  For example, if a number were divisible by prime**101,
	# then it's also divisible by prime**64 * prime**32 * prime**4 *
	# prime**1 since 64 + 32 + 4 + 1 = 101.  So, we'll have to divide the
	# large number exactly 7 times per prime no matter what the exponent.
	# Note: 7 assumes that the encoding results in no value greater than
	# 127.
	def decode(input, primes, coder)
	  goedel_value = input.gets.to_i
	  max_two_expnt = (Math.log(coder.max_code) / Math.log(2)).to_i
	  factors = (0..max_two_expnt).map { |i| [2**i, nil] }
	
	  while goedel_value > 1
	    current_prime = primes.next
	    encoded = 0
	
	    factors[0][1] = current_prime
	    (1..max_two_expnt).each do |i|
	      factors[i][1] = factors[i - 1][1] ** 2
	    end
	
	    factors.reverse_each do |expnt, factor|
	      quotient, remainder = goedel_value.divmod(factor)
	      if remainder == 0
	        encoded += expnt
	        goedel_value = quotient
	      end
	    end
	
	    char = coder.decode(encoded)
	    putc char unless char.nil?
	  end
	end
	
	# ...

The biggest trick in here is the use of factorization to narrow down the
divisions needed.  Until the overall value hits one, each prime is pulled in
turn and factored into the possible divisors.  Each of those numbers is then
tried in reverse order.  Those that divide evenly are added to the encoded
character count and drop the overall count accordingly.  After all of the
factors have been tried, the character count is passed through our RubyQuizCoder
object and the resulting character is printed.

This strategy results in a constant number of divisions for each character and
in most cases, those divisions should be significantly less than the brute force
approach.

The rest of the code just provides an interface to these routines:

	# ...
	
	def usage
	  STDERR.puts "Usage: %s -e[ncode]|-d[ecode] [file]" % $0
	  exit 1
	end
	
	# process command-line args and figure out which method to call
	
	task = nil
	input = nil
	ARGV.each do |arg|
	  case arg
	  when /^-+e/   : task = :encode
	  when /^-+d/   : task = :decode
	  else if input : usage
	       else       input = open(arg)
	       end
	  end
	end
	
	input = STDIN if input.nil?
	primes = Prime.new
	coder = RubyQuizCoder.new
	
	case task
	when :encode : encode(input, primes, coder)
	when :decode : decode(input, primes, coder)
	else           usage
	end

This is just some basic argument parsing code.  It hunts for a -e or -d switch
to figure out if we are encoding or decoding.  It also opens a file of input for
the first non-switch argument or defaults to STDIN.  Failing to select a mode or
providing multiple input parameters triggers the usage message and an exit()
call.  Otherwise, the selected routine is called with the input, a prime
generator, and the coder.

	356592611993533159357704171943707065506245018107843654420869995255779400
	940327637098004636805658940369248254005741705095861927174094085632357462
	907907043655503052325570584135928519171701028451925211424184061134912519
	346213124822184698766352106671144335797309339814960788404357329829880747
	370816749488671200451708065007982023372864606432786154466561150882383337
	665739304198857199016703678239557259404453555953430721034149637848167371
	696741427087919115033228735590823604859393603457456530272005167282069777
	767057670186595718538513692305202904620672162211361327059254731120977063
	134449493970743739621694338383775782689258152219852727482221819916188854
	728922544056620806588370831318213885828889837200379775053853865140225412
	662845287202726609004691108889366849057859320331241672049374448503639685
	391414041859040062271216363732269502663137649053220830210776147948360695
	030849925289805667675539825659032822205396840604174306471211962857755270
	446984071785349996985198175348758225276208258987173267939423506126205306
	366658339817220773597781191289736402029252868902666231417359731588146165
	666320778680777303480755853750057521054497117887073508511901428397946093
	449376833443738252027373639560059173037124844900113551258953525303486104
	043722150604562552368672756555770801627883622940792114968157184742775843
	032899157541783062241525730231786371568328435169052449375068965888786768
	418148739617709373626622156165087821359521473101982925802046545744126160
	160591686651704019368238740807898239650093187094408149981270808624486401
	576666800438277327766454315294642692798530476745070050857038213692995319
	240862517113963583832414299967798488646237585020392202957001143544708578
	006399968115609032521439107622793677586436726234995703756213467526362754
	053665223526567818472971465689078159087061330179433352620768373562074252
	272173230499663950656487104976363578669988246793426315517241324669161225
	95456614469899787029059315850805248000000000000000000000000000000000

Tomorrow we will ...

In This Thread

Prev Next