Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using NUnit.Framework;
- namespace Pangrams
- {
- public class Pangrams
- {
- public List<List<string>> FindPangrams(List<string> input)
- {
- var powerset = GetPowerSet(input);
- var returnValue = new List<List<string>>();
- foreach (var set in powerset)
- {
- if (GetSetLength(set) == 26 && ContainsAllLetters(set))
- {
- returnValue.Add(set);
- }
- }
- return returnValue;
- }
- private int GetSetLength(List<string> list)
- {
- return list.Sum(x => x.Length);
- }
- // bitmask & 1 (101 & 1) === 1 / (100 & 1) === 0
- // bitmask >> 1
- // biitmask << 1
- // {quick, brown}
- public List<List<string>> GetPowerSet(List<string> input)
- {
- var returnValue = new List<List<string>>();
- for (int i = 0; i < Math.Pow(2,input.Count) ; i++)
- {
- var currentSet = new List<string>();
- for (var j = 0; j < input.Count; j++)
- {
- var pow = (int)Math.Pow(2,j);
- if ((pow & i) == pow)
- {
- currentSet.Add(input[j]);
- }
- }
- returnValue.Add(currentSet);
- }
- return returnValue;
- }
- bool ContainsAllLetters(List<string> input)
- {
- for (char c = 'a'; c <= 'z'; c++)
- {
- if (!input.Any(x=>x.ToLower().Contains(c.ToString())))
- {
- return false;
- }
- }
- return true;
- }
- }
- [TestFixture]
- public class PangramsTests
- {
- [Test]
- public void GetPowerSet_GetsCorrectPowerset()
- {
- var pangram = new Pangrams();
- List<string> input=new List<string>{"a", "b"};
- var powerset = pangram.GetPowerSet(input);
- // powerset should be {}, {"a"}, {"b"}, {"a", "b"}
- Assert.AreEqual(4, powerset.Count);
- }
- [Test]
- public void FindPangrams_FindsJockNymphs()
- {
- var pangram=new Pangrams();
- List<string> input = "Jock nymphs waqf drug vex blitz".Split(' ').ToList();
- var result = pangram.FindPangrams(input);
- Assert.AreEqual(1,result.Count);
- }
- [Test]
- public void FindPangrams_FindsTwoForJcokJockNymphs()
- {
- var pangram = new Pangrams();
- List<string> input = "Jock Jcok nymphs waqf drug vex blitz".Split(' ').ToList();
- var result = pangram.FindPangrams(input);
- Assert.AreEqual(2, result.Count);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement