[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Ruby Puzzle Challenge

Wyatt Greene

1/30/2008 9:15:00 PM

Write a Ruby program that prints out the numbers 1 to 100, one number
per line. The program must be less than 10 characters long.

Good luck!
Wyatt Greene

13 Answers

Lee Jarvis

1/30/2008 9:21:00 PM

0

On Jan 30, 9:14 pm, Wyatt Greene <green...@yahoo.com> wrote:
> Write a Ruby program that prints out the numbers 1 to 100, one number
> per line.  The program must be less than 10 characters long.
>
> Good luck!
> Wyatt Greene

Lol whats this all about?

Well, just for the crack..

p *1..100

Sebastian Hungerecker

1/30/2008 9:28:00 PM

0

Wyatt Greene wrote:
> Write a Ruby program that prints out the numbers 1 to 100, one number
> per line. The program must be less than 10 characters long.

Does this have some kind of spoiler-period like the ruby quiz? Well, since it
didn't say so in the OP and anyone who wants to solve it on his own can just
not read the replies until he's done, here it goes:

p *1..100
or one char shorter:
p *1..?d


--
NP: Explosions in the Sky- With Tired Eyes, Tired Minds, Tired Souls, We Slept
Jabber: sepp2k@jabber.org
ICQ: 205544826

Wyatt Greene

1/30/2008 9:34:00 PM

0

I was thinking of p *1..100

I'm am truly amazed that this could be squeezed down even further to p
*1..?d

That leads me to wonder...is it possible to squeeze this program down
into 7 characters?



On Jan 30, 4:27 pm, Sebastian Hungerecker <sep...@googlemail.com>
wrote:
> Wyatt Greene wrote:
> > Write a Ruby program that prints out the numbers 1 to 100, one number
> > per line. The program must be less than 10 characters long.
>
> Does this have some kind of spoiler-period like the ruby quiz? Well, since it
> didn't say so in the OP and anyone who wants to solve it on his own can just
> not read the replies until he's done, here it goes:
>
> p *1..100
> or one char shorter:
> p *1..?d
>
> --
> NP: Explosions in the Sky- With Tired Eyes, Tired Minds, Tired Souls, We Slept
> Jabber: sep...@jabber.org
> ICQ: 205544826

Dominik Honnef

1/30/2008 9:37:00 PM

0

On [Thu, 31.01.2008 06:24], Lee Jarvis wrote:
> On Jan 30, 9:14 pm, Wyatt Greene <green...@yahoo.com> wrote:
> > Write a Ruby program that prints out the numbers 1 to 100, one number
> > per line.  The program must be less than 10 characters long.
> >
> > Good luck!
> > Wyatt Greene
>
> Lol whats this all about?
>
> Well, just for the crack..
>
> p *1..100

Would you be so gentle and explain this piece of code to me?
I know things like p "a"*10, but I dont really understand your code.
I know that 1..100 describes a range, but... isn't * a binary operator? I don't really see the first/second operand

--
Dominik Honnef


Sebastian Hungerecker

1/30/2008 9:43:00 PM

0

Dominik Honnef wrote:
> > p *1..100
>
> Would you be so gentle and explain this piece of code to me?
> [...] isn't * a binary operator? I


* can be a binary operator, yes, but here it is the unary, prefix
splat-operator which takes an array or any object that responds to
to_a and turns it into a list of arguments:
foo(*[:la,:li,:lu]) becomes foo(:la,:li,:lu)
p *1..5 becomes p 1,2,3,4,5


HTH,
Sebastian
--
Jabber: sepp2k@jabber.org
ICQ: 205544826

Wyatt Greene

1/30/2008 9:46:00 PM

0

This is the problem with writing "clever" code...it's unreadable!

The * operator used here is a unary operator that is used to convert
an array into a list of arguments. For example, say you had this
method:

def say(a, b, c)
puts a
puts b
puts c
end

If you had this array:

arr = [1, 2, 3]

As a convenience, Ruby lets you pass each element of the array as a
separate argument into the method by using the * operator:

say(*arr)

In the case of p *1..100, the trick seems to work for a range, too.

On Jan 30, 4:36 pm, Dominik Honnef <domini...@gmx.net> wrote:
> On [Thu, 31.01.2008 06:24], Lee Jarvis wrote:
>
> > On Jan 30, 9:14 pm, Wyatt Greene <green...@yahoo.com> wrote:
> > > Write a Ruby program that prints out the numbers 1 to 100, one number
> > > per line. The program must be less than 10 characters long.
>
> > > Good luck!
> > > Wyatt Greene
>
> > Lol whats this all about?
>
> > Well, just for the crack..
>
> > p *1..100
>
> Would you be so gentle and explain this piece of code to me?
> I know things like p "a"*10, but I dont really understand your code.
> I know that 1..100 describes a range, but... isn't * a binary operator? I don't really see the first/second operand
>
> --
> Dominik Honnef

Dominik Honnef

1/30/2008 9:49:00 PM

0

On [Thu, 31.01.2008 06:42], Sebastian Hungerecker wrote:
> Dominik Honnef wrote:
> > > p *1..100
> >
> > Would you be so gentle and explain this piece of code to me?
> > [...] isn't * a binary operator? I
>
>
> * can be a binary operator, yes, but here it is the unary, prefix
> splat-operator which takes an array or any object that responds to
> to_a and turns it into a list of arguments:
> foo(*[:la,:li,:lu]) becomes foo(:la,:li,:lu)
> p *1..5 becomes p 1,2,3,4,5
>
>
> HTH,
> Sebastian
> --
> Jabber: sepp2k@jabber.org
> ICQ: 205544826

Ah, yeah of course... I totally forgot about that.
If it had been puts(*[1,2,3...]) I wouldnt have asked that question :/
Actually, I'm using this feature a lot in my codes. But didn't know it takes any object,
which responds to #to_a

Thank you :)

(Okay, I forgot, that puts can take multiple arguments, too. Sometimes, Ruby is just too easy)
--
Dominik Honnef


Lee Jarvis

1/30/2008 10:44:00 PM

0

On Jan 30, 9:36 pm, Dominik Honnef <domini...@gmx.net> wrote:
> Would you be so gentle and explain this piece of code to me?
> I know things like p "a"*10, but I dont really understand your code.
> I know that 1..100 describes a range, but... isn't * a binary operator? I don't really see the first/second operand

Looks like Sebastian Hungerecker explained it before I could get
there. At least I got my post in second before him, hehe..
Well said, Sebastian.

Regards,
Lee

Lionel Bouton

1/30/2008 11:01:00 PM

0

Wyatt Greene wrote:
> I was thinking of p *1..100
>
> I'm am truly amazed that this could be squeezed down even further to p
> *1..?d
>
> That leads me to wonder...is it possible to squeeze this program down
> into 7 characters?
>

I tried another approach by relaxing your conditions a bit : the number
must all be printed out on the output but not one on each line.

p 2**975

works :-)

ie the "output" verifies :
!(1..100).any? { |v| output !~ /#{v}/ }

Unfortunately there's no x**y solution to this condition where x and y
use less that 4 characters.

Still stuck with 8 chars :-/ I can't think of any other string or
numeric operator which can generate lots of data to print with little
input right now.

Lionel

Wyatt Greene

1/31/2008 12:46:00 AM

0

On Jan 30, 6:01 pm, Lionel Bouton <lionel-subscript...@bouton.name>
wrote:
> Wyatt Greene wrote:
> > I was thinking of p *1..100
>
> > I'm am truly amazed that this could be squeezed down even further to p
> > *1..?d
>
> > That leads me to wonder...is it possible to squeeze this program down
> > into 7 characters?
>
> I tried another approach by relaxing your conditions a bit : the number
> must all be printed out on the output but not one on each line.
>
> p 2**975
>
> works :-)
>
> ie the "output" verifies :
> !(1..100).any? { |v| output !~ /#{v}/ }
>
> Unfortunately there's no x**y solution to this condition where x and y
> use less that 4 characters.
>
> Still stuck with 8 chars :-/ I can't think of any other string or
> numeric operator which can generate lots of data to print with little
> input right now.
>
> Lionel

Wow, that's pretty creative, though!