Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using NUnit.Framework;
  5.  
  6. namespace Pangrams
  7. {
  8. public class Pangrams
  9. {
  10. public List<List<string>> FindPangrams(List<string> input)
  11. {
  12. var powerset = GetPowerSet(input);
  13. var returnValue = new List<List<string>>();
  14.  
  15. foreach (var set in powerset)
  16. {
  17. if (GetSetLength(set) == 26 && ContainsAllLetters(set))
  18. {
  19. returnValue.Add(set);
  20. }
  21. }
  22. return returnValue;
  23. }
  24.  
  25. private int GetSetLength(List<string> list)
  26. {
  27. return list.Sum(x => x.Length);
  28. }
  29.  
  30. // bitmask & 1 (101 & 1) === 1 / (100 & 1) === 0
  31. // bitmask >> 1
  32. // biitmask << 1
  33. // {quick, brown}
  34. public List<List<string>> GetPowerSet(List<string> input)
  35. {
  36. var returnValue = new List<List<string>>();
  37. for (int i = 0; i < Math.Pow(2,input.Count) ; i++)
  38. {
  39. var currentSet = new List<string>();
  40. for (var j = 0; j < input.Count; j++)
  41. {
  42. var pow = (int)Math.Pow(2,j);
  43. if ((pow & i) == pow)
  44. {
  45. currentSet.Add(input[j]);
  46. }
  47. }
  48. returnValue.Add(currentSet);
  49. }
  50. return returnValue;
  51. }
  52.  
  53. bool ContainsAllLetters(List<string> input)
  54. {
  55. for (char c = 'a'; c <= 'z'; c++)
  56. {
  57. if (!input.Any(x=>x.ToLower().Contains(c.ToString())))
  58. {
  59. return false;
  60. }
  61. }
  62. return true;
  63. }
  64.  
  65. }
  66.  
  67.  
  68. [TestFixture]
  69. public class PangramsTests
  70. {
  71. [Test]
  72. public void GetPowerSet_GetsCorrectPowerset()
  73. {
  74. var pangram = new Pangrams();
  75. List<string> input=new List<string>{"a", "b"};
  76. var powerset = pangram.GetPowerSet(input);
  77. // powerset should be {}, {"a"}, {"b"}, {"a", "b"}
  78. Assert.AreEqual(4, powerset.Count);
  79. }
  80.  
  81. [Test]
  82. public void FindPangrams_FindsJockNymphs()
  83. {
  84. var pangram=new Pangrams();
  85. List<string> input = "Jock nymphs waqf drug vex blitz".Split(' ').ToList();
  86. var result = pangram.FindPangrams(input);
  87. Assert.AreEqual(1,result.Count);
  88. }
  89.  
  90. [Test]
  91. public void FindPangrams_FindsTwoForJcokJockNymphs()
  92. {
  93. var pangram = new Pangrams();
  94. List<string> input = "Jock Jcok nymphs waqf drug vex blitz".Split(' ').ToList();
  95. var result = pangram.FindPangrams(input);
  96. Assert.AreEqual(2, result.Count);
  97. }
  98. }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement