A math.combinatorics szótár kétféle kérdésre ad választ egy elemhalmazzal kapcsolatban:
Mindkét kérdéshez tartozik egy számláló szó, amely egy számot ad vissza, és egy listázó szó, amely a tényleges kiválasztásokat adja vissza.
Az nCk („n alatt a k”) visszaadja, hogy hány k elemű kombináció választható ki n elemből:
nCk ( n k -- m )
USING: math.combinatorics prettyprint ;
5 2 nCk . ! => 10
6 3 nCk . ! => 20
5 5 nCk . ! => 1
Az nPk visszaadja, hogy hány k elemű sorrenddel bíró kiválasztás (permutáció) képezhető n elemből. Mivel itt számít a sorrend, a darabszám legalább akkora, mint a hozzá tartozó nCk értéke:
nPk ( n k -- m )
5 2 nPk . ! => 20
6 3 nPk . ! => 120
Az all-combinations visszaadja egy sorozat minden k elemű részhalmazát. Az egyes kombinációkon belüli elemek megőrzik eredeti sorrendjüket, a kombinációk pedig lexikografikus sorrendben jönnek vissza:
all-combinations ( seq k -- combinations )
{ 1 2 3 } 2 all-combinations .
! => { { 1 2 } { 1 3 } { 2 3 } }
Ha minden kombinációt csak akkor szeretnél feldolgozni, amikor épp létrejön, ahelyett hogy az összeset összegyűjtenéd, használd a streamelő formát, az each-combination szót, amely minden kombinációval meghív egy quotationt:
each-combination ( seq k quot -- )
{ 1 2 3 } 2 [ . ] each-combination
! => { 1 2 }
! => { 1 3 }
! => { 2 3 }
Az all-permutations visszaadja egy sorozat minden lehetséges sorrendjét:
all-permutations ( seq -- permutations )
{ 1 2 } all-permutations .
! => { { 1 2 } { 2 1 } }
{ 1 2 3 } all-permutations .
! => { { 1 2 3 } { 1 3 2 } { 2 1 3 } { 2 3 1 } { 3 1 2 } { 3 2 1 } }
A streamelő megfelelője az each-permutation, amely minden sorrenddel meghív egy quotationt:
each-permutation ( seq quot -- )
{ 1 2 } [ . ] each-permutation
! => { 1 2 }
! => { 2 1 }
Ozan éppen a tökéletes mixtape-et állítja össze: először eldönti, melyik dalok kerüljenek rá, aztán azt, hogy milyen sorrendben szólaljanak meg. A döntései mögött álló kombinatorikai segédfüggvényeket a mixtape-maker vocabulary-ben építed meg.
Definiáld a count-combinations szót úgy, hogy visszaadja, hányféleképpen választható ki k elem n-ből, a sorrendet figyelmen kívül hagyva.
5 2 count-combinations .
! => 10
Definiáld a count-permutations szót úgy, hogy visszaadja, hányféleképpen választható ki k elem n-ből, ha a sorrend számít.
5 2 count-permutations .
! => 20
Definiáld a list-combinations szót úgy, hogy visszaadja egy sorozat összes k elemű kombinációját.
{ 1 2 3 } 2 list-combinations .
! => { { 1 2 } { 1 3 } { 2 3 } }
Definiáld a list-permutations szót úgy, hogy visszaadja egy sorozat összes sorrendjét.
{ 1 2 } list-permutations .
! => { { 1 2 } { 2 1 } }
Definiáld a combinations-summing-to szót úgy, hogy csak azokat a k elemű kombinációkat adja vissza egy sorozatból, amelyeknek az elemei összeadva target-et adnak.
{ 1 2 3 4 } 2 5 combinations-summing-to .
! => { { 1 4 } { 2 3 } }
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Factor nyelvet 47 fogalom163 feladat segítségével, valódi emberi mentorálással, mindez ingyen.