Problema
Definamos un conjunto de Cantor generalizado eliminando iterativamente algunos segmentos de longitud racional del medio de todos los intervalos que aún no se han eliminado, comenzando desde un único intervalo continuo.
Dadas las longitudes relativas de los segmentos a eliminar o no, y el número de iteraciones a realizar, el problema es escribir un programa o función que genere las longitudes relativas de los segmentos que se han eliminado o no después de las n
iteraciones.
Ejemplo: eliminar iterativamente el cuarto y sexto octavo
Entrada:
n
- número de iteraciones, indexadas a partir de 0 o 1
l
- lista de longitudes de segmento como enteros positivos con gcd(l)=1
longitud impar, que representan las longitudes relativas de las partes que permanecen como están o se eliminan, comenzando desde un segmento que no se elimina. Como la longitud de la lista es impar, el primer y el último segmento nunca se eliminan. Por ejemplo, para el conjunto regular de Cantor, esto sería [1,1,1] para un tercio que se queda, un tercio que se elimina y nuevamente un tercio que no.
Salida:
Lista de números enteros o
, gcd(o)=1
, de longitudes de segmento relativas en el n
º iteración cuando los segmentos que no se eliminaron en la iteración anterior se sustituyen por una copia reducida de la lista l
. La primera iteración es justa [1]
. Puede usar cualquier método de salida inequívoco , incluso unario.
Ejemplos
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]
Puede asumir que la entrada es válida. Este es el código de golf , por lo que gana el programa más corto medido en bytes.
[0, 1, 2, 4, 6, 7]
lugar de[3, 1, 1, 1, 2]
?Respuestas:
Jalea ,
15 1312 bytes-2 gracias a Dennis (el uso de un Enlace en lugar de una cadena permite que el derecho sea utilizado implícitamente por
¡
; No es necesario envolverlo1
en una lista debido al hecho de que Jelly imprime las listas de un elemento igual que el elemento)-1 gracias a Erik the Outgolfer (use
Ɗ
para guardar el uso de la nueva líneaÇ
)Un programa completo que imprime una lista en formato Jelly (
[1]
se imprime como1
)Pruébalo en línea!
¿Cómo?
fuente
Python 2 ,
1201071041031009989 bytesPruébalo en línea!
Salvado
fuente
R , 94 bytes
Pruébalo en línea!
fuente
Haskell ,
7658 bytesPruébalo en línea!
La función
(%)
toma la lista de longitudes de líneal
como primer argumento y el número de iteracionesn
como segunda entrada.¡Gracias a Angs y Ørjan Johansen por -18 bytes!
fuente
n
y soltándola por#
completo%
se puede acortar al%a=do(x,m)<-zip a$a>>[l,[sum l]];(*x)<$>m
.JavaScript (Firefox 42-57), 80 bytes
Necesita esas versiones específicas porque utiliza tanto la comprensión de matriz como la exponenciación.
fuente
JavaScript (Node.js) , 71 bytes
Pruébalo en línea!
fuente
Java 10, 261 bytes
Modifica la lista de entrada en lugar de devolver una nueva para guardar bytes.
Pruébalo en línea.
fuente
Jalea , 13 bytes
Pruébalo en línea!
Programa completo Salidas en
1
lugar de[1]
. Molesto,ḋ
no funciona como×S¥
en este contexto, yƭ
no funciona bien con nilads. > _ <fuente
APL (Dyalog Classic) , 20 bytes
Pruébalo en línea!
fuente
K (ngn / k) , 27 bytes
Pruébalo en línea!
{
}
es una función con argumentosx
yy
(y;+/y)
un par dey
y su suma{
}[(y;+/y)]
proyección (también conocida como curry o aplicación parcial) de una función diádica con un argumento.x
será(y;+/y)
yy
será el argumento cuando se aplique.,1
lista singleton que contiene 1x{
}[
]/
aplicar la proyecciónx
tiempos de(#y)#x
remodelar a la longitud del resultado actual, es decir, alternar entre el exteriory
y su sumay*
multiplique cada elemento de lo anterior con el elemento correspondiente del resultado actual,/
concatenarfuente
Ruby , 73 bytes
Pruébalo en línea!
fuente
Pyth , 20 bytes
La entrada es una matriz de segmentos
l
, luego iteracionesn
. Pruébelo en línea aquí , o verifique todos los casos de prueba a la vez aquí .fuente