Tarefa
Defina uma dobra de modificação em função da forma f (x) = x% a 1 % a 2 %…% a k , onde a a i são números inteiros positivos e k ≥ 0 . (Aqui, % é o operador do módulo associativo à esquerda.)
Dada uma lista de n números inteiros y 0 ,…, y n − 1 , determine se existe uma dobra mod f para que cada y i = f (i) .
Você pode escolher e fixar quaisquer duas saídas Y e N para sua função / programa. Se existir um f , você sempre deve retornar / imprimir exatamente Y ; se não, você deve sempre retornar / imprimir exatamente N . (Estes podem ser true
/ false
, ou 1
/ 0
, ou false
/ true
, etc.) Mencione-os na sua resposta.
O menor envio em bytes vence.
Exemplo
Defina f (x) = x% 7% 3 . Seus valores começam:
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ...
| f(x) | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | ...
Assim, dada 0 1 2 0 1 2 0 0 1 2
como entrada para a solução, que iria imprimir Y , como esta f gera essa sequência. No entanto, 0 1 0 1 2
como entrada, imprimiríamos N , pois nenhum f gera essa sequência.
Casos de teste
As fórmulas fornecidas quando a saída é Y são apenas para referência; você não deve imprimi-los em nenhum momento.
0 1 2 3 4 5 Y (x)
1 N
0 0 0 Y (x%1)
0 1 2 0 1 2 0 0 1 2 Y (x%7%3)
0 0 1 N
0 1 2 3 4 5 6 0 0 1 2 Y (x%8%7)
0 1 2 0 1 2 0 1 2 3 N
0 2 1 0 2 1 0 2 1 N
0 1 0 0 0 1 0 0 0 0 1 Y (x%9%4%3%2)
Respostas:
Pitão, 14 bytes
Retorna
True/False
. Experimente on-line: Demonstration or Test SuiteExplicação:
Pitão, 11 bytes
Com base na idéia de @ ferrsum . Na verdade, pensei em usar os índices zero para a geração de subconjuntos, mas não percebi que todos os índices zero já deveriam ser a solução.
fonte
Python 3,
239218 bytesUma função anônima que recebe entrada de uma lista
z
e retornaTrue
ouFalse
paraY
eN
.Isso usa um método semelhante à resposta de @Jakube e, embora seja essencialmente uma força bruta, é executado muito rapidamente.
Experimente no Ideone
fonte
Python 2, 69 bytes
Usa
True
/False
.A resposta para o que caracteriza uma série dobrável em mod acaba sendo menos interessante do que parece à primeira vista. É uma série do formato 0, 1, ..., M - 1, 0, 1, ... x 1 , 0, 1, ..., x 2 , ... tal que para todos i, 0 <= x i <M. Essa sequência pode ser produzida pela cadeia mod de todos os índices (com base em 0) dos zeros na matriz, excluindo o primeiro.
fonte
Geléia ,
191514 bytesRetorna 1 para verdade, 0 para falsidade. Experimente online!
O algoritmo é O (n n ) , em que n é o comprimento da lista, tornando-o muito lento e com muita memória para a maioria dos casos de teste.
Uma versão modificada - que substitui a segunda
L
por a5
- pode ser usada para verificar todos os casos de teste . Observe que esta versão modificada não funcionará para listas arbitrariamente longas.Como funciona
fonte
JavaScript (ES6),
98bytesEconomizou 48 bytes mudando para a descoberta de @ Feersum. Qualquer valor especificado
n
na matriz é zero, nesse caso a próxima previsãop
é 1 ou é igual à próxima previsão, e nesse casop
é incrementado. Também medimos o comprimentol
da sequência inicial comparandop
comi
, comon
sempre deve ser menor do quel
em todos os momentos.fonte
Python 2,
10399 bytesImprime 1 para verdade e 0 para falsidade. Teste em Ideone .
fonte