[#118612] OS X Tiger still including ruby 1.6 — Carl Youngblood <carl.youngblood@...>

I'm not sure who to talk to about this, but in my correspondence with

17 messages 2004/11/01

[#118651] symbol solver.. early experiments — Simon Strandgaard <neoneye@...>

Hi,

11 messages 2004/11/01

[#118675] fastcgi performance problems and ruby — andrew.stuart@...

Hello

16 messages 2004/11/02

[#118679] US Presidential Election — "trans. (T. Onoma)" <transami@...>

Election Day is upon us!

135 messages 2004/11/02
[#118681] Re: [OT] US Presidential Election — James Britt <jamesUNDERBARb@...> 2004/11/02

trans. (T. Onoma) wrote:

[#118690] Re: [OT] US Presidential Election — Ara.T.Howard@... 2004/11/02

On Tue, 2 Nov 2004, trans. (T. Onoma) wrote:

[#118696] Re: [OT] US Presidential Election — Logan Capaldo <logancapaldo@...> 2004/11/02

I am neither a Kerry or Bush supporter. Idealy I would vote

[#118734] Re: [OT] US Presidential Election — Richard Kilmer <rich@...> 2004/11/02

Bush, with conviction ;-)

[#118744] Re: [OT] US Presidential Election — Thomas Kirchner <lists@...> 2004/11/02

On Tue, Nov 02, 2004 at 09:18:12PM +0900, Richard Kilmer wrote:

[#118836] From getoptlong to optparse — Massimiliano Mirra - bard <mmirra@...>

15 messages 2004/11/02

[#118863] Programmatically and dynamically catching exceptions — Logan Capaldo <logancapaldo@...>

Allright here was my idea which seems to have been shattered by the

13 messages 2004/11/03

[#118965] Ruby Package for MacOS X — Mark Hubbart <discordantus@...>

Hi all,

11 messages 2004/11/04

[#118970] Ruby and civil political discussion? (Re: [OT] US Presidential Election) — "Dave Burt" <burtdav@...>

"David Morton" <mortonda@gmail.com> wrote:

18 messages 2004/11/04

[#118988] rails: gem install rails is bombing — "J. D." <jd@...>

Hi,

11 messages 2004/11/04
[#118994] Re: rails: gem install rails is bombing — David Heinemeier Hansson <david@...> 2004/11/04

> I'm running into a problem installing rails using gem. How do I fix

[#118997] Ruby BitTorrent — (Curne) Simon Conrad-Armes <curne@...>

Has anybody started a Ruby BitTorrent transfer library? I wanted to

13 messages 2004/11/04

[#119059] Will ActiveRecord support Berkeley DB? — "J. D." <jd@...>

Hi,

13 messages 2004/11/04

[#119111] FastCGI parameters (get and post) — "J. D." <jd@...>

Hi,

21 messages 2004/11/04
[#119114] Re: FastCGI parameters (get and post) — Kent Sibilev <ksibilev@...> 2004/11/04

GET parameters you have to parse from ENV['QUERY_STRING'].

[#119117] Re: FastCGI parameters (get and post) — "J. D." <jd@...> 2004/11/04

Kent Sibilev wrote:

[#119176] Re: FastCGI parameters (get and post) — Patrick May <patrick@...> 2004/11/05

[#119208] Re: FastCGI parameters (get and post) — MoonWolf <moonwolf@...> 2004/11/05

Patrick May wrote:

[#119275] Re: FastCGI parameters (get and post) — Patrick May <patrick@...> 2004/11/05

Quoting MoonWolf <moonwolf@moonwolf.com>:

[#119289] Re: FastCGI parameters (get and post) — gabriele renzi <rff_rff@...> 2004/11/05

Patrick May ha scritto:

[#119357] Re: FastCGI parameters (get and post) — Patrick May <patrick@...> 2004/11/06

[#119358] Re: FastCGI parameters (get and post) — Ara.T.Howard@... 2004/11/06

On Sun, 7 Nov 2004, Patrick May wrote:

[#119132] recursive brace matching with Ruby regexp — Jason Sweat <jason.sweat@...>

I wanted to learn Ruby, so I picked a small task of trying to write a

19 messages 2004/11/05
[#119149] Re: recursive brace matching with Ruby regexp — Mark Hubbart <discordantus@...> 2004/11/05

Hi,

[#119161] Re: recursive brace matching with Ruby regexp — James Edward Gray II <james@...> 2004/11/05

On Nov 4, 2004, at 8:04 PM, Mark Hubbart wrote:

[#119148] Ruby 1.4.6 - trouble with require path — primehalo@... (Ken Innes)

I inherited a project that uses Ruby 1.4.6 on a RedHat Linux 6.1J. I

12 messages 2004/11/05

[#119168] value provided for argument with default value - how to check inside method? — "itsme213" <itsme213@...>

Is there an equivalent of block_given? to check if the caller provided a

16 messages 2004/11/05

[#119223] GEDCOM Parser (#6) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

40 messages 2004/11/05
[#119224] Re: [QUIZ] GEDCOM Parser (#6) — Jim Menard <jimm@...> 2004/11/05

> <gedcom>

[#119371] Documenting accessor methods as methods — James Britt <jamesUNDERBARb@...>

I sometimes use the method definition shorthand 'attr_reader',

29 messages 2004/11/06
[#119373] Re: [RDOC] Documenting accessor methods as methods — Gavin Kistner <gavin@...> 2004/11/07

On Nov 6, 2004, at 4:23 PM, James Britt wrote:

[#119386] Re: [RDOC] Documenting accessor methods as methods — Dave Thomas <dave@...> 2004/11/07

[#119406] Re: [RDOC] Documenting accessor methods as methods — James Britt <jamesUNDERBARb@...> 2004/11/07

Dave Thomas wrote:

[#119417] Re: [RDOC] Documenting accessor methods as methods — Dave Thomas <dave@...> 2004/11/07

[#119428] Re: [RDOC] Documenting accessor methods as methods — James Britt <jamesUNDERBARb@...> 2004/11/07

Dave Thomas wrote:

[#119432] Re: [RDOC] Documenting accessor methods as methods — Sam Roberts <sroberts@...> 2004/11/07

Quoteing jamesUNDERBARb@neurogami.com, on Mon, Nov 08, 2004 at 04:26:26AM +0900:

[#119439] Re: [RDOC] Documenting accessor methods as methods — James Britt <jamesUNDERBARb@...> 2004/11/07

Sam Roberts wrote:

[#119535] rdoc and vim folding — "Ara.T.Howard" <Ara.T.Howard@...>

24 messages 2004/11/08
[#119540] Re: rdoc and vim folding — Dave Thomas <dave@...> 2004/11/08

[#119543] Re: rdoc and vim folding — Hans Fugal <hans@...> 2004/11/09

Dave Thomas wrote:

[#119545] Re: rdoc and vim folding — "Ara.T.Howard" <Ara.T.Howard@...> 2004/11/09

On Mon, 8 Nov 2004, Hans Fugal wrote:

[#119597] One-Click Installer 1.8.2-14 RC9 with RubyGems built-in — "Curt Hibbs" <curt@...>

This release candidate of the One-Click Installer for

22 messages 2004/11/09

[#119598] RedCloth 3.0.0 -- Textile and Markdown Elope! — why the lucky stiff <ruby-talk@...>

RedCloth 3 is out. You know? RedCloth? Perhaps you've heard of it.

14 messages 2004/11/09

[#119607] Iterating trough hash — Kevin =?ISO-8859-15?Q?B=F6rgens?= <kevin@...>

Hi!

19 messages 2004/11/09

[#119685] new spam at the wiki — Edwin Eyan Moragas <haaktu@...>

been checking my pages and it looks like we've got a new spammer on board.

41 messages 2004/11/10
[#119708] Re: new spam at the wiki — Jim Weirich <jim@...> 2004/11/10

On Wednesday 10 November 2004 02:00 am, Edwin Eyan Moragas wrote:

[#119748] Re: new spam at the wiki — Asfand Yar Qazi <see@...> 2004/11/10

Jim Weirich wrote:

[#119754] Re: new spam at the wiki — Henrik Horneber <ryco@...> 2004/11/10

Asfand Yar Qazi wrote:

[#119756] Re: new spam at the wiki — Charles Comstock <cc1@...> 2004/11/10

[#119796] A Wiki/Spam Report — "Jim Weirich" <jim@...> 2004/11/10

Hello all.

[#119895] Re: A Wiki/Spam Report — Ben Giddings <bg-rubytalk@...> 2004/11/11

Jim Weirich wrote:

[#119911] Re: A Wiki/Spam Report — gabriele renzi <rff_rff@...> 2004/11/11

Ben Giddings ha scritto:

[#119935] Re: A Wiki/Spam Report — "Jim Weirich" <jim@...> 2004/11/11

[#119799] array.each restart when array is changed — Kevin =?ISO-8859-15?Q?B=F6rgens?= <kevin@...>

Hi!

18 messages 2004/11/10

[#119825] Arachno users? — "itsme213" <itsme213@...>

Any Arachno IDE users out there? Do you mind sharing your opinion of the

16 messages 2004/11/11
[#119908] Re: Arachno users? — Wayne Vucenic <nightphotos@...> 2004/11/11

I've been programming in Ruby for 3 years, and using ArachnoRuby for

[#119826] ruby idiom for attribute definition? — "Corey" <corey_s@...>

19 messages 2004/11/11

[#119878] Thinking About Java Interfaces In Ruby — James Edward Gray II <james@...>

I'm currently reading "Holub on Patterns", an excellent volume on

18 messages 2004/11/11

[#119974] warning: redefining Object#initialize may cause infinite loop — Stu <ceaser@...>

12 messages 2004/11/12

[#120037] Copland to Needle article on RubyGarden — Chad Fowler <chadfowler@...>

For those not subscribed to RubyGarden's rss feed[1], Jamis Buck has

35 messages 2004/11/12
[#120214] Re: [ANN] Copland to Needle article on RubyGarden (LONG) — Joel VanderWerf <vjoel@...> 2004/11/13

Chad Fowler wrote:

[#120431] Starter question on Test::Unit — Mohammad Khan <mkhan@...> 2004/11/15

Hello,

[#120056] Countdown (#7) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

26 messages 2004/11/12

[#120061] why does rss/maker not raise errors? — Sam Roberts <sroberts@...>

There are lots of mandatory attributes (yes, which are mandatory is

26 messages 2004/11/12
[#120133] bug: rss/maker is requiring <image> for rss/0.9 — Sam Roberts <sroberts@...> 2004/11/13

It says it is optional here:

[#120071] assert — "itsme213" <itsme213@...>

I could not find a standard "assert" in Ruby. Is there one?

29 messages 2004/11/12

[#120248] Dynamic define_method on class creation per module namespace — "trans. (T. Onoma)" <transami@...>

Here's a wee challenge for Rubyists at large. Consider:

12 messages 2004/11/14

[#120261] Countdown (#7) — Dennis Ranke <dennis.ranke@...>

Hi, here is my second solution for this very interesting quiz.

15 messages 2004/11/14

[#120271] Ruby in the enterprise... — "Wood, Jeff" <jeffwood@...>

Hello all,=20

14 messages 2004/11/14

[#120299] OpenStruct#update ? — "trans. (T. Onoma)" <transami@...>

How 'bout an OpenStruct#update for adding values after initialization. Or is

72 messages 2004/11/14
[#120306] Re: OpenStruct#update ? — "trans. (T. Onoma)" <transami@...> 2004/11/14

On Sunday 14 November 2004 03:42 pm, trans. (T. Onoma) wrote:

[#120337] Re: OpenStruct#update ? — Yukihiro Matsumoto <matz@...> 2004/11/14

Hi,

[#120355] Re: OpenStruct#update ? — "trans. (T. Onoma)" <transami@...> 2004/11/15

On Sunday 14 November 2004 06:16 pm, Yukihiro Matsumoto wrote:

[#120395] Re: OpenStruct#update ? — Florian Gross <flgr@...> 2004/11/15

trans. (T. Onoma) wrote:

[#120401] Kernel#singleton_class (was: Re: OpenStruct#update ?) — "David A. Black" <dblack@...> 2004/11/15

Hi --

[#120405] Re: Kernel#singleton_class — Florian Gross <flgr@...> 2004/11/15

David A. Black wrote:

[#120407] Re: Kernel#singleton_class — "David A. Black" <dblack@...> 2004/11/15

Hi --

[#120446] Re: Kernel#singleton_class — Yukihiro Matsumoto <matz@...> 2004/11/15

Hi,

[#120449] Re: Kernel#singleton_class — "trans. (T. Onoma)" <transami@...> 2004/11/15

On Monday 15 November 2004 12:28 pm, Yukihiro Matsumoto wrote:

[#120380] Arachno Ruby 0.3 (patch 2) — Lothar Scholz <mailinglists@...>

Hello,

16 messages 2004/11/15

[#120485] rpa-base 0.2.3 — Mauricio Fern疣dez <batsman.geo@...>

15 messages 2004/11/15
[#120516] Re: [ANN] rpa-base 0.2.3 — Matt Armstrong <matt@...> 2004/11/16

[#120626] Re: [ANN] rpa-base 0.2.3 — Mauricio Fern疣dez <batsman.geo@...> 2004/11/17

On Tue, Nov 16, 2004 at 02:08:23PM +0900, Matt Armstrong wrote:

[#120573] Can't Build Ruby 1.8.1 on HP-UX 11.00 — Kevin Hinners <kevin.hinners@...>

I've downloaded the stable 1.8.1 release of Ruby. When I attempt to run make

21 messages 2004/11/16
[#120574] Re: Can't Build Ruby 1.8.1 on HP-UX 11.00 — Yukihiro Matsumoto <matz@...> 2004/11/16

Hi,

[#120577] Re: Can't Build Ruby 1.8.1 on HP-UX 11.00 — Kevin Hinners <kevin.hinners@...> 2004/11/16

Top segment of mkmk.log:

[#120582] Re: Can't Build Ruby 1.8.1 on HP-UX 11.00 — Yukihiro Matsumoto <matz@...> 2004/11/16

Hi,

[#120609] Ruby to C to another language (perhaps Java (I Don't Need JRuby)) — Zach Dennis <zdennis@...>

This posting is more for a learning thing then anything else at this

10 messages 2004/11/17

[#120727] About Regular Expressions — Nikolai Weibull <mailing-lists.ruby-talk@...>

Lately there have been a bunch of posts on this list about regular

31 messages 2004/11/18
[#120739] Re: About Regular Expressions — "trans. (T. Onoma)" <transami@...> 2004/11/18

On Thursday 18 November 2004 05:34 am, Nikolai Weibull wrote:

[#120745] Re: About Regular Expressions — Nikolai Weibull <mailing-lists.ruby-talk@...> 2004/11/18

* trans. (T. Onoma) <transami@runbox.com> [Nov 18, 2004 14:10]:

[#120764] Re: About Regular Expressions — "trans. (T. Onoma)" <transami@...> 2004/11/18

On Thursday 18 November 2004 09:26 am, Nikolai Weibull wrote:

[#120754] postgres-pr (pure Ruby PostgreSQL) — Michael Neumann <mneumann@...>

Hi,

30 messages 2004/11/18
[#120772] Re: [ANN] postgres-pr (pure Ruby PostgreSQL) — David Ross <dross@...> 2004/11/18

Michael Neumann wrote:

[#120870] Re: [ANN] postgres-pr (pure Ruby PostgreSQL) — David Garamond <lists@...6.isreserved.com> 2004/11/19

David Ross wrote:

[#120877] Re: [ANN] postgres-pr (pure Ruby PostgreSQL) — Mauricio Fern疣dez <batsman.geo@...> 2004/11/19

On Fri, Nov 19, 2004 at 04:42:36PM +0900, David Garamond wrote:

[#120872] mission critical Ruby? — Mark VanOrman <mark@...>

Hi all,

14 messages 2004/11/19

[#120890] Object Browser (#8) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

65 messages 2004/11/19
[#121006] Re: [SOLUTION] Object Browser (#8) — "R. Mark Volkmann" <mark@...> 2004/11/22

I'm new to using gems. Can you tell me the command I need to run to get

[#121093] Object Browser (#8) — Brian =?ISO-8859-15?Q?Schr=F6der?= <ruby@...> 2004/11/23

Hello Group,

[#121357] Re: [Solution] Object Browser (#8) — Brian =?ISO-8859-15?Q?Schr=F6der?= <ruby@...> 2004/11/25

So I took some time and refactored my solution. It now has a modular and extendible structure (at least I hope so). It should be possible to easily write non-gtk ui's and extend the reporting capabilities.

[#120940] Inner Class Relationship — James Edward Gray II <james@...>

I have an inner class that needs to send it's parent object (outer

24 messages 2004/11/20
[#120946] Re: Inner Class Relationship — Francis Hwang <sera@...> 2004/11/20

Since you haven't said much about how you're using this, maybe my

[#120947] Re: Inner Class Relationship — James Edward Gray II <james@...> 2004/11/21

On Nov 20, 2004, at 5:55 PM, Francis Hwang wrote:

[#120952] Re: Inner Class Relationship — Francis Hwang <sera@...> 2004/11/21

[#120961] Windows - calling system with multiple parms — colotechpro@... (John Reed)

I'm having a problem getting a system call to Windows XP to work. I

13 messages 2004/11/21

[#121015] Some progress but have hit a new error working through the Todo tutorial... Anyone recognize it? — "Abraham Vionas" <abe_ml@...>

The error is below. Ugh. But at least it works up to this point. I don't

12 messages 2004/11/22
[#121016] Re: Some progress but have hit a new error working through the Todo tutorial... Anyone recognize it? — "Abraham Vionas" <abe_ml@...> 2004/11/22

Oh, whups. The state of the todo_controller.rb file that evokes this error

[#121026] Instiki problems — Ryco@...

Hi!

19 messages 2004/11/22
[#121031] Re: Instiki problems — Ryco@... 2004/11/22

Update:

[#121129] Re: Instiki problems — Ryco@... 2004/11/23

Hi!

[#121126] rails is awesome — Dick Davies <rasputnik@...>

46 messages 2004/11/23
[#121134] Re: rails is awesome — David Heinemeier Hansson <david@...> 2004/11/23

> Couldn't help sending a big 'thank you' to DHH for Rails.

[#121194] Re: rails is awesome — Austin Ziegler <halostatue@...> 2004/11/23

On Tue, 23 Nov 2004 20:11:24 +0900, David Heinemeier Hansson

[#121196] Re: rails is awesome — David Heinemeier Hansson <david@...> 2004/11/23

> I haven't seen this myself, but from something said by others, it

[#121217] Re: rails is awesome — Austin Ziegler <halostatue@...> 2004/11/24

On Wed, 24 Nov 2004 07:01:17 +0900, David Heinemeier Hansson

[#121243] Re: rails is awesome — David Heinemeier Hansson <david@...> 2004/11/24

> Essentially, David, this is a *problem* with ActiveRecord.

[#121247] Re: rails is awesome — Gavin Sinclair <gsinclair@...> 2004/11/24

On Wednesday, November 24, 2004, 9:23:09 PM, David wrote:

[#121260] Re: rails is awesome — Austin Ziegler <halostatue@...> 2004/11/24

On Wed, 24 Nov 2004 19:48:18 +0900, Gavin Sinclair

[#121267] Other ORMs [was: rails is awesome] — Francis Hwang <sera@...> 2004/11/24

[#121271] Re: Other ORMs [was: rails is awesome] — George Moschovitis <gm@...> 2004/11/24

> do, maybe it's worth considering that ActiveRecord is not not the only

[#121274] Re: Other ORMs [was: rails is awesome] — Austin Ziegler <halostatue@...> 2004/11/24

On Wed, 24 Nov 2004 22:58:09 +0900, George Moschovitis <gm@navel.gr> wrote:

[#121275] Re: Other ORMs [was: rails is awesome] — Francis Hwang <sera@...> 2004/11/24

Austin, what DB are you using anyway? Dunno if I caught that in this

[#121173] Most popular wiki in Ruby seeks kind maintainer — David Heinemeier Hansson <david@...>

Okay, okay, okay. Instiki does need a new maintainer. At least a

12 messages 2004/11/23
[#121195] Re: Most popular wiki in Ruby seeks kind maintainer — Austin Ziegler <halostatue@...> 2004/11/23

On Wed, 24 Nov 2004 02:35:21 +0900, David Heinemeier Hansson

[#121210] Marshal vs. YAML vs. something else (Re: Most popular wiki in Ruby seeks kind maintainer) — Francis Hwang <sera@...> 2004/11/24

More generally, let me ask: What formats are people using to persist

[#121205] How to avoid inheriting Object? — "itsme213" <itsme213@...>

How do I create a class that does not inherit from Object?

17 messages 2004/11/24
[#121218] Re: How to avoid inheriting Object? — Austin Ziegler <halostatue@...> 2004/11/24

On Wed, 24 Nov 2004 10:29:09 +0900, itsme213 <itsme213@hotmail.com> wrote:

[#121227] editors/IDEs — Jamie Orchard-Hays <jamie@...>

I'm curious what people are favoring for editors and IDEs for Ruby.

21 messages 2004/11/24

[#121318] Ruby/DL tutorial — bjsp123@... (Benjamin Peterson)

Hi,

15 messages 2004/11/24

[#121381] Re: Ruby GUIs and installation effort — "bin liu" <ruby@3cn.com.cn>

I think one GUI system dos not depends others except ruby will bee more flexible.

19 messages 2004/11/25

[#121455] Using unit-tests as examples for a documentation — benny <listen@...>

dear list,

13 messages 2004/11/25

[#121468] oneclick installer, freeride — tony summerfelt <snowzone5@...>

anybody NOT developing the oneclick installer or freeride can skip

12 messages 2004/11/25

[#121506] Multiplexer - linear non-blocking I/O — Mikael Brockman <mikael@...>

Blocking I/O is really easy to use. But when you use it to write

32 messages 2004/11/26

[#121517] Banned Words (#9) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

29 messages 2004/11/26

[#121611] initialize always — "trans. (T. Onoma)" <transami@...>

It is rather a common occurrence that I find myself creating a mixin module

16 messages 2004/11/27

[#121647] One-Click Installer 1.8.2-14 RC10 — "Curt Hibbs" <curt@...>

This release is mainly in upgrade the included FreeRIDE

13 messages 2004/11/28

[#121730] Seeking advice on some method names — Gavin Sinclair <gsinclair@...>

Hi all,

28 messages 2004/11/29

[#121847] to_s, inspect, etc. — "itsme213" <itsme213@...>

Where would I find a nice summary of to_s, inspect, p, etc. and the core

16 messages 2004/11/29

[#121903] PHP vs. Ruby vs. Python (vs. Rails) — "Abraham Vionas" <abe_ml@...>

As I was falling asleep last night I was wondering about the differences in

15 messages 2004/11/30

[#121916] Python 2.4 released — Zach Dennis <zdennis@...>

A coworker of mine came and hollarred at me because on /. it mentioned

21 messages 2004/11/30

[#121936] Optional static typing (or, What can Ruby 2.0 borrow from Boo?) — djberg96@... (Daniel Berger)

Hi all,

23 messages 2004/11/30

[#121943] profile — "Joe Van Dyk" <joe.vandyk@...>

Hi,

24 messages 2004/11/30

[#121949] singleton methods : when are they not permitted? — "itsme213" <itsme213@...>

irb(main):025:0> x = :any

20 messages 2004/11/30
[#121956] Re: singleton methods : when are they not permitted? — Florian Gross <flgr@...> 2004/11/30

itsme213 wrote:

[#121970] Re: singleton methods : when are they not permitted? — Francis Hwang <sera@...> 2004/12/01

[#121975] Re: singleton methods : when are they not permitted? — Christoph <chr_mail@...> 2004/12/01

Francis Hwang schrieb:

[SUMMARY] Countdown (#7)

From: Ruby Quiz <james@...>
Date: 2004-11-18 16:50:04 UTC
List: ruby-talk #120778
I think I need to start charging Dennis Ranke by the e-mail!  Seriously, it was
interesting being able to follow the late stages of development for a couple of
the solutions this time around.

I found this problem very interesting and made a couple attempts to solve it
myself, though these attempts didn't produce anything worth sharing.  I did gain
a great appreciation for what's involved, so let me walk you through the
highlights.

At first glance, the search space for this problem looks very large.  The six
source numbers can be ordered various ways, and you don't have to use all the
numbers.  Beyond that, you can have one of four operators between each pair of
numbers.  Finally, consider that 1 * 2 + 3 is different from 1 * (2 + 3). 
That's a lot of combinations.

However, we can prune that large search space significantly.  Let's start with
some simple examples and work our way up.  Addition and multiplication are
commutative, so:

	1 + 2 = 3 and 2 + 1 = 3
	1 * 2 = 2 and 2 * 1 = 2

We don't need to handle it both ways.  One will do.

Moving on to numbers, the example in the quiz used two 5s as source numbers. 
Obviously, these two numbers are interchangeable.  The first 5 plus 2 is 7, just
as the second 5 plus 2 is 7.

What about the possible source number 1?  Anything times 1 is itself, so there
is no need to check multiplication of 1.  Similarly, anything divided by 1 is
itself.  No need to divide by 1.

Let's look at 0.  Adding and subtracting 0 is pointless.  Multiplying by 0 takes
us back to 0, which is pretty far from a number between 100 and 999 (our goal). 
Dividing 0 by anything is the same story and dividing by 0 is illegal, of
course.  Conclusion:  0 is useless.  Now you can't get 0 as a source number, but
you can safely ignore any operation(s) that result in 0.

Those are all single number examples, of course.  Time to think bigger.  What
about negative numbers?  Our goal is somewhere between 100 to 999.  Negative
numbers are going the wrong way.  They don't help, so you can safely ignore any
operation(s) that results in a negative number.

Fractions are debatable.  The quiz clearly allowed for them, but it came up in
discussion that the actual game show does not.  Even when you use them, they're
of limited help since the goal is always a whole number.  Eventually, you'll
need to do something to that fractional value to bring it back to a whole
number.  That takes a minimum of half your operands (two to make a fraction and
at least one to eliminate the fractional value).  That said, they do increase
your options, but leaving them out makes for faster runs and mirrors the game
show.

Finally, consider:

	(5 + 5) / 2 = 5

The above is just busy work.  We already had a 5; we didn't need to make one. 
Any set of operations that result in one of their operands can be ignored.

Using simplifications like the above, you can get the search space down to
something that can be brute-force searched pretty quickly, as long as we're only
dealing with six numbers.

Dennis Ranke submitted the most complete example of pruning.  That solution is
very well commented and I encourage all who are interested to look through it.

If you would like to see a very simple, if slow, solution to the problem, have a
look at Junghyun Kim's submission.

For this summary, I want to take a deeper look at Brian Schroder's solution. 
Here's the heart of it:

	# Search all possible terms for the ones that fits best.
	
	# Systematically create all terms over all subsets the set of
	# numbers in source, and find the one that is closest to target.
	#
	# Returns the solution that is closest to the target.
	#
	# If a block is given, calls the block each time a better or
	# equal solution is found.
	#
	# As a heuristic to guide the search sorts the numbers ascending.
	def solve_countdown(target, source, use_module)
	  source = source.sort_by{|i|-i}
	  best = nil
	  best_distance = 1.0/0.0
	  use_module::each_term_over(source) do | term |
		distance = (term.value - target).abs
		if distance <= best_distance
		  best_distance = distance
		  best = term        
		  yield best if block_given?
		end
	  end
	  return best
	end

This method takes the "target" and "source" numbers in addition to a Module,
which I'll come back to in a minute, as parameters.  The first line is the sort
mentioned in the comment.  Then "best" and "best_distance" are initialized to
nil and Infinity, to track the best solution discovered so far.

After the setup, the method calls into the each_term_over() method, provided by
the Module it was called with.  The Module to use is determined by the interface
code (not shown) based on the provided command-line switches.  There are four
possible choices.  Two deal with fractions while two are integer only, and there
is a recursive and "memoized" version for each number type.  The program
switches solving strategies based on the user's requests.  (This is a nice use
of the State design pattern.)

Here is each_term_over() in the Module Recursive::Integral:

	# Call the given block for each term that can be constructed
	# over a set of numbers.
	#
	# Recursive implementation, that calls a block each time a new
	# term has been stitched together.
	# Returns each term multiple times.
	#
	# This version checks, that only integral results may result.
	#
	# Here I explicitly coded the operators, because there is not
	# much redundance.
	#
	# This may be a bit slow, because it zips up through the whole
	# callstack each time a new term is created.
	def Integral.each_term_over(source)
	  if source.length == 1
		yield source[0]
	  else
		source.each_partition do | p1, p2 |
		  each_term_over(p1) do | op1 |
			yield op1
			each_term_over(p2) do | op2 |
			  yield op2
			  if op2.value != 0
				yield Term.new(op1, op2, :+) 
				yield Term.new(op1, op2, :-)
				if op2.value != 1 and op1.value % op2.value == 0
				  yield Term.new(op1, op2, :'/')
				end
			  end
			  if op1.value != 0
				yield Term.new(op2, op1, :-)
				if op1.value != 1
				  if op2.value % op1.value == 0
				    yield Term.new(op2, op1, :'/')
				  end
				  if op2.value != 0 and op2.value != 1
				    yield Term.new(op1, op2, :*)
				  end
				end
			  end
			end
		  end
		end
	  end
	end

This method recursively generates terms in every possible combination.  This is
a key point to a working solution and my own source of failure.  I tried adding
a number at a time, which generates solutions looking like:

	(((num op num) op num) op num)...

The tricky example posted to Ruby Talk by daz (Target:  926, Source:  75, 2, 8,
5, 10, 10) shows off the folly of this approach.  The only answer is:

	(75 - 5 + 8) * (2 + 10) - 10

As you can see, the 2 + 10 term must be built separately from the 75 - 5 + 8
term and then the two can be combined.

Getting back to the code above, the each_partition() method it uses was added to
Array, in a different section of the code (not shown).  It works as expected,
returning "each true partition (containing no empty set) exactly once".  Term
objects (not shown), just manage their operands and operator, providing mainly
string representation and result evaluation.

The block we're yielding to in here is the block passed by solve_countdown(),
which we examined earlier.  It is simply keeping track of the best solution
generated so far.

As an aside, I'm not convinced the yields to "op1" and "op2" are needed.  I
commented them out and was unable to produce a failure, but it's possible I just
didn't try the right tests.

The interesting part of all this is the same method in a different module. 
Here's each_term_over() from Memoized::Integral:

    def Integral.each_term_over(source, memo = {}, &block)
      return memo[source] if memo[source]

      result = []
      if source.length == 1
        result << source[0]
      else
        source.each_partition do | p1, p2 |
          each_term_over(p1, memo, &block).each do | op1 |
            each_term_over(p2, memo, &block).each do | op2 |
              if op2.value != 0
                result << Term.new(op1, op2, :+) 
                result << Term.new(op1, op2, :-)
                if op2.value != 1 and op1.value % op2.value == 0
                  result << Term.new(op1, op2, :'/')
                end
              end
              if op1.value != 0
                result << Term.new(op2, op1, :-)
                if op1.value != 1
                  if op2.value % op1.value == 0
                    result << Term.new(op2, op1, :'/')
                  end
                  if op2.value != 0 and op2.value != 1
                    result << Term.new(op1, op2, :*)
                  end
                end
              end
            end
          end
        end
      end

      result.each do | term | block.call(term) end
      memo[source] = result
    end

The result of this method is the same, but it uses a technique called
"memoization" to work faster.  When Terms are generated in here, they get added
to the hash "memo".  After that, all the magic is in the very first line, which
simply skips all the work the next time those source numbers are examined.

This leans on memory (the hash of stored results) for speed (no repeat work). 
That's why the solution provides other options too.  Maybe the target platform
won't have the memory to spare.

This is a handy technique showcased in a nice implementation and thus worth a
look, I think.

David G. Andersen submitted a similar solution with a lot of raw speed, but it
was a little harder to follow.  (David the Code Style Police are on their way. 
Just hand over the keyboard...  It's for your own good.)

If you would like to play with an interactive solver without pulling down the
Ruby code for these solutions, check out this great link posted by daz:

	http://www.crosswordtools.com/numbers-game/

As usual, I offer my thanks to the quiz maker and takers.

We have two more contributed quizzes to come.  (Great News!!!)  Look for Jim
Menard's quiz, tomorrow morning...

In This Thread

Prev Next