From bd83378a7ae487885007e5098fdd7b923562204f Mon Sep 17 00:00:00 2001 From: marcheanin Date: Wed, 24 May 2023 13:18:32 +0300 Subject: [PATCH] add some reducing and method --- server/internal/metrics/include/DiffLib.h | 1 + server/internal/metrics/src/DiffLibImpl.cpp | 22 ++++++-- .../metrics/testProgs/output/out2.txt | 52 +++++++++---------- 3 files changed, 46 insertions(+), 29 deletions(-) diff --git a/server/internal/metrics/include/DiffLib.h b/server/internal/metrics/include/DiffLib.h index cea6dce..7062497 100644 --- a/server/internal/metrics/include/DiffLib.h +++ b/server/internal/metrics/include/DiffLib.h @@ -45,6 +45,7 @@ private: static std::vector diffTokenizer(const std::string& text); static std::string delServSimbols(std::string s); + static void outOps (std::vector ops, std::string& str); }; #endif //SOURCEDOUT_DIFFLIB_H diff --git a/server/internal/metrics/src/DiffLibImpl.cpp b/server/internal/metrics/src/DiffLibImpl.cpp index a1d326f..bc7dd15 100644 --- a/server/internal/metrics/src/DiffLibImpl.cpp +++ b/server/internal/metrics/src/DiffLibImpl.cpp @@ -242,9 +242,7 @@ std::pair FoundSame::tokens2text2() { for (auto & i : res_alignment2){ if (i.token2.second > line){ res2 += '\t'; - for (auto & op : ops){ - res2 += op, res2 += " "; - } + outOps(ops, res2); ops.clear(); while(line < i.token2.second){ res2+= '\n'; @@ -260,4 +258,22 @@ std::pair FoundSame::tokens2text2() { return {res1, res2}; } +void FoundSame::outOps(std::vector ops, std::string& str) { + if (ops.empty()) return; + std::string o = ops[0]; + int f = 0; + for (auto & op : ops){ + if (op != o){ + f = 1; + break; + } + } + if (f == 0) + str += "[" + o + "]"; + else + for (auto & op : ops){ + str += op, str += " "; + } +} + diff --git a/server/internal/metrics/testProgs/output/out2.txt b/server/internal/metrics/testProgs/output/out2.txt index e152371..6de4966 100644 --- a/server/internal/metrics/testProgs/output/out2.txt +++ b/server/internal/metrics/testProgs/output/out2.txt @@ -1,49 +1,49 @@ -#include C -#include C +#include [C] +#include [C] -using namespace std ; C C C C +using namespace std ; [C] bool check1 ( vector < int > s , int i , int j ) { C R C C C C C C C C C C C C C C -for ( int k = 0 ; k < s . size ( ) ; k ++ ) { C C C C C C C C C C C C C C C C C C C -if ( s [ k ] != i && s [ k ] != j && s [ k ] % i == 0 && j % s [ k ] == 0 ) { C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C -return 0 ; C C C -} C -} C -return 1 ; C C C -} C +for ( int k = 0 ; k < s . size ( ) ; k ++ ) { [C] +if ( s [ k ] != i && s [ k ] != j && s [ k ] % i == 0 && j % s [ k ] == 0 ) { [C] +return 0 ; [C] +} [C] +} [C] +return 1 ; [C] +} [C] -int main ( ) { C C C C C +int main ( ) { [C] long long n1 ; C C R C cin > > n1 ; C C C R C vector < int > s2 ; C C C C R C for ( int k = 1 ; k <= n1 ; k ++ ) { C C C R C C C R C R C R C C C if ( n1 % k == 0 ) { C C R C R C C C C s2 . push_back ( k ) ; R C C C R C C -} I -} C +} [I] +} [C] -if ( n % 2 == 0 ) { I I I I I I I I I -n += 1 ; I I I I -n -= 1 ; I I I I -} C +if ( n % 2 == 0 ) { [I] +n += 1 ; [I] +n -= 1 ; [I] +} [C] -vector < pair < int , int > > ans ; C C C C C C C C C C C +vector < pair < int , int > > ans ; [C] for ( int i = 0 ; i < s2 . size ( ) ; i ++ ) { C C C C C C C C C R C C C C C C C C C for ( int j = i + 1 ; j < s2 . size ( ) ; j ++ ) { C C C C C C C C C C C R C C C C C C C C C if ( s2 [ j ] % s2 [ i ] == 0 && check1 ( s2 , s2 [ i ] , s2 [ j ] ) ) { C C R C C C C R C C C C C C R C R C R C C C C R C C C C C C -ans . push_back ( { s [ i ] , s [ j ] } ) ; C C C C C C C C C C C C C C C C C -} C -} C -} C +ans . push_back ( { s [ i ] , s [ j ] } ) ; [C] +} [C] +} [C] +} [C] cout < < "graph {" ; C C C C I cout < < '\n' ; I C C R C for ( int k = 0 ; k < s2 . size ( ) ; k ++ ) { C C C R C C C R C R C C C C C R C C C cout < < s [ k ] < < endl ; C C C C C R C C C C C -} C +} [C] -for ( int i = 0 ; i < ans . size ( ) ; i ++ ) { C C C C C C C C C C C C C C C C C C C -cout < < ans [ i ] . first < < "--" < < ans [ i ] . second < < endl ; C C C C C C C C C C C C C C C C C C C C C C C C -} C +for ( int i = 0 ; i < ans . size ( ) ; i ++ ) { [C] +cout < < ans [ i ] . first < < "--" < < ans [ i ] . second < < endl ; [C] +} [C] cout < < "}" ; C C C C I cout < < '\n' ; I I I I C } \ No newline at end of file -- GitLab