Su desafío hoy es implementar una funcionalidad similar a t9 .
Implementará una función que solo tendrá 2 parámetros.
Recibirá 1 número de teléfono en una cadena y el contenido de un archivo de texto con una lista de palabras (no asuma un estilo específico de nueva línea).
Puede usar el enlace https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt para probar la funcionalidad, o usar /usr/share/dict/words
(consulte un archivo de texto con una lista de palabras [cerrado] para obtener más información) información).
Puede suponer que siempre recibirá al menos 2 números.
Dado el número, leerá de una lista de palabras y devolverá las palabras que comienzan con el mapeo de letras a esas palabras. Esto significa que la entrada debe ser solo números del 2 al 9.
Puede hacer lo que quiera si recibe una entrada no válida.
Si no se encuentra ninguna coincidencia, puede devolver una lista vacía, null
/ nil
o 0
.
Recuerde que las teclas del teléfono celular se asignan a sus caracteres equivalentes:
- 0 y 1 no son válidos
- 2 partidos [abc]
- 3 coincidentes [def]
- 4 partidos [ghi]
- 5 coincidencias [jkl]
- 6 partidos [mno]
- 7 coincidencias [pqrs]
- 8 partidos [tuv]
- y 9 coincidencias [wxyz]
Ejemplos:
f('52726')
//returns ["Japan","japan","Japanee","Japanese","Japanesque"...,"larbowlines"]
f('552')
//returns ["Kjeldahl","kjeldahlization","kjeldahlize"...,"Lleu","Llew"]
f('1234')
//makes demons fly out your nose or divide by 0
f('9999')
//returns ["Zyzzogeton"]
f('999999')
//returns [] or null/nil or 0
Después de ejecutar su función, puede imprimirla de la forma que desee.
Reglas:
- Las lagunas estándar son inválidas
- Debe devolver algo, incluso si es
null
/nil
Javascript devolveráundefined
si no devuelve algo, por lo tanto, esta regla. - No puede usar o volver a implementar las respuestas de otros ni copiar mi implementación.
- Puede suponer, para Javascript, que el navegador ya estará abierto y que el
innerText
/textContent
del elemento automático se pasará como el segundo parámetro - Para lenguajes compilados, no puede pasar argumentos especiales al compilador
- Puede recibir el nombre del archivo sobre los argumentos del compilador
- Las variables, macros, variables globales, constantes, clases no estándar y todo el tipo que pasa otros valores dentro de la función se considerarán inválidas.
- En Javascript, las variables sin la palabra
var
clave invalidan su código - Su función será nombrada
f
- Solo puedes tener 2 argumentos en tu función
- Intenta mantener tu código por debajo de 500 segundos para ejecutarlo.
- No tiene que preocuparse por los espacios en blanco.
- Debe usar solo caracteres imprimibles ASCII .
Las excepciones son idiomas que solo usan caracteres no imprimibles (APL y espacios en blanco son 2 ejemplos).
Puntuación:
- El menor número de bytes gana
- Tener caracteres imprimibles ASCII no válidos en su respuesta contará como la respuesta codificada en UTF-32.
La excepción a la codificación hará que su respuesta se cuente por caracteres . - Solo cuenta el cuerpo de la función, no cuentes nada más que hagas fuera de él
- Bonificación de -30% si realiza un sistema de predicción basado en el vecindario o las palabras más comunes
- Bono de -20% si solo devuelve las primeras 5 coincidencias para cada letra correspondiente al primer número (por ejemplo: 245 devolvería 5 palabras que comienzan con 'a', 5 que comienzan con 'b' y 5 que comienzan con 'c' )
Aquí hay un ejemplo de una implementación, usando Javascript:
function f(phone, words)
{
var keypad=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];
var regex='';
for(var i=0,l=phone.length;i<l;i++)
{
regex+='['+keypad[phone[i]]+']';
}
var regexp=new RegExp('\\s('+regex+'[a-z]*)\\s','gi');
return words.match(regexp);
}
Para ejecutarlo, abra el enlace de la lista y ejecute, por ejemplo:
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]
Este ejemplo fue probado y funciona bajo Opera 12.17 64bits en Windows 7 Home Edition 64bits.