#pragma once #include "nlohmann/json.hpp" #include #include #include #include #include #include namespace kobaltmeer { using json=nlohmann::json; struct Point { int x,y; bool operator==(const Point& b)const{return x==b.x&&y==b.y;} }; inline int distance(Point a,Point b,int size){int x=std::abs(a.x-b.x),y=std::abs(a.y-b.y);return std::min(x,size-x)+std::min(y,size-y);} inline Point destination(Point p,char action,int size){if(action=='N')p.y--;if(action=='S')p.y++;if(action=='E')p.x++;if(action=='W')p.x--;return {(p.x+size)%size,(p.y+size)%size};} inline Point position(const json& item){return {item.at("x").get(),item.at("y").get()};} inline json orders(){return json{{"type","orders"},{"ships",json::object()},{"spawn",false}};} inline void explain(json& out,int ship,Point target,const std::string& reason){out["debug"].push_back({{"ship",ship},{"target",{target.x,target.y}},{"reason",reason}});} template int run(const std::string& name,Policy policy){ try {std::string line;if(!std::getline(std::cin,line))return 1; auto init=json::parse(line);if(init.value("type","")!="init"||init.value("protocol","")!="kobaltmeer-bot-v1")return 2; const auto seed=init.at("seed").get(); std::cout<