Les dix cents mots les plus courants

9

Cette question est écrite parce que "Thing Explainer" est amusant à lire et m'a donné une idée.

Écrivez "des trucs qui font faire des choses à l'ordinateur" qui lit / prend un ensemble de lettres, de chiffres et d'autres choses comme ça "#%|?et retourne True / 1si tous les mots font partie de cet ensemble .

Si tous les mots ne font pas partie de cet ensemble, renvoyez les mots qui n'en faisaient pas partie.


Ce site Web peut être considéré comme correct dans tous les cas. Les règles sont écrites pour suivre les spécifications de ce site.


Exemples:

Vérité :

Le code doit retourner une valeur véridique si tout le texte au-dessus de la première ligne horizontale est collé en entrée.

Les lignes suivantes doivent renvoyer une valeur véridique (l'entrée est séparée par ###)

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 :

Dans les exemples suivants, l'entrée et la sortie sont séparées par ***. Différents cas de test sont séparés par ###.

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

Des règles plus détaillées:

  • Vous pouvez utiliser ce pour tester votre code.
  • Les non-lettres sont interprétées comme des espaces par le code, à l'exception des mots comme 'wasn't'. Les mots avec des apostrophes renvoyés truesont inclus dans la liste
    • Par exemple: foo123bardevrait retourner fooet bar, comme ils ne font pas partie de la liste, et 123peuvent être interprétés comme des espaces
  • L'entrée ne contiendra que des points de code ASCII imprimables [10, 32-126].
  • Les mots peuvent contenir des minuscules. Voir deuxième cas de test.
  • La liste des mots
    • doit être pris en entrée (STDIN, argument de fonction ou équivalent)
    • peut être modifié (les mots peuvent être séparés par une nouvelle ligne, une virgule, etc., et vous pouvez trier la liste)
    • Notez que vous ne pouvez pas utiliser cette liste (elle n'est pas identique)
  • La sortie peut être dans n'importe quel format que vous aimez
  • La sortie peut être majuscule, minuscule ou mixte (facultatif)
  • Il ne doit pas y avoir de symboles dans la sortie

Pour mémoire, Jonathan Allan a trouvé un cas de coin étrange: l'implémentation sur XKCD ignorera en fait toutes les lettres après une apostrophe jusqu'à la prochaine non [AZ] [az] ['] - par exemple find's found, et les find'qazxswedc found'deux ne renvoient rien, tandis que les find'qazx.swedc foundretours swedc.

Vous pouvez choisir si vous ne voulez rien find'qazxswedc found'retourner ou retourner qazxswedc. De retour qazx, swedcpour find'qazx.swedcest OK.

Stewie Griffin
la source
Je ne suis pas positif , il est dupe bien. Votre défi est légèrement différent, car vous devez renvoyer les mots non simples. Et, en votre faveur, vous avez en fait une spécification normale écrite en anglais courant. codegolf.stackexchange.com/questions/53323/…
James
Pour un langage de type statique qui ne peut pas exprimer un type de retour de Booleanou Array<String>, le retour d'un tableau / liste vide serait-il autorisé?
CAD97
@ CAD97 pour le cas où tous les mots sont simples? Vous pouvez sélectionner la façon dont vous souhaitez afficher la valeur véridique, il peut s'agir d'un entier / chaîne 1. Une sortie vide n'est pas autorisée.
Stewie Griffin
Je suis confus par la nouvelle explication des règles pour l' find'qazxswedcentrée. Sommes-nous ou ne sommes-nous pas censés nous diviser sur les apostrophes? Par exemple, isn'trenvoie true(il est dans la liste), mais isnretourne isn, car ce n'est pas sur la liste. Dans cette logique, je suis allé avec "ne pas diviser sur les apostrophes" et find'qazxswedc foundrevient donc find'qazxswedc.
AdmBorkBork

Réponses:

2

PowerShell v3 +, 105 92 octets

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

Prend des mots simples comme $aet des mots comme $b. Rend aide $x. Prenez chaque mot $bet débarrassez-vous de toutes les mauvaises lettres, puis vérifiez chacune |{...}. Si ce mot n'est pas là $a, alors nous l'ajoutons à $x. A la fin, on choisit $xou 1non $x. Cela est envoyé, soit wordsou 1.

Quelques mots à essayer

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
la source
2

Python, 93 octets

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

Tous les cas de test sont à idéone

Le prétraitement de la liste consiste à la diviser |et à la mettre dans un set(ce qui, je suppose, est bien si le pré-tri est autorisé). Saisissez les mots en tant que wet définissez en tant que s.

Si cela n'est pas autorisé, cela devient 98 octets avec not in sdevenant not in set(s).

Nous pourrions le prétraiter pour avoir également toutes les permutations de caractères majuscules et minuscules et économiser 8 octets, mais je pense que cela pourrait aller trop loin (ce serait un énorme ensemble).

Jonathan Allan
la source