É simples ou difícil?


21

Para sua coisa mais difícil, você deve criar algo para que um computador descubra se algumas palavras são explicadas de maneira simples. Algo é explicado de uma maneira simples se ele usar apenas as dez centenas de palavras mais usadas. Caso contrário, é explicado de uma maneira difícil. Isso pode ser uma coisa de computador completo ou parte de uma coisa de computador. (programa ou função completa)

Há uma coisa para um computador ler que contém todas as dez centenas de palavras com um espaço entre cada palavra. O nome da coisa para o computador ler é chamado 'most used.txt'. Você pode pegar essa coisa deste computador .

A pessoa que usa a coisa do computador digitará algumas palavras. (Pode ser STDIN, argumentos de função ou argumentos de linha de comando) O computador deve dizer algo como verdadeiro se as palavras forem simples e algo como não verdadeiro se for difícil. ( verdade falsa ) A pessoa que faz o menor tempo possível para o computador é o melhor. As coisas que toda pessoa sabe que são ruins são ruins. ( lacunas padrão se aplicam )


Mais informações sobre como o computador funciona:

  • Não importa se as palavras são GRANDES ou pequenas.

  • As figuras que facilitam o conhecimento da palavra (pontuação) não importam. Portanto, se a pessoa que usa o computador diz "não", não é uma palavra diferente da palavra "não". Números e outras imagens também não importam. Portanto, se a pessoa disser "HE $$ ll9o", o computador deve lê-lo como "olá"

  • As pequenas linhas entre as palavras (traços) funcionam da mesma maneira que os espaços. Portanto, a palavra "iniciante cinco" é a mesma que a palavra "iniciante cinco".


Mais informações sobre como criar palavras como esta:

https://xkcd.com/1133/

http://splasho.com/upgoer5/#


7
Portanto, verifique as palavras do usuário da coisa do computador na palavra grande para ver se todas as palavras da palavra pequena estão na palavra grande?
Geobits 17/07/2015

24
Talvez seja só eu, mas achei isso extremamente difícil de ler.
Alex A.

8
Talvez seja melhor dar uma sinopse em conversa simples, seguida de uma especificação real em inglês "real".
Geobits 17/07/2015

2
O dicionário precisa ser lido de um arquivo? Isso pode excluir definitivamente alguns idiomas.
Dennis

11
Você deveria ter sofrido uma penalidade por cada palavra usada que seja difícil no programa.
Decay Beta

Respostas:


6

CJam, 41 bytes

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

Isso torna a suposição bastante impura que most used.txtestá no diretório raiz, pois o CJam não pode manipular caminhos relativos.

Como alternativa, temos as seguintes soluções baseadas na Web (78 e 29 bytes):

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

A maneira "correta" de fazer isso no CJam seria ler as duas entradas do STDIN (entrada na primeira linha, dicionário na segunda), o que é possível em 18 bytes:

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

Você pode tentar a última versão no intérprete CJam . (permalink testado no Chrome)

Exemplos

$ 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
Você poderia usar tinyurl na url unidade para torná-lo mais curto
DeadChex

11
@MIWright Descobri. Isso e o upload do arquivo para Pastebin salvou 12 bytes. Obrigado!
Dennis

7

R, 106 bytes

Não tem certeza se é entender o desafio porque é difícil ler.

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

Isso cria uma parte sem nome de uma coisa de computador que aceita uma string e retorna algo como um verdadeiro ou como um não verdadeiro.

Ungolfed + explicação:

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

Obrigado a Dennis pela inspiração.


2
Algo como part-of-a-computer-thing(s){...}deve valer pontos de bônus.
Dennis

@ Dennis: Como é isso? :)
Alex A.

Muito melhor!
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(" ")))

Saídas TrueeFalse

Exemplos

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

Isso manipulará uma entrada don'tcorretamente?
21915 Alex A.

@AlexA. Retorna True. Isso está correto?
Beta Decay

Algum motivo para você dividir most used.txtpor novas linhas? Não tenho 100% de certeza de como isso funciona, mas imagino que você esteja tentando dividi-lo em cada palavra individual do arquivo.
23915 DeadChex

@DeadChex Qual é o arquivo de texto fornecido separado por? Não consigo acessá-lo porque ele gera um erro SSL.
Beta Decay

11
A questão afirma: "Há uma coisa para um computador para ler que tem todos os dez cem palavras com um espaço entre cada palavra"
DeadChex

2

Pitão, 35 bytes

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

Testes, onde o acima é o arquivo common.pyth

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

Explicação:

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

Supõe que o arquivo esteja no diretório atual.

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

Experimente online!

A primeira linha define uma função auxiliar de normalização e divisão na lista de strings, s :

s←s é
819⌶ o
' '( resultado em minúsculas da função a seguir, com um espaço como argumento à esquerda ...
1↓¨ elimine um de cada uma das
, concatenações dos argumentos
⊂⍨ cortados antes de cada elemento em que
 o argumento à esquerda
= é igual à
, concatenação dos argumentos
) aplicados ao
'[- ]' '\W'⎕R' ' '' painel de substituições do PCRE espaço → espaço, caractere não-palavra → nada

∧/() É verdade que
s a
 entrada de texto normalizada e dividida
 é membro do  primeiro elemento
s normalizado e dividido  do (conteúdo, codificação, estilo de nova linha) do arquivo

⎕NGET'most used.txt'


0

JavaScript (ES7), 161 bytes

(Não concorrente, pois a pergunta antecede a especificação do 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,"")))))

Alguém conseguiu uma cópia do arquivo online que eu posso usar para criar um Snippet funcional?


Eu acho que você pode salvar 22 bytes removendo thene 7 bytes removendo alert.
Titus

Você pode elaborar, @Titus? Cada etapa disso retorna uma promessa e, portanto, thené necessário que os s executem o código subsequente quando resolverem.
Shaggy

Eu não estou tão familiarizado com ES7; estava pensando na direção errada. Mas talvez você possa criar algo mais curto se reduzir a entrada para todas as palavras que não estão na lista? Duvido que o PHP possa realmente vencer o JS em quase 40%.
Titus

Ah, sim, definitivamente há espaço para melhorias lá; esse foi o meu último desafio do dia e tive uma dor de cabeça, então publiquei o que tinha até agora para revisitar amanhã. Infelizmente, a cadeia de promessas necessária apenas para obter o conteúdo de um arquivo coloca o JS em desvantagem nesses desafios em relação ao PHP, mas ainda é melhor do que a alternativa de usar o 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);

recebe entrada de STDIN, assume
saídas de dicionário de linha única com 1(erro) para falsidade, 0(ok) para verdade. Corra com -R.

Divida a entrada por caracteres que não sejam palavras, faça um loop pela matriz (palavras) resultante:
se a palavra estiver no dicionário, continue; mais exit(1).
implícito exit(0).

ou simplesmente:

uma palavra após a outra: Se a palavra estiver nas palavras mais usadas, continue; else retorne 1. retorne 0.

e: eu poderia economizar dois pontos se as palavras mais usadas tivessem um espaço na frente e no final.


-1

Java, 248 bytes

Com a frase passada como argumento.

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

entrada / saída:

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

Espaçados e com guias:

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

Como assim, cabe a você importar o que é necessário ?
Beta Decay

@Beta eu uso algumas das classes de utilitários de Java que, se você fosse para colocar esta função em um programa você teria de importação (ou seja, java.io.*e java.util.*), bem como pítons importar declaração
DeadChex

3
Bem, você precisa incluir essas importações na sua contagem de bytes. Você não tem permissão para excluir declarações de importação em Python, então você não pode excluí-los em Java
Beta Decay

@BetaDecay Tweaked do programa, há mais importações necessária
DeadChex
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.