#include <iostream>
using namespace std;
struct FRACTION
{
int num;
int den;
};
bool haveCommonDigit(int num1, int num2)
{
int x1 = num1 % 10;
int y1 = num1 / 10;
int x2 = num2 % 10;
int y2 = num2 / 10;
return (x1 == x2 || x1 == y2 || y1 == x2 || y1 == y2);
}
bool arePalindromesOfEachOther(int num1, int num2)
{
int x1 = num1 % 10;
int y1 = num1 / 10;
int x2 = num2 % 10;
int y2 = num2 / 10;
return (x1 == y2 && x2 == y1);
}
int gcd(int num1, int num2)
{
if (num2 == 0)
return num1;
else
return gcd(num2, num1 % num2);
}
FRACTION cancelCommonDigits(int num1, int num2)
{
int x1 = num1 % 10;
int y1 = num1 / 10;
int x2 = num2 % 10;
int y2 = num2 / 10;
int simple1 = num1;
int simple2 = num2;
if (x1 == x2)
{
simple1 = num1 / 10;
simple2 = num2 / 10;
}
else if (x1 == y2)
{
simple1 = num1 / 10;
simple2 = num2 % 10;
}
else if (y1 == x2)
{
simple1 = num1 % 10;
simple2 = num2 / 10;
}
else if (y1 == y2)
{
simple1 = num1 % 10;
simple2 = num2 % 10;
}
int common_divisor = gcd(num1, num2);
int common_divisor_simple = gcd(simple1, simple2);
if (num1 / common_divisor == simple1 / common_divisor_simple && num2 / common_divisor == simple2 / common_divisor_simple)
{
cout << num1 << "/" << num2 << " = " << simple1 << "/" << simple2 << endl;
FRACTION ret = {simple1, simple2};
return ret;
}
else
{
FRACTION ret = {};
return ret;
}
}
int main()
{
FRACTION fractions[4] = {};
int fractions_index = 0;
for (int i = 11; i < 100; i++)
{
for (int j = 11; j < 100; j++)
{
/* can't be factors of 10
must be less than 1 in value
must have a common digit
can't be palindromes of each other (if we cancel just one digit, after simplifying we get 1, which isn't allowed)
*/
if ((i % 10 != 0 && j % 10 != 0) && (i % j > 0 && i / j == 0) && haveCommonDigit(i, j) && !arePalindromesOfEachOther(i, j))
{
FRACTION frac = cancelCommonDigits(i, j);
if (frac.den != 0)
{
fractions[fractions_index] = frac;
fractions_index++;
}
}
}
}
int numerator = 1;
int denominator = 1;
int common_divisor;
for (int i = 0; i < 4; i++)
{
numerator *= fractions[i].num;
denominator *= fractions[i].den;
}
common_divisor = gcd(numerator, denominator);
cout << denominator / common_divisor;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBGUkFDVElPTgp7CiAgICBpbnQgbnVtOwogICAgaW50IGRlbjsKfTsKCmJvb2wgaGF2ZUNvbW1vbkRpZ2l0KGludCBudW0xLCBpbnQgbnVtMikKewogICAgaW50IHgxID0gbnVtMSAlIDEwOwogICAgaW50IHkxID0gbnVtMSAvIDEwOwogICAgaW50IHgyID0gbnVtMiAlIDEwOwogICAgaW50IHkyID0gbnVtMiAvIDEwOwoKICAgIHJldHVybiAoeDEgPT0geDIgfHwgeDEgPT0geTIgfHwgeTEgPT0geDIgfHwgeTEgPT0geTIpOwp9Cgpib29sIGFyZVBhbGluZHJvbWVzT2ZFYWNoT3RoZXIoaW50IG51bTEsIGludCBudW0yKQp7CiAgICBpbnQgeDEgPSBudW0xICUgMTA7CiAgICBpbnQgeTEgPSBudW0xIC8gMTA7CiAgICBpbnQgeDIgPSBudW0yICUgMTA7CiAgICBpbnQgeTIgPSBudW0yIC8gMTA7CgogICAgcmV0dXJuICh4MSA9PSB5MiAmJiB4MiA9PSB5MSk7Cn0KCmludCBnY2QoaW50IG51bTEsIGludCBudW0yKQp7CiAgICBpZiAobnVtMiA9PSAwKQogICAgICAgIHJldHVybiBudW0xOwogICAgZWxzZQogICAgICAgIHJldHVybiBnY2QobnVtMiwgbnVtMSAlIG51bTIpOwp9CgpGUkFDVElPTiBjYW5jZWxDb21tb25EaWdpdHMoaW50IG51bTEsIGludCBudW0yKQp7CiAgICBpbnQgeDEgPSBudW0xICUgMTA7CiAgICBpbnQgeTEgPSBudW0xIC8gMTA7CiAgICBpbnQgeDIgPSBudW0yICUgMTA7CiAgICBpbnQgeTIgPSBudW0yIC8gMTA7CgogICAgaW50IHNpbXBsZTEgPSBudW0xOwogICAgaW50IHNpbXBsZTIgPSBudW0yOwoKICAgIGlmICh4MSA9PSB4MikKICAgIHsKICAgICAgICBzaW1wbGUxID0gbnVtMSAvIDEwOwogICAgICAgIHNpbXBsZTIgPSBudW0yIC8gMTA7CiAgICB9CiAgICBlbHNlIGlmICh4MSA9PSB5MikKICAgIHsKICAgICAgICBzaW1wbGUxID0gbnVtMSAvIDEwOwogICAgICAgIHNpbXBsZTIgPSBudW0yICUgMTA7CiAgICB9CiAgICBlbHNlIGlmICh5MSA9PSB4MikKICAgIHsKICAgICAgICBzaW1wbGUxID0gbnVtMSAlIDEwOwogICAgICAgIHNpbXBsZTIgPSBudW0yIC8gMTA7CiAgICB9CiAgICBlbHNlIGlmICh5MSA9PSB5MikKICAgIHsKICAgICAgICBzaW1wbGUxID0gbnVtMSAlIDEwOwogICAgICAgIHNpbXBsZTIgPSBudW0yICUgMTA7CiAgICB9CgogICAgaW50IGNvbW1vbl9kaXZpc29yID0gZ2NkKG51bTEsIG51bTIpOwogICAgaW50IGNvbW1vbl9kaXZpc29yX3NpbXBsZSA9IGdjZChzaW1wbGUxLCBzaW1wbGUyKTsKICAgIGlmIChudW0xIC8gY29tbW9uX2Rpdmlzb3IgPT0gc2ltcGxlMSAvIGNvbW1vbl9kaXZpc29yX3NpbXBsZSAmJiBudW0yIC8gY29tbW9uX2Rpdmlzb3IgPT0gc2ltcGxlMiAvIGNvbW1vbl9kaXZpc29yX3NpbXBsZSkKICAgIHsKICAgICAgICBjb3V0IDw8IG51bTEgPDwgIi8iIDw8IG51bTIgPDwgIiA9ICIgPDwgc2ltcGxlMSA8PCAiLyIgPDwgc2ltcGxlMiA8PCBlbmRsOwoKICAgICAgICBGUkFDVElPTiByZXQgPSB7c2ltcGxlMSwgc2ltcGxlMn07CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBGUkFDVElPTiByZXQgPSB7fTsKICAgICAgICByZXR1cm4gcmV0OwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIEZSQUNUSU9OIGZyYWN0aW9uc1s0XSA9IHt9OwogICAgaW50IGZyYWN0aW9uc19pbmRleCA9IDA7CgogICAgZm9yIChpbnQgaSA9IDExOyBpIDwgMTAwOyBpKyspCiAgICB7CiAgICAgICAgZm9yIChpbnQgaiA9IDExOyBqIDwgMTAwOyBqKyspCiAgICAgICAgewogICAgICAgICAgICAvKiAgY2FuJ3QgYmUgZmFjdG9ycyBvZiAxMAogICAgICAgICAgICAgICAgbXVzdCBiZSBsZXNzIHRoYW4gMSBpbiB2YWx1ZQogICAgICAgICAgICAgICAgbXVzdCBoYXZlIGEgY29tbW9uIGRpZ2l0CiAgICAgICAgICAgICAgICBjYW4ndCBiZSBwYWxpbmRyb21lcyBvZiBlYWNoIG90aGVyIChpZiB3ZSBjYW5jZWwganVzdCBvbmUgZGlnaXQsIGFmdGVyIHNpbXBsaWZ5aW5nIHdlIGdldCAxLCB3aGljaCBpc24ndCBhbGxvd2VkKQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYgKChpICUgMTAgIT0gMCAmJiBqICUgMTAgIT0gMCkgJiYgKGkgJSBqID4gMCAmJiBpIC8gaiA9PSAwKSAmJiBoYXZlQ29tbW9uRGlnaXQoaSwgaikgJiYgIWFyZVBhbGluZHJvbWVzT2ZFYWNoT3RoZXIoaSwgaikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZSQUNUSU9OIGZyYWMgPSBjYW5jZWxDb21tb25EaWdpdHMoaSwgaik7CiAgICAgICAgICAgICAgICBpZiAoZnJhYy5kZW4gIT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbnNbZnJhY3Rpb25zX2luZGV4XSA9IGZyYWM7CiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25zX2luZGV4Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaW50IG51bWVyYXRvciA9IDE7CiAgICBpbnQgZGVub21pbmF0b3IgPSAxOwogICAgaW50IGNvbW1vbl9kaXZpc29yOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgewogICAgICAgIG51bWVyYXRvciAqPSBmcmFjdGlvbnNbaV0ubnVtOwogICAgICAgIGRlbm9taW5hdG9yICo9IGZyYWN0aW9uc1tpXS5kZW47CiAgICB9CgogICAgY29tbW9uX2Rpdmlzb3IgPSBnY2QobnVtZXJhdG9yLCBkZW5vbWluYXRvcik7CiAgICBjb3V0IDw8IGRlbm9taW5hdG9yIC8gY29tbW9uX2Rpdmlzb3I7CgogICAgcmV0dXJuIDA7Cn0K