izmjena algoritma
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
PEOPLE_DB=https://docs.google.com/spreadsheets/d/1s4Ytz7mf-YpszVTMTTrYd5iG_dsTGjrCpDQbpIx7zkU/edit#gid=0
|
||||
PAIRS_LIST=https://docs.google.com/spreadsheets/d/1gPuRhTry3YoJ_ibI2BfL1ue2_YLlhtW56OP39ADJY_4/edit#gid=0
|
||||
PEOPLE_DB=https://docs.google.com/spreadsheets/d/1s4Ytz7mf-YpszVTMTTrYd5iG_dsTGjrCpDQbpIx7zkU/edit#gid=1116948122
|
||||
PAIRS_LIST=https://docs.google.com/spreadsheets/d/1JXtDjajJLZb_iXvDYfBEVYdCfehF_URHeeO7_hBXLrI/edit#gid=0
|
||||
|
||||
|
||||
207
backend/app.js
207
backend/app.js
@@ -113,7 +113,11 @@ function getPairs(callback){
|
||||
} else {
|
||||
const pairs = [];
|
||||
|
||||
lastRow = result.valueRanges[0].values.length;
|
||||
try{
|
||||
lastRow = result.valueRanges[0].values.length;
|
||||
}catch(err){
|
||||
lastRow = 0;
|
||||
}
|
||||
|
||||
for (let i=0;i<lastRow;i++){
|
||||
let name1 = result.valueRanges[0].values[i][0];
|
||||
@@ -144,69 +148,185 @@ function getAvailableNames(callback){
|
||||
const names = [];
|
||||
|
||||
for (let i=0;i<result.valueRanges[0].values.length;i++){
|
||||
let name = result.valueRanges[0].values[i][0];
|
||||
let available = result.valueRanges[1].values[i][0];
|
||||
|
||||
if (name && (available=='x')){
|
||||
names.push(name);
|
||||
}
|
||||
try{
|
||||
let name = result.valueRanges[0].values[i][0];
|
||||
let available = result.valueRanges[1].values[i][0];
|
||||
if (name && (available=='x')){
|
||||
names.push(name);
|
||||
}
|
||||
}catch(err){
|
||||
}
|
||||
|
||||
}
|
||||
callback(names);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getRandomInt(min, max) {
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
function MakePairs(callback){
|
||||
executeAPI(getAvailableNames,function(names){
|
||||
executeAPI(getPairs, function(pairs){
|
||||
let next_i=false;
|
||||
const numOfPairs = Math.floor(names.length / 2);
|
||||
const left_side = [];
|
||||
const right_side = [];
|
||||
|
||||
const newPairs = [];
|
||||
const usedNames = [];
|
||||
for (let i=0;i<names.length;i++){
|
||||
next_i=false;
|
||||
for (let j=0;j<names.length;j++){
|
||||
if (i!=j){
|
||||
|
||||
let found=false;
|
||||
|
||||
pairs.filter((pair)=>{
|
||||
if ((pair.name1==names[i] && pair.name2==names[j])||(pair.name1==names[j] && pair.name2==names[i])){
|
||||
found=true;
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
if (!found){
|
||||
usedNames.filter((name)=>{
|
||||
if (names[i] === name || names[j] === name){
|
||||
found=true;
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (let i=0;i<numOfPairs;i++){
|
||||
|
||||
if (!found){
|
||||
next_i=true;
|
||||
newPairs.push({name1:names[i], name2:names[j]});
|
||||
usedNames.push(names[i]);
|
||||
usedNames.push(names[j]);
|
||||
break;
|
||||
let id1 = getRandomInt(0,names.length-1);
|
||||
left_side.push(names[id1]);
|
||||
names.splice(id1,1);
|
||||
let id2 = getRandomInt(0,names.length-1);
|
||||
right_side.push(names[id2]);
|
||||
names.splice(id2,1);
|
||||
}
|
||||
|
||||
//make pairs using both sides
|
||||
|
||||
for (let i=0;i<left_side.length;i++){
|
||||
if (i==left_side.length) break;
|
||||
for (let j=0;j<right_side.length;j++){
|
||||
let tmpName1 = left_side[i];
|
||||
let tmpName2 = right_side[j];
|
||||
let exist=false;
|
||||
pairs.filter((pair)=>{
|
||||
if (((pair.name1 == tmpName1)&&(pair.name2==tmpName2))||((pair.name1==tmpName2)&&(pair.name2==tmpName1))){
|
||||
exist = true;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (!exist){
|
||||
newPairs.push({name1:tmpName1, name2:tmpName2});
|
||||
left_side.splice(i,1);
|
||||
right_side.splice(j,1);
|
||||
i=-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (next_i) continue;
|
||||
}
|
||||
pairsForSave=newPairs;
|
||||
callback.send(newPairs);
|
||||
|
||||
//make pairs from names on left side
|
||||
for (let i=0;i<left_side.length;i++){
|
||||
for (let j=0;j<left_side.length;j++){
|
||||
if (i==j) continue;
|
||||
let tmpName1 = left_side[i];
|
||||
let tmpName2 = left_side[j];
|
||||
let exist=false;
|
||||
pairs.filter((pair)=>{
|
||||
if (((pair.name1 == tmpName1)&&(pair.name2==tmpName2))||((pair.name1==tmpName2)&&(pair.name2==tmpName1))){
|
||||
exist = true;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (!exist){
|
||||
newPairs.push({name1:tmpName1, name2:tmpName2});
|
||||
left_side.splice(i,1);
|
||||
if (i>j)
|
||||
left_side.splice(j,1);
|
||||
else
|
||||
left_side.splice(j-1,1);
|
||||
i=-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//make pairs from names on right side
|
||||
for (let i=0;i<right_side.length;i++){
|
||||
for (let j=0;j<right_side.length;j++){
|
||||
if (i==j) continue;
|
||||
let tmpName1 = right_side[i];
|
||||
let tmpName2 = right_side[j];
|
||||
let exist=false;
|
||||
pairs.filter((pair)=>{
|
||||
if (((pair.name1 == tmpName1)&&(pair.name2==tmpName2))||((pair.name1==tmpName2)&&(pair.name2==tmpName1))){
|
||||
exist = true;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (!exist){
|
||||
newPairs.push({name1:tmpName1, name2:tmpName2});
|
||||
right_side.splice(i,1);
|
||||
if (i>j)
|
||||
right_side.splice(j,1);
|
||||
else
|
||||
right_side.splice(j-1,1);
|
||||
i=-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//try to make pair using unused name from list of names and names on left side
|
||||
if (names.length>0){
|
||||
let tmpName1 = names[0];
|
||||
for (let i=0;i<left_side.length;i++){
|
||||
let tmpName2 = left_side[i];
|
||||
let exist=false;
|
||||
pairs.filter((pair)=>{
|
||||
if (((pair.name1 == tmpName1)&&(pair.name2==tmpName2))||((pair.name1==tmpName2)&&(pair.name2==tmpName1))){
|
||||
exist = true;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (!exist){
|
||||
newPairs.push({name1:tmpName1, name2:tmpName2});
|
||||
names=[];
|
||||
left_side.splice(i,1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//try to make pair using unused name from list of names and names on right side
|
||||
if (names.length>0){
|
||||
let tmpName1 = names[0];
|
||||
for (let i=0;i<right_side.length;i++){
|
||||
let tmpName2 = right_side[i];
|
||||
let exist=false;
|
||||
pairs.filter((pair)=>{
|
||||
if (((pair.name1 == tmpName1)&&(pair.name2==tmpName2))||((pair.name1==tmpName2)&&(pair.name2==tmpName1))){
|
||||
exist = true;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (!exist){
|
||||
newPairs.push({name1:tmpName1, name2:tmpName2});
|
||||
names=[];
|
||||
right_side.splice(i,1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pairsForSave = newPairs;
|
||||
|
||||
let withoutPair = [];
|
||||
for (let i=0;i<left_side.length;i++)
|
||||
withoutPair.push(left_side[i]);
|
||||
for (let i=0;i<right_side.length;i++)
|
||||
withoutPair.push(right_side[i]);
|
||||
if (names.length>0)
|
||||
withoutPair.push(names[0]);
|
||||
|
||||
if (withoutPair.length==0) withoutPair=null;
|
||||
|
||||
callback.send({pairs: newPairs, left: withoutPair });
|
||||
});
|
||||
});
|
||||
//Napravi par -> Provjeri da li postoji -> Snimi ili ponovi postupak
|
||||
|
||||
}
|
||||
|
||||
function SavePairs(callback){
|
||||
if (lastRow== null) return;
|
||||
if (lastRow== null) {
|
||||
callback.send({result:true});
|
||||
return;
|
||||
}
|
||||
|
||||
auth=oauth2Client;
|
||||
|
||||
@@ -220,6 +340,7 @@ function SavePairs(callback){
|
||||
|
||||
const data = [];
|
||||
|
||||
if (lastRow == 0) lastRow=-1;
|
||||
let range1= '2017!A'+(lastRow+2)+':A'+(lastRow+2+pairsForSave.length);
|
||||
let range2= '2017!B'+(lastRow+2)+':B'+(lastRow+2+pairsForSave.length);
|
||||
|
||||
@@ -279,5 +400,5 @@ app.get('/savePairs', (req,resp)=>{
|
||||
|
||||
|
||||
app.listen(3005, function () {
|
||||
console.log('server na portu 3005');
|
||||
console.log('Server running - port 3005');
|
||||
})
|
||||
@@ -18,10 +18,10 @@ class App extends Component {
|
||||
getPairsEventHandler = (event) =>{
|
||||
let url = `http://${BASE_URL}:3005/getPairs`;
|
||||
|
||||
this.setState({waitingPairs:true});
|
||||
this.setState({waitingPairs:true, renderFinish:false, waitingSave:true});
|
||||
|
||||
fetch(url, {}).then(function(response) { return response.json(); }).then(function(data) {
|
||||
this.setState({pairs : data, renderPairsList:true, waitingPairs:false});
|
||||
this.setState({pairs : data.pairs, left:data.left, renderPairsList:true, waitingPairs:false, waitingSave:false});
|
||||
}.bind(this));
|
||||
|
||||
|
||||
@@ -46,13 +46,26 @@ class App extends Component {
|
||||
<div className = "horizontalDiv">
|
||||
<button disabled={this.state.waitingPairs} onClick = {this.getPairsEventHandler}>Get pairs</button>
|
||||
</div>
|
||||
<div>
|
||||
<h2> List of pairs : </h2>
|
||||
</div>
|
||||
{
|
||||
this.state.renderPairsList &&
|
||||
<div>
|
||||
<h2> List of pairs : </h2>
|
||||
</div>
|
||||
}
|
||||
{
|
||||
this.state.renderPairsList &&
|
||||
<PairsListComponent pairs = {this.state.pairs}/>
|
||||
}
|
||||
{
|
||||
this.state.renderPairsList && this.state.left &&
|
||||
<div>
|
||||
<h2> Without pair : </h2>
|
||||
{
|
||||
this.state.left.map((name, index) =>
|
||||
(<div key={name}>{index+1}. {name}</div>))
|
||||
}
|
||||
</div>
|
||||
}
|
||||
{
|
||||
this.state.renderPairsList &&
|
||||
<button disabled={this.state.waitingSave} onClick = {this.savePairsEventHandler}> Save pairs </button>
|
||||
|
||||
@@ -3,14 +3,14 @@ import React, { Component } from 'react';
|
||||
export default class PairComponent extends Component{
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {pairName: this.props.pair};
|
||||
this.state = {pairName: this.props.pair, index: this.props.index};
|
||||
}
|
||||
|
||||
render(){
|
||||
return (
|
||||
<div>
|
||||
<div className = "horizontalDiv">
|
||||
<div>{this.state.pairName.name1} - {this.state.pairName.name2}</div>
|
||||
<div>{this.state.index+1}. {this.state.pairName.name1} - {this.state.pairName.name2}</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ export default class PairsListComponent extends Component{
|
||||
<div id = "outerDiv">
|
||||
{
|
||||
this.props.pairs.map((pair, index) =>
|
||||
(<PairComponent key = {index} index = {index} pair = {pair}/>))
|
||||
(<PairComponent key = {pair.name1+pair.name2} index = {index} pair = {pair}/>))
|
||||
}
|
||||
</div>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user