Czy to proste czy trudne?

21

Aby zrobić coś trudnego, musisz zrobić komputer, który sprawdzi, czy niektóre słowa są wyjaśnione w prosty sposób. Coś można wyjaśnić w prosty sposób, jeśli używa tylko dziesięciu najczęściej używanych słów. Jeśli nie, jest to wytłumaczone w trudny sposób. Może to być pełny komputer lub część komputera. (pełny program lub funkcja)

Jest coś do czytania przez komputer, który ma wszystkie dziesięćset słów ze spacją między każdym słowem. Nazwa rzeczy do odczytania przez komputer nazywa się „najczęściej używana.txt”. Możesz wziąć to z tego miejsca na komputerze .

Osoba korzystająca z komputera wprowadzi kilka słów. (Może to być argument STDIN, argumenty funkcji lub argumenty wiersza poleceń). Komputer musi powiedzieć coś takiego jak prawda, jeśli słowa są proste, a coś nieprawdy, jeśli jest trudne. ( prawda-fałsz ) Osoba, która robi najkrótszą rzecz dla komputera, jest najlepsza. Rzeczy, które każdy wie, że są złe, są złe. ( obowiązują standardowe luki )


Więcej informacji na temat działania komputera:

  • Nie ma znaczenia, czy słowa są DUŻE, czy małe.

  • Zdjęcia, które sprawiają, że słowo to jest łatwiejsze do zrozumienia (interpunkcja), nie mają znaczenia. Więc jeśli osoba korzystająca z komputera mówi „nie”, to nie jest to inne słowo niż słowo „nie”. Liczby i inne zdjęcia również nie mają znaczenia. Więc jeśli dana osoba powie „HE $$ ll9o”, komputer powinien przeczytać to jak „cześć”

  • Małe linie między słowami (myślniki) działają tak samo jak spacje. Tak więc słowo „up-goer-five” jest takie samo jak słowo „up-goer five”.


Więcej informacji na temat tworzenia takich słów:

https://xkcd.com/1133/

http://splasho.com/upgoer5/#

DJMcMayhem
źródło
7
Więc sprawdź słowa użytkownika komputerowego na słowo wielkie, aby zobaczyć, czy wszystkie słowa małego słowa są w słowach wielkich?
Geobits,
24
Może to tylko ja, ale uważałem to za wyjątkowo trudne do odczytania.
Alex A.,
8
Lepiej byłoby przedstawić streszczenie w formie prostej rozmowy, a następnie podać rzeczywistą specyfikację w „prawdziwym” języku angielskim.
Geobits
2
Czy słownik należy odczytać z pliku? To może wręcz wykluczyć kilka języków.
Dennis
1
Powinieneś mieć karę za każde użyte słowo, które jest trudne w programie
Beta Decay

Odpowiedzi:

6

CJam, 41 bajtów

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

To sprawia, że ​​raczej nieczyste założenie most used.txtznajduje się w katalogu głównym, ponieważ CJam nie obsługuje ścieżek względnych.

Alternatywnie mamy następujące rozwiązania internetowe (78 i 29 bajtów):

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

„Właściwym” sposobem wykonania tego w CJam byłoby odczytanie obu danych wejściowych ze STDIN (wejście w pierwszym wierszu, słownik w drugim), co jest możliwe w 18 bajtach:

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

Możesz wypróbować ostatnią wersję w interpretatorze CJam . (bezpośredni link przetestowany w Chrome)

Przykłady

$ 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
źródło
2
Możesz użyć tinyurl w
adresie
1
@MIWright Rozgryzłem to. To i przesłanie pliku do Pastebin pozwoliło zaoszczędzić 12 bajtów. Dzięki!
Dennis,
7

R, 106 bajtów

Nie jest pewien, czy rozumie wyzwanie, ponieważ ma trudności z czytaniem.

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

Tworzy to nienazwaną część komputerowej rzeczy, która akceptuje ciąg znaków i zwraca coś takiego jak prawda lub nieprawda.

Niegolfowane + wyjaśnienie:

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))
}

Dzięki Dennis za inspirację.

Alex A.
źródło
2
Coś takiego part-of-a-computer-thing(s){...}powinno być warte punktów bonusowych.
Dennis,
@Dennis: Jak to jest? :)
Alex A.,
Znacznie lepiej!
Dennis
3

Python 3, 148 bajtów

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

Wyjścia TrueiFalse

Przykłady

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
Rozpad beta
źródło
Czy to obsłuży don'tpoprawnie wejście ?
Alex A.,
@AlexA. Powraca True. Czy to jest poprawne?
Beta Decay
Czy jest jakiś powód, dla którego podzieliłeś most used.txtnowe linie? Nie jestem w 100% pewien, jak to działa, ale wyobrażam sobie, że próbujesz podzielić je na poszczególne słowa w pliku?
DeadChex,
@DeadChex Czym jest dostarczony plik tekstowy oddzielony? Nie mogę uzyskać do niego dostępu, ponieważ ciągle zgłasza błąd SSL.
Beta Decay
1
Pytanie brzmi: „Jest coś do czytania przez komputer, który ma wszystkie dziesięćset słów ze spacją między każdym słowem”
DeadChex
2

Pyth, 35 bajtów

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

Testy, w których powyższym jest plik common.pyth

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

Wyjaśnienie:

!-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
źródło
0

APL (Dyalog) , 69 bajtów

Zakłada, że ​​plik znajduje się w bieżącym katalogu.

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

Wypróbuj online!

Pierwsza linia definiuje normalizacji i podział-do-list-of-strun pomocnik funkcja S :

s←s to  wynik poniższej funkcji
819⌶ zapisany małymi literami
' '(, ze spacją jako lewy argument…
1↓¨ upuść po jednym z każdego
, konkatenacji argumentów
⊂⍨ wyciętych przed każdym elementem, w którym
 lewy argument
= jest równy
, konkatenacji argumentów
) zastosowanych do
'[- ]' '\W'⎕R' ' '' zamiany PCRE dash / spacja → spacja, non-word-char → nic

∧/(… Czy ) to prawda, że
s znormalizowane i podzielone
 wprowadzanie tekstu
 są elementami
s znormalizowanego i podzielonego
 pierwszego elementu
⎕NGET'most used.txt' (zawartości, kodowania, stylu nowej linii) pliku

Adám
źródło
0

JavaScript (ES7), 161 bajtów

(Niekonkurencyjne, ponieważ pytanie wcześniejsze niż specyfikacja ES7)

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,"")))))

Czy ktoś ma kopię pliku online, której mogę użyć do utworzenia działającego fragmentu kodu?

Kudłaty
źródło
Myślę, że możesz zaoszczędzić 22 bajty, usuwając theni 7 bajtów, usuwając alert.
Tytus
Czy potrafisz opracować, @Titus? Każdy etap tego zwraca obietnicę, więc thens są zobowiązane do wykonania następnego kodu, gdy zostaną rozwiązane.
Kudłaty
Nie znam się tak dobrze na ES7; myślał w złym kierunku. Ale może możesz wymyślić coś krótszego, jeśli ograniczysz wprowadzanie do wszystkich słów, których nie ma na liście? Wątpię, aby PHP naprawdę pokonało JS o prawie 40%.
Tytus
Och, tak, zdecydowanie jest tam miejsce na ulepszenia; to było moje ostatnie wyzwanie tego dnia i miałem ból mózgu, więc opublikowałem to, co do tej pory chciałem odwiedzić jutro. Niestety, łańcuch obietnic wymaganych tylko po to, aby dostać się do zawartości pliku, stawia JS w niekorzystnej sytuacji w tych wyzwaniach w porównaniu z PHP, ale wciąż jest lepsza niż alternatywa użycia XHR.
Kudłaty
0

PHP, 101 bajtów

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

pobiera dane wejściowe ze STDIN, zakłada zamknięcie słownika jednowierszowego
z 1(błąd) dla fałszu, 0(ok) dla prawdy. Uruchom z -R.

Podziel wprowadzanie na znaki niebędące wyrazami
, przejdź przez wynikową tablicę (słowa): jeśli słowo znajduje się w słowniku, kontynuuj; indziej exit(1).
dorozumiany exit(0).

lub po prostu:

jedno słowo po drugim: jeśli słowo zawiera najczęściej używane słowa, kontynuuj; w przeciwnym razie zwróć 1. zwróć 0.

i: Mógłbym zapisać dwa punkty, gdyby najczęściej używane słowa miały spacje z przodu i na końcu.

Tytus
źródło
-1

Java, 248 bajtów

Z frazą przekazaną jako argument.

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);}

wejście wyjście:

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

Rozstawiony i tabulowany:

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
źródło
Co masz na myśli , aby importować to, co jest potrzebne ?
Beta Decay
@Beta Korzystam z niektórych klas narzędzi Java, które gdybyś umieścił tę funkcję w programie, który musiałbyś zaimportować (mianowicie java.io.*i java.util.*), podobnie jak instrukcja importowania pytonów
DeadChex
3
Cóż, musisz uwzględnić te importy w swojej liczbie bajtów. Nie możesz wykluczyć instrukcji importu w Pythonie, więc nie możesz wykluczyć ich w Javie
Rozpad Beta
@BetaDecay Poprawiono program, nie trzeba już importować
DeadChex