Pagini recente » Cod sursa (job #1667047) | Cod sursa (job #2482318) | Cod sursa (job #2457409) | Cod sursa (job #2484471) | Cod sursa (job #2236327)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in;
ofstream out;
void rotate_left(vector<int> &directions)
{
for(size_t i = 0; i < directions.size(); i++)
{
if(directions[i] % 2 == 0)
{
directions[i]--;
}
else
{
directions[i]++;
}
}
}
void mirror(vector<int> &directions)
{
for(size_t i = 0; i < directions.size(); i++)
{
switch(directions[i])
{
case 1:
directions[i] = 3;
break;
case 2:
directions[i] = 4;
break;
case 3:
directions[i] = 1;
break;
case 4:
directions[i] = 2;
break;
}
}
}
void next_degree(vector<int> &directions)
{
vector<int> old_directions;
old_directions.insert(old_directions.end(), directions.begin(), directions.end());
directions.push_back(2);
directions.insert(directions.end(), directions.begin(), directions.end() - 1);
rotate_left(old_directions);
directions.insert(directions.begin(), 1);
directions.insert(directions.begin(), old_directions.begin(), old_directions.end());
directions.push_back(3);
mirror(old_directions);
directions.insert(directions.end(), old_directions.begin(), old_directions.end());
}
int main() {
int k, x, y, steps = 0, tempx = 1, tempy = 1;
vector<int> directions;
directions.push_back(1);
directions.push_back(2);
directions.push_back(3);
in.open("fractal.in");
in >> k >> x >> y;
in.close();
for(int i = 0; i < k - 1; i++)
{
next_degree(directions);
}
for(auto i: directions)
{
if(tempx == x && tempy == y)
break;
switch(i)
{
case 1:
tempy++;
break;
case 2:
tempx++;
break;
case 3:
tempy--;
break;
case 4:
tempx--;
break;
}
steps++;
}
out.open("fractal.out");
out << steps;
out.close();
return 0;
}