Você deve escrever um programa ou função que determine o idioma de uma determinada palavra.
A tarefa é reconhecer algumas das 5000 palavras mais comuns em 4 idiomas:
- Inglês
- alemão
- italiano
- húngaro
As listas de palavras podem ser encontradas neste repositório GitHub.
Você pode cometer erros em 40% dos casos de teste fornecidos . Ou seja, você pode categorizar erroneamente 8000 das 20.000 entradas.
Detalhes
- As listas contêm apenas palavras com letras minúsculas,
a-z
por exemplo,won't
emöchte
não estão incluídas. - Algumas palavras aparecem em vários idiomas, o que significa que seu código nem sempre pode adivinhar a saída esperada corretamente.
- Por conveniência, você pode baixar todos os casos de teste como uma lista . Em cada linha, um número indica o idioma da palavra. (
1
para inglês,2
alemão,3
italiano e4
húngaro). - As brechas padrão não são permitidas.
- Usando listas de palavras, nossos dados semelhantes fornecidos pela sua linguagem de programação são proibidos.
Entrada
- Uma sequência contendo apenas letras minúsculas em inglês (az).
- A nova linha à direita é opcional.
Resultado
- Você pode categorizar as palavras fornecendo uma saída distinta e consistente (sempre a mesma) para cada idioma. (Por exemplo,
1
para inglês,2
alemão,3
italiano e4
húngaro.)
Este é um código de golfe, para que o programa ou função mais curto ganhe.
Código relacionado à questão do golfe: isso é mesmo uma palavra?
As listas de palavras foram retiradas de wiktionary.org e 101languages.net.
code-golf
natural-language
word
classification
randomra
fonte
fonte
all_languages
arquivo inclui dezenas de palavras em maiúsculas (Mr
,Gutenberg
etc.) e as não palavras "" (sequência vazia) e "]] | -". Presumo que não há problema em minúsculas o anterior e excluir o último?Respostas:
Retina , 51 bytes
Eu vim com as regexes e @ MartinBüttner fez a conversão para / golfe na Retina, então ... viva para o trabalho em equipe?
O mapeamento é
1 -> Italian, 2 -> German, (empty) -> Hungarian, 4 -> English
, com a quantidade classificada em cada categoria4506 + 1852 + 2092 + 3560 = 12010
.Experimente online! | Versão multilinha modificada
Explicação
Primeiro, o Python equivalente é mais ou menos assim:
Permitam-me apenas dizer que
o$
é um excelente indicador do italiano.A versão Retina é semelhante, com pares de linhas formando estágios de substituição. Por exemplo, as duas primeiras linhas
substitui correspondências da primeira linha pelo conteúdo da segunda.
As próximas três linhas fazem o mesmo, mas o uso do modo anti-grep da Retina - anti-grep (especificado com
A`
) remove a linha se corresponder ao regex especificado, e as duas linhas a seguir substituem uma linha vazia pela saída desejada.A linha a seguir usa o anti-grep novamente, mas não substitui a linha vazia, fornecendo a saída fixa para o húngaro.
Finalmente, as duas últimas linhas
substitui uma linha sem dígito não vazia por
4
. Todas as substituições só podem ocorrer se nenhuma substituição anterior for ativada, simulando umaif/else if
cadeia.fonte
LabVIEW, 29 primitivas do LabVIEW e 148.950 bytes
alterna entre os idiomas e coloca o iterador em uma matriz, se a palavra estiver lá. Isso é verificado pelo loop interno, escolhendo a i-ésima linha e fazendo
=
. No LabVIEW, isso só é verdadeiro se as Strings forem exatamente iguais.Agora pegue o primeiro elemento da matriz de saída para que o inglês passe pelo resto.
A saída agora é
0
para inglês,1
alemão,2
italiano e3
húngaro.fonte
Java, 3416 bytes, 62%
esta é a minha solução, analiso a lista de palavras fornecidas e encontro 60 bigramas e trigramas comuns para cada idioma. Agora, estou verificando meus n gramas contra a palavra e escolhendo o idioma com a maioria dos n gramas na palavra.
e esta é minha caixa de teste
fonte