Binomial transform: Difference between revisions
Content added Content deleted
(→{{header|Wren}}: Added self-inverting variant.) |
(→{{header|Go}}: Added self-inverting variant.) |
||
Line 222: | Line 222: | ||
} |
} |
||
return a |
return a |
||
} |
|||
func btSelfInverting(a []int64) []int64 { |
|||
c := len(a) |
|||
b := make([]int64, c) |
|||
for n := 0; n < c; n++ { |
|||
b[n] = int64(0) |
|||
for k := 0; k <= n; k++ { |
|||
sign := int64(-1) |
|||
if k&1 == 0 { |
|||
sign = 1 |
|||
} |
|||
b[n] += int64(binomial(n, k)) * a[k] * sign |
|||
} |
|||
} |
|||
return b |
|||
} |
} |
||
Line 249: | Line 265: | ||
fmt.Println("Round trip:") |
fmt.Println("Round trip:") |
||
fmt.Println(btInverse(fwd)) |
fmt.Println(btInverse(fwd)) |
||
fmt.Println("Self-inverting:") |
|||
si := btSelfInverting(seq) |
|||
fmt.Println(si) |
|||
fmt.Println("Re-inverted:") |
|||
fmt.Println(btSelfInverting(si)) |
|||
if i < len(seqs)-1 { |
if i < len(seqs)-1 { |
||
fmt.Println() |
fmt.Println() |
||
Line 264: | Line 285: | ||
[1 0 1 1 3 6 15 36 91 232 603 1585 4213 11298 30537 83097 227475 625992 1730787 4805595] |
[1 0 1 1 3 6 15 36 91 232 603 1585 4213 11298 30537 83097 227475 625992 1730787 4805595] |
||
Round trip: |
Round trip: |
||
[1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 129644790 477638700 1767263190] |
|||
Self-inverting: |
|||
[1 0 1 -1 3 -6 15 -36 91 -232 603 -1585 4213 -11298 30537 -83097 227475 -625992 1730787 -4805595] |
|||
Re-inverted: |
|||
[1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 129644790 477638700 1767263190] |
[1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 129644790 477638700 1767263190] |
||
Line 273: | Line 298: | ||
[0 1 -1 0 3 -10 25 -56 118 -237 456 -847 1540 -2795 5173 -9918 19761 -40528 84235 -174914] |
[0 1 -1 0 3 -10 25 -56 118 -237 456 -847 1540 -2795 5173 -9918 19761 -40528 84235 -174914] |
||
Round trip: |
Round trip: |
||
[0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0] |
|||
Self-inverting: |
|||
[0 -1 -1 0 3 10 25 56 118 237 456 847 1540 2795 5173 9918 19761 40528 84235 174914] |
|||
Re-inverted: |
|||
[0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0] |
[0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0] |
||
Line 282: | Line 311: | ||
[0 1 -1 2 -3 5 -8 13 -21 34 -55 89 -144 233 -377 610 -987 1597 -2584 4181] |
[0 1 -1 2 -3 5 -8 13 -21 34 -55 89 -144 233 -377 610 -987 1597 -2584 4181] |
||
Round trip: |
Round trip: |
||
[0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181] |
|||
Self-inverting: |
|||
[0 -1 -1 -2 -3 -5 -8 -13 -21 -34 -55 -89 -144 -233 -377 -610 -987 -1597 -2584 -4181] |
|||
Re-inverted: |
|||
[0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181] |
[0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181] |
||
Line 291: | Line 324: | ||
[1 -1 1 0 -3 10 -24 49 -89 145 -208 245 -174 -176 1121 -3185 7137 -13920 24301 -37926] |
[1 -1 1 0 -3 10 -24 49 -89 145 -208 245 -174 -176 1121 -3185 7137 -13920 24301 -37926] |
||
Round trip: |
Round trip: |
||
[1 0 0 1 0 1 1 1 2 2 3 4 5 7 9 12 16 21 28 37] |
|||
Self-inverting: |
|||
[1 1 1 0 -3 -10 -24 -49 -89 -145 -208 -245 -174 176 1121 3185 7137 13920 24301 37926] |
|||
Re-inverted: |
|||
[1 0 0 1 0 1 1 1 2 2 3 4 5 7 9 12 16 21 28 37] |
[1 0 0 1 0 1 1 1 2 2 3 4 5 7 9 12 16 21 28 37] |
||
</pre> |
</pre> |