const playedMatches = [ [8, 3, 10, 1, 13, 11], [7, 6, 13, 0, 11, 5], [3, 8, 5, 7, 12, 9], [2, 0, 8, 14, 9, 10], [11, 5, 14, 13, 7, 6], [6, 4, 2, 9, 14, 1], [5, 1, 9, 10, 8, 4], [1, 9, 12, 2, 4, 14], [0, 2, 3, 15, 6, 13], [10, 7, 6, 5, 3, 2], [9, 11, 0, 6, 15, 3], [4, 10, 15, 12, 1, 0], [13, 14, 7, 11, 2, 15], [12, 15, 1, 4, 0, 8], [15, 12, 4, 2, 5, 7], [14, 13, 11, 8, 10, 12] ]; const maxTeams = playedMatches.length; // ΠΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ const teamNumbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; // ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² - Π½ΠΎΠΌΠ΅ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ const aviableMatches = []; // ΠΠ°ΡΡΠΈΠ² Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΡΠΎΠΏΠ΅ΡΠ½ΠΈΠΊΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ const pairsFlat = []; // ΠΠ»ΠΎΡΠΊΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ
ΠΏΠ°Ρ const pairs = []; // ΠΡΠΎΠ³ΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΡ // ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ ΡΠΎΠΏΠ΅ΡΠ½ΠΈΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ for(let i = 0; i < maxTeams; i++){ const aviableTeams = teamNumbers.filter(function(team){ return (team !== i) && (playedMatches[i].indexOf(team) === -1); }); aviableMatches.push(aviableTeams); } // Π Π΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠ°Ρ function findMatches(){ let teamIndex; if(pairsFlat.length >= maxTeams) return true; // ΠΠ°ΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΠ°ΡΡ for(teamIndex = 0; teamIndex < maxTeams; teamIndex++){ if(pairsFlat.indexOf(teamIndex) === -1){ const aviableTeams = aviableMatches[teamIndex]; const teamPair = aviableTeams.find(function(team){ return pairsFlat.indexOf(team) === -1; }) if(teamPair === undefined) continue; // ΠΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΏΠ°ΡΡ, ΠΈΡΠ΅ΠΌ Π΄Π°Π»ΡΡΠ΅ pairsFlat.push(teamIndex); pairsFlat.push(teamPair); if(findMatches()){ // ΠΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ return true; } else { // ΠΡΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΏΠ°ΡΠ΅ Π½Π΅ Π½Π°ΡΠ»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π£Π΄Π°Π»ΡΠ΅ΠΌ ΠΏΠ°ΡΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΏΠΎΠΈΡΠΊ pairsFlat.pop(); pairsFlat.pop(); } } } return false; // ΠΠ΅ Π½Π°ΡΠ»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ } // ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ! if(findMatches()){ for(let i = 0; i < maxTeams; i += 2){ // ΠΠ°ΡΠ»ΠΈ! ΠΠ°ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠ°Ρ pairs.push([pairsFlat[i], pairsFlat[i+1]]); } console.log('Found pairs of teams:'); console.dir(pairs) } else { console.log('No pairs!') }