Skip to content

Instantly share code, notes, and snippets.

@WindAzure
Last active March 24, 2019 15:18
Show Gist options
  • Save WindAzure/1924ddc4c1a3cce0c7cc1b92f530a6e4 to your computer and use it in GitHub Desktop.
Save WindAzure/1924ddc4c1a3cce0c7cc1b92f530a6e4 to your computer and use it in GitHub Desktop.
UVa 253
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
void rotateClockwiseInAxisXZ(string &die)
{
swap(die[1], die[3]);
swap(die[3], die[4]);
swap(die[4], die[2]);
}
void rotateClockwiseInAxisXY(string &die)
{
swap(die[0], die[2]);
swap(die[2], die[5]);
swap(die[5], die[3]);
}
void rotateClockwiseInAxisYZ(string &die)
{
swap(die[0], die[1]);
swap(die[1], die[5]);
swap(die[5], die[4]);
}
string generateNewDieWithNewTop(const string &die, int numOnTop)
{
auto newDie = string{ die };
if (numOnTop == 2)
{
rotateClockwiseInAxisYZ(newDie);
}
else if (numOnTop == 6)
{
rotateClockwiseInAxisYZ(newDie);
rotateClockwiseInAxisYZ(newDie);
}
else if (numOnTop == 5)
{
rotateClockwiseInAxisYZ(newDie);
rotateClockwiseInAxisYZ(newDie);
rotateClockwiseInAxisYZ(newDie);
}
else if (numOnTop == 3)
{
rotateClockwiseInAxisXY(newDie);
}
else if (numOnTop == 4)
{
rotateClockwiseInAxisXY(newDie);
rotateClockwiseInAxisXY(newDie);
rotateClockwiseInAxisXY(newDie);
}
return newDie;
}
bool isTwoDieIdentical(const string die1, const string die2)
{
for (auto facetOnTop = 1; facetOnTop <= 6; facetOnTop++)
{
auto die = generateNewDieWithNewTop(die1, facetOnTop);
for (auto roateTimesInAxisXZ = 0; roateTimesInAxisXZ < 4; roateTimesInAxisXZ++)
{
rotateClockwiseInAxisXZ(die);
if (die == die2)
{
return true;
}
}
}
return false;
}
int main()
{
auto inputText = string{};
while (getline(cin, inputText))
{
auto result = isTwoDieIdentical(inputText.substr(0, 6), inputText.substr(6, 6)) ? "TRUE" : "FALSE";
puts(result);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment