Dziesięć najczęstszych słów

9

To pytanie jest napisane, ponieważ „Thing Explainer” jest fajny do czytania i dał mi pomysł.

Napisz „rzeczy, które zmuszają komputer do robienia rzeczy”, które czyta / pobiera zestaw liter, cyfr i tym podobne "#%|?i zwraca, True / 1jeśli wszystkie słowa są częścią tego zestawu .

Jeśli wszystkie słowa nie są częścią tego zestawu, zwróć słowa, które nie były jego częścią.


Ta strona internetowa może być uznana za poprawną we wszystkich przypadkach. Reguły są napisane, aby były zgodne ze specyfikacjami na tej stronie.


Przykłady:

Prawda :

Kod powinien zwrócić prawdziwą wartość, jeśli cały tekst powyżej pierwszej linii poziomej zostanie wklejony jako dane wejściowe.

Poniższe wiersze powinny zwrócić prawdziwą wartość (dane wejściowe są oddzielone ###)

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 :

W poniższych przykładach dane wejściowe i wyjściowe są oddzielone przez ***. Różne przypadki testowe są oddzielone ###.

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

Bardziej szczegółowe zasady:

  • Możesz użyć tego do przetestowania swojego kodu.
  • Kod nieinterpretowany jest przez kod jako spacja, z wyjątkiem słów podobnych 'wasn't'. Zwracane słowa z apostrofami trueznajdują się na liście
    • Na przykład: foo123barpowinien powrócić fooi bar, ponieważ nie są częścią listy i 123mogą być interpretowane jako spacje
  • Dane wejściowe będą zawierać tylko punkty kodu ASCII do wydruku [10, 32-126].
  • Słowa mogą zawierać małe i wielkie litery. Zobacz drugi przypadek testowy.
  • Lista słów
    • należy przyjmować jako dane wejściowe (STDIN, argument funkcji lub równoważny)
    • można modyfikować (słowa można rozdzielić znakiem nowej linii, przecinkiem itp., a także możesz posortować listę)
    • Pamiętaj, że nie możesz użyć tej listy (nie jest identyczna)
  • Dane wyjściowe mogą być w dowolnym formacie
  • Dane wyjściowe mogą być duże, małe lub mieszane (opcjonalnie)
  • Na wyjściu nie będzie żadnych symboli

Dla przypomnienia, Jonathan Allan znalazł dziwny przypadek narożny: implementacja na XKCD faktycznie zignoruje wszelkie litery po apostrofie do następnego non-[AZ] [az] ['] - na przykład find's foundi find'qazxswedc found'oba nie zwracają niczego, podczas gdy find'qazx.swedc foundzwraca swedc.

Możesz wybrać, czy chcesz nic nie zwracać find'qazxswedc found', czy zwrócić qazxswedc. Powrót qazx, swedcdo find'qazx.swedcjest również OK.

Stewie Griffin
źródło
Nie jestem pozytywne jest to dupe chociaż. Twoje wyzwanie jest nieco inne, ponieważ musisz zwrócić niełatwe słowa. I na twoją korzyść, faktycznie masz normalną specyfikację napisaną w codziennym języku angielskim. codegolf.stackexchange.com/questions/53323/…
James
W przypadku języka o typie statycznym, który nie może wyrażać typu zwracanego Booleanlub Array<String>, czy dozwolone byłoby zwracanie pustej tablicy / listy?
97 CAD
@ CAD97 w przypadku, gdy wszystkie słowa są proste? Możesz wybrać sposób wyświetlania prawdziwej wartości, może to być liczba całkowita / ciąg znaków 1. Puste wyjście jest niedopuszczalne.
Stewie Griffin,
Jestem zdezorientowany nowym objaśnieniem zasad dotyczących find'qazxswedcdanych wejściowych. Czy my, czy nie, powinniśmy rozdzielać apostrofy? Na przykład isn'tzwraca true(jest na liście), ale isnzwraca isn, ponieważ nie ma jej na liście. Z tej logiki wybrałem „nie podzielaj się apostrofami”, a zatem find'qazxswedc foundpowraca find'qazxswedc.
AdmBorkBork

Odpowiedzi:

2

PowerShell v3 +, 105 92 bajtów

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

Przyjmuje proste słowa jak $ai słowa podobne $b. Czyni pomocnika $x. Weź każde słowo $bi pozbądź się złych, a nie liter, a następnie sprawdź każde z nich |{...}. Jeśli tego słowa nie ma $a, dodajemy go do $x. Na koniec wybieramy $xlub 1nie $x. To jest wysyłane albo wordsalbo 1.

Kilka słów do wypróbowania

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
źródło
2

Python, 93 bajty

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

Wszystkie przypadki testowe są w ideone

Wstępne przetwarzanie listy polega na podziale |i umieszczeniu go w set(co moim zdaniem jest w porządku, jeśli dozwolone jest wstępne sortowanie). Wpisz słowa as wi ustaw jako s.

Jeśli to nie wolno tego staje się z 98 bajtów not in sstaje not in set(s).

Moglibyśmy go wstępnie przetworzyć, aby mieć wszystkie kombinacje wielkich i małych liter, a także zaoszczędzić 8 bajtów, ale myślę, że może to pójść za daleko (to byłby ogromny zestaw).

Jonathan Allan
źródło