Mówią, że hate
to mocne słowo. Chciałem dowiedzieć się, dlaczego, więc dobrze się temu przyjrzałem.
Zauważyłem, że każda spółgłoska ma po sobie samogłoskę. To sprawiło, że wyglądało to dość mocno, więc zdecydowałem, że to właśnie sprawia, że słowo jest mocne.
Chcę znaleźć mocniejsze słowa, więc potrzebuję do tego programu!
Znajdowanie mocnych słów
Silne słowa to słowa, w których po każdej spółgłosce (litery w zestawie BCDFGHJKLMNPQRSTVWXZ
) następuje samogłoska (litery w zestawie AEIOUY
). to jest to! Nie ma niczego ważniejszego.
Jeśli słowo zaczyna się od samogłoski, nie musisz się martwić o żadną z liter przed pierwszą spółgłoską. Jeśli słowo w ogóle nie ma spółgłosek, automatycznie jest silnym słowem!
Niektóre przykłady są mocnymi słowami agate
, hate
i you
. agate
jest wciąż mocnym słowem, ponieważ chociaż zaczyna się od samogłoski, po każdej spółgłosce występuje samogłoska. you
to mocne słowo, ponieważ nie ma spółgłosek.
Mocne słowa nie mają ograniczenia długości.
Wyzwanie
Napisz program lub funkcję, która pobiera niepusty ciąg znaków jako dane wejściowe i wyświetla prawdziwą wartość, jeśli jest to mocne słowo lub wartość fałszowania, jeśli tak nie jest.
Wyjaśnienia
- Możesz zdecydować się na wprowadzenie danych małymi lub dużymi literami. Określ w odpowiedzi.
- Słowa nie będą zawierać żadnych znaków interpunkcyjnych. Będą zawierać tylko zwykłe litery w zestawie
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. - Zamiast wartości prawdy i fałszu możesz wybrać dwie odrębne i spójne wartości, aby zwrócić wartość prawda i fałsz. Jeśli to zrobisz, podaj wartości wybrane w odpowiedzi.
- Alternatywnie możesz podać wartość fałsz dla silnego słowa i prawdę dla niewystarczającego słowa.
Przypadki testowe
Input -> Output
hate -> true
love -> true
popularize -> true
academy -> true
you -> true
mouse -> true
acorn -> false
nut -> false
ah -> false
strong -> false
false -> false
parakeet -> false
Punktacja
Ponieważ jest to golf golfowy , wygrywa odpowiedź z najmniejszą liczbą bajtów!
źródło
""
jest możliwym wejściem?Odpowiedzi:
JavaScript (ES6),
362827 bajtówZapisano 1 bajt, odwracając wynik, jak sugeruje LarsW
Pobiera dane pisane małymi literami. Zwraca
false
za mocne słowo itrue
za słabe słowo.W jaki sposób?
Dołączamy
0
(nie-samogłoskę) na końcu łańcucha wejściowego i szukamy dwóch kolejnych znaków innych niż samogłoska. To pozwala nam objąć oba przypadki, w których słowo nie jest mocne:Przypadki testowe
Pokaż fragment kodu
źródło
+0
Ale dlaczego ? Wydaje się, że bez niego działa dobrze+0
, zwracałby fałszywe alarmy na słowach kończących się na spółgłoskę.!
(dwie odrębne wartości)Python 2 , 48 bajtów
Funkcja bez nazwy, która pobiera (małe) ciągi
s
i zwraca,False
jeśli jest mocna lubTrue
nie.Wypróbuj online! (odwraca wyniki, aby pasowały do PO)
W jaki sposób?
Słabe słowa mają albo spółgłoskę, po której następuje spółgłoska, albo kończą się spółgłoską.
Kod dodaje spółgłoskę do końca (
s+'b'
), aby wymagany test był tylko dla dwóch spółgłosek z rzędu.Sprawdza, czy każda litera w zmienionym słowie jest samogłoską ze zrozumieniem listy
[v in'aeiouy'for v in s+'b']
.Musi teraz sprawdzić dwa
False
wyniki z rzędu (sygnalizując niewystarczające słowo), robi to poprzez uzyskanie reprezentacji ciągu (za pomocą`...`
) tej listy i szukanie istnienia'se, F'
. Jest to najkrótszy ciąg znaleziony w,'False, False'
ale żaden z'True, True'
:;'False, True'
; lub'True, False'
.Jako przykład rozważ
'nut'
, lista zrozumieniem ocenia każdą listv
, z'nutb'
istnienia w'aeiouy'
wyniku czego otrzymuje listę[False, True, False, False]
, reprezentacja ciąg tej liście jest'[False, True, False, False]'
który zawiera'e, F'
tutaj:'[False, True, Fals>>e, F<<alse]'
stąd funkcja zwróciTrue
ten sposób, że nakrętka nie mocne słowo.źródło
Galaretka ,
109 bajtówMonadyczny link zawierający listę znaków i zwracający:
0
jeśli silny1
Jeśli nieWypróbuj online! lub zobacz zestaw testowy .
W jaki sposób?
Uwaga: Powodem użycia
Ạ
jest po prostu zaoszczędzić bajt za pomocą1
(ponieważ chcemy od11
razu użyć ).źródło
Ạ
w twoim kodzie ... inaczej mógłbyś to zrobiće€ØY;1w11
lub cośẇ
ma lewy argument, który jest liczbą, zostaje domyślnie przekonwertowany na dziesiętną listę cyfr, więc jedenaście staje się[1,1]
.05AB1E , 8 bajtów
Kod
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
Wyjaśnienie
Przykład
źródło
R , 43 bajty
Wypróbuj online!
Port odpowiedzi JavaScript na Arnauld; zwraca 1 dla słabych słów i
integer(0)
dla mocnych; dołącza(spację) na końcu ciągu.
To jest wektoryzowane; z wektorem ciągów zwraca indeksy (1) słabych słów.
źródło
$
, czy chcesz to wyjaśnić dalej?paste0(s,0)
, ale to tylko sprzeczka. Myślę, że @Charlie odnosi się do czegoś takiego:grep("[^aeiouy]([^aeiouy]|$)",s)
Dyalog APL, 20 bajtów
Wypróbuj online!
źródło
⎕←
.Haskell ,
6154 bajtówWypróbuj online!
Musiałem dodać
z
na końcu łańcucha, aby obsłużyć przypadek końcowej spółgłoski.źródło
Java (OpenJDK 8) ,
9381 bajtówWypróbuj online!
źródło
s->{int w=0,p=w,l;for(char c:s){l="aeiouy".indexOf(c)>>31;w|=p&l;p=l;}return w+p>=0;}
.s->{int w=0,p=w,l;for(char c:s)w|=p&(p=l="aeiouy".indexOf(c)>>31);return w+p>=0;}
[a-z&&[^aeiouy]]
poprzedniej mojej odpowiedzi . ;)Łuska , 12 bajtów
Wypróbuj online!
Podziękowania dla H.PWiz za pomoc przy -4.
Zwraca niespójne, ale odpowiednio prawdziwe lub fałszywe wartości.Dzięki Leo dla -1, teraz zwraca spójną wartość prawda / fałsz.
źródło
Pyth , 18 bajtów
Sprawdź wszystkie przypadki testowe.
„Pożyczono” wyrażenie regularne z odpowiedzi JS . To zwraca
False
mocne słowa, wTrue
przeciwnym razieźródło
13 ISO-8859-1 bytes, 13 chars
. Myślę, że to powinno być w porządkuBrachylog ,
181110 bajtówWypróbuj online!
Schludny i prosty (z wyjątkiem może 2 dodatkowych bajtów początkowych do obsługi końcowego przypadku spółgłoski, takich jak „papuga długoogonowa”).
Jest falsey dla mocnych słów i prawdę dla słabych słów.
źródło
Python 2 , 58 bajtów
-30 bajtów, wiedząc, że może być tak proste, jak odpowiedź JS Arnaulda .
Wypróbuj online!
źródło
f=lambda s...
f=\
nagłówkiem).'[^aeiouy]([^aeiouy]|$)'
(24 bajty)"[^aeiouy]("*2+")|$)"
(21 bajtów), aby zapisać 3 bajty, ponieważ pusta grupa()
nie zmienia zachowania wyszukiwania ( TIO ).Perl 5, 31 bajtów (30 + 1)
+1 bajt dla
-p
flagi wiersza poleceń. Drukuje słowo, jeśli jest to mocne słowo, lub pusty ciąg, jeśli nie jest.źródło
$_=$/if/[^aeiouy]{2}/
.Galaretka , 11 bajtów
Wypróbuj online!
Tak, wiem, że zostałem bardzo pobity przez Jonathana Allana, ale i tak chciałem się podzielić moim podejściem: P.
-4 bajty poprzez kradzież odrobiny odpowiedzi Jonathana Allana (zamiast dodawać spółgłoskę w celu sprawdzenia, czy wielkość liter na ostatniej liście jest dołączona, wystarczy dołączyć 1)
-1 bajt dzięki milom
źródło
a2\
lubȦ2Ƥ
zamiastṡ2Ȧ€
ØC
aby upewnićYy
się, że zostałem zaliczony do spółgłoski, ponieważ jakoś pamiętałem wstecz. Dzięki!Awk, 39 bajtów
drukuje
n
dla nie-silnego słowa, nic (lub po prostu nowa linia) dla silnego słowaśledzenie paczki i poszukiwanie dwóch kolejnych nie-samogłosek na małych literach
testowanie
źródło
Kotlin , 49 bajtów
Prawda i fałsz są zamieniane
Upiększony
Test
TryItOnline
Na podstawie @ Arnauld za Odpowiedź
źródło
Siatkówka ,
2318 bajtówWypróbuj online! Wykazuje 0 dla silnych, 1 jeśli nie. Dodaj 1 bajt, aby obsługiwać mieszane wielkości liter. Edycja: Zapisano 5 bajtów dzięki @ovs.
źródło
Java 8,
5342 bajty-11 bajtów przy użyciu tego samego wyrażenia regularnego, co w odpowiedzi Kotlin @jrtapsell .
Wypróbuj tutaj. (
false
jeśli silny;true
jeśli nie)Wyjaśnienie:
Więc w zasadzie sprawdza, czy możemy znaleźć dwie sąsiadujące spółgłoski, czy też Łańcuch kończy się spółgłoską.
Stara odpowiedź ( 53 bajty ):
Wypróbuj tutaj. (
true
jeśli silny;false
jeśli nie)Używa wyrażenia regularnego, aby sprawdzić, czy ciąg wejściowy pasuje do wyrażenia regularnego „strong”. Zauważ, że
String#matches
w Javie automatycznie dodaje,^...$
aby sprawdzić, czy Łańcuch całkowicie pasuje do podanego wyrażenia regularnego.Wyjaśnienie":
Wyszukiwanie zamiast dopasowań (jak w przypadku wielu innych odpowiedzi) jest w rzeczywistości dłuższe w Javie:
70 bajtów :
Wypróbuj tutaj. (
false
jeśli silny;true
jeśli nie)źródło
Ruby , 25 bajtów
Wypróbuj online!
Wszyscy to robią, więc dlaczego Ruby nie może?
źródło
SOGL V0.12 ,
1918 bajtówWypróbuj tutaj!
Wyjaśnienie:
źródło
05AB1E , 11 bajtów
Wypróbuj online!
Wykorzystuje algorytm Jonathana, zwraca wartość
0
prawda i1
fałsz.źródło
Swift 3.1 , 85 bajtów
Wypróbuj tutaj!
To pożycza regex Arnauld za .
źródło
Lua, 41 bajtów
Odczytuje ze standardowego wejścia
Lua (loadstring'ed), 37 bajtów
Odczytuje z parametrów funkcji
Dane są pisane małymi literami
Sprawdza, czy istnieje łańcuch o długości 2 lub większej, składający się tylko z samogłosek (nie spółgłosek) lub łańcuch ten kończy się samogłoską
Zwraca true / false
źródło
C ++,
195194 bajtów-1 bajty dzięki Zacharýowi
Wielkie litery, zwróć true, jeśli dane wejściowe są silnym słowem, false w przeciwnym razie (C ++ mają proste int do boolowania niejawne reguły rzutowania, 0 => false, true w przeciwnym razie)
Kod do przetestowania:
źródło
return
i!
.C, 107 bajtów
Zwraca 1 dla silnego słowa i 0 dla słabego słowa. Testowany ze słowami podanymi w głównym poście.
źródło
C (gcc) , 59 bajtów
Wypróbuj online!
źródło
PHP, 69 bajtów
Zwraca 1 to słowo nie jest mocne.
źródło
/", str
->/",str
i[1]))) return
->,[1])))return
ale nie znam zbyt dobrze PHP, więc nie jestem pewien.[B-Z]
?[B-Z]
obejmuje samogłoski.[^AEIOUY]
działa jednak.if
instrukcji.CJam , 57 bajtów
Wypróbuj online!
Odczytuje dane wejściowe, konwertuje na 1s dla spółgłosek, 0s dla samogłosek. Dla każdej spółgłoski ORAZ predefiniowana zmienna X (predefiniowana do 1) z wartością następnego znaku. Wyjście X
źródło