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

3.4 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.

Es usada para buscar names y addresses. Esto significa que la persona que llenó el name, puede enfocarse en como suena en lugar de corregir la pronunciación de names.

Por ejemplo:

Si estás escuchando el nombre Quenci por primera vez, y mal ingresado obtendrás el código Soundex Q520.

Cuando deletreas correctamente el nombre Quincy la próxima vez, aún obtendrás el mismo código Q520, lo que significa que tu puedes enlazar multiples pronunciaciones de nombre sobre el mismo person sin la necesidad de agregar cada deletreo.

Aquí están las reglas:

  • 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.
  • Si la "H" o "W" separan dos consonantes que tienen el mismo código, la consonante a la derecha de la vocal no es codificada. Ejemplo: Ashcraft es codificado A-261 (A, 2 para la S, C es ignorado, 6 para la R, 1 para la F). No es codificado A-226.

--instructions--

Escribe una función Write que tome una cadena como un parámetro y devuelva la cadena codificada.

--hints--

soundex debe ser una función.

assert(typeof soundex == 'function');

soundex("Soundex") debe devolver una cadena.

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

soundex("Soundex") debe devolver "S532".

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

soundex("Example") debe devolver "E251".

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

soundex("Sownteks") deb retornar "S532".

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

soundex("Ekzampul") debe devolver "E251".

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

soundex("Euler") debe devolver "E460".

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

soundex("Gauss") debe devolver "G200".

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

soundex("Hilbert") debe devolver "H416".

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

soundex("Knuth") debe devolver "K530".

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

soundex("Lloyd") debe devolver "L300".

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

soundex("Lukasiewicz") debe devolver "L222".

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();
}