Это просто или сложно?


21

Для того, чтобы сделать что-то сложное, вы должны сделать что-то для компьютера, чтобы выяснить, объясняются ли некоторые слова простым способом. Что-то объясняется простым способом, если оно использует только десять сотен наиболее употребляемых слов. Если нет, то это объясняется трудным способом. Это может быть полная компьютерная вещь или часть компьютерной вещи. (полная программа или функция)

Компьютер должен читать, в котором есть все десять сотен слов с пробелом между каждым словом. Название того, что должен прочитать компьютер, называется «наиболее используемый. Текст». Вы можете взять эту вещь с этого компьютерного места .

Человек, который использует компьютерную вещь, введет несколько слов. (Это может быть из STDIN, аргументов функций или аргументов командной строки). Компьютер должен сказать что-то вроде true, если слова простые, и что-то вроде not true, если это сложно. ( правдиво-фальшивый ) Человек, который делает самую короткую вещь для компьютера, является лучшим. То, что каждый человек знает, плохо, это плохо. ( применяются стандартные лазейки )


Больше информации о том, как работает компьютер:

  • Не имеет значения, являются ли слова БОЛЬШИМИ или маленькими.

  • Рисунки, облегчающие понимание значения слова (пунктуация), не имеют значения. Так что, если человек, который использует компьютер, говорит «не», это не другое слово, чем «не». Числа и другие картинки также не имеют значения. Так что, если человек говорит "HE $$ ll9o", компьютер должен прочитать это как "привет"

  • Маленькие линии между словами (тире) работают так же, как пробелы. Таким образом, слово «ходок пять» такое же, как слова «ходок пять».


Больше вещей, чтобы знать о создании слов, как это:

https://xkcd.com/1133/

http://splasho.com/upgoer5/#


7
Итак, проверьте слова пользователя компьютера на большом слове, чтобы увидеть, все ли слова в маленьком слове в большом слове?
Geobits

24
Может быть, это только я, но я нашел это исключительно трудно читать.
Алекс А.

8
Возможно, было бы лучше дать краткий обзор в простой речи, а затем привести реальную спецификацию на «реальном» английском языке.
Geobits

2
Должен ли словарь быть прочитан из файла? Это может совершенно исключить пару языков.
Деннис

1
Вы должны были иметь штраф за каждое слово, которое сложно в программе
Beta Decay

Ответы:


6

CJam, 41 байт

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

Это делает довольно нечистым предположение, что он most used.txtнаходится в корневом каталоге, поскольку CJam не может обрабатывать относительные пути.

Кроме того, у нас есть следующие веб-решения (78 и 29 байт):

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

«Правильный» способ сделать это в CJam - это прочитать оба ввода из STDIN (ввод в первой строке, словарь во второй), что возможно в 18 байтах:

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

Вы можете попробовать последнюю версию в интерпретаторе CJam . (постоянная ссылка проверена в Chrome)

Примеры

$ 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

2
Вы можете использовать tinyurl в URL-адресе диска, чтобы сделать его короче
DeadChex

1
@MIWright Разобрался. То и загрузка файла в Pastebin сэкономила 12 байт. Благодарность!
Деннис

7

R, 106 байт

Не уверен, если это понять вызов, потому что это трудно читать.

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

Это создает неназванную часть компьютерной вещи, которая принимает строку и возвращает что-то вроде true или как not true.

Ungolfed + объяснение:

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

Спасибо Деннису за вдохновение.


2
Нечто подобное part-of-a-computer-thing(s){...}должно стоить бонусных баллов.
Деннис

@Dennis: Как это? :)
Алекс А.

Гораздо лучше!
Dennis

3

Python 3, 148 байт

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

Выходы TrueиFalse

Примеры

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

Будет ли это обрабатывать ввод don'tправильно?
Алекс А.

@AlexA. Это возвращается True. Это верно?
Бета-распад

По какой причине вы разделены most used.txtновыми строками? Я не уверен на 100%, как это работает, но я полагаю, вы пытаетесь разбить его на каждое отдельное слово в файле?
DeadChex

@DeadChex Чем разделен поставляемый текстовый файл? Я не могу получить к нему доступ, потому что он продолжает выдавать ошибку SSL.
бета-распад

1
Вопрос гласит: «Есть что-то, что должен прочитать компьютер, в котором есть все десять сотен слов с пробелом между словами»
DeadChex

2

Pyth, 35 байтов

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

Тесты, где выше находится файл common.pyth

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

Объяснение:

!-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.

0

APL (Dyalog) , 69 байт

Предполагается, что файл находится в текущем каталоге.

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

Попробуйте онлайн!

Первая строка определяет вспомогательную функцию нормализации и разбиения на список строк, s :

s←s -  результат следующей функции
819⌶ в нижнем регистре
' '(с пробелом в качестве левого аргумента…
1↓¨ удаляйте по одному из каждого из
, конкатенации аргументов,
⊂⍨ обрезанных перед каждым элементом, где
 левый аргумент
= равен
, конкатенации аргументов,
) примененных к
'[- ]' '\W'⎕R' ' '' заменам PCRE dash / пробел → пробел, не слово-символ → ничего

∧/() Верно ли, что
s нормализованный и разделенный
 ввод текста
 являются членами
s нормализованного и разделенного
 первого элемента
⎕NGET'most used.txt' (содержимого, кодировки, стиля новой строки) файла


0

JavaScript (ES7), 161 байт

(Не конкурирует, так как вопрос предшествует спецификации 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,"")))))

Кто-нибудь получил копию файла в Интернете, который я могу использовать для создания рабочего фрагмента?


Я предполагаю, что вы можете сохранить 22 байта, удалив thenи 7 байтов, удалив alert.
Тит

Можете ли вы уточнить, @Titus? Каждый шаг в этом случае возвращает обещание, поэтому thenнеобходимо выполнить последующий код при их разрешении.
Лохматый

Я не настолько знаком с ES7; думал в неправильном направлении. Но, может быть, вы можете придумать что-то более короткое, если уменьшите ввод для всех слов, которых нет в списке? Я сомневаюсь, что PHP действительно может победить JS почти на 40%.
Тит

О да, там определенно есть место для улучшения; это был мой последний вызов за день, и у меня болела голова, поэтому я опубликовал то, что у меня было до завтра. К сожалению, цепочка обещаний, необходимых только для ознакомления с содержимым файла, ставит JS в невыгодное положение по сравнению с PHP, но это все же лучше, чем альтернатива использования XHR.
Лохматый

0

PHP, 101 байт

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

принимает входные данные из STDIN, предполагает, что однострочный словарь
завершает работу с 1(error) для ложного, 0(ok) для правдивого. Беги с -R.

Разбить ввод по несловесным символам, пролистать результирующий массив (слова):
если слово в словаре, продолжить; остальное exit(1).
неявный exit(0).

или, проще говоря:

одно слово за другим: если слово содержится в наиболее употребительных словах, продолжайте; остальное вернуть 1. вернуть 0.

и: я мог бы сохранить две точки, если бы наиболее употребляемые слова имели пробел перед каждым и в конце.


-1

Java, 248 байт

С фразой, переданной в качестве аргумента.

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

ввод, вывод:

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

Разметка и табуляция:

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

Что вы имеете в виду , чтобы импортировать то, что нужно ?
Бета-распад

@Beta Я использую некоторые из служебных классов Java, которые, если бы вы поместили эту функцию в программу, которую вам пришлось бы импортировать (а именно, java.io.*и java.util.*), во многом как оператор импорта
pythons

3
Ну, вы должны включить этот импорт в ваш счетчик байтов. Вы не можете исключать операторы импорта в Python, поэтому вы не можете исключить их в Java
бета-распад

@BetaDecay Настроил программу, импорт больше не нужен
DeadChex
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.