Десять сотен самых распространенных слов

9

Этот вопрос написан потому, что "Thing Explainer" интересно читать и дал мне идею.

Напишите «вещи, которые заставляют компьютер делать вещи», которые читают / принимают набор букв, цифр и тому подобное "#%|?и возвращают, True / 1если все слова являются частью этого набора .

Если все слова не являются частью этого набора, верните слова, которые не были частью этого набора.


Этот сайт можно считать правильным во всех случаях. Правила написаны в соответствии со спецификациями на этом сайте.


Примеры:

Truthy :

Код должен возвращать истинное значение, если весь текст над первой горизонтальной строкой вставлен в качестве ввода.

Следующие строки должны возвращать истинное значение (вход разделяется ###)

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 :

В следующих примерах вход и выход разделены ***. Различные тестовые случаи разделены ###.

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

Более подробные правила:

  • Вы можете использовать это для проверки вашего кода.
  • Не-буквы интерпретируются кодом как пробелы, кроме слов вроде 'wasn't'. Слова с апострофами, которые возвращаются true, включены в список
    • Например: foo123barдолжен возвращать fooи bar, так как они не являются частью списка, и 123могут быть интерпретированы как пробелы
  • Входные данные будут содержать только печатаемые кодовые точки ASCII [10, 32-126].
  • Слова могут содержать буквы в смешанном регистре. Смотрите второй контрольный пример.
  • Список слов
    • должен быть взят в качестве входных данных (STDIN, аргумент функции или эквивалентный)
    • могут быть изменены (слова могут быть разделены новой строкой, запятой и т. д., и вы можете отсортировать список)
    • Обратите внимание, что вы не можете использовать этот список (он не идентичен)
  • Вывод может быть в любом формате, который вам нравится
  • Выход может быть в верхнем, нижнем или смешанном регистре (опционально)
  • На выходе не должно быть символов

Напомним, что Джонатан Аллан обнаружил странный случай: в XKCD реализация фактически игнорирует любые буквы после апострофа, например, до следующего не [AZ] [az] ['] find's found, и find'qazxswedc found'оба ничего не find'qazx.swedc foundвозвращают , тогда как возвращает swedc,

Вы можете выбрать, хотите ли вы вернуть ничего find'qazxswedc found'или вернуть qazxswedc. Возврат qazx, swedcна find'qazx.swedcэто тоже нормально.

Стьюи Гриффин
источник
Я не уверен, что это обман. Ваша задача немного отличается, так как вам нужно вернуть непростые слова. И, в вашу пользу, у вас есть нормальная спецификация, написанная на повседневном английском. codegolf.stackexchange.com/questions/53323/…
Джеймс
Для языка со статической типизацией, который не может выразить тип возвращаемого значения Booleanили Array<String>, будет ли допустимым возвращение пустого массива / списка?
CAD97,
@ CAD97 для случая, когда все слова просты? Вы можете выбрать способ отображения истинного значения, это может быть целое число / строка 1. Пустой вывод не допускается.
Стьюи Гриффин
Я смущен новым объяснением правил для find'qazxswedcввода. Мы или мы не должны разделяться на апострофы? Например, isn'tвозвращает true(он находится в списке), но isnвозвращается isn, поскольку его нет в списке. Исходя из этой логики, я пошел с «не делить на апострофы», и поэтому find'qazxswedc foundвозвращается find'qazxswedc.
AdmBorkBork

Ответы:

2

PowerShell v3 +, 105 92 байта

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

Принимает простые слова, как $a, и слова, как $b. Делает помощник $x. Возьмите каждое слово $bи избавьтесь от всех плохих, а не букв, а затем проверьте каждое |{...}. Если этого слова нет $a, мы добавляем его в $x. В конце концов, мы выбираем $xили 1нет $x. Это отослано, wordsили 1.

Несколько слов, чтобы попробовать

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
AdmBorkBork
источник
2

Python, 93 байта

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

Все тесты в идеале

Предварительная обработка списка состоит в том, чтобы разделить |и поместить его в set(что, я думаю, хорошо, если предварительная сортировка разрешена). Введите слова как wи установить как s.

Если это не разрешено, это становится 98 байтами с not in sстановлением not in set(s).

Мы могли бы предварительно обработать его, чтобы иметь все перестановки символов верхнего и нижнего регистра и сохранить 8 байтов, но я думаю, что это может зайти слишком далеко (это будет огромный набор).

Джонатан Аллан
источник