Una función semi-exponencial es aquella que cuando se compone consigo misma da una función exponencial. Por ejemplo, si f(f(x)) = 2^x
, entonces f
sería una función medio exponencial. En este desafío, calcularás una función semiexponencial específica.
Específicamente, calculará la función desde los enteros no negativos hasta los enteros no negativos con las siguientes propiedades:
Monotónicamente creciente: si
x < y
, entoncesf(x) < f(y)
Al menos medio exponencial: para todos
x
,f(f(x)) >= 2^x
Lexicográficamente más pequeña: Entre todas las funciones con las propiedades anteriores, la salida de la que reduce al mínimo
f(0)
, lo que, dado que reduce al mínimo la elecciónf(1)
, a continuaciónf(2)
, y así sucesivamente.
Los valores iniciales de esta función, para las entradas 0, 1, 2, ...
son:
[1, 2, 3, 4, 8, 9, 10, 11, 16, 32, 64, 128, 129, 130, 131, 132, 256, 257, ...]
Puede generar esta función a través de cualquiera de los siguientes métodos, ya sea como función o como programa completo:
Tomar
x
como entrada, salidaf(x)
.Tomar
x
como entrada, generar los primerosx
valores def
.Infinitamente salida de todo
f
.
Si desea tomar x
y generar f(x)
, x
debe estar indexado a cero.
Este es el código de golf: el código más corto en bytes gana. Las lagunas estándar están prohibidas, como siempre.
Respuestas:
JavaScript (ES7),
5148 bytesGuardado 3 bytes gracias a @Arnauld
Toma n y saca el n . ° elemento de la secuencia.
JavaScript (ES7),
706864 bytesUna función recursiva que toma
x
y devuelve los primerosx
elementos de la secuencia como una matriz.Cómo funciona
La matriz a se genera de forma procesal, un elemento a la vez, hasta que alcanza la longitud deseada. (Un puerto de la técnica infinita utilizada en la excelente respuesta de Python de xnor probablemente sería más corto).
Podemos hacer la siguiente observación para cada índice i (indexado a 0):
Esto es cierto porque f (f (j)) debe ser al menos 2 j , y f (f (j)) es equivalente a a [a [j]] , que a su vez es equivalente a a [i] .
Normalmente la opción correcta es exactamente 2 j . Sin embargo, para el caso singular i = 2 , 2 existe en la matriz en el índice j = 1 , lo que significa que 2 j sería 2, pero esto significa que tendríamos 2 en a [1] y a [2] . Para evitar esto, tomamos el máximo de 2 j y un [i-1] + 1 (uno más que el elemento anterior), que da 3 para i = 2 .
Esta técnica también se encarga de decidir si existe o no j ; si no existe, el
.indexOf()
método de JS devuelve -1 , lo que lleva a tomar el máximo de a [i-1] + 1 y 2 -1 = 0.5 . Como todos los elementos de la secuencia son al menos 1 , esto siempre devolverá el elemento anterior más uno.(Estoy escribiendo esta explicación a altas horas de la noche, así que avíseme si algo es confuso o si me perdí algo)
fuente
272
y más dan respuestas incorrectas debido a problemas de desbordamiento de enteros. Esto está bien, ya que funciona hasta el límite del tipo de datos.2**
lugar de con1<<
suerte solucionar el problema..99
mata la solución. ¿Pero por qué usar+.99
y no solo+.9
? ¿Cual es la diferencia?Math.log2(...)
y tuve que calcular el techo. Ahora no es necesario en absoluto. ¡Gracias! Investigaré el2**
asunto: estaba usando2**...+.99|0
originalmente, pero1<<
era más corto porque no necesitaba el|0
. Ahora creo que no hay diferencia ...Python 2 , 60 bytes
Pruébalo en línea!
Imprime para siempre.
Python , 61 bytes
Pruébalo en línea!
Una función. Salidas
True
en lugar de1
.fuente
Perl 5, 53 + 1 (
-p
) = 54 bytesPruébalo en línea
fuente
Bash, 66 bytes
Pruébalo en línea
fuente
Jalea , 14 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 2 , 111 bytes
Pruébalo en línea!
Esta es una modificación significativa de la respuesta del usuario 202729 . Hubiera publicado esta mejora como un comentario, pero la respuesta se elimina y, por lo tanto, los comentarios están deshabilitados.
fuente
x**2
es demasiado pequeño.x=1000
. Es posible que desee probar2**x
, terriblemente grande, pero codegolf es codegolf.2**x
crea un rango demasiado grande para que Python continúe.Swift , 137 bytes
Toma la entrada como
Int
(entero) e imprime como[Int]
(matriz entera).Versión sin golf
fuente
?
?