Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.forth > #37046 > unrolled thread

Pascal's Triangle

Started by"WJ" <w_a_x_man@yahoo.com>
First post2015-03-06 04:45 +0000
Last post2015-03-19 05:14 +0000
Articles 8 — 7 participants

Back to article view | Back to comp.lang.forth


Contents

  Pascal's Triangle "WJ" <w_a_x_man@yahoo.com> - 2015-03-06 04:45 +0000
    Re: Pascal's Triangle Melzzzzz <mel@zzzzz.com> - 2015-03-06 07:32 +0100
      Re: Pascal's Triangle Richard Todd <richard.wesley.todd@gmail.com> - 2015-03-05 22:59 -0800
    Re: Pascal's Triangle november.nihal@gmail.com - 2015-03-06 02:24 -0800
      Re: Pascal's Triangle Gerry Jackson <gerry@jackson9000.fsnet.co.uk> - 2015-03-06 22:30 +0000
    Re: Pascal's Triangle franck.bensusan@gmail.com - 2015-03-06 04:48 -0800
    Re: Pascal's Triangle Ron Aaron <rambamist@gmail.com> - 2015-03-06 15:15 +0200
    Re: Pascal's Triangle "WJ" <w_a_x_man@yahoo.com> - 2015-03-19 05:14 +0000

#37046 — Pascal's Triangle

From"WJ" <w_a_x_man@yahoo.com>
Date2015-03-06 04:45 +0000
SubjectPascal's Triangle
Message-ID<mdbbd1$271$1@dont-email.me>
Print the first 16 rows of Pascal's Triangle.

Gauche Scheme:

(let1 row '(1)
  (dotimes (16)
    (print ((#/.(.*)./ (x->string row)) 1))
    (set! row (map + (cons 0 row) `(,@row 0)))))

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

Let's see a shorter Forth version.

[toc] | [next] | [standalone]


#37047

FromMelzzzzz <mel@zzzzz.com>
Date2015-03-06 07:32 +0100
Message-ID<20150306073218.6470ffa4@maxa-pc>
In reply to#37046
On Fri, 6 Mar 2015 04:45:22 +0000 (UTC)
"WJ" <w_a_x_man@yahoo.com> wrote:

> Print the first 16 rows of Pascal's Triangle.
> 
> Gauche Scheme:
> 
> (let1 row '(1)
>   (dotimes (16)
>     (print ((#/.(.*)./ (x->string row)) 1))
>     (set! row (map + (cons 0 row) `(,@row 0)))))
> 
> 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
> 
> Let's see a shorter Forth version.
Nim :

for i in 0..16 :
  var x = 1
  for k in 0..i :
    write (stdout,x,' ')
    x = x * (i - k) div (k + 1)
  write (stdout,'\l')

[toc] | [prev] | [next] | [standalone]


#37048

FromRichard Todd <richard.wesley.todd@gmail.com>
Date2015-03-05 22:59 -0800
Message-ID<e35f1646-9a9e-49e9-a3e1-71eba68e4de2@googlegroups.com>
In reply to#37047
On Friday, March 6, 2015 at 12:32:21 AM UTC-6, Melzzzzz wrote:
> On Fri, 6 Mar 2015 04:45:22 +0000 (UTC)

> Nim :

[snip]

Here's a FORTH translation of the Nim code...

: pasc ( n -- )  cr 0 DO   1 I 1+ 0 DO 
    dup . J I -  * I 1+   /  LOOP  drop cr LOOP ;

so, 16 pasc will print the first 16 rows.

[toc] | [prev] | [next] | [standalone]


#37049

Fromnovember.nihal@gmail.com
Date2015-03-06 02:24 -0800
Message-ID<689b7908-c619-428b-8b56-124ee3ea83ed@googlegroups.com>
In reply to#37046
https://groups.google.com/forum/#!searchin/comp.lang.forth/pascals$20triangle/comp.lang.forth/CJIOHOo5hu8/3Q3FJof0SZoJ

[toc] | [prev] | [next] | [standalone]


#37067

FromGerry Jackson <gerry@jackson9000.fsnet.co.uk>
Date2015-03-06 22:30 +0000
Message-ID<mdd9p7$n54$1@dont-email.me>
In reply to#37049
On 06/03/2015 10:24, november.nihal@gmail.com wrote:
>
> https://groups.google.com/forum/#!searchin/comp.lang.forth/pascals$20triangle/comp.lang.forth/CJIOHOo5hu8/3Q3FJof0SZoJ
>

: pasc  ( 0 1 i*x 0 -- 0 1 j*x 0 )   \ j=i+1
    begin >r dup while dup . repeat
    0
    begin r@ + r> dup 0= until
;

: pascal 0 1 0 16 0 do cr pasc loop cr abort ;

The final ABORT is just to clear the stack

-- 
Gerry

[toc] | [prev] | [next] | [standalone]


#37053

Fromfranck.bensusan@gmail.com
Date2015-03-06 04:48 -0800
Message-ID<c316571b-71b5-471d-b630-c10e3d3f0126@googlegroups.com>
In reply to#37046
If interested : a solution using oforth language and operations on lists : 

func: pascal(n) { [ 1 ] #[ dup println dup 0 + 0 rot + zipWith(#+) ] times(n) drop }

[toc] | [prev] | [next] | [standalone]


#37054

FromRon Aaron <rambamist@gmail.com>
Date2015-03-06 15:15 +0200
Message-ID<mdc991$8rr$1@dont-email.me>
In reply to#37046

On 3/6/15 06:45, WJ wrote:
> Print the first 16 rows of Pascal's Triangle.
> 
> Gauche Scheme:
> 
> (let1 row '(1)
>   (dotimes (16)
>     (print ((#/.(.*)./ (x->string row)) 1))
>     (set! row (map + (cons 0 row) `(,@row 0)))))

In 8th:

[1] ( ( . space ) a:each cr
  dup [0] 0 a:insert swap 0 a:push
  ' n:+ a:op ) 16 times

> Let's see a shorter Forth version.

My version is 82 bytes, yours is 113.  Of course I would normally have
comments etc...

[toc] | [prev] | [next] | [standalone]


#37423

From"WJ" <w_a_x_man@yahoo.com>
Date2015-03-19 05:14 +0000
Message-ID<medm0b$snk$1@dont-email.me>
In reply to#37046
WJ wrote:

> Print the first 16 rows of Pascal's Triangle.
> 
> Gauche Scheme:
> 
> (let1 row '(1)
>   (dotimes (16)
>     (print ((#/.(.*)./ (x->string row)) 1))
>     (set! row (map + (cons 0 row) `(,@row 0)))))
> 
> 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

Oforth:

func: pt(i, row) {
  i ==0 ifTrue: [ return ]
  row println
  [0] row +  row [0] +  zipWith(#+)  pt( i -- )}

pt(16, [1])

[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]
...

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.forth


csiph-web