------art_55079_3075190.1171210881380
Content-Type: multipart/alternative; 
	boundary---art_55080_10905154.1171210881380"

------art_55080_10905154.1171210881380
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

I guess it is time now ;)


This was a great quiz and it thought me that I did not *know anything about
Regexps*.
Now I know a little bit:
I also got acquainted with an old enemy of mine, #inject :)


# Given an Array of String words, build an Array of only those words that
are
# anagrams of the first word in the Array.
quiz.select{ |ele| ele.split("").sort quiz.first.split("").sort }
# I left the first word in the list one could discard it within the 80 chars
limit be deleting WS in my solution.

# Given a Ruby class name in String form (like
# "GhostWheel::Expression::LookAhead"), fetch the actual class object.
#
xiz.split("::").inject(self.class){|k,m|k.const_get(m)};Classx ? x :
nil

# * Given a Numeric, provide a String representation with commas inserted
between
# each set of three digits in front of the decimal.  For example, 1999995.99
# should become "1,999,995.99".
m^\.]*/.match(quiz.to_s
);p;m[0].reverse.gsub(/\d{3}\B/,'\&,').reverse+p
# I could not believe how tough this one was for me!!!!

# * Given a nested Array of Arrays, perform a flatten()-like operation that
# removes only the top level of nesting.  For example, [1, [2, [3]]] would
become
# [1, 2, [3]].
#
quiz.inject( [] ) { |a,e| a + ( Array  e ? e : [e] ) }

# Convert a ThinkGeek t-shirt slogan (in String form) into a binary
# representation (still a String).  For example, the popular shirt "you are
dumb"
# is actually printed as:
#
#        111100111011111110101
#        110000111100101100101
#        1100100111010111011011100010
#
quiz.split.map{ |w| s; w.each_byte{ |b| s<<b.to_s(2)}; s}.join("\n")

# * Convert an Array of objects to nested Hashes such that %w[one two three
four
# five] becomes {"one" {"two" {"three" {"four" "five"}}}}.
quiz[0..-3].reverse.inject( { quiz[-2] quiz[-1] } ){ |h,e| { e h } }
# I found a fitting solution with a recursive method in 80 chars but
eventually
# I was saved by #inject from ridiculing myself.

# Provided with an open File object, select a random line of content.
qiz.readlines; q[ rand( q.size ) ].chomp

# * Shuffle the contents of a provided Array.
#
quiz.sort_by{ rand }
# This was a great Quiz but this problem was somehow an anticlimax for me,
did I miss something?

# Given a wondrous number Integer, produce the sequence (in an Array).  A
# wondrous number is a number that eventually reaches one, if you apply the
# following rules to build a sequence from it.  If the current number in the
# sequence is even, the next number is that number divided by two.  When the
# current number is odd, multiply that number by three and add one to get
the next
# number in the sequence.  Therefore, if we start with the wondrous number
15, the
# sequence is [15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8,
4, 2,
# 1].
qiz; x]; until x[-1] do x << ( q %2 ? q/2 : 3 * q + 1 ); end;
x
# Maybe not  very challenging but a good read on Google:)

# Insert newlines into a paragraph of prose (provided in a String) so lines
will
# wrap at 40 characters.
#
quiz.gsub(/(.{1,40})(\b|\z)/){$1+"\n"}.gsub(/\s*\n\s*/,"\n").chomp
# tougher than I thought I am not sure about all edge cases

I attached a test suite and the solutions

Cheers
Robert
-- 
We have not succeeded in answering all of our questions.
In fact, in some ways, we are more confused than ever.
But we feel we are confused on a higher level and about more important
things.
-Anonymous

------art_55080_10905154.1171210881380
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

<br><span classmail_quote"></span><br>I guess it is time now ;)<br><br><br>This was a great quiz and it thought me that I did not *know anything about Regexps*.<br>Now I know a little bit:<br>I also got acquainted with an old enemy of mine, #inject :)
<br><br><br># Given an Array of String words, build an Array of only those words that are<br># anagrams of the first word in the Array.<br>quiz.select{ |ele| ele.split(&quot;&quot;).sort quiz.first.split(&quot;&quot;).sort }
<br># I left the first word in the list one could discard it within the 80 chars limit be deleting WS in my solution.<br><br># Given a Ruby class name in String form (like<br># &quot;GhostWheel::Expression::LookAhead&quot;), fetch the actual class object.
<br># <br>xiz.split(&quot;::&quot;).inject(self.class){|k,m|k.const_get(m)};Classx ? x : nil<br><br># * Given a Numeric, provide a String representation with commas inserted between<br># each set of three digits in front of the decimal.&nbsp; For example, 
1999995.99<br># should become &quot;1,999,995.99&quot;.<br>m^\.]*/.match(quiz.to_s);p#39;;m[0].reverse.gsub(/\d{3}\B/,&#39;\&amp;,&#39;).reverse+p<br># I could not believe how tough this one was for me!!!!<br><br># * Given a nested Array of Arrays, perform a flatten()-like operation that
<br># removes only the top level of nesting.&nbsp; For example, [1, [2, [3]]] would become<br># [1, 2, [3]].<br># <br>quiz.inject( [] ) { |a,e| a + ( Array  e ? e : [e] ) }<br><br># Convert a ThinkGeek t-shirt slogan (in String form) into a binary
<br># representation (still a String).&nbsp; For example, the popular shirt &quot;you are dumb&quot;<br># is actually printed as:<br># <br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111100111011111110101<br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 110000111100101100101<br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1100100111010111011011100010
<br># <br>quiz.split.map{ |w| suot;&quot;; w.each_byte{ |b| s&lt;&lt;b.to_s(2)}; s}.join(&quot;\n&quot;)<br><br># * Convert an Array of objects to nested Hashes such that %w[one two three four<br># five] becomes {&quot;one&quot; t; {&quot;two&quot; t; {&quot;three&quot; t; {&quot;four&quot; t; &quot;five&quot;}}}}.
<br>quiz[0..-3].reverse.inject( { quiz[-2] t; quiz[-1] } ){ |h,e| { e t; h } }<br># I found a fitting solution with a recursive method in 80 chars but eventually<br># I was saved by #inject from ridiculing myself.<br>
<br clear
ll"># Provided with an open File object, select a random line of content.<br>qiz.readlines; q[ rand( q.size ) ].chomp<br><br># * Shuffle the contents of a provided Array.<br>#<br>quiz.sort_by{ rand }<br># This was a great Quiz but this problem was somehow an anticlimax for me, did I miss something?
<br>
<br># Given a wondrous number Integer, produce the sequence (in an Array).&nbsp; A<br># wondrous number is a number that eventually reaches one, if you apply the<br># following rules to build a sequence from it.&nbsp; If the current number in the
<br># sequence is even, the next number is that number divided by two.&nbsp; When the<br># current number is odd, multiply that number by three and add one to get the next<br># number in the sequence.&nbsp; Therefore, if we start with the wondrous number 15, the
<br># sequence is [15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2,<br># 1].<br>qiz; x]; until x[-1] do x &lt;&lt; ( q %2 ? q/2 : 3 * q + 1 ); end; x<br># Maybe not&nbsp; very challenging but a good read on Google:)
<br><br># Insert newlines into a paragraph of prose (provided in a String) so lines will<br># wrap at 40 characters.<br># <br>quiz.gsub(/(.{1,40})(\b|\z)/){$1+&quot;\n&quot;}.gsub(/\s*\n\s*/,&quot;\n&quot;).chomp<br># tougher than I thought I am not sure about all edge cases
<br><br>I attached a test suite and the solutions<br><br>Cheers<br>Robert<br>-- <br>We have not succeeded in answering all of our questions.<br>In fact, in some ways, we are more confused than ever.<br>But we feel we are confused on a higher level and about more important things.
<br>-Anonymous

------art_55080_10905154.1171210881380--

------art_55079_3075190.1171210881380
Content-Type: application/x-gzip; name="sol113.tgz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="sol113.tgz"
X-Attachment-Id: f_ey1njcs6

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
UEEFFVRQQQWb4b/q5jqvAHgAAA------art_55079_3075190.1171210881380--