Escriba un programa o función que le dé una cadena (o el equivalente de su idioma), determine si la cadena es una palabra o no, y genere un valor verdadero o falso.
(Esto no es un duplicado de ¿Es esto incluso una palabra? Las palabras incorrectas se generan de una manera muy diferente que creo que hace de este un desafío completamente diferente)
Todas las palabras estarán en minúsculas, entre 5 y 10 caracteres, y no tendrán apóstrofes.
Las palabras correctas son un subconjunto seleccionado al azar de la lista de palabras en inglés SCOWL (tamaño 50).
Las palabras incorrectas se generan a través de dos métodos: intercambio y sustitución.
Las palabras "intercambiables" se generan usando un shuffle modificado de Fisher-Yates en las letras de palabras (reales) seleccionadas al azar. En lugar de intercambiar las letras cada vez, una letra puede o no intercambiarse (la probabilidad varía, por lo que algunas palabras serán más realistas que otras). Si la nueva palabra coincide con una palabra existente, el resultado se descarta y genera otra palabra.
Las palabras de "sustitución" se generan utilizando un método similar, pero en lugar de intercambiar la letra con otra letra, cada letra tiene la posibilidad de ser reemplazada por otra letra aleatoria.
Cada método se utiliza para generar el 50% de las palabras falsas.
Puntuación
Su función debe ser inferior a 150 bytes . La puntuación se determina de la siguiente manera:
percentage of answers correct + ((150 - length of program) / 10)
Reglas
Como se trata de una gran cantidad de casos de prueba (cada lista de palabras tiene 1000 palabras), un programa de prueba automatizado está bien. El probador automatizado no cuenta para la duración del programa; sin embargo, debe publicarse para que otros puedan probarlo.
- No hay escapatorias.
- Sin ortografía / diccionario integrado incorporado.
Recursos
Lista de palabras: http://pastebin.com/Leb6rUvt
Lista de no palabras (actualizado) : http://pastebin.com/rEyWdV7S
Otros recursos (lista de palabras SCOWL y el código utilizado para generar las palabras al azar): https://www.dropbox.com/sh/46k13ekm0zvm19z/AAAFL25Z8ogLvXWTDmRwVdiGa?dl=0
fuente
quais
,paves
,colic
,supermax
. (Nota alsupermax
Respuestas:
PHP, 64,9 (50%, 1 byte)
Bueno, no estoy realmente seguro de si esta es una respuesta aceptable, pero aquí va:
Corre así:
Obviamente, para una lista igualmente grande de palabras correctas e incorrectas, esto da como resultado un 50% de falsos positivos y un 0% de falsos negativos, por lo que el 50% es correcto. Sin embargo, como el programa es de 1 byte, obtienes la bonificación de longitud máxima posible (a pesar de las respuestas de longitud cero).
fuente
CJam, 78,6 (78,5%, 149 bytes)
Coincide 696 palabras reales y no coincide con 874 no palabras, dando
1570/2000 = 0.785
. Probado en el intérprete en línea en Chrome: no estoy seguro de si el enlace permanente funcionará en Firefox. En caso de que no sea así, la cadena, que contiene elementos no imprimibles, se puede obtener medianteEl programa simplemente codifica la entrada y realiza una búsqueda basada en 1077 cubos posibles. Intenté regex golfing esto, pero las no palabras estaban demasiado cerca de las palabras reales para que fuera útil.
Pruébalo en línea! El | Conjunto de pruebas (pegue la lista de palabras completa para contar el número de coincidencias)
fuente
Mathematica, 69.35 (69.35%, 150 bytes)
Explicación
La función verificará si la palabra contiene ciertos pares de letras que rara vez ocurren en palabras reales. Si es así, la función volverá
True
, lo que indica que la palabra probablemente no sea una palabra real. Por ejemplo, el par"ii"
aparece 21 veces en la lista de no palabras, mientras que no aparece en la lista de palabras.Tasa correcta
fuente
CSharp, 69.85 (57.45%, 26 bytes)
Compruebo si la segunda letra de la palabra está en la lista de las segundas letras más populares en inglés ( de este sitio ).
Prueba automatizada:
Resultado:
Cálculo:
fuente
ES6, 76 (67.4%, 64 bytes)
Una respuesta más seria esta vez. Este es un algoritmo bastante simple. Devuelve un valor verdadero cuando el segundo carácter de una palabra es uno de
aeinoru
. No produce una proporción de éxito significativamente mejor que solo1
, pero aún es muy corto.Prueba aquí.
&!
con>
qxy
, agregando segundos caracteres más válidos (comunes) para compensar los falsos negativos, eliminando la coma redundante en expresiones regularesfiopq
fuente