Codegolf - Pascals Triangle

My take on the latest problem from http://www.codegolf.com

a=[]
34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}

56 bytes.

Best regards,

Michael

···

--
Michael Ulm
R&D Team
ISIS Information Systems Austria
tel: +43 2236 27551-219, fax: +43 2236 21081
e-mail: michael.ulm@isis-papyrus.com
Visit our Website: www.isis-papyrus.com

---------------------------------------------------------------
This e-mail is only intended for the recipient and not legally
binding. Unauthorised use, publication, reproduction or
disclosure of the content of this e-mail is not permitted.
This email has been checked for known viruses, but ISIS accepts
no responsibility for malicious or inappropriate content.
---------------------------------------------------------------

My take on the latest problem from http://www.codegolf.com

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}

:slight_smile: That's very impressive - I like the way you've implemented the filter
like box kernel (summing adjacent array entries) - I wouldn't have
imagined the k=i would bind tighter than the k+k.

Michael Ulm <michael.ulm@isis-papyrus.com> writes:

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1)*" "}

···

--
Christian Neukirchen <chneukirchen@gmail.com> http://chneukirchen.org

Michael Ulm <michael.ulm@isis-papyrus.com> writes:

My take on the latest problem from http://www.codegolf.com

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}

56 bytes.

I think this may be very close to minimal - no approaches I tried got
this small. Note that you can slightly improve readability (but with
no change in character count) with:

a=
34.times{k=0;a.map!{|i|k+k=i}<<1;puts a.join(" ")}

Then there's removing the parentheses around the argument to join, but
that generates a warning that probably means you fail their test.

how about

a=
34.times{k=0;p (a.map!{|i|k+k=i}<<1).join(" ")}

I *never* use puts, and in this case using p saves you 3 characters - yay for micro-tuning :slight_smile:

Kev

···

On 11 Aug 2006, at 15:58, benjohn@fysh.org wrote:

My take on the latest problem from http://www.codegolf.com

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}

:slight_smile: That's very impressive - I like the way you've implemented the filter
like box kernel (summing adjacent array entries) - I wouldn't have
imagined the k=i would bind tighter than the k+k.

--
"That government is best which governs not at all" - Henry Thoreau

Christian Neukirchen wrote:

Michael Ulm <michael.ulm@isis-papyrus.com> writes:

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1)*" "}

Let's reuse a not needed array and save 4 bytes :slight_smile: (doesn't work if you set RUBY_OPT to always require some module...)

  34.times{k=0;puts ($".map!{|i|k+k=i}<<1)*" "}

···

--

Michael Ulm <michael.ulm@isis-papyrus.com> writes:

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1)*" "}

a=
9.times{k=0;puts (a.map!{|i|k+k=i}<<1)*" "}

:slight_smile:

How about:

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1)*' '}

···

On Friday, August 11, 2006, at 11:16 PM, Daniel Martin wrote:

Michael Ulm <michael.ulm@isis-papyrus.com> writes:

My take on the latest problem from http://www.codegolf.com

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}

56 bytes.

I think this may be very close to minimal - no approaches I tried got
this small. Note that you can slightly improve readability (but with
no change in character count) with:

a=
34.times{k=0;a.map!{|i|k+k=i}<<1;puts a.join(" ")}

Then there's removing the parentheses around the argument to join, but
that generates a warning that probably means you fail their test.

--
Posted with http://DevLists.com. Sign up and save your mailbox.

Unfortunately, the p method puts things in "" on stdout, which would
cause your code to fail the acceptance test. :frowning:

-Harold

···

On 8/11/06, Kev Jackson <foamdino@gmail.com> wrote:

On 11 Aug 2006, at 15:58, benjohn@fysh.org wrote:

>> My take on the latest problem from http://www.codegolf.com
>>
>> a=
>> 34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}
>
> :slight_smile: That's very impressive - I like the way you've implemented the
> filter
> like box kernel (summing adjacent array entries) - I wouldn't have
> imagined the k=i would bind tighter than the k+k.

how about

a=
34.times{k=0;p (a.map!{|i|k+k=i}<<1).join(" ")}

I *never* use puts, and in this case using p saves you 3 characters -
yay for micro-tuning :slight_smile:

Kev

Kev Jackson wrote:

My take on the latest problem from http://www.codegolf.com

a=
34.times{k=0;puts (a.map!{|i|k+k=i}<<1).join(" ")}

:slight_smile: That's very impressive - I like the way you've implemented the filter
like box kernel (summing adjacent array entries) - I wouldn't have
imagined the k=i would bind tighter than the k+k.

how about

a=
34.times{k=0;p (a.map!{|i|k+k=i}<<1).join(" ")}

I *never* use puts, and in this case using p saves you 3 characters - yay for micro-tuning :slight_smile:

This does not produce the same output on my system;
your version gives lines like

"1 2 1"

instead of

1 2 1

Since the output format is fixed in codegolf.com, unfortunately
this is not a solution.

Best regards,

Michael

···

On 11 Aug 2006, at 15:58, benjohn@fysh.org wrote:

--
Michael Ulm
R&D Team
ISIS Information Systems Austria
tel: +43 2236 27551-219, fax: +43 2236 21081
e-mail: michael.ulm@isis-papyrus.com
Visit our Website: www.isis-papyrus.com

---------------------------------------------------------------
This e-mail is only intended for the recipient and not legally
binding. Unauthorised use, publication, reproduction or
disclosure of the content of this e-mail is not permitted.
This email has been checked for known viruses, but ISIS accepts
no responsibility for malicious or inappropriate content.
---------------------------------------------------------------

Let's reuse a not needed array and save 4 bytes :slight_smile: (doesn't work if you
set RUBY_OPT to always require some module...)

34.times{k=0;puts ($".map!{|i|k+k=i}<<1)*" "}

This doesn't work:

34.times{k=0;puts ($".map!{|i|k+k=i}<<1)*' '}

TypeError: String can't be coerced into Fixnum
        from (irb):1:in `+'
        from (irb):1
        from (irb):1
        from (irb):1

However, changing $" to $* works like a champ :slight_smile:

34.times{k=0;puts ($*.map!{|i|k+k=i}<<1)*' '}

Ben

···

On Fri, Aug 11, 2006, Carlos wrote:
        from :0

You can make it even shorter by using *' ' over .join(' '), Array#*
is an alias for Array#join :slight_smile:

However, changing $" to $* works like a champ :slight_smile:

34.times{k=0;puts ($*.map!{|i|k+k=i}<<1)*' '}

Ben

Now at 45 chars it ties the current leader.

Ben Bleything wrote:

Let's reuse a not needed array and save 4 bytes :slight_smile: (doesn't work if you set RUBY_OPT to always require some module...)

34.times{k=0;puts ($".map!{|i|k+k=i}<<1)*" "}

This doesn't work:

See caveat about environment variables, above.

34.times{k=0;puts ($".map!{|i|k+k=i}<<1)*' '}

TypeError: String can't be coerced into Fixnum
        from (irb):1:in `+'
        from (irb):1
        from :0

However, changing $" to $* works like a champ :slight_smile:

34.times{k=0;puts ($*.map!{|i|k+k=i}<<1)*' '}

Much better choice, yes.

···

On Fri, Aug 11, 2006, Carlos wrote:

--