[#37231] Announcing New Ruby Book Under Development! — <robert.calco@...>

Everybody:

31 messages 2002/04/02
[#37250] Re: [ANN] Announcing New Ruby Book Under Development! — "John" <jyeung@...> 2002/04/02

Have you checked out?

[#37279] About efficiency — Jean-Hugues ROBERT <jean_hugues_robert@...> 2002/04/02

[#37289] Re: About efficiency — nobu.nokada@... 2002/04/03

Hi,

[#37291] Re: About efficiency — Sean Middleditch <elanthis@...> 2002/04/03

On Tue, 2002-04-02 at 20:16, nobu.nokada@softhome.net wrote:

[#37232] seeking to understand... — Mark Probert <probertm@...>

38 messages 2002/04/02
[#37255] Re: Ruby, python, perl, ... — Chris <chris@...> 2002/04/02

In article <87d6xhaoif.fsf@jenny-gnome.dyndns.org>,

[#37281] Is eval a code/design smell? — "Chris Morris" <home@...>

I seem to have an inherent distaste for eval, but I don't know why. I've

51 messages 2002/04/03
[#37323] Re: Is eval a code/design smell? — Ron Jeffries <ronjeffries@...> 2002/04/03

On Wed, 03 Apr 2002 00:15:10 GMT, "Chris Morris" <home@clabs.org> wrote:

[#38034] Re: Is eval a code/design smell? — Ian Macdonald <ian@...> 2002/04/11

On Wed 03 Apr 2002 at 20:35:30 +0900, you wrote:

[#38045] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 01:40, Ian Macdonald wrote:

[#38061] Re: Is eval a code/design smell? — Ian Macdonald <ian@...> 2002/04/11

On Thu 11 Apr 2002 at 22:07:03 +0900, you wrote:

[#38063] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 12:06, Ian Macdonald wrote:

[#38064] Re: Is eval a code/design smell? — ts <decoux@...> 2002/04/11

>>>>> "S" == Sean Middleditch <elanthis@awesomeplay.com> writes:

[#38066] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 12:25, ts wrote:

[#38067] Re: Is eval a code/design smell? — ts <decoux@...> 2002/04/11

>>>>> "S" == Sean Middleditch <elanthis@awesomeplay.com> writes:

[#38068] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 12:42, ts wrote:

[#38069] Re: Is eval a code/design smell? — ts <decoux@...> 2002/04/11

>>>>> "S" == Sean Middleditch <elanthis@awesomeplay.com> writes:

[#38072] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 12:59, ts wrote:

[#37342] regular expression question — "Firestone, Mark - Technical Support" <mark.firestone@...>

Thanks for the help with the tread questions guys... I have one about (gasp)

16 messages 2002/04/03

[#37385] TextPad replacement for Linux? — Tobias Reif <tobiasreif@...>

TIA,

25 messages 2002/04/03

[#37397] Really new-new-newbie question :) — "Philip Mateescu" <philip@...>

Hi,

13 messages 2002/04/03

[#37454] ModRUBY question — George Moschovitis <gmosx@...>

Hi everybody,

18 messages 2002/04/04

[#37470] Test the result of an initialization ? — jayce@... (Jayce Piel)

17 messages 2002/04/04

[#37540] Fibonacci Number Generators — jzakiya@... (Jabari Zakiya)

Hi, I'm a newbie, coming to Ruby from a

14 messages 2002/04/04

[#37549] OO/Ruby Terminology — <james@...>

I added a wiki page for Ruby book development ...

22 messages 2002/04/05
[#37808] Re: OO/Ruby Terminology — <bbense+comp.lang.ruby.Apr.07.02@...> 2002/04/10

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

[#37861] RE: OO/Ruby Terminology — <james@...> 2002/04/10

> From: bbense+comp.lang.ruby.Apr.07.02@telemark.stanford.edu

[#37944] Re: OO/Ruby Terminology — Chris <chris@...> 2002/04/10

In article <PGEPJIFLPEPOHCKEEEIKIEFADCAA.james@rubyxml.com>,

[#37963] RE: OO/Ruby Terminology — <james@...> 2002/04/10

> From: Chris [mailto:chris@cmb-enterprises.com]

[#37617] Addition to file.c (File.extension) — Mike Hall <mghall@...>

18 messages 2002/04/05
[#37736] Re: Addition to file.c (File.extension) — matz@... (Yukihiro Matsumoto) 2002/04/08

Hi,

[#37653] Switching from PHP to Ruby - Comments Please — Jim Freeze <jim@...>

Hi:

34 messages 2002/04/06

[#37746] ruby-dev summary 16501-16750 — TAKAHASHI Masayoshi <maki@...>

Hi all,

17 messages 2002/04/08

[#37833] Ruby as replacement for VB? — "Robb Shecter" <rs@...>

Hi,

19 messages 2002/04/10
[#37923] Re: Ruby as replacement for VB? — Michael Davis <mdavis@...> 2002/04/10

Robb Shecter wrote:

[#39153] Re: Ruby as replacement for VB? — "Euan Mee" <xlucid@...> 2002/04/26

On 11 Apr 2002, at 1:03, Michael Davis wrote:

[#37835] crypting ruby source — Ludo <coquelle@...>

Hi,

32 messages 2002/04/10
[#38280] Re: crypting ruby source — web2ed@... (Edward Wilson) 2002/04/14

Ludo <coquelle@enib.fr> wrote in message news:<3CB31298.13A44B26@enib.fr>...

[#38044] RFC - class_added callback — Michal Rokos <m.rokos@...>

Hello,

16 messages 2002/04/11

[#38046] GetoptLong question — djberg96@... (Daniel Berger)

Hi all,

16 messages 2002/04/11
[#38051] Re: GetoptLong question — "Pit Capitain" <pit@...> 2002/04/11

On 11 Apr 2002, at 22:16, Daniel Berger wrote:

[#38101] How to Make a Method Ineffective Efficiently? — William Djaja Tjokroaminata <billtj@...>

Hi,

15 messages 2002/04/11
[#38135] Re: How to Make a Method Ineffective Efficiently? — Jean-Hugues ROBERT <jean_hugues_robert@...> 2002/04/12

Hello,

[#38159] Re: How to Make a Method Ineffective Efficiently? — William Djaja Tjokroaminata <billtj@...> 2002/04/12

Thanks for all the responses. I just want to add the final

[#38126] Ruby/Google — Ian Macdonald <ian@...>

Hi,

19 messages 2002/04/12

[#38136] Idea for a new shorthand — "Hal E. Fulton" <hal9000@...>

OK, maybe this is an idea no one will like. Or

17 messages 2002/04/12

[#38167] Why Object#class Is Inconsistent in "==" and "case"? — William Djaja Tjokroaminata <billtj@...>

Hi,

12 messages 2002/04/12

[#38199] not vs !, and vs && — <james@...>

I'm confused about the behavior of 'not'. The Pickaxe and Ruby21Days books

17 messages 2002/04/12

[#38238] Barnes & Noble putting on the squeeze — David Alan Black <dblack@...>

Hello --

11 messages 2002/04/13

[#38239] Freshmeat article about Ruby — Tobias DiPasquale <anany@...>

Hi all,

28 messages 2002/04/13
[#38447] Re: Freshmeat article about Ruby — Joel VanderWerf <vjoel@...> 2002/04/16

Tobias DiPasquale wrote:

[#38457] Re: Freshmeat article about Ruby — David Alan Black <dblack@...> 2002/04/16

Hi --

[#38560] Re: Freshmeat article about Ruby — Mark Hulme Jones <mjones@...> 2002/04/18

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

[#38561] Re: Freshmeat article about Ruby — Paul Brannan <pbrannan@...> 2002/04/18

On Fri, Apr 19, 2002 at 01:07:22AM +0900, Mark Hulme Jones wrote:

[#38562] Re: Freshmeat article about Ruby — Pat Eyler <pate@...> 2002/04/18

On Fri, 19 Apr 2002, Paul Brannan wrote:

[#38564] Re: Freshmeat article about Ruby — Jack Herrington <jack_d_herrington@...> 2002/04/18

On 4/18/02 9:30 AM, "Pat Eyler" <pate@eylerfamily.org> wrote:

[#38648] Ruby golf (FFT) Was: Freshmeat article about Ruby — Christian Szegedy <szegedy@...> 2002/04/19

Jack Herrington wrote:

[#38657] Re: Ruby golf (FFT) Was: Freshmeat article about Ruby — David Alan Black <dblack@...> 2002/04/19

Hello --

[#38331] mime type — Tobias Reif <tobiasreif@...>

Hi all,

15 messages 2002/04/15

[#38338] Compiling Ruby on Mac OS X — Alwyn <alwyn@...>

I've downloaded the latest Stable Snapshot and tried building it. It

18 messages 2002/04/15

[#38449] Help wanted for statvfs extension — djberg96@... (Daniel Berger)

Hi all,

35 messages 2002/04/16
[#38470] Re: Help wanted for statvfs extension — "James F.Hranicky" <jfh@...> 2002/04/17

On Wed, 17 Apr 2002 05:04:06 +0900

[#38525] resolv.rb Bug — "Roy J. Milican" <roy@...>

Greetings,

18 messages 2002/04/17

[#38627] Imlib2-Ruby 0.4.0 — Paul Duncan <pabs@...>

I just posted Imlib2-Ruby version 0.4.0, my Ruby bindings for Imlib2

12 messages 2002/04/19

[#38635] Threads creating threads creating threads... — Tobias Peters <tpeters@...>

I have already asked this question in [ruby-talk:19661], but I will ask it

12 messages 2002/04/19

[#38694] Ruby on .NET? — Ron Jeffries <ronjeffries@...>

I scanned the .net threads here and didn't see whether there is, or is not, an

37 messages 2002/04/19
[#38696] RE: Ruby on .NET? — "repeater" <repeater@...> 2002/04/19

recently found:

[#38839] building extensions-- new vs initialize — "Norman Makoto Su" <normsu@...>

Hi, I'm trying to build a ruby extension in C. While looking at the pickaxe CD

14 messages 2002/04/23

[#38910] Numberic#prev — Sean Chittenden <sean@...>

I do a lot of incrementing and decrementing of values: it'd be nice if

36 messages 2002/04/24

[#39047] A Wild Idea: What do you think? — Jim Freeze <jim@...>

Hi:

16 messages 2002/04/26

[#39122] RE: A Wild Idea: What do you think? — "Morris, Chris" <chris.morris@...>

> > OK, then let's have it in Texas. How about August? Oh, what do you

28 messages 2002/04/26
[#39123] Re: A Wild Idea: What do you think? — Jim Freeze <jim@...> 2002/04/26

On Sat, Apr 27, 2002 at 03:15:21AM +0900, Morris, Chris wrote:

[#39176] Re: A Wild Idea: What do you think? — Pat Eyler <pate@...> 2002/04/27

On Sat, 27 Apr 2002, Jim Freeze wrote:

[#39177] Re: A Wild Idea: What do you think? — David Alan Black <dblack@...> 2002/04/27

Hi --

[#39228] RubyConf.new(2002) - ideas for agenda — "Daniel Berger" <djberg96@...>

Ok - so I'm probably jumping the gun here, but hey, what the heck.

27 messages 2002/04/28

[#39394] ncurses, mingw32 — tony summerfelt <snowzone5@...>

i've been away from ruby for awhile, it was time to dust off the pickaxe book

13 messages 2002/04/30

String#pred (long) (was: Numberic#prev)

From: "Pit Capitain" <pit@...>
Date: 2002-04-25 12:49:28 UTC
List: ruby-talk #38999
On 25 Apr 2002, at 19:45, ts wrote about Paul Brannan's 
implementation of String#pred

>  Well, this is not really the reverse of the algorithm for #succ. You
>  can see it for example with "9%".

First some thoughts on String#pred:

Since there exist strings s1 and s2 with s1 != s2 but s1.succ == 
s2.succ (i.e. "9" and "09") it cannot be guaranteed that

  (1)  s.succ.pred == s

for all strings s.

Because there exist strings s1 such that there's no string s2 with 
s1 == s2.succ (i.e. "00") it also cannot be guaranteed that

  (2)  s.pred.succ == s

for all strings s.


For (1) I'd suggest that s1.pred returns the shortest s2 with s1 == 
s2.succ (i.e. "10".pred == "9", not "09").

For (2) (for all strings s1 that do not have s2 with s1 == s2.succ) 
we could define s1.pred to either

(a) raise an error
(b) return something meaningful according to the POLS

Of course another possibility would be to modify String#succ in a 
way that String#pred would be easily comprehensible. Is there any 
code that relies on the current implementation of String#succ?

How about a vote on rubygarden?


Anyway, here's an implementation of String#pred so that s1.pred 
returns the shortest string s2 such that s1 == s2.succ if such 
strings exists (not proven though), and returns a dummy string 
else. Because I don't know how to post attachments I include the 
source and some unit tests here.

Regards,
Pit


The code in file pred.rb (neither optimized nor beautified):

class String
  
  def pred
    case self
    when ''
      ''
    when /[1-9B-Zb-z]/
      alnum_pred
    when /[0Aa].*[0Aa]/
      alnum_pred
    when /[0Aa]\000*$/
      binary_pred
    when /[0Aa]/
      new_pred
    else
      binary_pred
    end
  end
  
  def alnum_pred
    result = dup
    zero_idx = last_idx = borrowed = borrowed_chars = nil
    idx = size
    while idx > 0
      idx -= 1
      last_idx = idx unless last_idx
      case result[ idx ]
      when ?1 .. ?9, ?B .. ?Z, ?b .. ?z
        result[ idx ] -= 1
        zero_idx = idx if result[ idx ] == ?0
        borrowed = nil
        break
      when ?0
        borrowed = result[ idx ] = ?9
        borrowed_chars = 1
      when ?A, ?a
        result[ idx ] += ( ?Z - ?A )
        zero_idx = idx
        if borrowed == result[ idx ]
          borrowed_chars -= 1
        else
          borrowed = result[ idx ]
          borrowed_chars = 1
        end
      else
        last_idx = nil if last_idx == idx
      end
    end
    if borrowed && borrowed_chars > 0
      result = new_pred
    elsif zero_idx && zero_idx < last_idx
      idx = 0
      loop do
        case result[ idx ]
        when ?1 .. ?9, ?A .. ?Y, ?a .. ?y
          break
        when ?0, ?Z, ?z
          result[ idx, 1 ] = '' if idx == zero_idx
          break
        else
          idx += 1
        end
      end
    end
    result
  end
  
  def binary_pred
    result = dup
    idx = size
    while idx > 0
      idx -= 1
      if result[ idx ] > 0
        result[ idx ] -= 1
        break
      else
        result[ idx ] = 255
      end
    end
    if idx == 0
      case result[ idx ]
      when 0
        result[ 0, 1 ] = '' if size > 1
      when 255
        result = new_pred
      end
    end
    result
  end
  
  def new_pred
    "new_pred " + self
  end
  
end


The unit tests in file pred_test.rb:

require 'pred'
require 'test/unit'

class PredTest < Test::Unit::TestCase

  def assert_pred( pred, str, msg = str )
    assert_equal( pred, str.pred, "pred #{msg}" )
  end

  def assert_inverse( str, msg = str )
    assert_equal( str, str.pred.succ, "inverse #{msg}" )
  end

  def assert_pred_with_inverse( pred, str, msg = str )
    assert_pred( pred, str, msg )
    assert_inverse( str, msg )
  end

  def test_01_empty
    assert_pred_with_inverse( '', '', 'empty' )
  end

  def test_02_simple_alnum
    assert_pred_with_inverse( '1', '2' )
    assert_pred_with_inverse( '42', '43' )
    assert_pred_with_inverse( '3999', '4000' )
    assert_pred_with_inverse( '00399', '00400' )
    assert_pred_with_inverse( 'A', 'B' )
    assert_pred_with_inverse( 'HH', 'HI' )
    assert_pred_with_inverse( 'AZZ', 'BAA' )
    assert_pred_with_inverse( 'AAAZZ', 'AABAA' )
    assert_pred_with_inverse( 'd', 'e' )
    assert_pred_with_inverse( 'xx', 'xy' )
    assert_pred_with_inverse( 'yzz', 'zaa' )
    assert_pred_with_inverse( 'zzyzz', 'zzzaa' )
    assert_pred_with_inverse( '8Z9z', '9A0a' )
    assert_pred_with_inverse( ' /4-Z++9 $z #9#', ' /5-A++0 $a #0#' )
  end

  def test_03_leading_1Aa
    assert_pred_with_inverse( '0', '1' )
    assert_pred_with_inverse( '99', '100' )
    assert_pred_with_inverse( '00099', '00100' )
    assert_pred_with_inverse( 'Z', 'AA' )
    assert_pred_with_inverse( 'zZz', 'aaAa' )
    assert_pred_with_inverse( '9zZ', '10aA' )
    assert_pred_with_inverse( 'Z9z9', 'AA0a0' )
    assert_pred_with_inverse( ' /9-Z++9 $z #9#', ' /10-A++0 $a #0#' )
  end

  def test_04_illegal_alnum
    assert_pred( 'new_pred 00', '00' )
    assert_pred( 'new_pred 0000', '0000' )
    assert_pred( 'new_pred A0', 'A0' )
    assert_pred( 'new_pred 0a0', '0a0' )
    assert_pred( 'new_pred 00Aa', '00Aa' )
    assert_pred( 'new_pred aA', 'aA' )
    assert_pred( 'new_pred Aa00', 'Aa00' )
  end

  def test_05_simple_binary
    assert_pred_with_inverse( ' ', '!' )
    assert_pred_with_inverse( '!$', '!%' )
    assert_pred_with_inverse( "$\377\377\377", "%\000\000\000" )
    assert_pred_with_inverse( "<==\377", "<=>\000" )
    assert_pred_with_inverse( "\377 ", "\377!" )
  end

  def test_06_leading_001
    assert_pred_with_inverse( "\000", "\001" )
    assert_pred_with_inverse( "\377", "\001\000" )
    assert_pred_with_inverse( "\377\377\377", "\001\000\000\000" )
    assert_pred_with_inverse( "\000\000\377", "\000\001\000" )
  end

  def test_07_binary_with_0Aa
    assert_pred_with_inverse( '/', '0' )
    assert_pred_with_inverse( '@', 'A' )
    assert_pred_with_inverse( '`', 'a' )
    assert_pred_with_inverse( "$ @\377", "$ A\000" )
    assert_pred_with_inverse( "+/\377\377", "+0\000\000" )
  end

  def test_08_illegal_binary
    assert_pred( "new_pred \000", "\000" )
    assert_pred( "new_pred \000\000", "\000\000" )
    assert_pred( "new_pred 0\001", "0\001" )
    assert_pred( "new_pred A+", "A+" )
    assert_pred( "new_pred <a>", "<a>" )
  end

end

In This Thread