I've been going through a Haskell tutorial (Just to see what it's like)
and saw an example program which would tell me how long each side a
right-angle triangle is, when given the perimeter. It seemed pretty
simple, and me, being the kind of guy that likes to write the same
program in multiple languages, tried to write it in ruby.
I'm pretty stumped though, and would like someone a little higher up to
give me a nudge in the right direction :D.
(Eg. program would return (6, 8, 10) and (8, 6, 10) when you say that
the perimeter is 24)
I couldn't help but notice that this is exactly the same email
as sent yesterday by "Kane Williams" (see below). Are you
connected somehow?
In any case, it is hard to say anything useful without seeing your code
or a precise description of the task. i.e. - There are an infinite number
of right triangles for a given perimeter. So given just your brief
description, the problem doesn't sound well formed.
Regards,
Dan Nachbar
···
On Sep 3, 2011, at 9:49 AM, Patrick Lynch wrote:
I've been going through a Haskell tutorial (Just to see what it's like)
and saw an example program which would tell me how long each side a
right-angle triangle is, when given the perimeter. It seemed pretty
simple, and me, being the kind of guy that likes to write the same
program in multiple languages, tried to write it in ruby.
I'm pretty stumped though, and would like someone a little higher up to
give me a nudge in the right direction :D.
(Eg. program would return (6, 8, 10) and (8, 6, 10) when you say that
the perimeter is 24)
I've been going through a Haskell tutorial (Just to see what it's like)
and saw an example program which would tell me how long each side a
right-angle triangle is, when given the perimeter. It seemed pretty
simple, and me, being the kind of guy that likes to write the same
program in multiple languages, tried to write it in ruby.
I'm pretty stumped though, and would like someone a little higher up to
give me a nudge in the right direction :D.
(Eg. program would return (6, 8, 10) and (8, 6, 10) when you say that
the perimeter is 24)
There are a lot of ways to generate pythagorean triples (what I assume
you're actually asking for), so hard to translate it without seeing the
original. Also, just FYI, this is the domain of problem that Haskell was
made for, but Ruby isn't particularly good at math algorithms.
···
On Sat, Sep 3, 2011 at 8:49 AM, Patrick Lynch <kmandpjlynch@verizon.net>wrote:
I've been going through a Haskell tutorial (Just to see what it's like)
and saw an example program which would tell me how long each side a
right-angle triangle is, when given the perimeter. It seemed pretty
simple, and me, being the kind of guy that likes to write the same
program in multiple languages, tried to write it in ruby.
I'm pretty stumped though, and would like someone a little higher up to
give me a nudge in the right direction :D.
(Eg. program would return (6, 8, 10) and (8, 6, 10) when you say that
the perimeter is 24)
def right_triangle_sides( circumference )
.tap do |solutions|
1.upto(circumference-2) do |a|
1.upto(a-1) do |b|
c = circumference-a-b
if a*a+b*b == c*c
solutions.concat( [a,b,c].permutation.to_a )
end
end
end
end
end
right_triangle_sides(24).each do |sides|
p sides
end
#=> [8, 6, 10]
#=> [8, 10, 6]
#=> [6, 8, 10]
#=> [6, 10, 8]
#=> [10, 8, 6]
#=> [10, 6, 8]
···
On Sep 3, 2011, at 7:49 AM, Patrick Lynch wrote:
I've been going through a Haskell tutorial (Just to see what it's like)
and saw an example program which would tell me how long each side a
right-angle triangle is, when given the perimeter. It seemed pretty
simple, and me, being the kind of guy that likes to write the same
program in multiple languages, tried to write it in ruby.
On Sat, Sep 3, 2011 at 4:36 PM, Gavin Kistner <phrogz@me.com> wrote:
def right_triangle_sides( circumference )
.tap do |solutions|
1.upto(circumference-2) do |a|
1.upto(a-1) do |b|
c = circumference-a-b
if a*a+b*b == c*c
solutions.concat( [a,b,c].permutation.to_a )
end
end
end
end
end
I get a lot of flack for "abusing" tap like this. I happen to find this pattern annoying:
def xyz
foo = ...
# do things to foo
foo
end
and so have taken to using the very-low-impact of tap to make it more functional-style:
def xyz
....tap do |foo|
# do things to foo
end
end
···
On Sep 3, 2011, at 2:16 PM, Adam Prescott <adam@aprescott.com> wrote:
On Sat, Sep 3, 2011 at 4:36 PM, Gavin Kistner <phrogz@me.com> wrote:
def right_triangle_sides( circumference )
.tap do |solutions|
1.upto(circumference-2) do |a|
1.upto(a-1) do |b|
c = circumference-a-b
if a*a+b*b == c*c
solutions.concat( [a,b,c].permutation.to_a )
end
end
end
end
end
On Sep 3, 2011, at 2:16 PM, Adam Prescott <adam@aprescott.com> wrote:
end
end
end
A very curious use of #tap.
I get a lot of flack for "abusing" tap like this. I happen to find
this pattern annoying:
def xyz
foo = ...
# do things to foo
foo
end
So when you read the thread title, "Beginner needing help", you thought
you would make some moves to impress the new guy, and show him how
unintelligible ruby is?
No, that was not my intention. I don't personally find it unintelligible; indeed, other than the name of the method "tap" I find that pattern to look more elegant then a clumsy repetition of variable names. (If the method were named something like "named" or "using" or "with" my particular usage might read slightly better.)
For comparison and instruction of a new user, however, here's my solution slightly changed to use what I deem to be the uglier code, and what I suppose 7stud feels is more attractive:
def right_triangle_sides( circumference )
solutions =
1.upto(circumference-2) do |a|
1.upto(a-1) do |b|
c = circumference-a-b
if a*a+b*b == c*c
solutions.concat( [a,b,c].permutation.to_a )
end
end
end
solutions
end
···
On Sep 3, 2011, at 8:57 PM, 7stud -- wrote:
Gavin Kistner wrote in post #1020000:
On Sep 3, 2011, at 2:16 PM, Adam Prescott <adam@aprescott.com> wrote:
A very curious use of #tap.
I get a lot of flack for "abusing" tap like this. I happen to find
this pattern annoying:
def xyz
foo = ...
# do things to foo
foo
end
So when you read the thread title, "Beginner needing help", you thought
you would make some moves to impress the new guy, and show him how
unintelligible ruby is?