As dez cem palavras mais comuns


9

Esta pergunta foi escrita porque "Thing Explainer" é divertido de ler e me deu uma idéia.

Escreva "coisas que fazem o computador fazer coisas" que lê / pega um conjunto de letras, números e coisas assim "#%|?e retorna True / 1se todas as palavras fizerem parte desse conjunto .

Se todas as palavras não fizerem parte desse conjunto, retorne as palavras que não fizeram parte dele.


Este site pode ser considerado correto em todos os casos. As regras foram escritas para seguir as especificações desse site.


Exemplos:

Verdade :

O código deve retornar um valor verdadeiro se o texto inteiro acima da primeira linha horizontal for colado como entrada.

As linhas a seguir devem retornar um valor de verdade (a entrada é separada por ###)

This returns "Hello, World!"
###
tHiS rEtUrNs TrUe...
###
Thing Explainer is a book written by a man.
The man writes books with simple words.
###
This set of stuff "#!^{>7( must return true

Falsey :

Nos exemplos a seguir, entrada e saída são separados por ***. Diferentes casos de teste são separados por ###.

This code doesn't return "Hello, World!"
***
code
###
tHiS rEtUrN"s false...
***
s
false

Regras mais detalhadas:

  • Você pode usar isso para testar seu código.
  • As não letras são interpretadas como espaços pelo código, exceto por palavras como 'wasn't'. As palavras com apóstrofos que retornam trueestão incluídas na lista
    • Por exemplo: foo123bardeve retornar fooe bar, como eles não fazem parte da lista, e 123podem ser interpretados como espaços
  • A entrada conterá apenas pontos de código ASCII imprimíveis [10, 32-126].
  • As palavras podem conter letras maiúsculas e minúsculas. Veja o segundo caso de teste.
  • A lista de palavras
    • deve ser tomado como entrada (STDIN, argumento da função ou equivalente)
    • pode ser modificado (as palavras podem ser separadas por nova linha, vírgula etc., e você pode classificar a lista)
    • Observe que você não pode usar esta lista (não é idêntica)
  • A saída pode estar em qualquer formato que você quiser
  • A saída pode ser maiúscula, minúscula ou mista (opcional)
  • Não deve haver símbolos na saída

Para constar, Jonathan Allan encontrou um caso estranho: a implementação no XKCD na verdade ignorará qualquer letra após um apóstrofo até o próximo não [AZ] [az] ['] - por exemplo find's found, e find'qazxswedc found'ambos não retornam nada, enquanto find'qazx.swedc foundretornos swedc.

Você pode escolher se deseja devolver nada find'qazxswedc found'ou retornar qazxswedc. Retornar qazx, swedcpara find'qazx.swedctambém está OK.



Eu não tenho certeza de que é uma bobagem. Seu desafio é um pouco diferente, pois você precisa retornar as palavras não simples. E, a seu favor, você realmente tem uma especificação normal escrita em inglês todos os dias. codegolf.stackexchange.com/questions/53323/...
James

Para uma linguagem de tipo estaticamente que não pode expressar um tipo de retorno Booleanou Array<String>, seria permitido retornar uma matriz / lista vazia?
CAD16

@ CAD97 para o caso em que todas as palavras são simples? Você pode selecionar como deseja exibir o valor de verdade, que pode ser um número inteiro / sequência 1. Uma saída vazia não é permitida.
Stewie Griffin

Estou confuso com a nova explicação das regras para a find'qazxswedcentrada. Devemos ou não devemos nos apóstrofos? Por exemplo, isn'tretorna true(está na lista), mas isnretorna isn, pois isso não está na lista. A partir dessa lógica, fui com "não dividir em apóstrofes" e, portanto, find'qazxswedc foundretorna find'qazxswedc.
AdmBorkBork 14/09/16

Respostas:


2

PowerShell v3 +, 105 92 bytes

param($a,$b)$x=@();-split($b-replace"[^a-zA-Z']",' ')|%{if($_-notin$a){$x+=$_}};($x,1)[!$x]

Leva palavras simples como $a, e palavras como $b. Faz auxiliar $x. Pegue cada palavra $be livre-se de quaisquer letras que não sejam ruins e depois verifique-as |{...}. Se essa palavra não estiver $a, então a adicionamos $x. No final, escolhemos $xou 1não $x. Que é enviado, wordsou1 .

Algumas palavras para tentar

PS C:\Tools\Scripts\golfing> ('This returns "Hello, World!"','tHiS rEtUrNs TrUe...','Thing Explainer is a book written by a man.
The man writes books with simple words.','This set of stuff "¤!^¤>7\ must return true'|%{"$_";(.\ten-hundred-most-common-words.ps1 (gc .\ten-hundred-most-common-words.txt) $_)})-join"`n###`n"
This returns "Hello, World!"
###
1
###
tHiS rEtUrNs TrUe...
###
1
###
Thing Explainer is a book written by a man.
The man writes books with simple words.
###
1
###
This set of stuff "¤!^¤>7\ must return true
###
1

PS C:\Tools\Scripts\golfing> ("This code doesn't returns Hello, World!",'tHiS rEtUrN"s false...'|%{"$_`n***`n"+(.\ten-hundred-most-common-words.ps1 (gc .\ten-hundred-most-common-words.txt) $_)})-join"`n###`n"
This code doesn't returns Hello, World!
***
code
###
tHiS rEtUrN"s false...
***
s false

2

Python, 93 bytes

import re
lambda w,s:[w for w in re.sub("[^'\w]|\d|_",' ',w).split()if w.lower()not in s]or 1

Todos os casos de teste estão em ideone

O pré-processamento da lista é dividir |e colocá-lo em um set(o que eu acho que é bom se a pré-classificação for permitida). Introduza palavras como we o conjunto comos .

Se isso não for permitido, isso se tornará 98 bytes com o not in sdevir not in set(s).

Poderíamos pré-processá-lo para ter todas as permutações de caracteres maiúsculos e minúsculos também e economizar 8 bytes, mas acho que isso pode estar indo longe demais (isso seria um conjunto enorme).

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.