Sie sollten ein Programm oder eine Funktion schreiben, die die Sprache eines bestimmten Wortes bestimmt.
Die Aufgabe besteht darin, einige der 5000 häufigsten Wörter in 4 Sprachen zu erkennen:
- Englisch
- Deutsche
- Italienisch
- ungarisch
Die Wortlisten finden Sie in diesem GitHub-Repository.
In 40% der bereitgestellten Testfälle dürfen Sie Fehler machen . Dh Sie können 8000 der 20000 Eingänge falsch kategorisieren.
Einzelheiten
- Die Listen enthalten
a-z
also zB nur Wörter mit Kleinbuchstabenwon't
undmöchte
sind nicht enthalten. - Einige Wörter werden in mehreren Sprachen angezeigt, was bedeutet, dass Ihr Code die erwartete Ausgabe nicht immer richtig erraten kann.
- Der Einfachheit halber können Sie alle Testfälle als eine Liste herunterladen . In jeder Zeile gibt eine Zahl die Sprache des Wortes an. (
1
für Englisch,2
für Deutsch,3
für Italienisch und4
für Ungarisch.) - Standardlücken sind nicht zulässig.
- Das Verwenden von Wortlisten und ähnlichen Daten, die von Ihrer Programmiersprache bereitgestellt werden, ist verboten.
Eingang
- Eine Zeichenfolge, die nur englische Kleinbuchstaben (az) enthält.
- Der Zeilenumbruch ist optional.
Ausgabe
- Sie können die Wörter kategorisieren, indem Sie für jede Sprache eine eindeutige und konsistente (immer gleiche) Ausgabe bereitstellen. (ZB
1
für Englisch,2
für Deutsch,3
für Italienisch und4
für Ungarisch.)
Dies ist Codegolf, also gewinnt das kürzeste Programm oder die kürzeste Funktion.
Verwandte Code Golf Frage: Ist das überhaupt ein Wort?
Die Wortlisten stammen von wiktionary.org und 101languages.net.
code-golf
natural-language
word
classification
randomra
quelle
quelle
all_languages
Datei enthält Dutzende von großgeschriebenen Wörtern (Mr
,Gutenberg
usw.) und die Nichtwörter "" (leere Zeichenfolge) und "]] | -". Ich gehe davon aus, dass es in Ordnung ist, ersteres in Kleinbuchstaben zu schreiben und letzteres zu löschen.Antworten:
Netzhaut , 51 Bytes
Ich habe mir die Regexes ausgedacht und @ MartinBüttner hat die Umstellung auf / Golfen in Retina so ... Hurra für die Teamleistung?
Die Zuordnung erfolgt
1 -> Italian, 2 -> German, (empty) -> Hungarian, 4 -> English
, wobei der Betrag in jede Kategorie eingeordnet ist4506 + 1852 + 2092 + 3560 = 12010
.Probieren Sie es online! | Geänderte mehrzeilige Version
Erläuterung
Zuallererst ist das äquivalente Python ungefähr so:
Lass mich das einfach sagen
o$
ein ausgezeichneter Indikator für Italienisch ist.Die Retina-Version ist ähnlich, wobei Paare von Linien Ersatzstufen bilden. Zum Beispiel die ersten beiden Zeilen
Ersetzt Übereinstimmungen der ersten Zeile durch den Inhalt der zweiten.
Die nächsten drei Zeilen machen dasselbe, aber
A`
wenn Sie den Anti-Grep-Modus von Retina verwenden - Anti-Grep (angegeben mit ) entfernt die Zeile, wenn sie mit dem angegebenen regulären Ausdruck übereinstimmt, und die folgenden zwei Zeilen ersetzen eine leere Zeile durch die gewünschte Ausgabe.Die folgende Zeile verwendet wieder anti-grep, ersetzt jedoch nicht die leere Zeile und gibt die feste Ausgabe für Ungarisch aus.
Zum Schluss die letzten beiden Zeilen
ersetzt eine nicht leere nichtstellige Zeile durch
4
. Alle Ersetzungen können nur erfolgen, wenn keine vorherige Ersetzung aktiviert wurde, wodurch eineif/else if
Kette simuliert wird.quelle
LabVIEW, 29 LabVIEW-Grundelemente und 148.950 Bytes
Durchläuft die Sprachen und fügt den Iterator in ein Array ein, wenn das Wort vorhanden ist. Dies wird durch die innere Schleife überprüft, indem die i-te Zeile ausgewählt und ausgeführt wird
=
. In LabVIEW gibt es nur dann ein true, wenn die Strings genau gleich sind.Nehmen Sie nun das erste Element des Ausgabe-Arrays, damit Englisch über den Rest geht.
Die Ausgabe ist vorerst
0
für Englisch,1
Deutsch,2
Italienisch und3
Ungarisch.quelle
Java, 3416 Byte, 62%
Dies ist meine Lösung, ich analysiere die Liste der gegebenen Wörter und finde 60 Bigramme und Trigramme für jede Sprache. Jetzt überprüfe ich meine n-Gramme gegen Wort und wähle Sprache mit den meisten n-Grammen im Wort.
und das ist mein Testfall
quelle