Problema
Vamos definir um conjunto de Cantores generalizados excluindo iterativamente alguns segmentos racionais de comprimento do meio de todos os intervalos que ainda não foram excluídos, iniciando em um único intervalo contínuo.
Dados os comprimentos relativos dos segmentos a serem excluídos ou não e o número de iterações a serem executadas, o problema é escrever um programa ou função que produza os comprimentos relativos dos segmentos que foram ou não foram excluídos após as n
iterações.
Exemplo: excluir iterativamente o quarto e o sexto oitavo
Entrada:
n
- número de iterações, indexadas a partir de 0 ou 1
l
- lista de comprimentos de segmentos como números inteiros positivos com gcd(l)=1
e com comprimento ímpar, representando os comprimentos relativos das partes que permanecem como são ou são excluídas, iniciando em um segmento que não é excluído. Como o tamanho da lista é ímpar, o primeiro e o último segmento nunca são excluídos. Por exemplo, para o conjunto regular do Cantor, isso seria [1,1,1] para um terço que permanece, um terço que é excluído e novamente um terço que não.
Resultado:
Lista inteiro o
, gcd(o)=1
, de comprimentos de segmento em relação a n
th iteração quando os segmentos que não foram eliminados na iteração anterior, é substituída por uma cópia reduzida da lista l
. A primeira iteração é justa [1]
. Você pode usar qualquer método de saída inequívoco , mesmo que unário.
Exemplos
n=0, l=[3,1,1,1,2] → [1]
n=1, l=[3,1,1,1,2] → [3, 1, 1, 1, 2]
n=2, l=[3,1,1,1,2] → [9,3,3,3,6,8,3,1,1,1,2,8,6,2,2,2,4]
n=3, l=[5,2,3] → [125,50,75,100,75,30,45,200,75,30,45,60,45,18,27]
n=3, l=[1,1,1] → [1,1,1,3,1,1,1,9,1,1,1,3,1,1,1]
Você pode assumir que a entrada é válida. Isso é código-golfe , então o programa mais curto medido em bytes vence.
[0, 1, 2, 4, 6, 7]
vez de[3, 1, 1, 1, 2]
?Respostas:
Geléia ,
15 1312 bytes-2 graças a Dennis (o uso de um link em vez de uma cadeia permite que o direito seja usado implicitamente por
¡
; Não há necessidade de agrupar a1
lista porque o Jelly imprime listas de um item da mesma forma que o item)-1 graças a Erik the Outgolfer (use
Ɗ
para salvar a nova linha de usarÇ
)Um programa completo que imprime uma lista no formato Jelly (assim
[1]
é impresso como1
)Experimente online!
Quão?
fonte
Python 2 ,
1201071041031009989 bytesExperimente online!
Salvou
fonte
R , 94 bytes
Experimente online!
fonte
Haskell ,
7658 bytesExperimente online!
A função
(%)
usa a lista de comprimentos de linhal
como primeiro argumento e o número de iteraçõesn
como segunda entrada.Obrigado a Angs e Ørjan Johansen por -18 bytes!
fonte
n
e soltando#
por completo%
pode ser reduzido paral%a=do(x,m)<-zip a$a>>[l,[sum l]];(*x)<$>m
.JavaScript (Firefox 42-57), 80 bytes
Precisa dessas versões específicas porque usa compreensão de matriz e exponenciação.
fonte
JavaScript (Node.js) , 71 bytes
Experimente online!
fonte
Java 10, 261 bytes
Modifica a lista de entrada em vez de retornar uma nova para salvar bytes.
Experimente online.
fonte
Gelatina , 13 bytes
Experimente online!
Programa completo. Saídas em
1
vez de[1]
. Irritantemente,ḋ
não funciona como×S¥
neste contexto eƭ
não funciona bem com nilads. > _ <fonte
APL (Dyalog Classic) , 20 bytes
Experimente online!
fonte
K (ngn / k) , 27 bytes
Experimente online!
{
}
é uma função com argumentosx
ey
(y;+/y)
um par dey
e sua soma{
}[(y;+/y)]
projeção (também conhecida como currying ou aplicação parcial) de uma função diádica com um argumento.x
será(y;+/y)
ey
será o argumento quando aplicado.,1
lista singleton contendo 1x{
}[
]/
aplique osx
tempos de projeção(#y)#x
remodelar para o comprimento do resultado atual, ou seja, alternar entre o exteriory
e sua somay*
multiplique cada elemento acima pelo elemento correspondente do resultado atual,/
concatenarfonte
Ruby , 73 bytes
Experimente online!
fonte
Pitão , 20 bytes
A entrada é uma matriz de segmentos e
l
, em seguida, iteraçõesn
. Experimente online aqui ou verifique todos os casos de teste de uma vez aqui .fonte