Це просто чи важко?


21

Для вашої важкої речі, ви повинні зробити річ для комп’ютера, щоб це з'ясувати, чи пояснюються деякі слова простим способом. Щось пояснюється простим способом, якщо він використовує лише десять сотень найпоширеніших слів. Якщо ні, то це пояснюється важко. Це може бути повна комп'ютерна річ або частина комп’ютерної речі. (повна програма або функція)

Існує річ, яку повинен прочитати комп’ютер, який містить у собі всі десять сотень слів із пробілом між кожним словом. Назва речі, яку читає комп’ютер, називається "найбільш використовуваною.txt". Ви можете взяти цю річ з цього комп’ютерного місця .

Людина, яка використовує комп'ютерну річ, введе деякі слова. (Це може бути з STDIN, аргументів функції або аргументів командного рядка) Комп'ютер повинен сказати щось на зразок істинного, якщо слова прості та щось як неправда, якщо важко. ( truthy-falesy ) Найкраща людина, яка робить найкоротший для комп'ютера. Те, що кожна людина знає, є поганим. ( застосовуються стандартні лазівки )


Більше інформації про те, як працює комп'ютерна річ:

  • Не має значення, чи слова є ВЕЛИКИми чи мало.

  • Малюнки, які полегшують пізнання слова (розділові знаки), значення не мають. Тож якщо людина, яка користується комп'ютером, каже "не", це не інше слово, ніж слово "не". Цифри та інші зображення також не мають значення. Тож якщо людина каже "HE $$ ll9o", комп'ютер повинен читати це як "привіт"

  • Маленькі рядки між словами (тире) працюють так само, як пробіли. Отже, слово "up-goer-Five" те саме, що слова "up goer Five".


Більше інформації про створення таких слів:

https://xkcd.com/1133/

http://splasho.com/upgoer5/#


7
Тож перевірте слова користувача комп'ютерної речі на велике слово, щоб побачити, чи всі слова в тій маленькій річці є в значенні великого слова?
Геобіт

24
Можливо, це лише я, але мені це надзвичайно важко читати.
Олексій А.

8
Можливо, краще дати конспект у простому розмові з подальшим фактичним описом на "справжній" англійській мові.
Геобіт

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-
адресі

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

Це створює неназвану частину комп'ютерної речі, яка приймає рядок і повертає щось на зразок істинного або як неправдивого.

Недоліки + пояснення:

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 тире / простір → пробіл, слово без слова → нічого

∧/() Чи правда, що  введений текст
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(помилка) для хибного, 0(ок) для правди. Бігайте з -R.

Розділити введення несловними символами, провести цикл через отриманий масив (слова):
Якщо слово є у словнику, продовжуйте; ще exit(1).
неявна exit(0).

або, просто кажучи:

одне слово за іншим: якщо слово є у найпоширеніших словах, продовжуйте; else return 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.*), як і заява про імпорт пітонів
DeadChex

3
Ну, ви повинні включити цей імпорт до вашого байтового числа. Ви не можете виключати заяви про імпорт у Python, тому ви не можете виключати їх у Java
Beta Decay

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