Το vocabulary math.combinatorics απαντά σε δύο
είδη ερωτήσεων για μια συλλογή στοιχείων:
Για κάθε ερώτηση υπάρχει μια λέξη μέτρησης που επιστρέφει έναν αριθμό και μια λέξη απαρίθμησης που επιστρέφει τις ίδιες τις επιλογές.
Το nCk ("n διαλέγεις k") επιστρέφει πόσους συνδυασμούς 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, η οποία καλεί ένα quotation με κάθε συνδυασμό:
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, το οποίο
καλεί ένα quotation με κάθε διάταξη:
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 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.