[#14464] who uses Python or Ruby, and for what? — ellard2@...01.fas.harvard.edu (-11,3-3562,3-3076)

A while ago I posted a request for people to share their experiences

12 messages 2001/05/01

[#14555] Ruby as a Mac OS/X scripting language — Dave Thomas <Dave@...>

10 messages 2001/05/02

[#14557] Arggg Bitten by the block var scope feature!!! — Wayne Scott <wscott@...>

13 messages 2001/05/02

[#14598] Re: Arggg Bitten by the block var scope feature!!! — "Conrad Schneiker" <schneik@...>

# On Thu, 3 May 2001, Wayne Scott wrote:

9 messages 2001/05/03

[#14636] Yet another "About private methods" question — Eric Jacoboni <jacoboni@...2.fr>

I'm still trying to figure out the semantics of private methods in Ruby.

39 messages 2001/05/04
[#14656] Re: Yet another "About private methods" question — Dave Thomas <Dave@...> 2001/05/04

Eric Jacoboni <jaco@teaser.fr> writes:

[#14666] Ruby and Web Applications — "Chris Montgomery" <monty@...> 2001/05/04

Greetings from a newbie,

[#14772] Re: Ruby and Web Applications — Jim Freeze <jim@...> 2001/05/07

On Sat, 5 May 2001, Chris Montgomery wrote:

[#14710] Why's Ruby so slow in this case? — Stefan Matthias Aust <sma@3plus4.de>

Sure, Ruby, being interpreted, is slower than a compiled language.

12 messages 2001/05/05

[#14881] Class/Module Information — "John Kaurin" <jkaurin@...>

It is possible to modify the following code to produce

18 messages 2001/05/09

[#15034] Re: calling .inspect on array/hash causes core dump — ts <decoux@...>

>>>>> "A" == Andreas Riedl <viisi@chello.at> writes:

15 messages 2001/05/12

[#15198] Re: Q: GUI framework with direct drawing ca pabilities? — Steve Tuckner <SAT@...>

Would it be a good idea to develop a pure Ruby GUI framework built on top of

13 messages 2001/05/15

[#15234] Pluggable sorting - How would you do it? — "Hal E. Fulton" <hal9000@...>

Hello all,

16 messages 2001/05/16

[#15549] ColdFusion for Ruby — "Michael Dinowitz" <mdinowit@...2000.com>

I don't currently use Ruby. To tell the truth, I have no real reason to. I'd

12 messages 2001/05/22

[#15569] I like ruby-chan ... — Rob Armstrong <rob@...>

Ruby is more human(e) than Python. We already have too many animals :-).

15 messages 2001/05/23

[#15601] How to avoid spelling mistakes of variable names — ndrochak@... (Nick Drochak)

Since Ruby does not require a variable to be declared, do people find

13 messages 2001/05/23

[#15734] java based interpreter and regexes — "Wayne Blair" <wayne.blair@...>

I have been thinking about the java based ruby interpreter project, and I

48 messages 2001/05/25

[#15804] is it possible to dynamically coerce objects types in Ruby? — mirian@... (Mirian Crzig Lennox)

Greetings to all. I am a newcomer to Ruby and I am exploring the

13 messages 2001/05/27
[#15807] Re: is it possible to dynamically coerce objects types in Ruby? — matz@... (Yukihiro Matsumoto) 2001/05/27

Hi,

[#15863] Experimental "in" operator for collections — Stefan Matthias Aust <sma@3plus4.de>

There's one thing where I prefer Python over Ruby. Testing whether an

13 messages 2001/05/28

[#15925] Re: Block arguments vs method arguments — ts <decoux@...>

>>>>> "M" == Mike <mike@lepton.fr> writes:

43 messages 2001/05/29
[#16070] Re: Block arguments vs method arguments — "Hal E. Fulton" <hal9000@...> 2001/05/31

----- Original Message -----

[#16081] Re: Block arguments vs method arguments — Sean Russell <ser@...> 2001/05/31

On Thu, May 31, 2001 at 11:53:17AM +0900, Hal E. Fulton wrote:

[#16088] Re: Block arguments vs method arguments — Dan Moniz <dnm@...> 2001/05/31

At 11:01 PM 5/31/2001 +0900, Sean Russell wrote:

[#15954] new keyword idea: tryreturn, tryturn or done — Juha Pohjalainen <voidjump@...>

Hello everyone!

12 messages 2001/05/29

[ruby-talk:14983] Re: Array search idiom

From: "Guy N. Hurst" <gnhurst@...>
Date: 2001-05-11 07:58:31 UTC
List: ruby-talk #14983
"James B. Crigler" wrote:
> 
> Here's a question about a ruby idiom.  I have an array that contains
> lines with mammal (classification. animal) pairs like the one found
> in the code snippet.  I need to find the first contiguous list of
> primates.  Assuming the array is called "a", here's how I solved the
> problem.  This does what I want, but is there a better way?
> 


Hmm. What if you would like the second contiguous list of primates?
Or perhaps the Nth list? What about for the others, like insectivora?

class Array
  def foo(re)
     inject([[]]){|x,i| if i=~re  then x[-1]<<i; x  else x[-1]==[] or x<<[]; x  end}
  end
end

a.foo(/^primates\./)[0]
#=> ["primates. tree shrews", "primates. lemurs", "primates. monkeys"]


Idea
====
This looks to me like it could be a problem of finding the Nth 
contiguous list meeting any condition -- and allowing a parameter
to set a threshhold for the list size, since a single item might not
count as consecutive in some cases (e.g. primes).

For a name, I think 'comb' is descriptive.


Ruby Code
=========
class Array
  def comb(min=2,&b)
    q=inject([[]]){|x,i| if b.call(i)  then x[-1]<<i; x;  else x<<[]; x  end}
    q.select{|i| i.size>=min }
  end
end

a.comb{|i| i=~/^primates\./}[0]	
#=> ["primates. tree shrews", "primates. lemurs", "primates. monkeys"]

a.comb{|i| i=~"^insectivora"}[0]
#=> ["insectivora. shrews", "insectivora. moles", "insectivora. hedgehogs"]


Explanation
===========
I also have a few other versions, but this seems like the most powerful and concise.
This particular one starts with an empty group, and fills it up with
consecutive matches. As soon as there is no match, a second empty group
is added to the container. Future matches are always added to the last group
in the container. (Then all groups containing at least the minimum number of items
are selected and returned.)

I make use of the Array#inject method as shown on page 45 of the pickaxe book:

class Array 
  def inject(n)
    each{|v| n = yield(n,v)}
    n
  end
end 


Other applications
==================
For the math enthusiasts, this can be used to find 'consecutive' primes:

odds=[3,5,7,9,11,13,15,17,19,21,23,25,27,29]

odds.comb(2){|i| i.prime? }
#=> [[3, 5, 7], [11, 13], [17, 19]]

odds.comb(3){|i| i.prime? }
#=> [[3, 5, 7]]


  
Guy N. Hurst

-- 
HurstLinks Web Development    http://www.hurstlinks.com/
Norfolk, VA  23510            (757)623-9688 FAX 623-0433
PHP/MySQL - Ruby/Perl - HTML/Javascript

In This Thread