Sha256: e86fb75cde78550bb527c72a1858ff48bc7f640b20d83ebedb523c0e16534c17

Contents?: true

Size: 1.37 KB

Versions: 139

Compression:

Stored size: 1.37 KB

Contents

class Anagram {
  List<String> findAnagrams(String subject, List<String> candidates) {
    Map<String, int> subjectCharsMap = countCharacters(subject);

    List<String> matchTracker = new List<String>();

    for (String possible in candidates) {
      if (possible.toLowerCase() != subject.toLowerCase()) {
        Map<String, int> possibleCharMap = countCharacters(possible);

        if (mapsMatch(subjectCharsMap, possibleCharMap)) {
          matchTracker.add(possible);
        }
        possibleCharMap.clear();
      }
    }

    return matchTracker;
  }

  Map<String, int> countCharacters(String word) {
    Map<String, int> charTracker = new Map<String, int>();

    for (int counter = 0; counter < word.length; counter++) {
      var key = word[counter].toLowerCase();

      charTracker[key] = charTracker.containsKey(key) ? charTracker[key] + 1 : 1;
    }

    return charTracker;
  }
}

bool mapsMatch(Map<String, int> subjectCharsMap, Map<String, int> possibleCharMap) {
  List<bool> trackingMatches = new List<bool>();

  for (String key in possibleCharMap.keys) {
    if (subjectCharsMap.containsKey(key)) {
      trackingMatches.add(subjectCharsMap[key] == possibleCharMap[key]);
    } else {
      return false;
    }
  }

  for (bool result in trackingMatches) {
    if (result == false) {
      return false;
    }
  }

  return trackingMatches.length == subjectCharsMap.length;
}

Version data entries

139 entries across 139 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.179 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.178 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.177 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.176 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.175 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.174 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.173 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.172 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.171 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.170 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.169 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.167 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.166 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.165 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.164 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.163 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.162 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.161 tracks/dart/exercises/anagram/lib/example.dart
trackler-2.2.1.160 tracks/dart/exercises/anagram/lib/example.dart