Wprowadzenie
Rozmowa uliczna może być naprawdę trudna do zrozumienia, szczególnie dla programistów, którzy nie są znani z tego, że są bardzo uliczni.
Twoim zadaniem jest stworzenie tłumacza, który pomoże nam wszystkim przetrwać w środowisku miejskim.
Wyzwanie
Biorąc pod uwagę zdanie angielskie jako dane wejściowe, utwórz program lub funkcję, która określa, czy wynik zdania jest pozytywny czy negatywny.
Zdanie może zawierać 0
do 2
negatywnych słów. Jak każdy programista wie, podwójne ujemne wyniki dają pozytywne. Dlatego kod musi wyświetlać lub zwracać wartość true / falsey zgodnie z następującą regułą:
No negative words -> truthy
One negative word -> falsey
Two negative words -> truthy
Lista negatywnych słów:
no
,not
,none
- Wszystko, co kończy się na
n't
never
,neither
,nor
nobody
,nothing
,nowhere
Jest jeden przypadek krawędzi. Ilekroć zdanie zaczyna się od No,
słowa, słowo to nie jest traktowane jako słowo negatywne przy określaniu wyniku (liczy się do liczby słów negatywnych, więc może być jeszcze jedno).
Zdanie będzie zgodne z podstawowymi zasadami gramatyki (wielkie litery, interpunkcja) i będzie zawierać tylko słowa, które można znaleźć w słowniku (na szczęście nie unieważnia to tytułu pytania). W zdaniu nie będzie żadnych właściwych rzeczowników (przepraszam, dr. Nie, nie ma cię w domu).
Przypadki testowe
Prawda:
Yes.
It's noon.
Hello, World!
What is this?
Ain't no thang!
Never say never.
No, it's noon now.
Neither me nor you.
I didn't do nothing!
No, I am your father.
A non-alcoholic drink.
I can't get no satisfaction.
All your base are belong to us.
Falsey:
No.
No, no!
Not today.
Neither am I.
Don't do that!
That's no moon!
And none survived.
Is this not my car?
No man is an island.
Nosebleeds are no fun.
Nothing compares to you.
That's a no, I'm afraid.
No, I am not your mother.
Ironią tutaj jest oczywiście to, że niektóre z nich należy interpretować inaczej. Ale hej, nie można winić głośnika za niezgodność z naszą logiką.
Zasady
Standardowe luki są zabronione. To jest golf golfowy , więc zwięźle!
been
100% negatywnego zdania!Odpowiedzi:
Siatkówka , 63 bajty
Wypróbuj online!
Wyjaśnienie
Usuń
No,
z wejścia. Ze względu na reguły wielkich liter może to pojawiać się tylko na początku danych wejściowych, więc nie potrzebujemy wyraźnego^
.Policz liczbę dopasowań wyrażenia regularnego bez rozróżniania wielkości liter po
`
. Po prostu pasuje do wszystkich odpowiednich słów, w których wyodrębniłem wspólne przedrostki / sufiksy z alternatywami.Liczba
0
lub2
s, więc zmieniamy liczby parzyste na1
nieparzyste0
.źródło
n't
nie trzeba\b
, ponieważ słowa muszą pochodzić ze słownika. Poza tym miałem tę samą rzecz, ale nie znałem odpowiedzi tak zwięźle, używając jeszcze kilku bajtów.Bash,
1151079998979585 bajtówKorzysta z pakietów Core Utilities (for
wc
) igrep
. Załóżmy, że zdanie zostało wydane za pomocą standardowego wejścia. Rozszerzanie historii jest wyłączone przezset +o histexpand
.Sprawdź wynik: w Bash 0 oznacza true, 1 oznacza false
Jak to działa?
18 bajtów (115 do 99) zapisane przez inspiracji Qwertiy 's odpowiedź i Martin Ender ' s odpowiedź . 1 bajt dzięki Nahuelowi Fouilleulowi .
źródło
noon
i nieThat's a no, I'm afraid.
((~$(grep -Pio "(?!^no,)\b(no(|t|r|ne|body|thing|where)|ne(v|ith)er)\b|.*n't\b"|wc -l)%2))
$(..)
zapisać 1 bajtJavaScript ES6,
898786 znakówTest:
źródło
Perl 5 , 74 bajtów
73 bajtowy kod + 1 dla
-p
.Wypróbuj online!
źródło