Files
freeCodeCamp/curriculum/challenges/german/22-rosetta-code/rosetta-code-challenges/soundex.md
2024-01-24 19:52:36 +01:00

3.6 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5a23c84252665b21eecc8017 Soundex 1 302320 soundex

--description--

Soundex Algorithm deals with the intentions of the words. It creates a representation for similar sounding words.

Sie wird für die Suche nach Namen und Adressen verwendet. Das bedeutet, dass die Person, die den Namen eingetragen hat, sich darauf konzentrieren kann, wie er klingt, anstatt die Schreibweise von Namen zu korrigieren.

Zum Beispiel:

Wenn du den Namen Quenci zum ersten Mal hörst und ihn falsch geschrieben hast, erhälst du Soundex code Q520.

Wenn du den Namen Quincy das nächste Mal richtig buchstabieren, erhalten Sie immer noch den gleichen Code Q520, das bedeutet, dass du mehrere Namensaussprachen mit ein und derselben Person verknüpfen kannst, ohne jede Schreibweise hinzufügen zu müssen.

Hier sind die Regeln:

  • If a vowel (A, E, I, O, U) separates two consonants that have the same soundex code, the consonant to the right of the vowel is coded. Tymczak is coded as T-522 (T, 5 for the M, 2 for the C, Z ignored (see "Side-by-Side" rule above), 2 for the K). Since the vowel "A" separates the Z and K, the K is coded.
  • Wenn "H" oder "W" zwei Konsonanten trennen, die den gleichen Soundex-Code haben, wird der Konsonant rechts vom Vokal nicht kodiert. Beispiel: Ashcraft hat den Code A-261 (A, 2 für das S, C ignoriert, 6 für das R, 1 für das F). Sie ist nicht mit A-226 codiert.

--instructions--

Schreibe eine Funktion, die einen String als Parameter nimmt und den kodierten String zurückgibt.

--hints--

soundex sollte eine Funktion sein.

assert(typeof soundex == 'function');

soundex("Soundex") sollte einen String zurückgeben.

assert(typeof soundex('Soundex') == 'string');

soundex("Soundex") sollte "S532" zurückgeben.

assert.equal(soundex('Soundex'), 'S532');

soundex("Example") sollte "E251" zurückgeben.

assert.equal(soundex('Example'), 'E251');

soundex("Sownteks") sollte "S532" zurückgeben.

assert.equal(soundex('Sownteks'), 'S532');

soundex("Ekzampul") sollte "E251" zurückgeben.

assert.equal(soundex('Ekzampul'), 'E251');

soundex("Euler") sollte "E460" zurückgeben.

assert.equal(soundex('Euler'), 'E460');

soundex("Gauss") sollte "G200" zurückgeben.

assert.equal(soundex('Gauss'), 'G200');

soundex("Hilbert") sollte "H416" zurückgeben.

assert.equal(soundex('Hilbert'), 'H416');

soundex("Knuth") sollte "K530" zurückgeben.

assert.equal(soundex('Knuth'), 'K530');

soundex("Lloyd") sollte "L300" zurückgeben.

assert.equal(soundex('Lloyd'), 'L300');

soundex("Lukasiewicz") sollte "L222" zurückgeben.

assert.equal(soundex('Lukasiewicz'), 'L222');

--seed--

--seed-contents--

function soundex(s) {

}

--solutions--

function soundex(s) {
  var a = s.toLowerCase().split('');
  var f = a.shift(),
    r = '',
    codes = {
      a: '',
      e: '',
      i: '',
      o: '',
      u: '',
      b: 1,
      f: 1,
      p: 1,
      v: 1,
      c: 2,
      g: 2,
      j: 2,
      k: 2,
      q: 2,
      s: 2,
      x: 2,
      z: 2,
      d: 3,
      t: 3,
      l: 4,
      m: 5,
      n: 5,
      r: 6
    };
  r =
    f +
    a
      .map(function(v, i, a) {
        return codes[v];
      })
      .filter(function(v, i, a) {
        return i === 0 ? v !== codes[f] : v !== a[i - 1];
      })
      .join('');

  return (r + '000').slice(0, 4).toUpperCase();
}