(Uwaga: jest to łatwiejsze wydzielenie z mojego poprzedniego wyzwania Znajdź słowa nieskończoności ! , które jest spin-offem z mojego poprzedniego poprzedniego wyzwania Znajdź wirujące słowa! :))
Definicja falistego słowa :
- Jeśli połączysz za pomocą krzywych wszystkie znaki falistego słowa z alfabetu (AZ), uzyskasz ścieżkę fali stale idącej w prawo lub w lewo i nigdy nie zmieniającej kierunku, jak na poniższych schematach.
- Falista Słowo może być:
- Podnoszenie, jeśli każdy kolejny znak znajduje się po prawej stronie (na alfabecie) od poprzedniego.
- Zmniejsza się, jeśli każdy kolejny znak znajduje się po lewej stronie (na alfabecie) poprzedniego.
- Wszystkie połączenia parzyste muszą być wyłączone, wszystkie połączenia nieparzyste muszą być uruchomione.
- Możesz zignorować wielkie / małe litery lub rozważyć / przekonwertować wszystkie na wielkie lub wszystkie na małe.
- Słowa wejściowe to tylko znaki z zakresu alfabetu AZ, bez spacji, interpunkcji i symboli.
- Jeśli słowo ma podwójne znaki, takie jak „SPOON”, musisz zwinąć je do jednego znaku: „SPOON”> „SPON” (ponieważ jeśli przejdziesz od O do O, odległość wynosi zero).
- W Faliste Słowa zawiera przynajmniej 3 różne postacie (nawet po podwójna zwijanie).
Oto kilka przykładów:
Zadanie:
Napisz pełny program lub funkcję, która weźmie słowo od standardowego wyjścia wejściowego i będzie, jeśli jest to Falista Słowo lub nie, aw przypadku pozytywnego, jeśli wyjście jest zwiększenie lub zmniejszenie . Wyjście może być True/False/Null
, 2/1/0
, 1/Null/0
, -1/0/1
, NO/WR/WD
, etc, ty decydujesz jak go reprezentować.
Przypadki testowe:
WAVY WORDS:
ADEPT, BEGIN, BILL, BOSS, BOOST, CHIMP,
KNOW, SPONGE, SPOON, TROLL, WOLF
ADEPT > YES > RAISING
BEGIN > YES > RAISING
BILL > YES > RAISING
BOSS > YES > RAISING
BOOST > YES > RAISING
CHIMP > YES > RAISING
KNOW > YES > RAISING
SPONGE > YES > DECREASING
SPOON > YES > DECREASING
TROLL > YES > DECREASING
WOLF > YES > DECREASING
NOT WAVY WORDS:
WATCH, EARTH, NINON, FOO, BAR, WAVE, SELECTION,
YES, NO, DEFINITION, WATER, WINE, CODE, AAAHHHH, I, MM, ABCA
Zasady:
- Najkrótszy kod wygrywa.
Opcjonalne zadanie:
Znajdź w liście jak najwięcej falistych słów w słowniku angielskim, a także najdłuższy. Możesz wziąć przykładowo pełną listę angielskich słów tutaj .
NO
iFOO
nie są prawidłowymi danymi wejściowymi według Twoich reguł.NOT WAVY WORDS
dziale, co jest poprawne ..Odpowiedzi:
05AB1E ,
119 bajtów (Podziękowania dla Adnana)Wypróbuj online!
Faliste obudowy:
0 - malejąca falista
1 - Zwiększenie falistości
Nie faliste obudowy:
[0,1] - Nie falisty, początkowo malejący, ale potem ma wzrost / równość, która przerwała wzór.
[1,0] - Nie falisty, początkowo rosnący, ale potem ma spadek / równość, które złamały wzór
Ciąg wejściowy - nie można być falistym ze względu na długość.
Wyjaśnienie:
źródło
The input words will contain at least 3 distinct characters
na myśli, że nie musiałem obsługiwać mniej niż 3 znaki char. Praca nad zmianami może chwilę potrwać; to moja pierwsza odpowiedź, jaką udało mi się uzyskać w 05AB1E.ü‹
jest taka sama jakü-0‹
:)Galaretka , 10 bajtów
TryItOnline! lub uruchom wszystkie przypadki testowe
Powroty:
[1]
dla falistych rosnącej[-1]
na malejącą falowanecoś jeszcze inaczej (
[]
,[0]
,[-1,1]
, lub[1,-1]
)(Która została uznana za zbędną: Przez jedną wartość dla każdego
OIṠḟ0µL’aQS
(11 bajtów) powróci1
,-1
i0
odpowiednio).W jaki sposób?
źródło
Python 2, 54 bajty
Pobiera dane wejściowe jako listę znaków. Wyjścia:
Sprawdza, czy posortowany ciąg wejściowy jest równy jego oryginałowi czy odwrotności. Czyni to poprzez krojenie z krokami o wielkości 1 i -1. Jednocześnie sprawdzamy, czy słowo ma co najmniej 2 różne litery.
Jeśli „exit with error” może być użyte jako wyjście dla żadnego z tych przypadków, możemy przejść do 51 bajtów:
źródło
Python 3,
7775 bajtówZakłada, że wszystkie litery mają ten sam przypadek.
Zwroty:
0
jeśli nie falisty1
jeśli przesuwa się falisty2
jeśli jest pofalowanyUsunięto niepotrzebne spacje dzięki @ETHproductions
źródło
or
.R
9696 bajtówZwroty:
1
za falowanie i podnoszenie2
za faliste i malejące3
dla niefalistychWyjaśniono
d=diff(rle(utf8ToInt(x))$v)
: Generuje zmiennąd
, najpierw konwertując ciąg znaków naASCII
wartości, za pomocąutf8ToInt
których wygodnie zwraca wektor. Następnie wykonaj kodowanie długości przebiegu za pomocąrle
.rle(...)$v
zwraca niepowtarzalne wartości sekwencji (tj. zwijanie wszystkich przebiegów). Wreszcie weź różnicę.if(any(d>0)&any(d<0)|sum(1|d)<2)3
: Jeśli co najmniej jedna z różnic jest dodatnia, a co najmniej jedna ujemna, lub jeśli sekwencja różnic ma mniej niż2
elementy (odpowiednik oryginalnego słowa mającego mniej niż 3 znaki), słowo nie jest faliste i zwraca3
else``if``(all(d<1),2,1)
: Inaczej, jeśli wszystkie różnice są ujemne, wróć2
do falistych i malejących, w przeciwnym razie wróć1
do falistych i przebijających.Wypróbuj wszystkie przypadki testowe na stronie skrzypcach R (zwróć uwagę, że jest tak nazwany, że można go wektoryzować dla przypadków testowych).
źródło
JavaScript (ES6),
8481 bajtówZakłada, że dane wejściowe są w tym samym przypadku. Zwraca
1
za podniesienie falistości,-1
zmniejszenie falistości0
lub-0
(oba są fałszem) za brak falowania. Edycja: Zapisano 3 bajty dzięki @RobertHickman.źródło
new
?new
.t=[...s]
i używając t zamiast [... s] w tych dwóch miejscach, w których go posiadasz.JavaScript (ES6),
848078 bajtówGdy faliste zwiększenie wynosi 0, zmniejszenie wynosi 1, a -1 nie jest faliste.
Dzięki @Neil za pomoc w oszczędzaniu 2 bajtów.
źródło
new Set(s=[...i])
oszczędza 2 bajty. (Działa poprzez iteracjęi
, przekształcanie go w tablicę, iterację tablicy i przekształcanie jej w zbiór. Zawiłe, ale nie martw się o takie rzeczy podczas gry w golfa.)Pyth, 12 bajtów
Wypróbuj online. Zestaw testowy.
źródło
Python 2,
535250 bajtówOczekuje danych wejściowych ujętych w cudzysłów, np
"watch"
Jako nienazwana lambda:
Sumuje znak różnicy między każdą literą a liczbą całkowitą przez
len-1
. Jeśli wszystkie były1
(rosnące), suma jestlen-1
wyświetlana1
, podobnie w przypadku zmniejszania-1
i mieszania1
,-1
suma jest mniejsza niż wlen-1
takim przypadku0
.-1 bajt do zmiany
cmp,s[1:],s[:-1])
nacmp,s[1:],s)+1
źródło
1
po"NO"
LMNOP
więc O jest po N, co oznacza zwiększenie, co oznacza 1len
problem, ale powtarzające się znaki nadal stanowią problemRubinowy, 54 bajty
Zwraca,
0
jeśli słowo nie jest faliste,1
jeśli jest faliste do tyłu i2
jeśli jest do przodu faliste.źródło
Groovy - 56 bajtów
Dane wyjściowe
[1,0]
dla podnoszenia falistego,[0,1]
zmniejszania falistego,[0,0]
dla wprowadzania pojedynczych znaków lub[1,1]
niefalowania.UWAGA: Zakłada się, że dane wejściowe są ciągiem znaków lub znakiem [], a wszystkie litery mają ten sam przypadek.
źródło
PHP, 96 bajtów
lub 98 bajtów
0 nie falisty 1 podnoszenie -1 zmniejszanie
źródło
-
zamiast2*
(-1 dla zmniejszenia: -1 bajt).*(!!...)
nie wymaga nawiasów. (-2)$s*$s>1
zamiastabs($s)>1
(-2)PHP, 100 bajtów
Zwroty:
-1
za falisty, malejący.0
za nie faliste.1
za falowanie, podnoszenie.źródło
!!array_unique($s)[2]
zamiastcount(array_unique($l))>2
C, 164 bajty
Zwraca 0, jeśli nie wawy, 1 jeśli wawy i przebijanie, 2 jeśli maleje.
źródło
Rakieta 321 bajtów
Nie golfowany:
Testowanie:
Wynik:
źródło
Java 7,
254240 bajtówWywołuje,
0
jeśli ciąg wejściowy nie jest falisty,1
jeśli jest falą podnoszącą, i2
jeśli jest to fala malejąca.Kod niepoznany i testowy:
Wypróbuj tutaj.
Wynik:
źródło
int c(char[]s){int t=s[0],f=s.length,a=1,b=1,i;for(i=1;i<f;){if(s[i]-s[i-1]>=0)++a;if(s[i]-s[i++-1]<1)++b;}return a==f?1:b==f?-1:0;}
(132 bajty)