Schreiben Sie ein Programm oder eine Funktion, die eine Zeichenfolge (oder das Äquivalent Ihrer Sprache) enthält, bestimmen Sie, ob die Zeichenfolge ein Wort ist oder nicht, und geben Sie einen wahrheitsgemäßen oder falschen Wert aus.
(Dies ist kein Duplikat von Ist dies überhaupt ein Wort? Die falschen Wörter werden auf eine ganz andere Weise generiert, die meiner Meinung nach eine völlig andere Herausforderung darstellt.)
Die Wörter werden alle in Kleinbuchstaben zwischen 5 und 10 Zeichen geschrieben und haben keine Apostrophe.
Die richtigen Wörter sind eine zufällig ausgewählte Teilmenge der englischen SCOWL-Wortliste (Größe 50).
Die falschen Wörter werden auf zwei Arten generiert: Tauschen und Ersetzen.
Die "Austausch" -Wörter werden unter Verwendung eines modifizierten Fisher-Yates-Shuffle für die Buchstaben zufällig ausgewählter (realer) Wörter erzeugt. Anstatt die Buchstaben jedes Mal auszutauschen, kann ein Buchstabe ausgetauscht werden oder nicht (die Wahrscheinlichkeit variiert, sodass einige Wörter realistischer sind als andere). Wenn das neue Wort mit einem vorhandenen Wort übereinstimmt, wird das Ergebnis verworfen und ein anderes Wort generiert.
Die "Substitutions" -Wörter werden mit einer ähnlichen Methode erzeugt, aber anstatt den Buchstaben durch einen anderen Buchstaben zu tauschen, hat jeder Buchstabe die Möglichkeit, durch einen anderen zufälligen Buchstaben ersetzt zu werden.
Jede Methode wird verwendet, um 50% der gefälschten Wörter zu generieren.
Wertung
Ihre Funktion muss kleiner als 150 Byte sein . Die Wertung wird wie folgt ermittelt:
percentage of answers correct + ((150 - length of program) / 10)
Regeln
Da es sich um eine große Anzahl von Testfällen handelt (jede Wortliste besteht aus 1000 Wörtern), ist ein automatisiertes Testprogramm in Ordnung. Der automatisierte Tester zählt nicht zur Länge des Programms. Es sollte jedoch veröffentlicht werden, damit andere es testen können.
- Keine Lücken.
- Keine integrierten Funktionen für Rechtschreibung / Wörterbuch.
Ressourcen
Liste der Wörter: http://pastebin.com/Leb6rUvt
Liste der nicht Wörter (aktualisiert) : http://pastebin.com/rEyWdV7S
Andere Ressourcen (SCOWL-Wortliste und der Code, der zum Generieren der zufälligen Wörter verwendet wird): https://www.dropbox.com/sh/46k13ekm0zvm19z/AAAFL25Z8ogLvXWTDmRwVdiGa?dl=0
quelle
quais
,paves
,colic
,supermax
. (Randnotiz: Ich war erfreut herauszufinden, dass diessupermax
ein tatsächliches Wort ist)Antworten:
PHP 64,9 (50%, 1 Byte)
Nun, ich bin mir nicht sicher, ob dies eine akzeptable Antwort ist, aber hier ist:
Laufen Sie so:
Bei einer gleich großen Liste korrekter und falscher Wörter führt dies offensichtlich zu 50% falsch positiven und 0% falsch negativen Ergebnissen, also zu 50% richtig. Da das Programm jedoch 1 Byte umfasst, erhalten Sie den maximal möglichen Längenbonus (ungeachtet der Antworten mit der Länge Null).
quelle
CJam, 78,6 (78,5%, 149 Bytes)
Entspricht 696 echten Wörtern und nicht mit 874 Nichtwörtern
1570/2000 = 0.785
. Getestet auf dem Online-Interpreter in Chrome - Ich bin nicht sicher, ob der Permalink in Firefox funktioniert. Falls dies nicht der Fall ist, kann die Zeichenfolge, die nicht druckbare Dateien enthält, von abgerufen werdenDas Programm hascht lediglich die Eingabe und führt eine Suche basierend auf 1077 möglichen Buckets durch. Ich habe versucht, Regex zu spielen, aber die Nicht-Wörter waren zu nah an echten Wörtern, als dass sie nützlich wären.
Probieren Sie es online aus! | Testsuite (vollständige Wortliste einfügen, um die Anzahl der Übereinstimmungen zu zählen)
quelle
Mathematica, 69,35 (69,35%, 150 Byte)
Erläuterung
Die Funktion prüft, ob das Wort bestimmte Buchstabenpaare enthält, die in echten Wörtern selten vorkommen. In diesem Fall kehrt die Funktion zurück
True
und zeigt an, dass das Wort wahrscheinlich kein echtes Wort ist. Zum Beispiel kommt das Paar"ii"
21 Mal in der Liste der nicht Wörter vor, während es in der Liste der Wörter nicht vorkommt.Richtige Rate
quelle
CSharp, 69,85 (57,45%, 26 Bytes)
Ich überprüfe, ob der zweite Buchstabe des Wortes auf der Liste der beliebtesten zweiten Buchstaben in Englisch steht ( von dieser Seite ).
Automatisierter Test:
Ergebnis:
Berechnung:
quelle
ES6, 76 (67,4%, 64 Byte)
Diesmal eine ernstere Antwort. Dies ist ein ziemlich einfacher Algorithmus. Es gibt einen wahrheitsgemäßen Wert zurück, wenn das zweite Zeichen eines Wortes eines von ist
aeinoru
. Es ergibt keine wesentlich bessere Erfolgsquote als nur1
, aber es ist immer noch sehr kurz.Hier testen.
&!
durch>
qxy
, Hinzufügen von mehr gültigen (allgemeinen) zweiten Zeichen, um falsche Negative zu kompensieren, und Entfernen des redundanten Kommas in Regexfiopq
quelle