Essa pergunta tem uma configuração semelhante a Encontrar uma matriz que se encaixe em um conjunto de somas, embora seja bastante diferente em seus objetivos.
Considere uma matriz A
de comprimento n
. A matriz contém apenas números inteiros positivos. Por exemplo A = (1,1,2,2)
. Vamos definir f(A)
como o conjunto de somas de todos os subarrays contíguos não vazios de A
. Nesse caso f(A) = {1,2,3,4,5,6}
. As etapas a f(A)
serem produzidas são as seguintes:
Os sub-arranjos de A
são (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)
. Suas respectivas somas são 1,1,2,2,2,3,4,4,5,6
. O conjunto que você obtém desta lista é, portanto {1,2,3,4,5,6}
.
Chamamos uma matriz de A
única se não houver outra matriz B
do mesmo comprimento, de modo que f(A) = f(B)
, exceto a matriz A
invertida. Como exemplo, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}
mas não há outra matriz de comprimento 3
que produz o mesmo conjunto de somas.
Consideraremos apenas matrizes em que os elementos são um número inteiro s
ou s+1
. Por exemplo, se s=1
as matrizes conteriam apenas 1
e 2
.
Tarefa
A tarefa, para um dado n
e, s
é contar o número de matrizes exclusivas desse comprimento. Você pode assumir que s
está entre 1
e 9
.
Você não deve contar o inverso de uma matriz, bem como a própria matriz.
Exemplos
s = 1
, a resposta é sempre n+1
.
s = 2
, as respostas contando de n = 1
cima são:
2,3,6,10,20,32,52,86
s = 8
, as respostas contando de n = 1
cima são:
2,3,6,10,20,36,68,130
Ponto
Para um dado n
, seu código deve gerar a resposta para todos os valores de s
from 1
a 9
. Sua pontuação é o valor mais alto n
para o qual isso termina em um minuto.
Teste
Vou precisar executar seu código na minha máquina ubuntu, portanto, inclua as instruções mais detalhadas possíveis sobre como compilar e executar seu código.
Entre os melhores
- n = 24 por Anders Kaseorg em Oxidação (34 segundos)
- n = 16 por Ourous em Clean (36 segundos)
- n = 14 por JRowan no Common Lisp (49 segundos)
fonte
Respostas:
Ferrugem , nº 24
Requer ferrugem noturna para o
reverse_bits
recurso conveniente . Compilerustc -O unique.rs
e execute com (por exemplo)./unique 24
.fonte
s
es+1
nelas?s
es + 1
(desde que você disse que essas são as únicas matrizes que consideraremos), embora não seja imediatamente óbvio se isso faria alguma diferença.Lisp SBCL comum, N = 14
função de chamada (goahead ns)
aqui estão os tempos de execução
fonte
sbcl
alguma forma?Limpar \ limpo
Certamente não é a abordagem mais eficiente, mas estou interessado em ver o desempenho de um filtro ingênuo por valor.
Dito isto, ainda há algumas melhorias a serem feitas usando esse método.
Coloque em um arquivo chamado
main.icl
ou altere a linha superior paramodule <your_file_name_here>
.Compile com
clm -h 1500m -s 50m -fusion -t -IL Dynamics -IL StdEnv -IL Platform main
.Você pode obter a versão que o TIO (e eu) utilizamos no link no cabeçalho ou em uma versão mais recente daqui .
fonte
s
? Na pergunta, você declara " Para um dado n , seu código deve gerar a resposta para todos os valores de s de 1 a 9."