Skip to main content
GameDev.net gamedev.net
🔒 Locked

Programming Language Comparison - Pascal's Triangle

Started by Tron3k Jun 26, 2005 at 2:49 PM 125 replies 33.6k views
Original Post
Tron3k
Tron3k
Hi, I thought it would be cool to see how different programming languages accomplish the same task. There's a site that does this for a "99 Bottles of Beer on the Wall" program, but I find that rather uninteresting. Here's something slightly more interesting, in that at least you have to do some kind of simple algorithm to make it work: All you have to do is print out 16 rows of Pascal's Triangle. It must look like the following:
     1
     1,     1
     1,     2,     1
     1,     3,     3,     1
     1,     4,     6,     4,     1
     1,     5,    10,    10,     5,     1
     1,     6,    15,    20,    15,     6,     1
     1,     7,    21,    35,    35,    21,     7,     1
     1,     8,    28,    56,    70,    56,    28,     8,     1
     1,     9,    36,    84,   126,   126,    84,    36,     9,     1
     1,    10,    45,   120,   210,   252,   210,   120,    45,    10,     1
     1,    11,    55,   165,   330,   462,   462,   330,   165,    55,    11,     1
     1,    12,    66,   220,   495,   792,   924,   792,   495,   220,    66,    12,     1
     1,    13,    78,   286,   715,  1287,  1716,  1716,  1287,   715,   286,    78,    13,     1
     1,    14,    91,   364,  1001,  2002,  3003,  3432,  3003,  2002,  1001,   364,    91,    14,     1
     1,    15,   105,   455,  1365,  3003,  5005,  6435,  6435,  5005,  3003,  1365,   455,   105,    15,     1
Don't forget to tell us what language you're using. Also, please don't use the SOURCE tag, use the CODE tag instead. Hopefully, your code will be short enough so that it would be worthwhile to do so. Try to write your code in a way that is readable and concise. Use comments only if someone fluent in your language wouldn't be able to understand what you're doing. Now, let's begin. Here is the solution written in Common Lisp:
(loop repeat 16
      for r = '(1) then (mapcar #'+ (cons 0 r) (append r '(0)))
      do (format t "~{~6D~^,~}~%" r))
“[The clergy] believe that any portion of power confided to me, will be exerted in opposition to their schemes. And they believe rightly: for I have sworn upon the altar of God, eternal hostility against every form of tyranny over the mind of man” - Thomas Jefferson
Toolmaker
Toolmaker
Why are you whoring out on Lisp again? I hear you talk about nothing else... You're like Mindwipe, except he keeps on whining about his gf [grin]

Toolmaker
 
MindWipe
MindWipe
Quote:
Original post by Toolmaker
Why are you whoring out on Lisp again? I hear you talk about nothing else... You're like Mindwipe, except he keeps on whining about his gf [grin]

Toolmaker


I don't! >_< Well, not here atleast, and.... well, she's hot so I have my reason.

/MindWipe
"To some its a six-pack, to me it's a support group."
Tron3k
Tron3k
Me? Whore out Lisp? As if. [grin]
“[The clergy] believe that any portion of power confided to me, will be exerted in opposition to their schemes. And they believe rightly: for I have sworn upon the altar of God, eternal hostility against every form of tyranny over the mind of man” - Thomas Jefferson
Tron3k
Tron3k
Anyway, this thread is serious. Let's see some entries:
“[The clergy] believe that any portion of power confided to me, will be exerted in opposition to their schemes. And they believe rightly: for I have sworn upon the altar of God, eternal hostility against every form of tyranny over the mind of man” - Thomas Jefferson
Diodor
Diodor
Quote:
Original post by Tron3k

Now, let's begin. Here is the solution written in Common Lisp:

(loop repeat 16      for r = '(1) then (mapcar #'+ (cons 0 r) (append r '(0)))      do (format t "~{~6D~^,~}~%" r))


Nice!
SamLowry
SamLowry
P[1] := {1};P[n_] := P[n] = {1, ##} & @@ ((Plus @@ #) & /@ Partition[{##, 0} & @@ P[n - 1], 2, 1]);TableForm[P /@ Range[1, 16]]
Alpha_ProgDes
Alpha_ProgDes
Quote:
Original post by SamLowry
P[1] := {1};P[n_] := P[n] = {1, ##} & @@ ((Plus @@ #) & /@ Partition[{##, 0} & @@ P[n - 1], 2, 1]);TableForm[P /@ Range[1, 16]]

pascal or delphi?

Beginner in Game Development?  Read here. And read here.  
ApochPiQ
ApochPiQ
Easy:

Form 352


This is my new experimental language, PacTri, a language specifically designed for outputting Pascal's Triangle in a variety of formats. Practical applications currently seem scarce.
Pouya
Pouya
public class WTF{    public static int fact(int i)    { int res = 1; while (i > 1) res *= i--; return res; }    public static int main(string[] args)    {        for (int r=0; r<16; r++)        {            for (int c=0; c<=row; c++)                Console.Out.Write("{0,-8:N}", (int)(fact(r)/fact(c)/fact(r-c)));            Console.Out.Write("\n");        }        return 0;    }}

Edit: I need this clarification: This is C# not Java

[Edited by - Pouya on June 26, 2005 3:20:10 PM]
SamLowry
SamLowry
Quote:
Original post by Alpha_ProgDes
Quote:
Original post by SamLowry
P[1] := {1};P[n_] := P[n] = {1, ##} & @@ ((Plus @@ #) & /@ Partition[{##, 0} & @@ P[n - 1], 2, 1]);TableForm[P /@ Range[1, 16]]

pascal or delphi?


Neither :)

Cleaner version

P[1] := {1};P[n_ /; n>1] := P[n] = ({0, ##} + {##, 0}) & @@ P[n - 1]


Who can guess which language this is?
Tron3k
Tron3k
Quote:
Original post by Pouya
public class WTF{    public static int fact(int i)    { int res = 1; while (i > 1) res *= i--; return res; }    public static int main(string[] args)    {        for (int r=0; r<16; r++)        {            for (int c=0; c<=row; c++)                Console.Out.Write("{0,-8:N}", (int)(fact(r)/fact(c)/fact(r-c)));            Console.Out.Write("\n");        }        return 0;    }}
That's appallingly inefficient ^_^
“[The clergy] believe that any portion of power confided to me, will be exerted in opposition to their schemes. And they believe rightly: for I have sworn upon the altar of God, eternal hostility against every form of tyranny over the mind of man” - Thomas Jefferson
Tron3k
Tron3k
Quote:
Original post by SamLowry
Quote:
Original post by Alpha_ProgDes
Quote:
Original post by SamLowry
P[1] := {1};P[n_] := P[n] = {1, ##} & @@ ((Plus @@ #) & /@ Partition[{##, 0} & @@ P[n - 1], 2, 1]);TableForm[P /@ Range[1, 16]]

pascal or delphi?


Neither :)

Cleaner version

P[1] := {1};P[n_ /; n>1] := P[n] = ({0, ##} + {##, 0}) & @@ P[n - 1]


Who can guess which language this is?
Not I. It looks like you used my cool trick for adding up pairs in a list though, good job.
“[The clergy] believe that any portion of power confided to me, will be exerted in opposition to their schemes. And they believe rightly: for I have sworn upon the altar of God, eternal hostility against every form of tyranny over the mind of man” - Thomas Jefferson
jfclavette
jfclavette
How about writing something useful instead of using problems specifically aimed at proving that functional languages are "superior" ?

Who the hell would want to Output a Pascal Triangle...
I teleported home one night; With Ron and Sid and Meg; Ron stole Meggie's heart away; And I got Sydney's leg. <> I'm blogging, emo style
Pouya
Pouya
I believe that code is in matlab
Tron3k
Tron3k
This has nothing to do with functional languages...
“[The clergy] believe that any portion of power confided to me, will be exerted in opposition to their schemes. And they believe rightly: for I have sworn upon the altar of God, eternal hostility against every form of tyranny over the mind of man” - Thomas Jefferson
Tron3k
Tron3k
Quote:
Original post by Pouya
I believe that code is in matlab
Cool, makes me want to try matlab. I understand Mathematica has a very nice language too.
“[The clergy] believe that any portion of power confided to me, will be exerted in opposition to their schemes. And they believe rightly: for I have sworn upon the altar of God, eternal hostility against every form of tyranny over the mind of man” - Thomas Jefferson
Tron3k
Tron3k
Quote:
Original post by SamLowry
P[1] := {1};P[n_] := P[n] = {1, ##} & @@ ((Plus @@ #) & /@ Partition[{##, 0} & @@ P[n - 1], 2, 1]);TableForm[P /@ Range[1, 16]]
BTW, don't forget I wanted the output to look exactly like my output, with commas and the right spacing. But maybe your TableForm does that by coincidence, so I don't know. [wink]
“[The clergy] believe that any portion of power confided to me, will be exerted in opposition to their schemes. And they believe rightly: for I have sworn upon the altar of God, eternal hostility against every form of tyranny over the mind of man” - Thomas Jefferson
Conner McCloud
Conner McCloud
Quote:
Original post by Pouya
Console.Out.Write("{0,-8:N}", (int)(fact(r)/fact(c)/fact(r-c)));

Not a specific problem given the confines of this puzzle, of course, but that method is going to overflow sooner than it needs to.

A quick thought for an improvement:
int choose(int r, int c){   int res = 1;    int i = r;   int j = (c > r-c) ? c : r-c;   int k = (c > r-c) ? r-c : c;   //calculates r!/c! or r!/(r-c)!, whichever is smaller   while (i > j)       res *= i--;    return res / fact(k);  //pretty sure this could be improved}

Perhaps not valid Java, but easily adapted.

CM
Pouya
Pouya
It was C#, not Java, and I was trying to keep it as short as possible

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.