-
-
Save felipernb/1148717 to your computer and use it in GitHub Desktop.
var merge_recursive = function(a, res) { | |
if (!Array.isArray(res)) res = []; | |
// Using BFS algorithm as if it was a tree | |
for (var i = 0; i < a.length; i++) { | |
if (Array.isArray(a[i])) { | |
merge_recursive(a[i], res); | |
} else { | |
res.push(a[i]); | |
} | |
} | |
return res; | |
} | |
var vowel_max_counter = function(arr) { | |
var tokens = merge_recursive(arr); | |
var count_different_vowels = function(str) { | |
var vowel_variations = [/[aáãàâä]/, /[eéêèë]/, /[iíîìï]/, | |
/[oóõòôö]/, /[uúùûü]/]; | |
var different_vowels = 0; | |
for (var i = 0; i < vowel_variations.length; i++) { | |
if (str.match(vowel_variations[i])) { | |
different_vowels++; | |
} | |
} | |
return different_vowels; | |
}; | |
var max = 0; | |
var different_vowels; | |
for (var i = 0; i < tokens.length; i++) { | |
max = Math.max(count_different_vowels(tokens[i]), max); | |
} | |
return max; | |
} | |
console.info(vowel_max_counter(["hola", ["soy", ["juan", "fernandez"] ], "y", ["no", "tengo", ["dinero"] ] ])); |
Creo interesante comentar que en este caso estás utilizando String.prototype.match
con expresiones regulares no globales .
var vowel_variations = [/[aáãàâä]/, /[eéêèë]/, /[iíîìï]/,/[oóõòôö]/, /[uúùûü]/];
Esto es equivalente a ejecutar RegExp.prototype.exec
con esa misma expresión regular no global. En consecuencia lo único que podemos encontrar es una vocal por cadena. Permite contar el número de vocales distintas pero no realizar un estudio estadístico de la aparición de las vocales. De todas formas, dicha estadística no es un requerimiento de la propuesta.
Para mejorar un poco más sugiero la sustitución de String.prototype.match
por RegExp.prototype.test
if (vowel_variations[i].test(str)) different_vowels++;
Pero, que mas dá si la idea es solo saber si la vocal se encuentra en la string? Es incluso mas rapido que buscar todas las ocurrencias. Consigues ver algún caso de prueba en que falla?
Observa que escribí:
De todas formas, dicha estadística no es un requerimiento de la propuesta.
Uno de los propósitos del comentario anterior es servir de apoyo a otro comentario en http://jsperf.com/gejs-estadistica-de-vocales/3 (observa el título: Estadistica de Vocales ;)
En http://jsperf.com/gejs-estadistica-de-vocales/4 podemos apreciar lo inconveniente que resulta utilizar RegExp.prototype.exec
si lo único que queremos realizar es una comprobación de matching y no nos interesa ningún detalle de éste. En estos casos sin duda, lo que hay que utilizar es RegExp.prototype.test
.
Me alegra verlo ;)