Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
43
Task/Anagrams/Fantom/anagrams.fantom
Normal file
43
Task/Anagrams/Fantom/anagrams.fantom
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
class Main
|
||||
{
|
||||
// take given word and return a string rearranging characters in order
|
||||
static Str toOrderedChars (Str word)
|
||||
{
|
||||
Str[] chars := [,]
|
||||
word.each |Int c| { chars.add (c.toChar) }
|
||||
return chars.sort.join("")
|
||||
}
|
||||
|
||||
// add given word to anagrams map
|
||||
static Void addWord (Str:Str[] anagrams, Str word)
|
||||
{
|
||||
Str orderedWord := toOrderedChars (word)
|
||||
if (anagrams.containsKey (orderedWord))
|
||||
anagrams[orderedWord].add (word)
|
||||
else
|
||||
anagrams[orderedWord] = [word]
|
||||
}
|
||||
|
||||
public static Void main ()
|
||||
{
|
||||
Str:Str[] anagrams := [:] // map Str -> Str[]
|
||||
// loop through input file, adding each word to map of anagrams
|
||||
File (`unixdict.txt`).eachLine |Str word|
|
||||
{
|
||||
addWord (anagrams, word)
|
||||
}
|
||||
// loop through anagrams, keeping the keys with values of largest size
|
||||
Str[] largestKeys := [,]
|
||||
anagrams.keys.each |Str k|
|
||||
{
|
||||
if ((largestKeys.size < 1) || (anagrams[k].size == anagrams[largestKeys[0]].size))
|
||||
largestKeys.add (k)
|
||||
else if (anagrams[k].size > anagrams[largestKeys[0]].size)
|
||||
largestKeys = [k]
|
||||
}
|
||||
largestKeys.each |Str k|
|
||||
{
|
||||
echo ("Key: $k -> " + anagrams[k].join(", "))
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue