algo for checking more then 2 cobos -> SLOW
This commit is contained in:
parent
d71eb795d7
commit
4c9023445a
62
Program.cs
62
Program.cs
@ -1,24 +1,52 @@
|
|||||||
class Program {
|
class Program
|
||||||
static void Main() {
|
{
|
||||||
// get all the words form the text file and put them into a hasset
|
static void Main()
|
||||||
|
{
|
||||||
|
// Read all words from the input.txt file and store them in a hash set for quick lookup
|
||||||
var words = new List<string>(File.ReadAllLines("input.txt"));
|
var words = new List<string>(File.ReadAllLines("input.txt"));
|
||||||
var wordSet = new HashSet<string>(words);
|
var wordSet = new HashSet<string>(words);
|
||||||
|
|
||||||
// Find all combos that forn a 6 letter word and make sure we dont have duplicates
|
// Find all combinations that form a 6-letter word
|
||||||
var seenCombinations = new HashSet<string>();
|
var combos = new HashSet<string>();
|
||||||
var combos = words.SelectMany(
|
FindCombinations(words, new List<string>(), 0, wordSet, combos);
|
||||||
word1 => words.Where(word2 => word1 != word2),
|
|
||||||
(word1, word2) => new { word1, word2, combinedWord = word1 + word2 }
|
|
||||||
).Where(
|
|
||||||
x => x.combinedWord.Length == 6 && wordSet.Contains(x.combinedWord)
|
|
||||||
).Where(
|
|
||||||
x => seenCombinations.Add($"{x.word1}+{x.word2}")
|
|
||||||
).Select(
|
|
||||||
x => $"{x.word1}+{x.word2}={x.combinedWord}"
|
|
||||||
).ToList();
|
|
||||||
|
|
||||||
// echo out all found words
|
// Print out all found combinations
|
||||||
combos.ForEach(Console.WriteLine);
|
foreach (var combo in combos)
|
||||||
|
{
|
||||||
|
Console.WriteLine(combo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void FindCombinations(List<string> words, List<string> currentCombination, int currentLength, HashSet<string> wordSet, HashSet<string> combos)
|
||||||
|
{
|
||||||
|
// If the current combination forms a 6-letter word, add it to the result list
|
||||||
|
if (currentLength == 6)
|
||||||
|
{
|
||||||
|
string combinedWord = string.Join("", currentCombination);
|
||||||
|
if (wordSet.Contains(combinedWord))
|
||||||
|
{
|
||||||
|
string result = $"{string.Join("+", currentCombination)}={combinedWord}";
|
||||||
|
if (combos.Add(result)) // Adds to the set and checks for uniqueness
|
||||||
|
{
|
||||||
|
Console.WriteLine(result); // Echo out the found combination
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try adding each word to the current combination
|
||||||
|
foreach (var word in words)
|
||||||
|
{
|
||||||
|
// Skip if adding the word would exceed 6 characters
|
||||||
|
if (currentLength + word.Length > 6)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the word to the current combination and recurse
|
||||||
|
currentCombination.Add(word);
|
||||||
|
FindCombinations(words, currentCombination, currentLength + word.Length, wordSet, combos);
|
||||||
|
currentCombination.RemoveAt(currentCombination.Count - 1); // Backtrack
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -13,7 +13,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("6letterwordexercise")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("6letterwordexercise")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7a30bacb68910559e2c2bc33337d57c1364a1b60")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d71eb795d7a7de915bd319b60249ee90f2bc5538")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("6letterwordexercise")]
|
[assembly: System.Reflection.AssemblyProductAttribute("6letterwordexercise")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("6letterwordexercise")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("6letterwordexercise")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
@ -1 +1 @@
|
|||||||
38d39cd6b0bba17b8e33dc8144efa9e3646f6745189f6a226aa41ca2ccf216ba
|
68c131bf4bbdc8c6ee3c840269c62122d679fae9c2f5cb638dc03527d6749d88
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user