Seu desafio hoje é implementar uma funcionalidade do tipo t9 .
Você implementará uma função que terá apenas 2 parâmetros.
Você receberá 1 número de telefone em uma sequência e o conteúdo de um arquivo de texto com uma lista de palavras (não assuma um estilo específico de nova linha).
Você pode usar o link https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt para testar a funcionalidade ou usar /usr/share/dict/words
(marque Um arquivo de texto com uma lista de palavras [fechada] para mais em formação).
Você pode assumir que sempre receberá pelo menos 2 números.
Dado o número, você lerá uma lista de palavras e retornará as palavras que começam com as letras mapeadas para essas palavras. Isso significa que a entrada deve ser apenas números de 2 a 9.
Você pode fazer o que quiser se receber uma entrada inválida.
Se nenhuma correspondência for encontrada, você poderá retornar uma lista vazia, null
/ nil
ou 0
.
Lembre-se de que as teclas do telefone celular são mapeadas para seus caracteres equivalentes:
- 0 e 1 são inválidos
- 2 correspondências [abc]
- 3 combinados [def]
- 4 correspondências [ghi]
- 5 correspondências [jkl]
- 6 correspondências [mno]
- 7 correspondências [pqrs]
- 8 correspondências [tuv]
- e 9 correspondências [wxyz]
Exemplos:
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
Depois de executar sua função, você pode imprimi-la da maneira que desejar.
Regras:
- As brechas padrão são INVÁLIDAS
- Você deve retornar algo, mesmo que seja
null
/nil
Javascript retornaráundefined
se você não retornar algo, portanto, esta regra. - Você não pode usar ou reimplementar as respostas de outras pessoas ou copiar minha implementação.
- Você pode assumir, para Javascript, que o navegador já estará aberto e que o
innerText
/textContent
do elemento automático será passado como o segundo parâmetro - Para linguagens compiladas, você não pode passar argumentos especiais para o compilador
- Você pode receber o nome do arquivo pelos argumentos do compilador
- Variáveis, macros, variáveis globais, constantes, classes não padrão e toda a classificação que passa outros valores dentro da função serão consideradas inválidas.
- Em Javascript, variáveis sem a palavra-chave
var
invalidam seu código - Sua função será nomeada
f
- Você pode ter apenas 2 argumentos em sua função
- Tente manter seu código em 500 segundos para executar.
- Você não precisa se preocupar com espaço em branco
- Você deve usar apenas caracteres imprimíveis ASCII .
Exceções são idiomas que usam apenas caracteres não imprimíveis (APL e espaço em branco são 2 exemplos).
Pontuação:
- Menor número de bytes ganhos
- Ter caracteres imprimíveis ASCII inválidos em sua resposta contará como a resposta sendo codificada em UTF-32.
A exceção à codificação fará com que sua resposta seja contada por caracteres . - Apenas o corpo da função conta, não conte mais nada que você faça fora dele
- Bônus de -30% se você criar um sistema de previsão com base na vizinhança ou nas palavras mais comuns
- Bônus de -20% em tamanho, se você retornar apenas as 5 primeiras correspondências para cada letra correspondente ao primeiro número (por exemplo: 245 retornaria 5 palavras começando com 'a', 5 começando com 'b' e 5 começando com 'c' )
Aqui está um exemplo de implementação, 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 executá-lo, abra o link da lista e execute, por exemplo:
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]
Este exemplo foi testado e funciona no Opera 12.17 64bits no Windows 7 Home Edition 64bits.