Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <map>
- #include <fstream>
- #include <queue>
- #include "CTcpFwd.h"
- using namespace std;
- CTcpFwd Sock("maze","test.natodia.net",10000);
- char buffer[4096];
- pair <int,int> poz;
- map <pair <int,int> , int> mapa;
- pair <int,int> v;
- pair <int,int> u;
- pair <int,int> wyj;
- map <pair <int,int> , int> odle;
- queue <pair <int,int> > bfs;
- int n;
- int x, y;
- int odl, m;
- ifstream ifs;
- ofstream ofs;
- void wypisz()
- {
- Sock.SwitchStdout("DefaultStdout");
- for (int i=-25; i<=25; i++)
- {
- for (int j=-50; j<=50; j++)
- {
- if (!i && !j)
- {
- printf("O");
- continue;
- }
- if (!mapa[make_pair(poz.first+i, poz.second+j)])
- {
- printf("*");
- continue;
- }
- if (mapa[make_pair(poz.first+i, poz.second+j)]==1)
- {
- printf(".");
- continue;
- }
- if (mapa[make_pair(poz.first+i, poz.second+j)]==-1)
- {
- printf("X");
- continue;
- }
- if (mapa[make_pair(poz.first+i, poz.second+j)]==2)
- {
- printf("E");
- continue;
- }
- }
- printf("\n");
- }
- printf("\n");
- Sock.SwitchStdout("maze");
- printf("TURNS_LEFT\n");
- scanf("%s", buffer);
- scanf("%d", &n);
- Sock.SwitchStdout("DefaultStdout");
- printf("%d\n", n);
- Sock.SwitchStdout("maze");
- }
- void czytaj()
- {
- printf("SCAN\n");
- scanf("%s", buffer);
- scanf("%d", &n);
- for (int i=1; i<=n; i++)
- {
- scanf("%s", buffer);
- scanf("%d%d", &x, &y);
- if (buffer[0]=='W')
- {
- mapa[make_pair(poz.first+x, poz.second+y)]=-1;
- continue;
- }
- if (buffer[0]=='E')
- {
- mapa[make_pair(poz.first+x, poz.second+y)]=2;
- continue;
- }
- mapa[make_pair(poz.first+x, poz.second+y)]=1;
- }
- }
- int czekaj()
- {
- //wypisz();
- /*Sock.SwitchStdout("DefaultStdout");
- for (int i=1; i<=40; i++)
- printf("\n");
- Sock.SwitchStdout("maze");*/
- printf("WAIT\n");
- scanf("%s", buffer);
- scanf("%s", buffer);
- //wypisz();
- printf("TURNS_LEFT\n");
- scanf("%s", buffer);
- scanf("%d", &m);
- if (m>odl)
- {
- odl=m;
- return 1;
- }
- /*Sock.SwitchStdout("DefaultStdout");
- printf("%d\n", n);
- Sock.SwitchStdout("maze");*/
- odl=m;
- return 0;
- }
- void czekajnakoniec()
- {
- int odl=1000000;
- while(1)
- {
- if(czekaj())
- break;
- Sock.SwitchStdout("DefaultStdout");
- printf("%d\n", m);
- Sock.SwitchStdout("maze");
- }
- }
- void szukajr()
- {
- usleep(200000);
- buffer[0]='.';
- ifs.open("in.in");
- ifs >> buffer;
- ifs.close();
- ofs.open("in.in");
- ofs << ".";
- ofs.close();
- }
- void szukaja()
- {
- odle.clear();
- odle[poz]=1;
- bfs.push(poz);
- while(!bfs.empty())
- {
- v=bfs.front();
- bfs.pop();
- if (!mapa[v])
- continue;
- /*Sock.SwitchStdout("DefaultStdout");
- printf("%d %d %d\n", v.first, v.second, odle[v]);
- Sock.SwitchStdout("maze");*/
- u=v;
- u.first++;
- if (mapa[u]>=0 && !odle[u])
- {
- odle[u]=odle[v]+1;
- bfs.push(u);
- }
- u=v;
- u.first--;
- if (mapa[u]>=0 && !odle[u])
- {
- odle[u]=odle[v]+1;
- bfs.push(u);
- }
- u=v;
- u.second++;
- if (mapa[u]>=0 && !odle[u])
- {
- odle[u]=odle[v]+1;
- bfs.push(u);
- }
- u=v;
- u.second--;
- if (mapa[u]>=0 && !odle[u])
- {
- odle[u]=odle[v]+1;
- bfs.push(u);
- }
- }
- v=poz;
- wyj=poz;
- for (map <pair <int,int> , int>::iterator it=odle.begin(); it!=odle.end(); it++)
- {
- if (!mapa[it->first] && (v==poz || (it->second)<odle[v]))
- {
- v=(it->first);
- }
- if (mapa[it->first]==2)
- {
- wyj=(it->first);
- }
- }
- /*Sock.SwitchStdout("DefaultStdout");
- printf(" %d %d %d\n", v.first, v.second, odle[v]);
- Sock.SwitchStdout("maze");*/
- if (wyj!=poz)
- v=wyj;
- while(odle[v]>2)
- {
- /*Sock.SwitchStdout("DefaultStdout");
- printf("%d %d %d\n", v.first, v.second, odle[v]);
- Sock.SwitchStdout("maze");*/
- u=v;
- u.first++;
- if (odle[u]+1==odle[v])
- {
- v=u;
- continue;
- }
- u=v;
- u.first--;
- if (odle[u]+1==odle[v])
- {
- v=u;
- continue;
- }
- u=v;
- u.second++;
- if (odle[u]+1==odle[v])
- {
- v=u;
- continue;
- }
- u=v;
- u.second--;
- if (odle[u]+1==odle[v])
- {
- v=u;
- continue;
- }
- }
- /*Sock.SwitchStdout("DefaultStdout");
- printf(" %d %d %d\n", poz.first, poz.second, odle[v]);
- Sock.SwitchStdout("maze");
- Sock.SwitchStdout("DefaultStdout");
- printf(" %d %d %d\n", v.first, v.second, odle[v]);
- Sock.SwitchStdout("maze");*/
- if (v.first==poz.first-1)
- {
- buffer[0]='w';
- return;
- }
- if (v.first==poz.first+1)
- {
- buffer[0]='s';
- return;
- }
- if (v.second==poz.second-1)
- {
- buffer[0]='a';
- return;
- }
- if (v.second==poz.second+1)
- {
- buffer[0]='d';
- return;
- }
- }
- int dawajruch()
- {
- //szukajr();
- szukaja();
- /*Sock.SwitchStdout("DefaultStdout");
- printf("\n");
- Sock.SwitchStdout("maze");*/
- //system("pause");
- if (buffer[0]=='.')
- return 0;
- /*Sock.SwitchStdin("DefaultStdin");
- scanf("%s", buffer);
- Sock.SwitchStdin("maze");*/
- if (buffer[0]=='w')
- {
- printf("MOVE -1 0\n");
- scanf("%s", buffer);
- if (buffer[0]=='O')
- {
- poz.first--;
- //Sock.SwitchStdout("DefaultStdout");
- //printf("poszlo\n");
- //Sock.SwitchStdout("maze");
- return 1;
- }
- scanf("%s", buffer);
- scanf("%s", buffer);
- scanf("%s", buffer);
- mapa[make_pair(poz.first-1, poz.second)]=-1;
- return 0;
- }
- if (buffer[0]=='s')
- {
- printf("MOVE 1 0\n");
- scanf("%s", buffer);
- if (buffer[0]=='O')
- {
- poz.first++;
- //Sock.SwitchStdout("DefaultStdout");
- //printf("poszlo\n");
- //Sock.SwitchStdout("maze");
- return 1;
- }
- scanf("%s", buffer);
- scanf("%s", buffer);
- scanf("%s", buffer);
- mapa[make_pair(poz.first+1, poz.second)]=-1;
- return 0;
- }
- Sock.SwitchStdin("maze");
- if (buffer[0]=='a')
- {
- printf("MOVE 0 -1\n");
- scanf("%s", buffer);
- if (buffer[0]=='O')
- {
- poz.second--;
- //Sock.SwitchStdout("DefaultStdout");
- //printf("poszlo\n");
- //Sock.SwitchStdout("maze");
- return 1;
- }
- scanf("%s", buffer);
- scanf("%s", buffer);
- scanf("%s", buffer);
- mapa[make_pair(poz.first, poz.second-1)]=-1;
- return 0;
- }
- if (buffer[0]=='d')
- {
- printf("MOVE 0 1\n");
- scanf("%s", buffer);
- if (buffer[0]=='O')
- {
- poz.second++;
- //Sock.SwitchStdout("DefaultStdout");
- //printf("poszlo\n");
- //Sock.SwitchStdout("maze");
- return 1;
- }
- scanf("%s", buffer);
- scanf("%s", buffer);
- scanf("%s", buffer);
- mapa[make_pair(poz.first, poz.second+1)]=-1;
- return 0;
- }
- return 0;
- }
- int main()
- {
- Sock.SwitchStdout("maze");
- Sock.SwitchStdin("maze");
- scanf("%s", buffer);
- Sock.SwitchStdout("DefaultStdout");
- printf("%s\n", buffer);
- Sock.SwitchStdout("maze");
- Sock.SwitchStdin("DefaultStdin");
- scanf("%s", buffer);
- Sock.SwitchStdin("maze");
- printf("%s\n", buffer);
- scanf("%s", buffer);
- Sock.SwitchStdout("DefaultStdout");
- printf("%s\n", buffer);
- Sock.SwitchStdout("maze");
- Sock.SwitchStdin("DefaultStdin");
- scanf("%s", buffer);
- Sock.SwitchStdin("maze");
- printf("%s\n", buffer);
- scanf("%s", buffer);
- Sock.SwitchStdout("DefaultStdout");
- printf("%s\n", buffer);
- Sock.SwitchStdout("maze");
- while(1)
- {
- //Sock.SwitchStdout("DefaultStdout");
- //printf("od nowa\n\n");
- //Sock.SwitchStdout("maze");
- poz=make_pair(0,0);
- mapa.clear();
- czytaj();
- mapa[poz]=1;
- while(mapa[poz]!=2)
- {
- mapa[poz]=1;
- czytaj();
- wypisz();
- if(dawajruch())
- if(czekaj())
- break;
- }
- if (mapa[poz]==2)
- czekajnakoniec();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement