Bestimmen Sie anhand einer Zeichenfolge als Eingabe, ob es sich um ein Substantiv handelt oder nicht.
Sie werden anhand der 1000 häufigsten englischen Wörter bewertet, je nachdem, wie viele Sie als Substantiv richtig bezeichnen oder nicht.
Das Programm oder die Funktion, die die meisten dieser Wörter in 50 Bytes oder weniger richtig klassifiziert, gewinnt.
Substantive
Ein Substantiv ist ein Wort, das typisch für eine Sache ist. Es wird komplexer, aber das ist die Grundidee.
In Fällen, in denen ein Wort entweder ein Substantiv oder ein anderer Teil der Sprache sein könnte, habe ich es als Substantiv klassifiziert, auch wenn dies eine seltene Verwendung ist. Oder ich überlasse es dieser Site, dies für mich zu tun.
Bei den Wörtern, für die Sie eine Punktzahl erhalten, handelt es sich um die 1000 gebräuchlichen Wörter aus der einfachen Wikipedia , denen "zwei" und "einmal" hinzugefügt wurden. Dies sind die 586 Substantive und die 414 Nicht-Substantive . Alle drei Listen finden Sie hier . Beachten Sie, dass alle diese Eingaben in Kleinbuchstaben erfolgen. Diese Listen sind endgültig - versuchen Sie nicht, über Grammatik zu streiten.
Ihr Programm wird als korrekt betrachtet, wenn es ein wahres Ergebnis für eine Eingabe ausgibt, die ein Substantiv ist, und ein falsches Ergebnis für eine Eingabe, die kein Substantiv ist.
Feinheiten:
Programme müssen eine deterministische Ausgabe haben. Wenn Sie Zufälligkeit verwenden möchten, setzen Sie sie ein. Programme dürfen keine eingebauten Nomenlisten oder andere eingebaute Sprachfunktionen verwenden.
Beispiele:
a: noun
act: noun
active: noun
about: non-noun
above: non-noun
across: non-noun
Bitte geben Sie in Ihrer Antwort an, wie hoch die Erfolgsquote Ihres Programms ist. Das Programm oder die Funktion von höchstens 50 Bytes mit der höchsten Erfolgsrate gewinnt. Im Falle eines Unentschieden entscheidet die niedrigste Byteanzahl über einen Gewinner. Viel Glück!
[bcdf-mp-tvwy]
entspricht[^aenouxz]
. Eine Änderung würde 4 Bytes einsparen, von denen ein Großbuchstabe verwendet werden könnte.[^aenouz]
weil wir kein Wort haben, das mit a beginntx
.Jelly , 48 Bytes, 731 Punkte
Dies ist meine allererste Antwort in Jelly und ich habe mir große Mühe gegeben, diese zusammenzustellen. Na ja ... das hat Spaß gemacht. :-)
Dank @JonathanAllan wurde 1 Byte gespeichert
Probieren Sie es online!
Aufschlüsselung und Testsuiten
Wie?
Wir berechnen zuerst einen Hash der Eingabezeichenfolge durch:
Dies lässt uns einen Index in [0 ... 255] und unterteilt somit alle Wörter in 256 Gruppen.
Für jede Gruppe von Wörtern wird ein binäres Flag vorberechnet,
1
wenn die Gruppe mehr Substantive als Nicht-Substantive enthält, und0
ansonsten. Dies führt zu einer 256-Bit-Zahl N , die wir als Nachschlagetabelle verwenden werden. Wir speichern es als Base-250-codierte Zeichenfolge.Unten ist die binäre Darstellung von N .
Welches kann als
“Ạ$ⱮẊḲḲLÑMṆụ⁻ẉṂ`ŻvḤæɠ5ṭȯƁU*×TdƲḥ`’
in Gelee gespeichert werden .Daher der Code:
quelle
O‘ḅ⁹%⁽€Oæ»4“Ạ$ⱮẊḲḲLÑMṆụ⁻ẉṂ`ŻvḤæɠ5ṭȯƁU*×TdƲḥ`’æ»Ḃ
(beachten Sie auch, dass Sie die Fußzeile auf TIO verwenden können, ich würde mitÇ€¬S,L
undǀS,L
für Ihre zwei Testsuiten gehen.JavaScript (ES6), 50 Bytes, 693 Punkte
Nur nach möglichen Mustern suchen, die Nicht-Nomen haben, die Nomen aber nicht haben.
Nicht-Nomen enthalten häufiger:
Snippet:
Code-Snippet anzeigen
quelle
/h|n/
(oder durch Ausführen von/^.[hn]/.test(s)
) und einen anderens[2]>''
in entweder!!s[2]
oder ändern2 in s
.a.p
überflüssig, da du es schon hast[aouz]
?[aouz]
wird nur am Anfang der Zeichenfolge abgeglichen. Aus welchem Grund auch immer, das Testen auf einea.p
beliebige Stelle in der Zeichenfolge verbessert die Punktzahl.Jelly , 50 Bytes , 763 Punkte
Verwende jetzt einen Hash (ähnlich wie Arnauld's Jelly-Antwort )
Probieren Sie es online!
250/414 für Nicht-Substantive
513/586 für Substantive
Gesamt = 250 + 513 = 763.
Wie?
Erstellt eine Tabelle mit 308 Einträgen, entweder 1 (Identifizieren eines Substantivs) oder 0 (Identifizieren eines Nicht-Substantivs), und indiziert sie mithilfe eines Schlüssels, der von einer Hash-Funktion bereitgestellt wird, die das Produkt der Ordinalzahlen des Eingabeworts verwendet:
Zurück:
5047 Bytes , Ergebnis 684Eine monadische Verknüpfung, die ein Wort aufnimmt und eine Liste mit einem Zeichen (wahr) zurückgibt, wenn das Wort als Substantiv identifiziert wird, oder eine leere Liste oder eine Null (beide falsch), wenn dies nicht der Fall ist.
Probieren Sie es online! (Die Fußzeile führt ein if else aus, um das Ergebnis auszudrucken
Noun
oderNon-Noun
)... oder sehen Sie sich das Bewertungsprogramm an (zählt wahrheitsgemäße Indizes über die beiden Listen und berechnet dann die Punktzahl).
Aufschlüsselung der Punkte: 462/586 Substantive korrekt identifiziert (124 inkorrekt), 222/414 Nicht-Substantive korrekt identifiziert (192 inkorrekt) - total korrekt = 684/1000.
Wie?
Ich denke, es ist kein Substantiv, wenn ...
'be', 'th', 'le', 'he', 'm ', 'ev', 'et', 's ', 'fl', 'ax', 'en', 'fo', 'am', 'az'
(Anmerkung:'m '
und's '
ist hier nur Kompression zu erleichtern, aber sie scheinen sowieso nie)aenouyz
(obwohl dies umgekehrt implementiert ist und mit einem Überschuss an Großbuchstaben)... da die Worte alle Länge zwischen 1 und 11 der -299 - ten Index entspricht Verwenden der Zuordnung der Länge zum Index:
{7:2; 8:5; 9:7; 11:9; else 1}
13 Bytes, Score: 638
Ein erster kurzer Schlag (oben erweitert)
quelle
0,-2
bedeutet nicht, dasspair zero with -2
es bedeutetliteral [0, -2]
0,-2
Nilad, nicht getrennt(0)(,)(-2)
... natürlich ist es in diesem Fall der gleiche Effekt, aber nicht immer. Ich habe das auf die harte Tour gelernt ... und auf jeden Fall würde ich lieber erklären, was tatsächlich passiert, als etwas mit dem gleichen Effekt oder so.j
"?pair
oderjoin
sind offensichtlich falsche Wege Begriff es, da0,-2,-6
zum Beispiel bedeutet nicht ,pair 0 with -2 and then pair that with -6 = [[0, -2], -6]
sondern es eher Mittelliteral [0, -2, -6]
. Ich verstehe , das,
Atom und das...,...(,...(...))
Literal sind verwirrend ... aber es0,-2,-6
ist nicht ganz dasselbe,0,-2;-6
da das erstere 1 Link und das letztere 3 Links ist.Julia 34bytes, 609
f(w)=hash(w)&0x0800000000004808>0
Ich wollte mit dem eingebauten Hash Zeichen sparen. Ich habe das Gefühl, dass es einen Weg geben muss, dies besser zu machen. Julia ist einfach nicht freundlich genug mit den Bit-Banging-Operationen, mit denen ich das verbessern möchte, denke ich.
Das Finden geeigneter Bitmasken für den Hash, um sie zu trennen, ist ein interessantes Spiel.
quelle
Python 2 , 50 Bytes, Genauigkeit: 596
Probieren Sie es online!
Überprüft einfach den ersten Buchstaben, die Länge und ob "st" im Wort enthalten ist. Code geht davon aus, dass das Wort als x definiert ist. (Bearbeiten: Dank an issacg für das Korrigieren des Codes vom Snippet zur Funktion.)
quelle
Haskell, 36 Bytes,
626631quelle
length x>2&&(x!!0`notElem`"aenou"||x!!1`elem`"acqrsty")
2-Level-Logikgatter-Implementierung, nicht 50 Bytes, Punktzahl 1000
Verbinden Sie einfach die Binärdarstellung des angegebenen Wortes mit den 88 Eingängen
Die Schaltung gibt 1 zurück, wenn das Wort ein Substantiv ist, und 0, wenn nicht
Diese Implementierung benötigt
Einige Messungen
Volle Auflösung Circuit.pdf hier
Volle Auflösung Circuit.png hier
quelle
Python 3, 50 Bytes, 602 Punkte
Python ist nicht die ausführlichste Sprache, aber 50 Bytes sind schwierig.
quelle