public void NumeralShouldGetDigits() { #region Arrange var ulongNum = 29382440; var bigIntegerNum = new BigInteger(43653452598); #endregion #region Act var ulongDigits = Numeral.GetDigits(ulongNum); var bigIntegerDigits = Numeral.GetDigits(bigIntegerNum); #endregion #region Assert Assert.AreEqual(8, ulongDigits.Count); Assert.AreEqual(0, ulongDigits[0]); Assert.AreEqual(4, ulongDigits[1]); Assert.AreEqual(4, ulongDigits[2]); Assert.AreEqual(2, ulongDigits[3]); Assert.AreEqual(2, ulongDigits[7]); Assert.AreEqual(11, bigIntegerDigits.Count); Assert.AreEqual(8, bigIntegerDigits[0]); Assert.AreEqual(9, bigIntegerDigits[1]); Assert.AreEqual(6, bigIntegerDigits[8]); Assert.AreEqual(3, bigIntegerDigits[9]); Assert.AreEqual(4, bigIntegerDigits[10]); #endregion }
public static void Run(Input input, Output output) { var meta = input.ReadLine().Split(' '); var N = int.Parse(meta[0]); var K = int.Parse(meta[1]); var cubesPermutations = new Dictionary <CubePermutationKey, CubePermutationData>(); for (long i = 1; i < N; i++) { long cube = i * i * i; var cubeDigits = Numeral.GetDigits((ulong)cube); var currKey = new CubePermutationKey(); for (int currDigitIndex = 0; currDigitIndex < cubeDigits.Count; currDigitIndex++) { currKey.Digits[cubeDigits[currDigitIndex]]++; } currKey.InitHash(); if (!cubesPermutations.ContainsKey(currKey)) { cubesPermutations.Add(currKey, new CubePermutationData() { Smallest = cube, Count = 1 }); } else { cubesPermutations[currKey].Count++; } } foreach (var val in cubesPermutations.Values) { if (val.Count == K) { output.WriteLine(val.Smallest.ToString()); } } }