(Nota: este es un spin-off más fácil de mi desafío anterior Find the Infinity Words!, Que es un spin-off de mi otro desafío anterior Find the Swirling Words! :))
Definición de una palabra ondulada :
- Si conecta con curvas todos los caracteres de una Palabra ondulada en el alfabeto (AZ), obtiene el camino de una onda que va continuamente hacia la derecha o hacia la izquierda y nunca cambia de dirección, como en los diagramas a continuación.
- Una palabra ondulada puede ser:
- Aumento si cada carácter consecutivo está a la derecha (en el alfabeto) del anterior.
- Disminuye si cada carácter consecutivo está a la izquierda (en el alfabeto) del anterior.
- Toda la conexión par debe estar inactiva, todas las conexiones impares deben estar activadas.
- Puede ignorar mayúsculas / minúsculas o considerar / convertir todo a mayúsculas o todo a minúsculas.
- Las palabras de entrada son solo caracteres en el rango alfabético de AZ, sin espacios, sin signos de puntuación o símbolos.
- Si una palabra tiene caracteres dobles, como "CUCHARA", debe contraer los dobles a un carácter: "CUCHARA"> "ESPONJA" (porque si va de O a O es distancia cero).
- Las palabras onduladas contendrán al menos 3 caracteres distintos (incluso después del colapso de los dobles).
Aquí hay algunos ejemplos:
Tarea:
Escriba un programa o función completa que tomará una palabra de la entrada estándar y dará salida si es una palabra ondulada o no, y en caso positivo, dará salida si está aumentando o disminuyendo . La salida puede ser True/False/Null, 2/1/0, 1/Null/0, -1/0/1, NO/WR/WD, etc, a decidir la forma de representar la misma.
Casos de prueba:
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
Reglas:
- El código más corto gana.
Tarea opcional:
Encuentre, en una lista, tantas palabras onduladas como pueda en un diccionario de inglés, y también las más largas. Puede tomar como referencia la lista completa de palabras en inglés aquí .


NOyFOOno son entradas válidas por sus reglas.NOT WAVY WORDSsección, lo cual es correcto ..Respuestas:
05AB1E ,
119 bytes (Gracias a Adnan)Pruébalo en línea!
Casos ondulados:
0 - Ondulado decreciente
1 - Ondulado creciente
Casos no ondulados:
[0,1] - No ondulado, inicialmente disminuyendo, pero luego tiene un aumento / igualdad que rompió el patrón.
[1,0] - No ondulado, inicialmente aumentando, pero luego tiene una disminución / igualdad que rompió el patrón
Cadena de entrada : no es posible ser ondulado en primer lugar debido a la longitud.
Explicación:
fuente
The input words will contain at least 3 distinct charactersque no tenía que manejar menos de 3 palabras char. Trabajar en los cambios puede llevar un tiempo; Esta es mi primera respuesta que pude hacer en 05AB1E.ü‹es lo mismo queü-0‹:)Jalea , 10 bytes
TryItOnline! o ejecutar todos los casos de prueba
Devuelve:
[1]para aumentar ondulado[-1]para disminuir onduladootra cosa de lo contrario (
[],[0],[-1,1], o[1,-1])(Declarado como innecesaria: Para un único valor para cada uno
OIṠḟ0µL’aQS(11 bytes) devolverá1,-1y0respectivamente).¿Cómo?
fuente
Python 2, 54 bytes
Toma la entrada como una lista de caracteres. Salidas:
Comprueba si la cadena de entrada ordenada es igual a su original o inversa. Lo hace cortando con pasos de 1 y -1. Al mismo tiempo, verificamos si la palabra tiene al menos 2 letras distintas.
Si se puede utilizar "salir con error" como salida para ninguno de los dos casos, podemos bajar a 51 bytes:
fuente
Python 3,
7775 bytesAsume que todas las letras son del mismo caso.
Devoluciones:
0si no ondulado1si hacia adelante ondulado2si está ondulado hacia atrásSe eliminaron espacios innecesarios gracias a @ETHproductions
fuente
or.R,
9695 bytesDevoluciones:
1para ondulado y criado2para ondulado y decreciente3para no onduladoExplicado
d=diff(rle(utf8ToInt(x))$v): Genera una variabledconvirtiendo primero la cadena en susASCIIvalores usando loutf8ToIntque convenientemente devuelve un vector. Posteriormente realice la codificación de longitud de ejecución usandorle.rle(...)$vdevuelve los valores no repetidos de la secuencia (es decir, contrayendo todas las ejecuciones). Finalmente toma la diferencia.if(any(d>0)&any(d<0)|sum(1|d)<2)3: Si al menos una de las diferencias es positiva y al menos una negativa, o si la secuencia de diferencia tiene menos de2elementos (equivalente a que la palabra original tenga menos de 3 caracteres), la palabra no es ondulada y regresa3else``if``(all(d<1),2,1): De lo contrario, si todas las diferencias son negativas, regrese2para ondulado y decreciente, de lo contrario regrese1para ondulado y subiendo.Pruebe todos los casos de prueba en R-fiddle (tenga en cuenta que se llama de tal manera que se puede vectorizar para los casos de prueba).
fuente
JavaScript (ES6),
8481 bytesAsume que la entrada está en el mismo caso. Retornos
1para aumentar ondulado,-1para disminuir ondulado0o-0(ambos son falsos) para no ondulado. Editar: Guardado 3 bytes gracias a @RobertHickman.fuente
new?new.t=[...s]y usando t en lugar de [...] en esos dos puntos donde lo tiene.Javascript (ES6),
848078 bytesDonde el aumento ondulado es 0, la disminución es 1 y -1 no es ondulado.
Gracias a @Neil por ayudarme a ahorrar 2 bytes.
fuente
new Set(s=[...i])te ahorra 2 bytes. (Funciona iterandoi, convirtiéndolo en una matriz, iterando la matriz y convirtiéndolo en un conjunto. Enrevesado pero no te preocupas por ese tipo de cosas cuando juegas al golf.)Pyth, 12 bytes
Pruébalo en línea. Banco de pruebas.
fuente
Python 2,
535250 bytesEspera entradas entre comillas, por ejemplo
"watch"Como lambda sin nombre:
Suma el signo de diferencia entre cada letra y la división entera por
len-1. Si todos estuvieran1(aumentando), la sumalen-1se muestra1, similar para disminuir-1y para mezclar1,-1la suma es menor delen-1lo que se muestra0.-1 byte para cambiar
cmp,s[1:],s[:-1])acmp,s[1:],s)+1fuente
1para"NO"LMNOPentonces O va después de N, lo que significa aumentar, lo que significa 1lenproblema, pero los caracteres repetidos siguen siendo un problemaRuby, 54 bytes
Devuelve
0si la palabra no es ondulada,1si es ondulada hacia atrás y2si es ondulada hacia adelante.fuente
Groovy - 56 bytes
{d = it [0]; c = [0] * 3; it.each {a-> c [(a <=> d)] = 1; d = a}; c [1 ..- 1]}Salidas
[1,0]para elevar ondulado,[0,1]para disminuir ondulado,[0,0]para entrada de un solo carácter o[1,1]para no ondulado.NOTA: Asume que la entrada es una Cadena o un carácter [] y todas las letras son del mismo caso.
fuente
PHP, 96 bytes
o 98 bytes
0 no ondulado 1 subiendo -1 disminuyendo
fuente
-en lugar de2*(-1 para disminuir: -1 byte).*(!!...)no necesita paréntesis. (-2)$s*$s>1en lugar deabs($s)>1(-2)PHP, 100 bytes
Devoluciones:
-1para ondulado, decreciente.0para no ondulado1para ondulado, levantando.fuente
!!array_unique($s)[2]en lugar decount(array_unique($l))>2C, 164 bytes
Devuelve 0 si no está ondulado, 1 si está ondulado y subiendo, 2 si está disminuyendo.
fuente
Raqueta 321 bytes
Sin golf:
Pruebas:
Salida:
fuente
Java 7,
254240 bytesEmite
0si la cadena de entrada no es ondulada,1si es una onda ascendente y2si es una onda decreciente.Ungolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
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 bytes)