Find the Wavy Words!
05AB1E, 11 9 bytes (Thanks to Adnan)
Dg2›iÇü‹Ù
Try it online!
Wavy Cases:
0 - Decreasing Wavy
1 - Increasing Wavy
Not Wavy Cases:
[0,1] - Not wavy, initially decreasing, but then has an increase/equality that broke the pattern.
[1,0] - Not wavy, initially increasing, but then has a decrease/equality that broke the pattern
Input String - Not possible to be wavy in the first place due to length.
Explanation:
Dg2›iÇü‹Ù # Full program
D # Push 2 copies of input.
g2›i # If length is greater than 2.
Ç # Push ASCII values for all characters in the string.
ü # Push pairwise array.
‹ # Vectorize 1 if negative difference, 0 if positive difference.
Ù # Uniquify using right most unique values first.
# Else just print the string back, letting them know it's not valid input.
Jelly, 10 bytes
OIṠḟ0µL’aQ
TryItOnline! or run all test cases
Returns:
[1]
for wavy increasing
[-1]
for wavy decreasing
something else otherwise ([]
, [0]
, [-1,1]
, or [1,-1]
)
(Declared as unnecessary: For a single value for each OIṠḟ0µL’aQS
(11 bytes) will return 1
, -1
, and 0
respectively.)
How?
OIṠḟ0µL’aQ - Main link: s
O - cast to ordinals
I - incremental differences
Ṡ - sign (-1 for decreasing, 0 for no change, 1 for increasing)
ḟ0 - filter out zeros
µ - monadic chain separation
L - length
’ - decremented
a - and
Q - unique items
Python 3, 77 75 bytes
lambda x:(len(set(x))>2)*(list(x)==sorted(x)or(list(x)==sorted(x)[::-1])*2)
Assumes all letters are of the same case.
Returns:
0
if not wavy1
if forwards wavy2
if backwards wavy
Removed unnecessary spaces thanks @ETHproductions