Skip to content

Instantly share code, notes, and snippets.

@ertugrulozcan
Created November 22, 2020 11:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ertugrulozcan/ad1731bff4c8e29548e7d63a8dc1bdf4 to your computer and use it in GitHub Desktop.
Save ertugrulozcan/ad1731bff4c8e29548e7d63a8dc1bdf4 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
namespace Homework4
{
public static class Question2
{
public static void Run()
{
for (int numerator = 10; numerator < 100; numerator++)
{
for (int denominator = 10; denominator < 100; denominator++)
{
if (IsFreakDivisible(numerator, denominator))
{
Console.WriteLine($"{numerator}/{denominator}");
}
}
}
}
public static bool IsFreakDivisible(int numerator, int denominator)
{
if (numerator < 10 || numerator > 99)
{
return false;
}
if (denominator < 10 || denominator > 99)
{
return false;
}
if (numerator % 10 == 0 || denominator % 10 == 0)
{
return false;
}
if (denominator <= numerator)
{
return false;
}
int[] numeratorDigits = GetDigits(numerator);
if (!IsAllDifferent(numeratorDigits))
{
return false;
}
int[] denominatorDigits = GetDigits(denominator);
if (!IsAllDifferent(denominatorDigits))
{
return false;
}
int intersection = GetIntersection(numeratorDigits, denominatorDigits);
if (intersection < 0)
{
return false;
}
int newNumerator = ConvertToDecimal(Remove(numeratorDigits, intersection));
int newDenominator = ConvertToDecimal(Remove(denominatorDigits, intersection));
if (newDenominator == 0)
{
return false;
}
return (double)numerator / denominator == (double)newNumerator / newDenominator;
}
private static int ConvertToDecimal(int[] digits)
{
int result = 0;
for (int i = 0; i < digits.Length; i++)
{
result += digits[i] * (int)Math.Pow(10, i);
}
return result;
}
private static int[] GetDigits(int number)
{
if (number < 0)
{
number = Math.Abs(number);
}
List<int> digits = new List<int>();
while (number >= 10)
{
int digit = number % 10;
number = (number - digit) / 10;
digits.Add(digit);
}
digits.Add(number);
return digits.ToArray();
}
private static bool IsAllDifferent(int[] digits)
{
for (int i = 0; i < digits.Length; i++)
{
if (digits.Count(x => x == digits[i]) > 1)
{
return false;
}
}
return true;
}
private static int GetIntersection(int[] digits1, int[] digits2)
{
for (int i = 0; i < digits1.Length; i++)
{
if (digits2.Contains(digits1[i]))
{
return digits1[i];
}
}
return -1;
}
private static T[] Remove<T>(T[] digits, T number)
{
List<T> list = new List<T>(digits);
list.Remove(number);
return list.ToArray();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment