# -*-tcl-*- # Number of shortest lattice paths from (1,1) to (m,n): proc P { m n } { if { $m == 1 ¦¦ $n == 1 } { return 1 } return [expr {[P [expr {$m-1}] $n] + [P $m [expr {$n-1}]]}] } |
--- esclar, la solució sintètica i molt mes simple és el coeficient binomial "m+n-2 sobre m-1".
# -*-tcl-*- # Number of shuffles of two decks of cards of cardinality m and n: proc SS { m n } { if { $m == 0 || $n == 0 } { return 1 } else { return [expr {[SS [expr {$m-1}] $n] + [SS $m [expr {$n-1}]]}] } } |
--- esclar, la solució sintètica i molt mes simple és el coeficient binomial "m + n sobre m".
# -*-tcl-*- # Event: throw a dice twelve times. # How many possible events with sum 30? proc P { sum length } { if { $sum == 0 && $length == 0 } { return 1 } if { $sum <= 0 ¦¦ $length == 0 } { return 0 } set res 0 for { set i 1 } { $i < 7 } {incr i } { incr res [P [expr {$sum-$i}] [expr {$length-1}]] } return $res } # Test that these results sum up to all possibilitites: proc Ptest { length } { set total [expr {pow(6,$length)}] set subtotal 0 for {set sum 0} {$sum <= 6*$length} {incr sum} { incr subtotal [P $sum $length] } if { $subtotal == $total } { return OK } else { return "test not passed" } } |
# -*-maple-*- # Event: throw a dice twelve times. # How many possible events with sum 30? P := proc(r::integer, n::nonnegint) option remember; if r = 0 and n = 0 then RETURN(1) end if; if r <= 0 or n = 0 then RETURN(0) end if; P(r,n) := add(P(r-i,n-1),i=1..6); end proc; |
Amb la tècnica de funcions generadores:
# -*-maple-*- g := taylor( (x+x^2+x^3+x^4+x^5+x^6)^12, x=0, 31 ); coeff( g, x^30 ); |
# -*-tcl-*- package require Tclx # How many ways to pay 85 euros with coins/bills of size {1 5 10 20}? # n is the desired amount # L is a list of types of coins available proc P { n L } { if { $n == 0 } { return 1 } if { [llength $L] == 0 } { # If no coins available, can't pay: return 0 } set thisCoin [lvarpop L]; # L is truncated set res 0 for { set i 0 } { $i <= $n } {incr i} { # i is the number of thisCoins incr res [P [expr {$n - $i*$thisCoin}] $L] } return $res } |