TFT Support - 5(완) 본문
가장 높은 시너지에 대해서 승률을 정리하는 로직을 작성했다.
#ifndef ANALYSIS_H
#define AHALYSIS_H
#include "JSONParsing.h"
#include <string>
#include <vector>
#include <map>
class Analysis{
private:
Participant my_data;
std::vector<std::string> scraped_traits;
std::vector<std::string> scraped_avg_places;
std::map<std::string, std::string> mapset;
public:
Analysis(Participant arg_1, std::vector<std::string> arg_2, std::vector<std::string> arg_3);
void Analysis_traits();
};
#endif
my_data는 나의 데이터가 들어가 있다.
scraped_traits와 scraped_avg_places는 크롤링한 데이터를 가져온다.
mapset은 한글로 된 이름의 시너지를 시너지 코드로 변환시키기 위함이다.
Analysis_traits()는 실제 로직 분석 함수이다.
#include "Analysis.h"
#include <iostream>
#include <vector>
#include <sstream>
#include <string>
Analysis::Analysis(Participant arg_1, std::vector<std::string> arg_2, std::vector<std::string> arg_3){
my_data = arg_1;
scraped_traits = arg_2;
scraped_avg_places = arg_3;
mapset.insert({"거대 괴수", "TFT11_Behemoth"});
mapset.insert({"결투가", "TFT11_Duelist"});
mapset.insert({"귀인", "TFT11_Exalted"});
mapset.insert({"기원자", "TFT11_Invoker"});
mapset.insert({"난동꾼", "TFT11_Bruiser"});
mapset.insert({"비전 마법사", "TFT11_Arcanist"});
mapset.insert({"사신", "TFT11_Reaper"});
mapset.insert({"연인", "TFT11_Lovers"});
mapset.insert({"예술가", "TFT11_Artist"});
mapset.insert({"이타심", "TFT11_Altruist"});
mapset.insert({"재주꾼", "TFT11_Trickshot"});
mapset.insert({"저격수", "TFT11_Sniper"});
mapset.insert({"정령 주술사", "TFT11_Spirit Walker"});
mapset.insert({"파수꾼", "TFT11_Warden"});
mapset.insert({"현자", "TFT11_Sage"});
mapset.insert({"호걸", "TFT11_Great"});
mapset.insert({"도자기", "TFT11_Porcelain"});
mapset.insert({"먹그림자", "TFT11_Inkshadow"});
mapset.insert({"숲지기", "TFT11_Dryad"});
mapset.insert({"신화", "TFT11_Mythic"});
mapset.insert({"암영", "TFT11_Umbral"});
mapset.insert({"용군주", "TFT11_Dragonlord"});
mapset.insert({"이야기꾼", "TFT11_Storyweaver"});
mapset.insert({"천계", "TFT11_Heavenly"});
mapset.insert({"필연", "TFT11_Fated"});
mapset.insert({"행운", "TFT11_Fortune"});
mapset.insert({"혼령", "TFT11_Ghostly"});
}
void Analysis::Analysis_traits()
{
std::string my_first_trait = "";
int max_num = -1;
for(int i = 0; i < my_data.traits.size(); i++){
if(my_data.traits[i].num_units > max_num && my_data.traits[i].name[3] != 'E')
{
my_first_trait = my_data.traits[i].name;
max_num = my_data.traits[i].num_units;
}
}
float result_tier = 9;
std::string result_trait = "";
for(int i = 0; i < scraped_traits.size()-1; i++){
std::istringstream iss(scraped_traits[i]);
std::string trait_name = "";
std::string token;
int trait_num = -1;
try{
iss >> token;
trait_num = std::stoi(token);
std::getline(iss, trait_name);
trait_name = trait_name.substr(1);
}
catch(...){
}
if(mapset[trait_name] == my_first_trait && max_num >= trait_num)
{
result_tier = std::stof(scraped_avg_places[i]);
result_trait = trait_name;
}
}
std::cout << "Main trait : "<< max_num << " " <<result_trait << std::endl;
std::cout << "Avg score : " << result_tier << std::endl;
}
내가 가지고 있는 시너지중 가장 높은 개수의 시너지를 가져온다.
크롤링된 시너지를 통해 나의 시너지와 가장 비슷한 경우를 찾고
평균 등수를 표기해 준다.
챔피언의 배치나 아이템에 따라 수많은 경우의 수 가 생기지만
이번 프로젝트는 시너지만 생각하기로 했다.
이번 프로젝트를 위해 만든 코드들이다.
API통신을 진행하고 Json파일을 파싱 한다거나
크롤링한 데이터를 가져오는 법을 복습할 수 있었고
무엇보다 설계원칙을 지켜가며 코딩하는 습관을 만들 수 있었다.
나의 경기 데이터이다.
4 숲지기의 평균 승률은 4.7이라는 것을 알 수 있었다.
'개인 프로젝트 공부' 카테고리의 다른 글
Traceroute - 2 (0) | 2024.07.09 |
---|---|
Traceroute - 1 (0) | 2024.07.08 |
TFT Support - 4 (0) | 2024.07.03 |
TFT Support - 3 (0) | 2024.07.02 |
TFT Support - 2 (0) | 2024.06.26 |
Comments