Skip to content

Commit f9d9323

Browse files
committed
Added all features in PZ
1 parent f83240e commit f9d9323

File tree

7 files changed

+171
-114
lines changed

7 files changed

+171
-114
lines changed

.eslintcache

+1-1
Large diffs are not rendered by default.

src/App.tsx

+25-7
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ import {WritableAdapter} from "graphlabs.core.visualizer";
1313

1414
import { /*Component,*/ SFC} from 'react';
1515
import { init1, graphModel1, init2, graphModel2, initres, /*graphModelres,*/ init, graphModel } from './ForMyGraphModel';
16-
import {message_0, message_0_changing, num_0, num_0_changing, message_1, message_1_changing} from './ForMeVars';
17-
import { GetNewRandomGraph, GetNewRandomGraphForThatOne, ChooseTask } from './Ops';
18-
import { CheckingAnswer } from "./CheckAnswer";
16+
import {message_0, message_0_changing, num_0, num_0_changing, message_1, message_1_changing, mark_0, mark_0_changing, T_s, T_s_changing, T_s_shawing} from './ForMeVars';
17+
import { ChooseTask } from './Ops';
18+
import { CheckingAnswer, StartDifficult, LastCheckingAnswer } from "./CheckAnswer";
1919
import { GraphsInit } from "./GraphsInit"
2020

2121
class App extends Template {
@@ -25,7 +25,11 @@ class App extends Template {
2525
};
2626

2727
componentWillMount() {
28+
StartDifficult();
29+
mark_0_changing(0);
2830
GraphsInit();
31+
let timerId = setInterval(()=>{T_s_changing(T_s-1);this.forceUpdate();}, 1000);
32+
window.setTimeout(()=>{clearInterval(timerId);LastCheckingAnswer();},1000*45*60);
2933
}
3034

3135
/*public constructor(props: {}) { // не совсем понимаю, почему овервайт этих функций происходит автоматически и без конструктора
@@ -80,25 +84,37 @@ class App extends Template {
8084
Toolbar.prototype.getButtonList = () => {
8185
function beforeComplete(this: App): Promise<{ success: boolean; fee: number }> {
8286
return new Promise((resolve => {
83-
resolve(CheckingAnswer());
87+
resolve(LastCheckingAnswer());
8488
}));
8589
}
8690
ToolButtonList.prototype.beforeComplete = beforeComplete.bind(this);
8791
ToolButtonList.prototype.help = () => `В данном задании вы должны построить результат операции, указанной в задании в правой части экрана. Для этого вы можете добавлять любое число вершин/рёбер. Также вы можете удалять любое число вершин, не инцидентных ни одному ребру или рёбер. Оценка зависит только от того, правильно ли вы построите граф.`;
8892

8993
ToolButtonList.prototype.toolButtons = {
9094
"http://gl-backend.svtz.ru:5000/odata/downloadImage(name='add_vertex.png')": () => {
95+
const start = new Date().getTime();
9196
adapter.addVertex();
97+
const end = new Date().getTime();
98+
T_s_changing(T_s - Math.round((end-start)/1000));
9299
},
93100
"http://gl-backend.svtz.ru:5000/odata/downloadImage(name='add_edge.png')": () => { // Меняю имя всем рёбрам на адекватные - ужасный костыль
101+
const start = new Date().getTime();
94102
adapter.addEdge();
95103
graphModel.edges.forEach((e:IEdge, i=0)=>{e.name = `${i++}`;});
104+
const end = new Date().getTime();
105+
T_s_changing(T_s - Math.round((end-start)/1000));
96106
},
97107
"http://gl-backend.svtz.ru:5000/odata/downloadImage(name='remove_vertex.png')": () => { // Меняю имя всем рёбрам на адекватные - ужасный костыль
108+
const start = new Date().getTime();
98109
adapter.removeVertex();
110+
const end = new Date().getTime();
111+
T_s_changing(T_s - Math.round((end-start)/1000));
99112
},
100113
"http://gl-backend.svtz.ru:5000/odata/downloadImage(name='remove_edge.png')": () => { // Меняю имя всем рёбрам на адекватные - ужасный костыль
114+
const start = new Date().getTime();
101115
adapter.removeEdge();
116+
const end = new Date().getTime();
117+
T_s_changing(T_s - Math.round((end-start)/1000));
102118
}
103119
};
104120
return ToolButtonList;
@@ -110,14 +126,16 @@ class App extends Template {
110126
<div>Панель инструментов</div>
111127
<Buttons/>
112128
<button type={"button"} style={{border: '1px double black', background: 'white', margin: '4px'}} onClick={()=>{
129+
CheckingAnswer();
113130
num_0_changing(num_0+1);
114131
GraphsInit();
115132
this.forceUpdate();
116133
if (num_0 === 7){ // удалить кнопку было бы хорошо
117-
message_1_changing("Операций больше нет");
134+
message_1_changing("Завершите выполнение теста.");
118135
this.disable();
119136
}
120137
}}>{message_1}</button>
138+
<div>Time left: {T_s_shawing()}</div>
121139
</div>);
122140
}
123141
return Toolbar;
@@ -165,7 +183,7 @@ class App extends Template {
165183
</p>
166184
<div>
167185
<p>
168-
{num_0!==6?"1.":''}<GraphVisualizer
186+
{num_0!==1?"1.":''}<GraphVisualizer
169187
graph={graphModel1}
170188
adapterType={'readable'}
171189
namedEdges={false}
@@ -174,7 +192,7 @@ class App extends Template {
174192
edgeNaming={false}
175193
incidentEdges={false}
176194
/>
177-
{num_0!==6?"2.":''}<GraphVisualizer
195+
{num_0!==1?"2.":''}<GraphVisualizer
178196
graph={graphModel2}
179197
adapterType={'readable'}
180198
namedEdges={false}

src/CheckAnswer.ts

+53-33
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
import {graphModel, graphModelres} from "./ForMyGraphModel";
22
import { IVertex } from 'graphlabs.core.graphs';
33
import { store } from 'graphlabs.core.template';
4+
import {message_0, message_0_changing, num_0, num_0_changing, message_1, message_1_changing, mark_0, mark_0_changing, k_s, k_s_changing} from './ForMeVars';
5+
6+
function LastCheckingAnswer(){
7+
mark_0_changing(Math.round(mark_0*100/(8*9+k_s[0]+k_s[1]+k_s[2]+k_s[3]+k_s[4]+k_s[5]+k_s[6]+k_s[7])));
8+
window.alert(`Вы вполнили задания на оценку: ${mark_0}`);
9+
//window.alert(`k_s: ${k_s}`);
10+
store.getState().notifier.score = mark_0; // здесь я меняю оценку.
11+
return Promise.resolve({success: mark_0 === 100, fee: mark_0});
12+
}
413

514
function CheckingAnswer(){// мое добавление для проверки оценки: процент одинаковости
615
let markN = 100;
@@ -42,46 +51,57 @@ function CheckingAnswer(){// мое добавление для проверки
4251
markN = 0;
4352
}
4453

45-
/*let num = 0;
46-
graphModelres.edges.forEach((e:any)=>{ // проверка на совпадения рёбер
47-
graphModel.edges.forEach(eN=>{
48-
if(e.name==eN.name)
49-
//markN+=50/(graphModelres.edges.length);
50-
num++;
51-
});
52-
});
53-
if(num != graphModelres.edges.length ){
54-
markN = 0;
55-
}
56-
num = 0;
57-
graphModel.edges.forEach(e=>{ // проверка на лишние рёбра
58-
//markN-=50/(graphModelres.edges.length);
59-
graphModelres.edges.forEach(eN=>{
60-
if(e.name==eN.name) {
61-
//markN += 50 / (graphModelres.edges.length);
62-
num++;
63-
}
64-
});
65-
if(num == 0 ){
66-
markN = 0;
67-
}
68-
num = 0;
69-
});*/
70-
7154
if(markN===100){
7255
window.alert(`Вы верно выполнили задание`);
73-
markN=100;
56+
mark_0_changing(mark_0+9+k_s[num_0]);
7457
}
7558

7659
if(markN<100){
7760
window.alert(`Вы неверно выполнили задание`);
78-
markN=0;
7961
}
62+
}
8063

81-
//markN=Math.round(markN);
82-
//console.log(`mark is ${markN}`);
83-
store.getState().notifier.score = markN; // здесь я меняю оценку.
84-
return Promise.resolve({success: markN === 100, fee: markN});
64+
function StartDifficult(){
65+
let new_k_s = [0,0,0,0,0,0,0,0];
66+
let all_num = 0;
67+
for (let i=0; i<8; i++){
68+
new_k_s = k_s;
69+
new_k_s[i]+=Math.round(Math.random()*99+1);
70+
all_num+=new_k_s[i];
71+
}
72+
let true_num=0;
73+
for (let i=0; i<8; i++){
74+
new_k_s[i]=Math.round(39*new_k_s[i]/all_num);
75+
true_num+=new_k_s[i];
76+
}
77+
let max_0=0;
78+
let min_0=0;
79+
let schetchick=true;
80+
while (true_num !==39){
81+
if(true_num>39){
82+
max_0 = Math.max(new_k_s[0], new_k_s[1], new_k_s[2], new_k_s[3], new_k_s[4], new_k_s[5], new_k_s[6], new_k_s[7]);
83+
for (let i=0; i<8; i++){
84+
if (schetchick && max_0 === new_k_s[i]){
85+
new_k_s[i]--;
86+
true_num--;
87+
schetchick = false;
88+
}
89+
}
90+
schetchick = true;
91+
}
92+
else{
93+
min_0 = Math.min(new_k_s[0], new_k_s[1], new_k_s[2], new_k_s[3], new_k_s[4], new_k_s[5], new_k_s[6], new_k_s[7]);
94+
for (let i=0; i<8; i++){
95+
if (schetchick && min_0 === new_k_s[i]){
96+
new_k_s[i]++;
97+
true_num++;
98+
schetchick = false;
99+
}
100+
}
101+
schetchick = true;
102+
}
103+
}
104+
k_s_changing(new_k_s);
85105
}
86106

87-
export {CheckingAnswer};
107+
export {CheckingAnswer, StartDifficult, LastCheckingAnswer};

src/ForMeVars.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
11
let message_0 = '';
22
let message_1 = "Следующая операция";// костылим на первое время
33
let num_0 = 0;
4+
let mark_0 = 0;
5+
let k_s = [0,0,0,0,0,0,0,0];
6+
let T_s = 45*60;
47

5-
function num_0_changing (new_num: number) {num_0 = new_num;}
68
function message_0_changing (new_message: string) {message_0 = new_message;}
79
function message_1_changing (new_message: string) {message_1 = new_message;}
10+
function num_0_changing (new_num: number) {num_0 = new_num;}
11+
function mark_0_changing (new_mark: number) {mark_0 = new_mark;}
12+
function k_s_changing (new_k_s: number[]) {k_s = new_k_s;}
13+
function T_s_changing (new_T_s: number) {T_s = new_T_s;}
14+
function T_s_shawing () {
15+
let T_min, T_sec;
16+
T_sec = T_s%60;
17+
T_min = (T_s - T_sec)/60;
18+
return `${T_min}min ${T_sec}sec`;
19+
}
820

9-
export { num_0, message_0, num_0_changing, message_0_changing, message_1, message_1_changing };
21+
export { num_0, message_0, num_0_changing, message_0_changing, message_1, message_1_changing, mark_0, mark_0_changing, k_s, k_s_changing, T_s, T_s_changing, T_s_shawing };

src/GraphsInit.ts

+57-4
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,76 @@
11
import {init, init1, init2, initres} from "./ForMyGraphModel";
2-
import {GraphGenerator, IEdge, IGraph, IVertex} from 'graphlabs.core.graphs';
3-
import {ChooseTask, GetNewRandomGraph, GetNewRandomGraphForThatOne} from "./Ops";
2+
import {Edge, GraphGenerator, IEdge, IGraph, IVertex, Vertex} from 'graphlabs.core.graphs';
3+
import {ChooseTask} from "./Ops";
4+
import {message_0, message_0_changing, num_0, num_0_changing, message_1, message_1_changing, mark_0, mark_0_changing, k_s, k_s_changing} from './ForMeVars';
45

56
function GraphsInit(){
67
let graph: IGraph<IVertex, IEdge>;
8+
let num_vert_plus_edg = num_0<=4?(9+k_s[num_0]):(Math.round((9+k_s[num_0])/2));
79

810
graph = GraphGenerator.generate(0);
911
init(graph);
1012

1113
let graph1: IGraph<IVertex, IEdge>;
12-
graph1 = GetNewRandomGraph(5);
14+
graph1 = GetNewRandomGraph(num_vert_plus_edg);
1315
init1(graph1);
1416

1517
let graph2: IGraph<IVertex, IEdge>;
16-
graph2 = GetNewRandomGraphForThatOne(5,graph1);
18+
graph2 = num_0<=2?GetNewRandomGraph(num_vert_plus_edg):GetNewRandomGraphForThatOne(num_vert_plus_edg, graph1);
1719
init2(graph2);
1820

1921
let graphres = ChooseTask();
2022
initres(graphres);
2123
}
2224

25+
function GetNewRandomGraph (num:number){ // рандомный граф
26+
let graph: IGraph<IVertex, IEdge>;
27+
graph = GraphGenerator.generate(0);
28+
let edge_num = num - Math.round(num/2);//Math.round((Math.random()*0.15+0.85)*num/2);
29+
let vert_num = num - edge_num;
30+
let vert_num_help = vert_num;
31+
32+
while (vert_num!==0){
33+
graph.addVertex(new Vertex(`${vert_num}`));
34+
vert_num--;
35+
}
36+
37+
while (edge_num!==0){
38+
let v1 = graph.getVertex(`${Math.round(Math.random()*(vert_num_help-1)+1)}`)[0];
39+
let v2 = graph.getVertex(`${Math.round(Math.random()*(vert_num_help-1)+1)}`)[0];
40+
if(!v1.isAdjacent(graph,v2)){
41+
graph.addEdge(new Edge(v1,v2,`${v1.name}+${v2.name}`));
42+
edge_num--;
43+
}
44+
}
45+
46+
return graph;
47+
}
48+
49+
function GetNewRandomGraphForThatOne (num:number, graph1:IGraph<IVertex, IEdge>){
50+
let graph: IGraph<IVertex, IEdge>;
51+
graph = GraphGenerator.generate(0);
52+
let edge_num = num - Math.round(num/2);//Math.round((Math.random()*0.15+0.85)*num/2);
53+
let vert_num = num - edge_num;
54+
55+
vert_num+=graph1.vertices.length;
56+
edge_num+=graph1.edges.length;
57+
let vert_num_help = vert_num;
58+
59+
while (vert_num!==graph1.vertices.length){
60+
graph.addVertex(new Vertex(`${vert_num}`));
61+
vert_num--;
62+
}
63+
64+
while (edge_num!==0){
65+
let v1 = graph.getVertex(`${Math.round(Math.random()*(vert_num_help-1)+graph1.vertices.length)}`)[0];
66+
let v2 = graph.getVertex(`${Math.round(Math.random()*(vert_num_help-1)+graph1.vertices.length)}`)[0];
67+
if(v1 && v2 && !v1.isAdjacent(graph,v2)){
68+
graph.addEdge(new Edge(v1,v2,`${v1.name}+${v2.name}`));
69+
edge_num--;
70+
}
71+
}
72+
73+
return graph;
74+
}
75+
2376
export {GraphsInit};

0 commit comments

Comments
 (0)