Die zehnhundert häufigsten Wörter

9

Diese Frage wurde geschrieben, weil "Thing Explainer" Spaß macht und mir eine Idee gab.

Schreiben Sie "Dinge, die den Computer dazu bringen, Dinge zu tun", die eine Reihe von Buchstaben, Zahlen und ähnlichen Dingen lesen / nehmen "#%|?und zurückgeben, True / 1wenn alle Wörter Teil dieser Menge sind .

Wenn nicht alle Wörter Teil dieses Satzes sind, geben Sie die Wörter zurück, die nicht Teil davon waren.


Diese Website kann in jedem Fall als korrekt angesehen werden. Die Regeln sind so geschrieben, dass sie den Spezifikationen auf dieser Site entsprechen.


Beispiele:

Wahrheit :

Der Code sollte einen wahrheitsgemäßen Wert zurückgeben, wenn der gesamte Text über der ersten horizontalen Zeile als Eingabe eingefügt wird.

Die folgenden Zeilen sollten einen wahrheitsgemäßen Wert zurückgeben (Eingabe wird durch getrennt ###)

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 :

In den folgenden Beispielen werden Eingabe und Ausgabe durch getrennt ***. Verschiedene Testfälle sind durch getrennt ###.

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

Detailliertere Regeln:

  • Sie können dies verwenden , um Ihren Code zu testen.
  • Nicht-Buchstaben werden vom Code als Leerzeichen interpretiert, mit Ausnahme von Wörtern wie 'wasn't'. Die Wörter mit Apostrophen, die zurückgegeben truewerden , sind in der Liste enthalten
    • Zum Beispiel: foo123barsollte zurückgeben foound bar, da sie nicht Teil der Liste sind und 123als Leerzeichen interpretiert werden können
  • Die Eingabe enthält nur druckbare ASCII-Codepunkte [10, 32-126].
  • Wörter können gemischte Groß- und Kleinschreibung enthalten. Siehe zweiter Testfall.
  • Die Liste der Wörter
    • sollte als Eingabe verwendet werden (STDIN, Funktionsargument oder Äquivalent)
    • kann geändert werden (Wörter können durch Zeilenumbruch, Komma usw. getrennt werden, und Sie können die Liste sortieren)
    • Beachten Sie, dass Sie diese Liste nicht verwenden können (sie ist nicht identisch).
  • Die Ausgabe kann in einem beliebigen Format erfolgen
  • Die Ausgabe kann in Groß-, Klein- oder Großbuchstaben erfolgen (optional).
  • Die Ausgabe darf keine Symbole enthalten

Für die Aufzeichnung fand Jonathan Allan einen seltsamen Eckfall: Die Implementierung auf XKCD ignoriert tatsächlich alle Buchstaben nach einem Apostroph bis zum nächsten Nicht-[AZ] [az] ['] - find's foundund find'qazxswedc found'beide geben nichts zurück, während find'qazx.swedc foundzurückgegeben wird swedc.

Sie können wählen, ob Sie nichts zurückgeben find'qazxswedc found'oder zurückgeben möchten qazxswedc. Die Rückgabe qazx, swedcfür find'qazx.swedcist ebenfalls in Ordnung.

Stewie Griffin
quelle
Ich bin nicht positiv , es ist ein Betrogene though. Ihre Herausforderung ist etwas anders, da Sie die nicht einfachen Wörter zurückgeben müssen. Und zu Ihren Gunsten haben Sie tatsächlich eine normale Spezifikation, die in alltäglichem Englisch geschrieben ist. codegolf.stackexchange.com/questions/53323/…
James
Wäre für eine statisch typisierte Sprache, die keinen Rückgabetyp von Booleanoder ausdrücken kann Array<String>, die Rückgabe eines leeren Arrays / einer leeren Liste zulässig?
CAD97
@ CAD97 für den Fall, dass alle Wörter einfach sind? Sie können auswählen, wie der Wahrheitswert angezeigt werden soll. Es kann sich um eine Ganzzahl / Zeichenfolge handeln 1. Eine leere Ausgabe ist nicht zulässig.
Stewie Griffin
Ich bin verwirrt von der neuen Erklärung der Regeln für die find'qazxswedcEingabe. Sollen wir uns nicht von Apostrophen trennen? Zum Beispiel gibt isn'tzurück true(es ist in der Liste), isnkehrt aber zurück isn, da dies nicht auf der Liste steht. Aus dieser Logik ging ich mit "Nicht auf Apostrophe spalten" und kehrte so find'qazxswedc foundzurück find'qazxswedc.
AdmBorkBork

Antworten:

2

PowerShell v3 +, 105 92 Byte

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

Nimmt einfache Wörter wie $aund Wörter wie $b. Hilft $x. Nehmen Sie jedes Wort auf $bund entfernen Sie alle schlechten Buchstaben, und überprüfen Sie dann jedes einzelne |{...}. Wenn dieses Wort nicht enthalten ist $a, fügen wir es hinzu $x. Am Ende wählen wir $xoder 1nicht $x. Das wird entweder wordsoder gesendet 1.

Einige Worte zum Ausprobieren

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
quelle
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

Alle Testfälle sind ideone

Die Vorverarbeitung der Liste besteht darin, sie aufzuteilen |und in eine zu setzen set(was meiner Meinung nach in Ordnung ist, wenn eine Vorsortierung zulässig ist). Geben Sie Wörter als wund die Menge als ein s.

Wenn das nicht erlaubt ist, werden dies mit dem not in sWerden 98 Bytes not in set(s).

Wir könnten es vorverarbeiten, um alle Permutationen von Groß- und Kleinbuchstaben zu haben und 8 Bytes zu sparen, aber ich denke, das könnte zu weit gehen (das wäre eine riesige Menge).

Jonathan Allan
quelle