[#6954] Why isn't Perl highly orthogonal? — Terrence Brannon <brannon@...>

27 messages 2000/12/09

[#7022] Re: Ruby in the US — Kevin Smith <kevinbsmith@...>

> Is it possible for the US to develop corporate

36 messages 2000/12/11
[#7633] Re: Ruby in the US — Dave Thomas <Dave@...> 2000/12/19

tonys@myspleenklug.on.ca (tony summerfelt) writes:

[#7636] Re: Ruby in the US — "Joseph McDonald" <joe@...> 2000/12/19

[#7704] Re: Ruby in the US — Jilani Khaldi <jilanik@...> 2000/12/19

> > first candidates would be mysql and postgressql because source is

[#7705] Code sample for improvement — Stephen White <steve@...> 2000/12/19

During an idle chat with someone on IRC, they presented some fairly

[#7750] Re: Code sample for improvement — "Guy N. Hurst" <gnhurst@...> 2000/12/20

Stephen White wrote:

[#7751] Re: Code sample for improvement — David Alan Black <dblack@...> 2000/12/20

Hello --

[#7755] Re: Code sample for improvement — "Guy N. Hurst" <gnhurst@...> 2000/12/20

David Alan Black wrote:

[#7758] Re: Code sample for improvement — Stephen White <steve@...> 2000/12/20

On Wed, 20 Dec 2000, Guy N. Hurst wrote:

[#7759] Next amusing problem: talking integers (was Re: Code sample for improvement) — David Alan Black <dblack@...> 2000/12/20

On Wed, 20 Dec 2000, Stephen White wrote:

[#7212] New User Survey: we need your opinions — Dave Thomas <Dave@...>

16 messages 2000/12/14

[#7330] A Java Developer's Wish List for Ruby — "Richard A.Schulman" <RichardASchulman@...>

I see Ruby as having a very bright future as a language to

22 messages 2000/12/15

[#7354] Ruby performance question — Eric Crampton <EricCrampton@...>

I'm parsing simple text lines which look like this:

21 messages 2000/12/15
[#7361] Re: Ruby performance question — Dave Thomas <Dave@...> 2000/12/15

Eric Crampton <EricCrampton@worldnet.att.net> writes:

[#7367] Re: Ruby performance question — David Alan Black <dblack@...> 2000/12/16

On Sat, 16 Dec 2000, Dave Thomas wrote:

[#7371] Re: Ruby performance question — "Joseph McDonald" <joe@...> 2000/12/16

[#7366] GUIs for Rubies — "Conrad Schneiker" <schneik@...>

Thought I'd switch the subject line to the subject at hand.

22 messages 2000/12/16

[#7416] Re: Ruby IDE (again) — Kevin Smith <kevins14@...>

>> >> I would contribute to this project, if it

17 messages 2000/12/16
[#7422] Re: Ruby IDE (again) — Holden Glova <dsafari@...> 2000/12/16

-----BEGIN PGP SIGNED MESSAGE-----

[#7582] New to Ruby — takaoueda@...

I have just started learning Ruby with the book of Thomas and Hunt. The

24 messages 2000/12/18

[#7604] Any corrections for Programming Ruby — Dave Thomas <Dave@...>

12 messages 2000/12/18

[#7737] strange border-case Numeric errors — "Brian F. Feldman" <green@...>

I haven't had a good enough chance to familiarize myself with the code in

19 messages 2000/12/20

[#7801] Is Ruby part of any standard GNU Linux distributions? — "Pete McBreen, McBreen.Consulting" <mcbreenp@...>

Anybody know what it would take to get Ruby into the standard GNU Linux

15 messages 2000/12/20

[#7938] Re: defined? problem? — Kevin Smith <sent@...>

matz@zetabits.com (Yukihiro Matsumoto) wrote:

26 messages 2000/12/22
[#7943] Re: defined? problem? — Dave Thomas <Dave@...> 2000/12/22

Kevin Smith <sent@qualitycode.com> writes:

[#7950] Re: defined? problem? — Stephen White <steve@...> 2000/12/22

On Fri, 22 Dec 2000, Dave Thomas wrote:

[#7951] Re: defined? problem? — David Alan Black <dblack@...> 2000/12/22

On Fri, 22 Dec 2000, Stephen White wrote:

[#7954] Re: defined? problem? — Dave Thomas <Dave@...> 2000/12/22

David Alan Black <dblack@candle.superlink.net> writes:

[#7975] Re: defined? problem? — David Alan Black <dblack@...> 2000/12/22

Hello --

[#7971] Hash access method — Ted Meng <ted_meng@...>

Hi,

20 messages 2000/12/22

[#8030] Re: Basic hash question — ts <decoux@...>

>>>>> "B" == Ben Tilly <ben_tilly@hotmail.com> writes:

15 messages 2000/12/24
[#8033] Re: Basic hash question — "David A. Black" <dblack@...> 2000/12/24

On Sun, 24 Dec 2000, ts wrote:

[#8178] Inexplicable core dump — "Nathaniel Talbott" <ntalbott@...>

I have some code that looks like this:

12 messages 2000/12/28

[#8196] My first impression of Ruby. Lack of overloading? (long) — jmichel@... (Jean Michel)

Hello,

23 messages 2000/12/28

[#8198] Re: Ruby cron scheduler for NT available — "Conrad Schneiker" <schneik@...>

John Small wrote:

14 messages 2000/12/28

[#8287] Re: speedup of anagram finder — "SHULTZ,BARRY (HP-Israel,ex1)" <barry_shultz@...>

> -----Original Message-----

12 messages 2000/12/29

[ruby-talk:7712] RE: Code sample for improvement

From: Aleksi Niemel<aleksi.niemela@...>
Date: 2000-12-19 20:20:47 UTC
List: ruby-talk #7712
> During an idle chat with someone on IRC

Welcome to #ruby-lang (at least on IRCNET). There's almost always someone
(Japan, Europe, States, and again).

> ..they presented some fairly nasty code for printing 
> a time interval in English

Here's my table driven shot. I tried to remove the logic for 's' suffixing,
but in the end there was more code to initialize the array. It might be a
little bit prettier to use real if instead of and-idiom.

> I was interested in how the new constructs available in Ruby

I'm sorry not to use any fancy constructs, but I simply don't see any use
for them in here.

Please forgive me if two of the lines are too long.

  #! /usr/bin/env ruby

  # Given the number of seconds, convert to English description

  def format(time)
    res = ""
    [ ["sec", 60], ["min",   60], ["hour", 24], 
      ["day", 30], ["month", 12], ["year",  1]].each do |name, unit|
      time > 0 and 
        res = " #{time%unit} #{name}#{time%unit == 1 ? '' : 's'}" + res
      time /= unit
    end
    res
  end

  time = ARGV[0].to_i

  puts format(time)

The problem with this solution is that always that something is printed
there will be a leading whitespace. To get rid of that we could forget the
string building and instead collect the parts and print them out. (Had I
chosen shorter names the if could be in modifier form instead of this
full-blown form.)

  def format(time)
    parts = []
    [ ["sec", 60], ["min",   60], ["hour", 24], 
      ["day", 30], ["month", 12], ["year",  1]].each do |name, unit|
      if time > 0
        parts <<  "#{time%unit} #{name}#{time%unit == 1 ? '' : 's'}" 
      end
      time /= unit
    end
    parts.reverse.join ' '
  end

To tell something how I ended up with this code I could say that the
beautiful way you presented your code lead me immediately to the table
driven solution:

  secs   = time % 60; time = time / 60
  mins   = time % 60; time = time / 60
  hours  = time % 24; time = time / 24
  days   = time % 30; time = time / 30
  months = time % 12; time = time / 12
  years  = time

  res = ""
  res += format(years,  'year',  'years')
  res += format(months, 'month', 'months')
  res += format(days,   'day',   'days')
  res += format(hours,  'hour',  'hours')
  res += format(mins,   'min',   'mins')
  res += format(secs,   'sec',   'secs')

There are two easily seen tables. First one with the divisioning and second
one with naming. Further it could be seen that all plural forms are the same
as singular plus 's'. After that it's just layouting.

In any case the interface should be like it is on my version. It's all up to
method format how to do the magic. It could be implemented on your way, or
mine.

As a commentary to original problem, I'd like to ask is it really meant that
the output with 0 is an empty string or was it just a simplification?

	- Aleksi

In This Thread

Prev Next