(Nota: este é um spin-off mais fácil do meu desafio anterior Find the Infinity Words!, Que é um spin-off do meu outro desafio anterior Find the Swirling Words! :))
Definição de uma palavra ondulada :
- Se você conectar com curvas todos os caracteres de uma Palavra Ondulada no alfabeto (AZ), obterá o caminho de uma onda indo continuamente para a direita ou para a esquerda e nunca mudando de direção, como nos diagramas abaixo.
- Uma palavra ondulada pode ser:
- Aumentando se cada caractere consecutivo está à direita (no alfabeto) do anterior.
- Diminuindo se cada caractere consecutivo estiver à esquerda (no alfabeto) do caractere anterior.
- Todas as conexões pares devem estar inoperantes, todas as conexões ímpares devem estar ativadas.
- Você pode ignorar maiúsculas / minúsculas ou considerar / converter tudo em maiúsculas ou tudo em minúsculas.
- As palavras de entrada são apenas caracteres no intervalo alfabético de AZ, sem espaços, sem pontuação ou símbolos.
- Se uma palavra tiver caracteres duplos, como "COLHER", você deverá reduzir as dobras para um caractere: "COLHER"> "COLHER" (porque se você passar de O para O é a distância zero).
- As Palavras Onduladas conterão pelo menos 3 caracteres distintos (mesmo após o colapso das duplas).
Aqui estão alguns exemplos:
Tarefa:
Escreva um programa ou função completa que retire uma palavra da entrada padrão e saia se for uma Palavra Ondulada ou não, e, no caso positivo, saia se estiver aumentando ou diminuindo . A saída pode ser True/False/Null
, 2/1/0
, 1/Null/0
, -1/0/1
, NO/WR/WD
, etc, você decide como para representá-lo.
Casos de teste:
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
Regras:
- O menor código vence.
Tarefa opcional:
Encontre, como uma lista, o maior número possível de Palavras Onduladas em um dicionário em inglês, e as mais longas também. Você pode tomar, por exemplo, como referência a lista completa de palavras em inglês aqui .
NO
eFOO
não são entradas válidas pelas suas regras.NOT WAVY WORDS
seção, porém, o que é correto ..Respostas:
05AB1E ,
119 bytes (Graças a Adnan)Experimente online!
Casos ondulados:
0 - Diminuindo Ondulado
1 - Aumentando Ondulado
Casos não ondulados:
[0,1] - Não ondulado, diminuindo inicialmente, mas depois apresenta um aumento / igualdade que quebrou o padrão.
[1,0] - Não ondulado, aumentando inicialmente, mas depois apresenta uma diminuição / igualdade que quebrou o padrão
String de entrada - Não é possível ficar ondulado em primeiro lugar devido ao comprimento.
Explicação:
fonte
The input words will contain at least 3 distinct characters
que não precisava lidar com menos de três palavras de caractere. Trabalhando em mudanças, pode demorar um pouco; esta é minha primeira resposta que pude fazer no 05AB1E.ü‹
é o mesmo queü-0‹
:)Gelatina , 10 bytes
TryItOnline! ou execute todos os casos de teste
Returns:
[1]
para ondulado aumentando[-1]
para ondulado diminuindooutra coisa de outra forma (
[]
,[0]
,[-1,1]
ou[1,-1]
)(Declarada como desnecessária: Para um único valor para cada um
OIṠḟ0µL’aQS
(11 bytes) voltará1
,-1
e0
respectivamente).Quão?
fonte
Python 2, 54 bytes
Recebe a entrada como uma lista de caracteres. Saídas:
Verifica se a sequência de entrada classificada é igual ao original ou reversa. Faz isso cortando com tamanhos de etapas de 1 e -1. Ao mesmo tempo, verificamos se a palavra tem pelo menos 2 letras distintas.
Se "exit with error" puder ser usado como saída nos dois casos, podemos reduzir para 51 bytes:
fonte
Python 3,
7775 bytesAssume que todas as letras são do mesmo caso.
Devoluções:
0
se não for ondulado1
se encaminha ondulado2
se ondulado para trásRemovidos espaços desnecessários graças a @ETHproductions
fonte
or
.R,
9695 bytesDevoluções:
1
para ondulado e levantando2
para ondulado e decrescente3
para não onduladoExplicado
d=diff(rle(utf8ToInt(x))$v)
: Gera uma variáveld
convertendo primeiro a cadeia de caracteres em seusASCII
valores usando outf8ToInt
que convenientemente retorna um vetor. Posteriormente, execute a codificação do comprimento da execução usandorle
.rle(...)$v
retorna os valores não repetidos da sequência (ou seja, recolhendo todas as execuções). Finalmente pegue a diferença.if(any(d>0)&any(d<0)|sum(1|d)<2)3
: Se pelo menos uma das diferenças for positiva e pelo menos uma negativa, ou se a sequência de diferenças tiver menos de2
elementos (equivalente à palavra original com menos de 3 caracteres), a palavra não será ondulada e retornará3
else``if``(all(d<1),2,1)
: Caso contrário, se todas as diferenças forem negativas, retorne2
contrário, para ondulado e decrescente; caso contrário, retorne1
para ondulado e aumentado.Experimente todos os casos de teste no R-fiddle (observe que o nome é tal que pode ser vetorizado para os casos de teste).
fonte
JavaScript (ES6),
8481 bytesAssume que a entrada é tudo no mesmo caso. Retorna
1
para aumentar ondulado,-1
para diminuir ondulado0
ou-0
(ambos são falsos) para não ondulado. Editar: salvou 3 bytes graças a @RobertHickman.fonte
new
?new
.t=[...s]
e usando t em vez de [...] nos dois pontos em que você o possui.Javascript (ES6),
848078 bytesOnde o aumento ondulado é 0, o decréscimo é 1 e -1 não é ondulado.
Agradeço ao @ Neil por me ajudar a economizar 2 bytes.
fonte
new Set(s=[...i])
economiza 2 bytes. (Ele funciona através da iteraçãoi
, transformando-o em uma matriz, iteração a matriz, e transformando isso em um conjunto complicado, mas você não se preocupe com esse tipo de coisa quando você está golfe..)Pitão, 12 bytes
Experimente online. Suíte de teste.
fonte
Python 2,
535250 bytesEspera a entrada entre aspas, por exemplo
"watch"
Como lambda sem nome:
Soma o sinal de diferença entre cada letra e o número inteiro dividido por
len-1
. Se todos estivessem1
(aumentando) a soma que élen-1
exibida1
, semelhante para diminuir-1
e para misto1
,-1
a soma é menor do quelen-1
é exibida0
.-1 byte para mudar
cmp,s[1:],s[:-1])
paracmp,s[1:],s)+1
fonte
1
para"NO"
LMNOP
então O está atrás de N, o que significa aumentar, o que significa que 1len
problema, mas eu os caracteres de repetição ainda são um problemaRuby, 54 bytes
Retorna
0
se a palavra não estiver ondulada,1
se estiver ondulada para trás e2
se estiver ondulada para frente.fonte
Groovy - 56 bytes
Saídas
[1,0]
para aumentar ondulado,[0,1]
para diminuir ondulado,[0,0]
para entrada de caractere único ou[1,1]
para não ondulado.NOTA: Assume que a entrada é uma String ou um caractere [] e todas as letras são do mesmo caso.
fonte
PHP, 96 bytes
ou 98 bytes
0 não ondulado 1 aumentando -1 diminuindo
fonte
-
em vez de2*
(-1 para diminuir: -1 byte).*(!!...)
não precisa de parênteses. (-2)$s*$s>1
em vez deabs($s)>1
(-2)PHP, 100 bytes
Devoluções:
-1
para ondulado, diminuindo.0
para não ondulado.1
para ondulado, levantando.fonte
!!array_unique($s)[2]
em vez decount(array_unique($l))>2
C, 164 bytes
Retorna 0 se não estiver em movimento, 1 se estiver em movimento e aumentando, 2 se estiver diminuindo.
fonte
Raquete 321 bytes
Ungolfed:
Teste:
Resultado:
fonte
Java 7,
254240 bytesSaída
0
se a sequência de entrada não estiver ondulada,1
se for uma onda crescente e2
se for uma onda decrescente.Ungolfed & código de teste:
Experimente aqui.
Resultado:
fonte
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)