Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.forth > #37046 > unrolled thread
| Started by | "WJ" <w_a_x_man@yahoo.com> |
|---|---|
| First post | 2015-03-06 04:45 +0000 |
| Last post | 2015-03-19 05:14 +0000 |
| Articles | 8 — 7 participants |
Back to article view | Back to comp.lang.forth
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
| From | "WJ" <w_a_x_man@yahoo.com> |
|---|---|
| Date | 2015-03-06 04:45 +0000 |
| Subject | Pascal'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]
| From | Melzzzzz <mel@zzzzz.com> |
|---|---|
| Date | 2015-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]
| From | Richard Todd <richard.wesley.todd@gmail.com> |
|---|---|
| Date | 2015-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]
| From | november.nihal@gmail.com |
|---|---|
| Date | 2015-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]
| From | Gerry Jackson <gerry@jackson9000.fsnet.co.uk> |
|---|---|
| Date | 2015-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]
| From | franck.bensusan@gmail.com |
|---|---|
| Date | 2015-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]
| From | Ron Aaron <rambamist@gmail.com> |
|---|---|
| Date | 2015-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]
| From | "WJ" <w_a_x_man@yahoo.com> |
|---|---|
| Date | 2015-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