Created
November 22, 2020 11:27
-
-
Save ertugrulozcan/ad1731bff4c8e29548e7d63a8dc1bdf4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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