Ist es einfach oder schwer?

21

Für Ihre schwierige Aufgabe müssen Sie eine Aufgabe für einen Computer erstellen, die herausfindet, ob einige Wörter auf einfache Weise erklärt werden. Etwas wird auf einfache Weise erklärt, wenn es nur die zehnhundert am häufigsten verwendeten Wörter verwendet. Wenn nicht, wird es auf harte Weise erklärt. Dies kann eine vollständige Computersache oder ein Teil einer Computersache sein. (Volles Programm oder Funktion)

Es gibt etwas, das ein Computer lesen kann und das alle zehnhundert Wörter mit einem Leerzeichen zwischen jedem Wort enthält. Der Name des Dings, den der Computer lesen soll, heißt 'most used.txt'. Sie können dieses Ding von diesem Computerplatz nehmen .

Die Person, die den Computer benutzt, gibt einige Wörter ein. (Dies kann aus STDIN, Funktionsargumenten oder Befehlszeilenargumenten stammen.) Der Computer muss so etwas wie ein wahres sagen, wenn die Wörter einfach sind, und so etwas wie ein nicht wahres, wenn es schwer ist. ( Richtig-Falsch ) Die Person, die das Kürzeste für den Computer macht, ist das Beste. Die Dinge, von denen jeder weiß, dass sie schlecht sind, sind schlecht. ( Standardlücken gelten )


Weitere Informationen zur Funktionsweise des Computers:

  • Es ist egal, ob die Wörter GROSS oder klein sind.

  • Die Bilder, die das Erkennen der Bedeutung des Wortes erleichtern (Interpunktion), spielen keine Rolle. Wenn also die Person, die den Computer benutzt, "nicht" sagt, ist es kein anderes Wort als das Wort "nicht". Zahlen und andere Bilder spielen ebenfalls keine Rolle. Wenn die Person also "HE $$ ll9o" sagt, sollte der Computer dies wie "Hallo" lesen.

  • Die kleinen Linien zwischen Wörtern (Bindestrichen) funktionieren genauso wie Leerzeichen. Das Wort "up-goer-five" ist also dasselbe wie das Wort "up-goer five".


Weitere Informationen zum Erstellen von Wörtern wie diesem:

https://xkcd.com/1133/

http://splasho.com/upgoer5/#

DJMcMayhem
quelle
7
Prüfen Sie also, ob die Wörter des Computers, die der Benutzer verwendet, mit denen des großen Wortes übereinstimmen, um festzustellen, ob alle Wörter des kleinen Wortes mit dem großen Wort übereinstimmen.
Geobits
24
Vielleicht bin es nur ich, aber ich fand das außerordentlich schwer zu lesen.
Alex A.
8
Es könnte besser sein, eine Zusammenfassung in einfacher Sprache zu geben, gefolgt von einer tatsächlichen Spezifikation in "echtem" Englisch.
Geobits
2
Muss das Wörterbuch aus einer Datei gelesen werden? Das könnte einige Sprachen ausschließen.
Dennis
1
Sie sollten eine Strafe für jedes Wort haben, das im Programm schwer zu finden ist
Beta Decay

Antworten:

6

CJam, 41 Bytes

q"file:///most used.txt"g]{el_euS--S%}/-!

Dies macht die ziemlich unsaubere Annahme, die most used.txtsich im Stammverzeichnis befindet, da CJam keine relativen Pfade verarbeiten kann.

Alternativ haben wir die folgenden webbasierten Lösungen (78 und 29 Bytes):

q"https://docs.google.com/uc?id=0B2sM8IORrbL3RVpJWTZNUy1rOFU"g]{el_euS--S%}/-!
q"j.mp/-o_O"g]{el_euS--S%}/-!

Die "richtige" Art, dies in CJam zu tun, wäre, beide Eingaben von STDIN zu lesen (Eingabe in der ersten Zeile, Wörterbuch in der zweiten), was in 18 Bytes möglich ist:

qN%{el_euS--S%}/-!

Sie können die letzte Version im CJam-Interpreter testen . (Permalink in Chrome getestet)

Beispiele

$ cjam <(echo 'q"file:///most used.txt"g]{el_euS--S%}/-!') <<< 'ten hundred'; echo
1
$ cjam <(echo 'q"file:///most used.txt"g]{el_euS--S%}/-!') <<< 'thousand'; echo
0
Dennis
quelle
2
Sie könnten tinyurl auf der Drive-URL verwenden, um es kürzer zu machen
DeadChex
1
@MIWright Hat es herausgefunden. Das und das Hochladen der Datei in Pastebin sparte 12 Bytes. Vielen Dank!
Dennis
7

R, 106 Bytes

Ist mir nicht sicher, ob ich die Herausforderung verstehe, weil ich Schwierigkeiten beim Lesen habe.

function(s){u=toupper;all(strsplit(gsub("[^A-Z -']","",u(s)),"[ -]")[[1]]%in%u(scan("most used.txt","")))}

Dadurch wird ein unbenannter Teil eines Computers erstellt, der eine Zeichenfolge akzeptiert und so etwas wie ein wahres oder ein nicht wahres zurückgibt.

Ungolfed + Erklärung:

partOfAComputerThing <- function(s) {
    # Remove everything but letters, spaces, dashes, and single quotes
    s <- gsub("[^A-Z -']", "", toupper(s))

    # Split s into a vector on spaces/dashes
    v <- strsplit(s, "[ -]")[[1]]

    # Read the file of words (assumed to reside in the current directory)
    m <- scan("most used.txt", "")

    # Determine if all words in the input are in the file
    all(v %in% toupper(m))
}

Vielen Dank an Dennis für die Inspiration.

Alex A.
quelle
2
So etwas part-of-a-computer-thing(s){...}sollte Bonuspunkte wert sein.
Dennis
@ Tennis: Wie ist das? :)
Alex A.
Viel besser!
Dennis
3

Python 3, 148 Bytes

import re
print(all(i in open("most used.txt").read().lower().split(' ')for i in re.sub("[^a-z ']+","",input().replace("-"," ").lower()).split(" ")))

Ausgänge TrueundFalse

Beispiele

Input:  Don't
Output: True

Input:  The poison air he's breathing has a dirty smell of dying
Output: False

Input:  Who let the dogs out?
Output: False
Beta-Zerfall
quelle
Wird dies eine Eingabe von don'tkorrekt behandeln?
Alex A.
@AlexA. Es kehrt zurück True. Ist das korrekt?
Beta Decay
Gibt es einen Grund, warum Sie sich most used.txtdurch neue Zeilen getrennt haben? Ich bin nicht 100% sicher, wie das funktioniert, aber ich stelle mir vor, Sie versuchen es in jedes einzelne Wort in der Datei aufzuteilen?
DeadChex
@DeadChex Durch was wird die gelieferte Textdatei getrennt? Ich kann nicht darauf zugreifen, da es immer wieder einen SSL-Fehler auslöst.
Beta Decay
1
Die Frage lautet: "Es gibt etwas, das ein Computer lesen kann und das alle
zehnhundert
2

Pyth, 35 Bytes

!-Fm@LGcrXd\-bZ),zs'"most used.txt

Tests, bei denen das Obige die Datei ist common.pyth

$ pyth common.pyth <<< 'I can write this way too-hell99#0O.'
True
$ pyth common.pyth <<< 'But I get confused easily.'
False

Erläuterung:

!-Fm@LGcrXd\-bZ),zs'"most used.txt
   m            ,zs'"most used.txt    Map over input and input file:
         Xd\-b                        Replace hyphens with newlines.
        r     Z                       Cast to lower case.
       c       )                      Split on whitespace.
    @LG                               Remove non-alphabetic characters.
 -F                                   Setwise difference - remove anything in
                                      the text file from the input.
!                                     Logical negation.
isaacg
quelle
0

APL (Dyalog) , 69 Bytes

Angenommen, die Datei befindet sich im aktuellen Verzeichnis.

s819' '(1↓¨,⊂⍨⊣=,)'[- ]' '\W'R' ' ''
∧/(s⍞)∊s⊃⎕NGET'most used.txt'

Probieren Sie es online!

Die erste Zeile definiert eine Normalisierung und Aufspaltung in-list-of-Strings Helferfunktion, s :

s←s ist
819⌶ das kleingeschrieben
' '( Ergebnis der folgenden Funktion, mit einem Raum , wie linkes Argument ...
1↓¨ fallen je eines aus
, der Verkettung der Argumente
⊂⍨ vor jedem Elemente geschnitten , wo
 das linke Argument
= gleich
, die Verkettung der Argumente
) angewendet
'[- ]' '\W'⎕R' ' '' die PCRE Ersetzungen dash / Leerzeichen → Leerzeichen, Nicht-Wortzeichen → Nichts

∧/(…  Stimmt ) es, dass
s die normalisierte und geteilte
 Texteingabe
 Mitglieder des
s normalisierten und geteilten
 ersten Elements
⎕NGET'most used.txt'(Inhalt, Codierung, Zeilenumbruch) der Datei sind

Adam
quelle
0

JavaScript (ES7), 161 Byte

(Nicht konkurrierend, da die Frage der ES7-Spezifikation vorausgeht)

s=>fetch("most used.txt").then(t=>t.text()).then(d=>alert(s.split(/[ -]/g).every(l=>d.split` `.map(w=>w.replace(/[\.']/,"")).includes(l.replace(/[^a-z]/g,"")))))

Hat jemand eine Kopie der Datei online, mit der ich ein funktionierendes Snippet erstellen kann?

Zottelig
quelle
Ich vermute, dass Sie durch Entfernen 22 Bytes und durch Entfernen then7 Bytes sparen können alert.
Titus
Kannst du das näher erläutern, @Titus? Bei jedem Schritt wird ein Versprechen zurückgegeben, sodass die thens bei der Auflösung nachfolgenden Code ausführen müssen.
Shaggy
Ich bin nicht so vertraut mit ES7; dachte in die falsche Richtung. Aber vielleicht können Sie sich etwas kürzeres einfallen lassen, wenn Sie die Eingabe auf alle Wörter reduzieren, die nicht in der Liste enthalten sind? Ich bezweifle, dass PHP JS wirklich um fast 40% schlagen kann.
Titus
Oh ja, da gibt es definitiv Raum für Verbesserungen. Dies war meine letzte Herausforderung des Tages und ich hatte Kopfschmerzen. Deshalb habe ich das gepostet, was ich bis jetzt hatte, um morgen noch einmal darüber nachzudenken. Leider ist JS aufgrund der Kette von Versprechungen, die erforderlich sind, um den Inhalt einer Datei zu ermitteln, bei diesen Herausforderungen im Vergleich zu PHP im Nachteil, aber es ist immer noch besser als die Alternative zur Verwendung von XHR.
Shaggy
0

PHP, 101 Bytes

foreach(preg_split("#[^\w']+#",$argn)as$w)preg_match("#\b$w\b#i",end(file("most used.txt")))?:die(1);

Nimmt Eingaben von STDIN entgegen und geht davon aus, dass einzeilige Dictionary-
Exits mit 1(error) für falsch und 0(ok) für wahrheitsgemäß gekennzeichnet sind. Laufen Sie mit -R.

Teilen Sie die Eingabe nach Nicht-Wort-Zeichen, und durchlaufen Sie das resultierende Array (Wörter):
Wenn das Wort im Wörterbuch enthalten ist, fahren Sie fort. sonst exit(1).
implizit exit(0).

oder einfach gesagt:

ein Wort nach dem anderen: Wenn das Wort in den am häufigsten verwendeten Wörtern vorkommt, fahren Sie fort. sonst return 1. return 0.

und: Ich könnte zwei Punkte sparen, wenn die am häufigsten verwendeten Wörter jeweils ein Leerzeichen vor und am Ende hätten.

Titus
quelle
-1

Java, 248 Bytes

Mit der Phrase als Argument übergeben.

void g(String s) throws Exception{String c=new java.util.Scanner(new java.io.File("most used.txt")).useDelimiter("\\Z").next(),x="false";for(String l:s.split(" "))if(c.contains(l.toLowerCase().replaceAll("![a-z]","")))x="true";System.out.print(x);}

Input-Output:

g("was he")         --> "true"
g("was h!e")         --> "true"
g("delicious cake") --> "false"

Abstand und Tabbed Out:

void g(String s) throws Exception{
    String c=new java.util.Scanner(new java.io.File("most used.txt")).useDelimiter("\\Z").next()
      ,x="false";
    for(String l:s.split(" "))
      if(c.contains(l.toLowerCase().replaceAll("![a-z]","")))
          x="true";
    System.out.print(x);
}
DeadChex
quelle
Was heißt, es liegt an Ihnen, das zu importieren, was benötigt wird ?
Beta Decay
@Beta Ich verwende einige von Javas Utility-Klassen, die, wenn Sie diese Funktion in ein Programm java.io.*java.util.*
einfügen würden, Sie
3
Nun, Sie müssen diese Importe in Ihre Byteanzahl einbeziehen. Sie dürfen Importanweisungen in Python nicht ausschließen, daher können Sie sie in Java
Beta Decay,
@ BetaDecay Optimierte das Programm, keine weiteren Importe erforderlich
DeadChex