Dada uma string como entrada, determine se é um substantivo ou não.
Você será pontuado nas 1000 palavras em inglês mais comuns, por quantas você rotula corretamente como um substantivo ou não.
O programa ou função que classificar corretamente a maioria dessas palavras em 50 bytes ou menos vencerá.
Substantivos
Um substantivo é uma palavra que representa uma coisa, normalmente. Fica mais complexo, mas essa é a ideia básica.
Nos casos em que uma palavra poderia ser um substantivo ou alguma outra parte do discurso, eu a classifiquei como substantivo, mesmo que esse seja um uso raro. Ou, na verdade, deixei este site fazer isso por mim.
As palavras nas quais você será pontuado são essas 1000 palavras comuns , que são da Wikipedia simples , com "dois" e "uma vez" adicionados. Desses, esses são os 586 substantivos e esses são os 414 não-substantivos . Você pode encontrar todas as três listas aqui . Observe que todas essas entradas estão em minúsculas. Essas listas são finais - não tente discutir gramática.
Seu programa será considerado correto se gerar um truthy resultado de uma entrada que é um substantivo, e um resultado Falsas de uma entrada que não é um substantivo.
Sutilezas:
Os programas devem ter uma saída determinística. Se você deseja usar a aleatoriedade, semeie-a. Os programas não têm permissão para usar listas de substantivos embutidas ou outras funcionalidades integradas de parte da fala.
Exemplos:
a: noun
act: noun
active: noun
about: non-noun
above: non-noun
across: non-noun
Indique qual é a taxa de sucesso do seu programa na sua resposta. O programa ou função de no máximo 50 bytes com a maior taxa de sucesso vence. Em caso de empate, a menor contagem de bytes determinará um vencedor. Boa sorte!
[bcdf-mp-tvwy]
é equivalente à classe[^aenouxz]
. Uma alteração economizaria 4 bytes, os quais poderiam ser capitalizados.[^aenouz]
porque não temos nenhuma palavra que comece com ax
.Geléia , 48 bytes, pontuação 731
Esta é a minha primeira resposta em Jelly e tive muitos problemas para montar isso. Ah, bem ... isso foi divertido. :-)
1 byte salvo graças a @JonathanAllan
Experimente online!
Conjuntos de análise e detalhamento
Quão?
Primeiro calculamos um hash da string de entrada:
Isso nos deixa com um índice em [0 ... 255] e, portanto, divide todas as palavras em 256 grupos.
Para cada grupo de palavras, pré-calculamos uma flag binária, que é
1
se o grupo contiver mais substantivos que não substantivos, e0
caso contrário. Isso leva a um número N de 256 bits que vamos usar como uma tabela de pesquisa. Nós o armazenamos como uma string codificada na base 250.A seguir é a representação binária de N .
Que pode ser armazenado como
“Ạ$ⱮẊḲḲLÑMṆụ⁻ẉṂ`ŻvḤæɠ5ṭȯƁU*×TdƲḥ`’
no Jelly.Daí o código:
fonte
O‘ḅ⁹%⁽€Oæ»4“Ạ$ⱮẊḲḲLÑMṆụ⁻ẉṂ`ŻvḤæɠ5ṭȯƁU*×TdƲḥ`’æ»Ḃ
(note também que você pode usar o rodapé na TIO, eu iria comÇ€¬S,L
eǀS,L
para seus dois conjuntos de testes.JavaScript (ES6), 50 bytes, pontuação 693
Apenas procurando por possíveis padrões que os não substantivos tenham e que os substantivos não.
Os substantivos não contêm mais frequentemente:
Snippet:
Mostrar snippet de código
fonte
/h|n/
(ou executando/^.[hn]/.test(s)
) e outro alterandos[2]>''
para!!s[2]
ou2 in s
.a.p
redundante, pois você já possui[aouz]
?[aouz]
é igualado apenas quando no início da cadeia. Por qualquer motivo, o teste paraa.p
qualquer lugar da string melhora a pontuação.Geléia , 50 bytes , pontuação 763
Usando um hash agora (bem como a resposta da geléia de Arnauld )
Experimente Online!
250/414 para Não-substantivos
513/586 para Substantivos
Total = 250 + 513 = 763.
Quão?
Constrói uma tabela com 308 entradas, 1 (identificando um substantivo) ou 0 (identificando um não substantivo) e indexa-a usando uma chave fornecida por uma função hash que utiliza o produto dos ordinais da palavra de entrada:
Anterior:
5047 bytes , pontuação 684Um link monádico que pega uma palavra e retorna uma lista de um caractere (verdade) se a palavra é identificada como um substantivo, ou uma lista vazia ou zero (ambos falsey), se não for.
Experimente online! (o rodapé executa um if else no resultado para imprimir
Noun
ouNon-Noun
)... ou veja o programa de pontuação (contabiliza índices de verdade nas duas listas e depois calcula a pontuação).
Repartição da pontuação: 462/586 substantivos identificados corretamente (124 incorretos), 222/414 não substantivos corretamente identificados (192 incorretos) - total correto = 684/1000.
Quão?
Acho que não é um substantivo se ...
'be', 'th', 'le', 'he', 'm ', 'ev', 'et', 's ', 'fl', 'ax', 'en', 'fo', 'am', 'az'
(nota:'m '
e's '
está aqui apenas para facilitar a compactação, mas eles nunca aparecem de qualquer maneira)aenouyz
(embora este é implementado inversamente e com letras maiúsculas em excesso)... desde que as palavras têm comprimento entre 1 e 11 a -299 º índice é equivalente para usar o comprimento para mapear o mapeamento:
{7:2; 8:5; 9:7; 11:9; else 1}
13 bytes, pontuação: 638
Uma primeira festança rápida (estendida acima)
fonte
0,-2
não significa quepair zero with -2
isso significaliteral [0, -2]
0,-2
é um nilad, não é separado(0)(,)(-2)
... é claro que é o mesmo efeito neste caso, mas nem sempre. Aprendi isso da maneira mais difícil ... e, seja qual for o caso, prefiro explicar o que realmente acontece, em vez de algo com o mesmo efeito ou algo assim.j
"?pair
oujoin
são obviamente maneiras erradas de expressá-lo, uma vez que,0,-2,-6
por exemplo, não significa,pair 0 with -2 and then pair that with -6 = [[0, -2], -6]
mas significaliteral [0, -2, -6]
. Entendi , o,
átomo e o...,...(,...(...))
literal são confusos ... mas stilll0,-2,-6
não é exatamente o mesmo que0,-2;-6
o primeiro é um link e o segundo, três links.Julia 34bytes, 609
f(w)=hash(w)&0x0800000000004808>0
Eu queria economizar em caracteres usando o hash embutido. Eu sinto que deve haver uma maneira de fazer isso melhor. Julia simplesmente não é amigável o suficiente com as operações de troca de bits que quero usar para melhorar isso, eu acho.
Encontrar máscaras de bits adequadas para o hash separá-las é um jogo interessante.
fonte
Python 2 , 50 bytes, precisão: 596
Experimente online!
Simplesmente verifica a primeira letra, o comprimento e se "st" está na palavra Code assume que a palavra está definida como x (Edit: Graças a issacg por corrigir o código do snippet para funcionar)
fonte
Haskell, 36 bytes,
626631fonte
length x>2&&(x!!0`notElem`"aenou"||x!!1`elem`"acqrsty")
Implementação de porta lógica em dois níveis, não 50 bytes, pontuação 1000
Basta conectar a representação binária da palavra dada às 88 entradas
O circuito retorna 1 se a palavra é um substantivo e retorna 0 se não
Essa implementação precisa
Algumas medições
Circuit.pdf em resolução total aqui
Circuit.png em resolução total aqui
fonte
Python 3, 50 bytes, pontuação 602
Python não é a linguagem mais detalhada, mas 50 bytes são difíceis.
fonte