Uma palavra de Lyndon é uma string estritamente lexicograficamente menor do que qualquer uma de suas rotações cíclicas. Dada uma sequência binária, determine se é uma palavra Lyndon no menor número de bytes possível.
Por exemplo, 001011
é uma palavra de Lyndon. Suas rotações, listadas abaixo, são obtidas movendo repetidamente o primeiro símbolo até o fim.
001011
010110
101100
011001
110010
100101
Destes, a sequência original vem lexicograficamente primeiro, ou equivalente, representa o menor número binário.
No entanto, 001001
não é uma palavra de Lyndon porque uma de suas rotações é a mesma que ela mesma, o que a vincula lexicograficamente mais cedo.
Entrada: uma sequência de caracteres binária não vazia ou uma lista de dígitos 0
e 1
. Você não pode usar números, como 5
para representar 101
.
Saída: um valor Truthy ou Falsey consistente que diz se a sequência é uma palavra de Lyndon.
Não são permitidos embutidos especificamente para palavras Lyndon.
Casos de teste:
As palavras de Lyndon com comprimento de até 6 são:
0
1
01
001
011
0001
0011
0111
00001
00011
00101
00111
01011
01111
000001
000011
000101
000111
001011
001101
001111
010111
011111
As palavras não-Lyndon de comprimento até 4 são:
00
10
11
000
010
100
101
110
111
0000
0010
0100
0101
0110
1000
1001
1010
1011
1100
1101
1110
1111
Entre os melhores:
x
iguais ax
?