Given a list of variables, construct every term comprising only those variables; function pepper() returns a free algebra object equal to the sum of these terms.

The function is named for a query from an exam question set by Sarah Marshall in which she asked how many ways there are to arrange the letters of word “pepper”, the answer being \(\left({6\atop 1\,2\,3}\right)=\frac{6!}{1!2!3!}=60\).

Function multiset() in the partitions package gives related functionality; for the record, one way to reproduce pepper("pepper") would be


    apply(matrix(c("p","e","r")[multiset(c(1,1,1,2,2,3))],nrow=6),2,paste,collapse="")
  
pepper(v)

Arguments

v

Variables to combine. If a character string, coerce to variable numbers

Author

Robin K. S. Hankin

See also

Examples

pepper(c(1,1,1,1,1,1,2))  # 6 a's and 1 b
#> free algebra element algebraically equal to
#> + aaaaaab + aaaaaba + aaaabaa + aaabaaa + aabaaaa + abaaaaa + baaaaaa
pepper(c(1,2,2,2,3))      # 1 a, 3 b's and 1 c
#> free algebra element algebraically equal to
#> + abbbc + abbcb + abcbb + acbbb + babbc + babcb + bacbb + bbabc + bbacb + bbbac
#> + bbbca + bbcab + bbcba + bcabb + bcbab + bcbba + cabbb + cbabb + cbbab + cbbba
pepper("pepper")
#> free algebra element algebraically equal to
#> + eepppr + eepprp + eeprpp + eerppp + epeppr + epeprp + eperpp + eppepr +
#> epperp + eppper + epppre + epprep + epprpe + eprepp + eprpep + eprppe + ereppp
#> + erpepp + erppep + erpppe + peeppr + peeprp + peerpp + pepepr + peperp +
#> pepper + peppre + peprep + peprpe + perepp + perpep + perppe + ppeepr + ppeerp
#> + ppeper + ppepre + pperep + pperpe + pppeer + pppere + pppree + ppreep +
#> pprepe + pprpee + preepp + prepep + preppe + prpeep + prpepe + prppee + reeppp
#> + repepp + reppep + repppe + rpeepp + rpepep + rpeppe + rppeep + rppepe +
#> rpppee