[#389739] Ruby Challenge — teresa nuagen <unguyen90@...>

Here is a ruby challenge for all you computer science lovers out there,

22 messages 2011/11/05
[#389769] Re: Ruby Challenge — "Jonan S." <jonanscheffler@...> 2011/11/05

Totally unrelated to any husker computer science programs right? Like

[#389905] Re: Ruby Challenge — Stephen Ramsay <sramsay.unl@...> 2011/11/09

Jonan S. wrote in post #1030330:

[#389907] Re: Ruby Challenge — aseret nuagen <unguyen90@...> 2011/11/09

> You mean like the professor for the course? Because that would be me .

[#389915] Re: Ruby Challenge — Robert Klemme <shortcutter@...> 2011/11/09

On Wed, Nov 9, 2011 at 4:52 AM, aseret nuagen <unguyen90@aim.com> wrote:

[#389792] Tricky DSL, how to do it? — Intransition <transfire@...>

I'd want to write a DSL such that a surface method_missing catches

18 messages 2011/11/06

[#389858] Compiling Ruby Inline C code - resolving errors — Martin Hansen <mail@...>

I am trying to get this Ruby inline C code http://pastie.org/2825882 to

12 messages 2011/11/08

[#389928] Forming a Ruby meetup group... — "Darryl L. Pierce" <mcpierce@...>

Where I work we have a local Ruby group that used to meet up, until the

12 messages 2011/11/09

[#389950] The faster way to read files — "Noé Alejandro" <casanejo@...>

Does anybody know which is the fastest way to read a file? Lets say

18 messages 2011/11/09

[#390064] referring to version numbers in a gem — Chad Perrin <code@...>

How do I specify and access a gem's version number within the code of the

28 messages 2011/11/11

[#390238] RVM problem, plz help — Misha Ognev <b1368810@...>

Hi, I have this problem:

15 messages 2011/11/16

[#390308] any command line tools for querying yaml files — Rahul Kumar <sentinel1879@...>

(Sorry, this is not exactly a ruby question).

11 messages 2011/11/18

[#390338] Newbie - cmd question — Otto Dydakt <ottodydakt@...>

I've literally JUST downloaded ruby from rubyinstaller.org.

21 messages 2011/11/19
[#390342] Re: Newbie - cmd question — Otto Dydakt <ottodydakt@...> 2011/11/19

OK thank you, I uninstalled & reinstalled, checking the three boxes at

[#390343] Re: Newbie - cmd question — "Ian M. Asaff" <ian.asaff@...> 2011/11/19

did you type "irb" first to bring up the ruby command prompt?

[#391154] Re: Newbie - cmd question — "Hussain A." <hahmad@...> 2011/12/12

Hi all,

[#391165] Re: Newbie - cmd question — Luis Lavena <luislavena@...> 2011/12/12

Hussain A. wrote in post #1036281:

[#390374] Principle of Best Principles — Intransition <transfire@...>

I seem to run into a couple of design issue a lot and I never know what is

16 messages 2011/11/20

[#390396] how to call Function argument into another ruby script. — hari mahesh <harismahesh@...>

Consider I have a ruby file called library.rb.

10 messages 2011/11/21

[#390496] How to make 1.9.2 my default version using RVM — Fily Salas <fs_tigre@...>

Hi,

25 messages 2011/11/24

[#390535] Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...>

Well, first of all, I'm new to Ruby, and to this forum. So, hello. :)

39 messages 2011/11/25
[#390580] Re: Is high-speed sorting impossible with Ruby? — Joao Pedrosa <joaopedrosa@...> 2011/11/27

Hi,

[#390593] Re: Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...> 2011/11/27

Joao Pedrosa wrote in post #1033884:

[#390600] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

A big gain can be had by disabling the garbage collector. Here is my best

[#390601] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

I've thrown various solutions up on github here:

[#390650] Loading a faulty ruby file - forcing this — Marc Heiler <shevegen@...>

Hi.

10 messages 2011/11/29

[#390689] Stupid question — James Gallagher <lollyproductions@...>

Hi everyone.

22 messages 2011/11/30

Re: Compiling Ruby Inline C code - resolving errors

From: Ryan Davis <ryand-ruby@...>
Date: 2011-11-08 20:36:41 UTC
List: ruby-talk #389892
On Nov 8, 2011, at 06:50 , Martin Hansen wrote:

> Sylvester Keil wrote in post #1030842:
>=20
> How could I know that bulder.c -> builder.prefix changed the function =
an=20
> instance method to a "function"?

Well, first, because I showed you:

>> Because you're passing too few arguments to the function (6 to 7 =
arity function):
>>=20
>> static
>> VALUE backtrack(VALUE self, VALUE _ss, VALUE _s, VALUE _p, VALUE _mm, =
VALUE _ins, VALUE _del)
>>=20
>> vs:
>>=20
>>    backtrack(ss, s + 1, p + 1, mm - 1, ins, del)))
>>=20
>> Since you're not actually using self for anything, there is no reason =
for this to be a registered method. You might want to add this to the =
prefix section.

> I am pretty desperate for some reading=20
> - and examples - on this matter! Something modern (i. e. Ruby 1.9) and=20=

> something that is about inline C and not necessarily all of Ruby's =
API.

If you find the documentation insufficient in some way, please file a =
ticket. I can only improve what I  know about.

> I changed the code and cleaned up a few things:
>=20
> Ruby code: http://pastie.org/2831055
> Inline code: http://pastie.org/2831058
>=20
> Now I get a warning - and the wrong output:
>=20
> /Users/maasha/.ruby_inline/Inline_Scan_5319.c: In function =
'backtrack':
> /Users/maasha/.ruby_inline/Inline_Scan_5319.c:38: warning: implicit=20
> conversion shortens 64-bit value into a 32-bit value
> false

I don't. Here is what I wound up with:

#!/usr/bin/env ruby

require 'pp'
require 'inline'

class Scan
  def initialize(seq)
    @seq =3D seq
  end

  inline do |builder|
    builder.prefix %{
      #define MATCH(A,B) ((equal[(A)] & equal[(B)]) !=3D 0)
    }

    builder.add_static "id_seq", 'rb_intern("@seq")', "ID"

    builder.prefix %{
      int equal[256] =3D {
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 1,14, 4,11, 0, 0, 8, 7, 0, 0,10, 0, 5,15, 0,
          0, 0, 9,12, 2, 2,13, 3, 0, 6, 0, 0, 0, 0, 0, 0,
          0, 1,14, 4,11, 0, 0, 8, 7, 0, 0,10, 0, 5,15, 0,
          0, 0, 9,12, 2, 2,13, 3, 0, 6, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
      };
    }

    # ss is the start of the string, used only for reporting the match =
endpoints.
    builder.prefix %{
      int backtrack(char* ss, char* s, char* p, int mm, int ins, int =
del)
      {
          int r =3D 0;

          while (*s && MATCH(*s, *p)) ++s, ++p;    // OK to always match =
longest segment

          if (!*p)
              return (s - ss) - 1;
          else
          {
              if (mm && *s && *p && (r =3D backtrack(ss, s + 1, p + 1, =
mm - 1, ins, del))) return r;
              if (ins && *s &&      (r =3D backtrack(ss, s + 1, p, mm, =
ins - 1, del)))     return r;
              if (del && *p &&      (r =3D backtrack(ss, s, p + 1, mm, =
ins, del - 1)))     return r;
          }

          return 0;
      }
    }

    # Find all occurrences of p starting at any position in s, with at =
most
    # mm mismatches, ins insertions and del deletions.
    builder.c %{
      int patscan(char* p, int mm, int ins, int del)
      {
          VALUE seq =3D rb_ivar_get(self, id_seq);
          char* s =3D StringValuePtr(seq);
          char* ss;
          int   nnd;

          for (ss =3D s; *s; ++s)
          {
              nnd =3D backtrack(ss, s, p, mm, ins, del);

              if (nnd)
                 return nnd;
          }
       }
    }
  end
end

seq =3D "tcatcgagtcatcgatcgatcgatcgatcga"
pat =3D "gtcatcga"

scanner =3D Scan.new(seq)

puts scanner.patscan(pat, 0, 0, 0)


In This Thread