Anagram Detector

Level: Beginner 15–30 min

Concepts: AlgorithmsStringsValidation

Solutions: C# | TypeScript | Python


Build an anagram detection system that can check pairs, filter lists, and group words by their anagram sets.

Requirements

Step 1: Pair Detection

Given two words, determine if they are anagrams of each other.

  • An anagram uses exactly the same letters, the same number of times
  • Comparison should be case-insensitive
  • Spaces and punctuation are ignored
  • A word is not an anagram of itself

Examples:

  • "listen" and "silent" → true
  • "hello" and "world" → false
  • "Astronomer" and "Moon starer" → true
  • "rail safety" and "fairy tales" → true
  • "cat" and "cat" → false (same word)

Step 2: Find Anagrams in a List

Given a subject word and a list of candidates, return the candidates that are anagrams of the subject.

subject: "listen"
candidates: ["enlists", "google", "inlets", "banana", "silent"]
result: ["inlets", "silent"]

Step 3: Group Anagrams

Given a list of words, group them by their anagram sets.

input: ["eat", "tea", "tan", "ate", "nat", "bat"]
output: [["eat", "tea", "ate"], ["tan", "nat"], ["bat"]]

Test Cases

Pair detection:

Word AWord BAnagram?
"listen""silent"true
"hello""world"false
"cat""tac"true
"cat""cat"false
"Cat""tac"true
""""false
"a""a"false
"ab""ba"true
"aab""abb"false

Find anagrams:

SubjectCandidatesResult
"listen"["silent", "tinsel"]["silent", "tinsel"]
"listen"["hello", "world"][]
"master"["stream", "maters", "pigeon"]["stream", "maters"]

Group anagrams:

InputGroups
["eat", "tea", "ate"][["eat", "tea", "ate"]]
["abc", "def"][["abc"], ["def"]]
[][]

Bonus

  • Find the longest anagram pair in a dictionary file
  • Detect partial anagrams — words where one is an anagram of a substring of the other
  • Generate all possible anagrams of a given word (permutations that are real words, given a dictionary)

Hint

The key insight: two words are anagrams if they have the same sorted characters. Sorting the letters of "listen" and "silent" both give "eilnst". This sorted form is the anagram “key” — use it for grouping and comparison.

Reference Walkthrough

Reference implementations in C#, TypeScript, and Python live at tddbuddy-reference-katas/anagram-detector. This is an F1 kata — 18 scenarios across three pure functions (pair detection, find-in-list, group), shared across all three languages, built around a single sorted-letters “anagram key” helper.

This kata ships in Agent Full-Bake mode at high gear: the algorithm is small enough to land as one commit per language, with a brief walkthrough noting there are no builders because the algorithm’s inputs and outputs are the domain. Strings and lists of strings go in, booleans and lists of strings come out — no aggregates to construct, no value types to introduce, no collaborators to inject. See the repo’s Gears section for when high gear is the right call.