Эффективная функция рассадки стола - PullRequest
1 голос
/ 10 января 2020

Я создаю функцию сидения за столом в javascript, непосредственно ниже, для сценария, в котором есть группа участников P, в данном случае проверенная с 80, и S мест на стол, в этом случае проверенная 8 каждый участник может посещать каждый стол только один раз с десятью столами, и каждый участник не может встречаться с другим участником более одного раза в течение как минимум 10 ротаций. Как я могу сделать 10 уникальных наборов P / S, 10 раз?

Чтобы объяснить мое именование, arrayArray - это массив для каждой из таблиц, а внешние элементы внутреннего массива - это размещение таблицы, arrayArrayPrevious - это список всех, кто уже был за столом, а список memberArray представляет собой массив всех возможных участников.

Проблема, как представляется, заключается в том, что при поиске двух участников уже встретились и перемещают второго в конец memberArray повторная попытка позже приведет к тому, что будет размещен только один участник.

Я помещаю весь код ниже фрагмента функции на тот случай, если кто-то может помочь решить ее и будет полезен для других в будущем.

   function notMetAlready(w, arrayArray, participantAlreadyMet){
       if(arrayArray.includes(participantAlreadyMet)){
            var moveToEnd = arrayArray[w][0];
           console.log(moveToEnd);
            participantArray.push(moveToEnd);
           console.log(participantArray);
            return true;
        //console.log(index);   
          }
        if(!arrayArray.includes(participantAlreadyMet)){
            return true;
        }
       else{
           return false;
       }
   }

Полный код

<html>
    <head>
<script type="text/javascript">
    
    var tables = 10;
    var participants = 80;
    var participantPool = [];
    var seatingPerTable = participants/tables;
    var arrayArray = new Array(tables);
    
    for(var i = 1; i <= participants; i++){
        participantPool.push(i);
    }
        var count = 1;

    var participantArray = new Array(participants);
    var participantAlreadyMet = new Array(participants);
    var arrayArrayPrevious = new Array(tables);
    
    for (var i = 0; i <= tables; i++) { 
        arrayArrayPrevious[i] = []; 
        arrayArray[i] = []; 
    } 
    
    
    for (var i = i; i < participantAlreadyMet.length; i++) { 
         participantAlreadyMet[i] = [i];
        
    }    

function MatchingPairs() {
        
    for (var i = 0; i < tables; i++) { 
        arrayArray[i] = []; 
    } 
    
    for(var  h = 0; h < participants; h++){
            participantArray[i] = i+1;
    }
    
                for(var w = 0; w < arrayArray.length; w++){
                    if(tablesHaveNotIncluded(w,0)){
                       // for(var n = 1; n < participants; n++){
                        
                        do{
                            if(tablesDoNotInclude(0)  && notMetAlready(w, arrayArray[w], participantAlreadyMet[0])){
                                arrayArray[w].push(participantArray[0]);
                                arrayArrayPrevious[w].push(participantArray[0]);
                                participantArray.shift();
                            }
                        
                        }while(participantArray >= 0);
            }
        }
   function notMetAlready(w, arrayArray, participantAlreadyMet){
       if(arrayArray.includes(participantAlreadyMet)){
            var moveToEnd = arrayArray[w][0];
           console.log(moveToEnd);
            participantArray.push(moveToEnd);
           console.log(participantArray);
            return true;
          }
        if(!arrayArray.includes(participantAlreadyMet)){
            return true;
        }
       else{
           return false;
       }
   }
                            
    
    for(var z = 0; z < tables; z++){
        var plus = z + 1;
        console.log("Table " + plus + " " + arrayArray[z] );
    }

                        console.log("Rotation " + count);
                        count++;
            
    function tablesHaveNotIncluded(w,n){
            var outerArray = arrayArrayPrevious[w];
            if(!outerArray.includes(n)){
                    return true;
                }
            return false;
        }
    
        function tablesDoNotInclude(n){
            for(var w = 0; w < tables; w++){
                if(!arrayArray[w].includes(n)){
                    return true;
                }
            }
            return false;
        }
    }   
            

</script>
    </head>

<body>

<button onclick="MatchingPairs()">Combinations</button>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...