Las diezcientas palabras más comunes

9

Esta pregunta está escrita porque "Thing Explainer" es divertido de leer y me dio una idea.

Escriba "cosas que hacen que la computadora haga cosas" que lee / toma un conjunto de letras, números y cosas como esta "#%|?y devuelve True / 1si todas las palabras son parte de este conjunto .

Si todas las palabras no son parte de ese conjunto, devuelva las palabras que no fueron parte de él.


Este sitio web puede considerarse correcto en todos los casos. Las reglas están escritas para seguir las especificaciones de ese sitio.


Ejemplos:

Verdad :

El código debe devolver un valor verdadero si todo el texto sobre la primera línea horizontal se pega como entrada.

Las siguientes líneas deben devolver un valor verdadero (la entrada está separada por ###)

This returns "Hello, World!"
###
tHiS rEtUrNs TrUe...
###
Thing Explainer is a book written by a man.
The man writes books with simple words.
###
This set of stuff "#!^{>7( must return true

Falsey- :

En los siguientes ejemplos, la entrada y la salida están separadas por ***. Los diferentes casos de prueba están separados por ###.

This code doesn't return "Hello, World!"
***
code
###
tHiS rEtUrN"s false...
***
s
false

Reglas más detalladas:

  • Puede usar esto para probar su código.
  • Las no letras se interpretan como espacios por el código, a excepción de palabras como 'wasn't'. Las palabras con apóstrofos que regresan truese incluyen en la lista
    • Por ejemplo: foo123bardebería regresar fooy bar, dado que no son parte de la lista, y 123pueden interpretarse como espacios
  • La entrada solo contendrá puntos de código ASCII imprimibles [10, 32-126].
  • Las palabras pueden contener letras mayúsculas y minúsculas. Ver segundo caso de prueba.
  • La lista de palabras
    • debe tomarse como entrada (STDIN, argumento de función o equivalente)
    • se puede modificar (las palabras se pueden separar por nueva línea, coma, etc., y puede ordenar la lista)
    • Tenga en cuenta que no puede usar esta lista (no es idéntica)
  • La salida puede estar en cualquier formato que desee
  • La salida puede ser mayúscula, inferior o mixta (opcional)
  • No habrá símbolos en la salida.

Para el registro, Jonathan Allan encontró un extraño caso de esquina: la implementación en XKCD en realidad ignorará cualquier letra después de un apóstrofe hasta el siguiente no [AZ] [az] ['], por ejemplo find's found, y find'qazxswedc found'ambos no devuelven nada, mientras que find'qazx.swedc founddevuelve swedc.

Puede elegir si no desea devolver nada find'qazxswedc found'o volver qazxswedc. Volviendo qazx, swedca find'qazx.swedctambién está bien.

Stewie Griffin
fuente
Sin embargo, no estoy seguro de que sea un tonto. Su desafío es ligeramente diferente, ya que necesita devolver las palabras no simples. Y, a su favor, en realidad tiene una especificación normal escrita en inglés cotidiano. codegolf.stackexchange.com/questions/53323/…
James
Para un lenguaje de tipo estático que no puede expresar un tipo de retorno de Booleano Array<String>, ¿sería permisible devolver una matriz / lista vacía?
CAD97
@ CAD97 para el caso donde todas las palabras son simples? Puede seleccionar cómo desea mostrar el valor verdadero, puede ser un entero / cadena 1. No se permite una salida vacía.
Stewie Griffin
Estoy confundido por la nueva explicación de las reglas para la find'qazxswedcentrada. ¿Estamos o no debemos dividirnos en apóstrofes? Por ejemplo, isn'tdevuelve true(está en la lista), pero isndevuelve isn, ya que eso no está en la lista. A partir de esa lógica, fui con "no dividir en apóstrofes" y así find'qazxswedc foundregresa find'qazxswedc.
AdmBorkBork

Respuestas:

2

PowerShell v3 +, 105 92 bytes

param($a,$b)$x=@();-split($b-replace"[^a-zA-Z']",' ')|%{if($_-notin$a){$x+=$_}};($x,1)[!$x]

Toma palabras simples como $ay palabras similares $b. Hace ayudante $x. Tome cada palabra $by deshágase de cualquier letra no mala, luego verifique cada una |{...}. Si esa palabra no está $a, entonces la agregamos a $x. Al final, elegimos $xo 1no $x. Eso se envía, ya sea wordso 1.

Algunas palabras para probar

PS C:\Tools\Scripts\golfing> ('This returns "Hello, World!"','tHiS rEtUrNs TrUe...','Thing Explainer is a book written by a man.
The man writes books with simple words.','This set of stuff "¤!^¤>7\ must return true'|%{"$_";(.\ten-hundred-most-common-words.ps1 (gc .\ten-hundred-most-common-words.txt) $_)})-join"`n###`n"
This returns "Hello, World!"
###
1
###
tHiS rEtUrNs TrUe...
###
1
###
Thing Explainer is a book written by a man.
The man writes books with simple words.
###
1
###
This set of stuff "¤!^¤>7\ must return true
###
1

PS C:\Tools\Scripts\golfing> ("This code doesn't returns Hello, World!",'tHiS rEtUrN"s false...'|%{"$_`n***`n"+(.\ten-hundred-most-common-words.ps1 (gc .\ten-hundred-most-common-words.txt) $_)})-join"`n###`n"
This code doesn't returns Hello, World!
***
code
###
tHiS rEtUrN"s false...
***
s false
AdmBorkBork
fuente
2

Python, 93 bytes

import re
lambda w,s:[w for w in re.sub("[^'\w]|\d|_",' ',w).split()if w.lower()not in s]or 1

Todos los casos de prueba están en ideone

El preprocesamiento de la lista es dividirlo |y ponerlo en un set(lo que imagino que está bien si se permite la clasificación previa). Ingrese palabras como wy el conjunto como s.

Si eso no está permitido, esto se convierte en 98 bytes con el not in sdevenir not in set(s).

Podríamos preprocesarlo para que también tenga todas las permutaciones de caracteres en mayúsculas y minúsculas y guardar 8 bytes, pero creo que eso podría estar yendo demasiado lejos (sería un conjunto enorme).

Jonathan Allan
fuente