Sha256: 5fb8bd5239099091feace96996833e16757ad6a1fea7453e9260c6cef58aac67

Contents?: true

Size: 733 Bytes

Versions: 349

Compression:

Stored size: 733 Bytes

Contents

import
  algorithm, sequtils, strutils

type TAnagram = tuple
  word: string
  chars: seq[char]  # the lowercased and sorted chars of the word

proc isAnagramTo(a, b: TAnagram): bool {.noSideEffect, procVar.} =
  a.chars == b.chars and cmpIgnoreCase(a.word, b.word) != 0

proc anagram(word: string): TAnagram =
  var chars = toSeq(word.toLower().items)
  sort(chars, cmp[char])
  (word, chars)

proc detectAnagrams*(word: string, candidates: seq[string]): seq[string] =
  ## Returns a sequence of those `candidates` that are anagrams of `word`.
  ##
  ## .. code-block:: nimrod
  ##   assert detectAnagrams("Ant", @["tan", "ant"]) == @["tan"]
  let reference = anagram(word)
  candidates.filterIt(anagram(it).isAnagramTo(reference))

Version data entries

349 entries across 349 versions & 1 rubygems

Version Path
trackler-2.2.1.132 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.131 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.130 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.129 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.128 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.127 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.126 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.125 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.124 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.123 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.122 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.121 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.120 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.119 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.118 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.117 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.116 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.115 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.114 tracks/nim/exercises/anagram/example.nim
trackler-2.2.1.113 tracks/nim/exercises/anagram/example.nim