مفردات math.combinatorics تجيب عن نوعين من الأسئلة حول مجموعة من العناصر:
لكل سؤال توجد كلمة عدّ تُرجع عددًا وكلمة سرد تُرجع الاختيارات الفعلية.
تُرجع nCk (اختيار k من n) عدد التوافيق المكوّنة من k عنصرًا التي يمكن اختيارها من بين عناصر عددها n:
nCk ( n k -- m )
USING: math.combinatorics prettyprint ;
5 2 nCk . ! => 10
6 3 nCk . ! => 20
5 5 nCk . ! => 1
تُرجع nPk عدد الاختيارات المرتبة (التباديل) المكوّنة من k عنصرًا والتي يمكن إجراؤها من بين عناصر عددها n. ولأن الترتيب يهم، فإن العدد لا يقل عن العدد المقابل لـ nCk:
nPk ( n k -- m )
5 2 nPk . ! => 20
6 3 nPk . ! => 120
تُرجع all-combinations كل مجموعة فرعية مكوّنة من k عنصرًا من متتالية. تحتفظ العناصر داخل كل توافيق بترتيبها الأصلي، وتأتي التوافيق بترتيب معجمي:
all-combinations ( seq k -- combinations )
{ 1 2 3 } 2 all-combinations .
! => { { 1 2 } { 1 3 } { 2 3 } }
عندما تريد فقط معالجة كل توفيق أثناء إنتاجه، بدلًا من جمعها كلها، استخدم الصيغة المتدفقة each-combination، التي تستدعي اقتباسًا مع كل توفيق:
each-combination ( seq k quot -- )
{ 1 2 3 } 2 [ . ] each-combination
! => { 1 2 }
! => { 1 3 }
! => { 2 3 }
تُرجع all-permutations كل ترتيب لمتتالية:
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 } }
نظيرتها المتدفقة هي each-permutation، التي تستدعي اقتباسًا مع كل ترتيب:
each-permutation ( seq quot -- )
{ 1 2 } [ . ] each-permutation
! => { 1 2 }
! => { 2 1 }
يُجهّز Ozan شريطًا موسيقيًا مثاليًا: فهو يقرّر أولًا أي الأغاني ستدخل فيه، ثم يستقرّ على الترتيب الذي ستُعزف به. وستبني أنت أدوات التوافقيات التي تقف خلف اختياراته ضمن مفردات mixtape-maker.
عرّف count-combinations لتُرجع عدد الطرق التي يمكن بها اختيار k عنصرًا من n، دون اعتبار للترتيب.
5 2 count-combinations .
! => 10
عرّف count-permutations لتُرجع عدد الطرق التي يمكن بها اختيار k عنصرًا من n عندما يكون الترتيب مهمًا.
5 2 count-permutations .
! => 20
عرّف list-combinations لتُرجع كل التوافيق المكوّنة من k عنصرًا لمتتالية.
{ 1 2 3 } 2 list-combinations .
! => { { 1 2 } { 1 3 } { 2 3 } }
عرّف list-permutations لتُرجع كل الترتيبات الممكنة لمتتالية.
{ 1 2 } list-permutations .
! => { { 1 2 } { 2 1 } }
عرّف combinations-summing-to لتُرجع فقط توافيق k من عناصر متتالية يكون مجموع عناصرها مساويًا لـ target.
{ 1 2 3 4 } 2 5 combinations-summing-to .
! => { { 1 4 } { 2 3 } }
سجّل في Exercism لتتعلّم وتتقن Factor عبر 47 مفهومًا163 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.