Una funzione semi-esponenziale è quella che, se composta con se stessa, dà una funzione esponenziale. Ad esempio, se f(f(x)) = 2^x
, allora f
sarebbe una funzione semi-esponenziale. In questa sfida, calcolerai una specifica funzione semi-esponenziale.
In particolare, calcolerai la funzione dagli interi non negativi agli interi non negativi con le seguenti proprietà:
Monotonicamente in aumento: se
x < y
, alloraf(x) < f(y)
Almeno mezzo esponenziale: per tutti
x
,f(f(x)) >= 2^x
Lessicograficamente più piccolo: tra tutte le funzioni con le proprietà di cui sopra, emette quella che minimizza
f(0)
, che data quella scelta minimizzaf(1)
, quindif(2)
, e così via.
I valori iniziali di questa funzione, per gli ingressi 0, 1, 2, ...
sono:
[1, 2, 3, 4, 8, 9, 10, 11, 16, 32, 64, 128, 129, 130, 131, 132, 256, 257, ...]
È possibile generare questa funzione tramite uno dei seguenti metodi, sia come funzione che come programma completo:
Prendi
x
come input, outputf(x)
.Prendi
x
come input, visualizza i primix
valori dif
.Produce all'infinito tutto
f
.
Se si desidera acquisire x
e produrre f(x)
, è x
necessario indicizzare zero.
Implementazione di riferimento
Questo è il codice golf - vince il codice più corto in byte. Le scappatoie standard sono vietate, come sempre.