(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í .
NO
yFOO
no son entradas válidas por sus reglas.NOT WAVY WORDS
secció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 characters
que 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
,-1
y0
respectivamente).¿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:
0
si no ondulado1
si hacia adelante ondulado2
si está ondulado hacia atrásSe eliminaron espacios innecesarios gracias a @ETHproductions
fuente
or
.R,
9695 bytesDevoluciones:
1
para ondulado y criado2
para ondulado y decreciente3
para no onduladoExplicado
d=diff(rle(utf8ToInt(x))$v)
: Genera una variabled
convirtiendo primero la cadena en susASCII
valores usando loutf8ToInt
que convenientemente devuelve un vector. Posteriormente realice la codificación de longitud de ejecución usandorle
.rle(...)$v
devuelve 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 de2
elementos (equivalente a que la palabra original tenga menos de 3 caracteres), la palabra no es ondulada y regresa3
else``if``(all(d<1),2,1)
: De lo contrario, si todas las diferencias son negativas, regrese2
para ondulado y decreciente, de lo contrario regrese1
para 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
1
para aumentar ondulado,-1
para disminuir ondulado0
o-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-1
se muestra1
, similar para disminuir-1
y para mezclar1
,-1
la suma es menor delen-1
lo que se muestra0
.-1 byte para cambiar
cmp,s[1:],s[:-1])
acmp,s[1:],s)+1
fuente
1
para"NO"
LMNOP
entonces O va después de N, lo que significa aumentar, lo que significa 1len
problema, pero los caracteres repetidos siguen siendo un problemaRuby, 54 bytes
Devuelve
0
si la palabra no es ondulada,1
si es ondulada hacia atrás y2
si es ondulada hacia adelante.fuente
Groovy - 56 bytes
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>1
en lugar deabs($s)>1
(-2)PHP, 100 bytes
Devoluciones:
-1
para ondulado, decreciente.0
para no ondulado1
para ondulado, levantando.fuente
!!array_unique($s)[2]
en lugar decount(array_unique($l))>2
C, 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
0
si la cadena de entrada no es ondulada,1
si es una onda ascendente y2
si 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)