Relacionado: Función phi (n) iterada .
Su desafío es calcular la función phi iterada:
f(n) = number of iterations of φ for n to reach 1.
Dónde φ está la función totient de Euler ?
Relacionado OEIS .
Aquí está el gráfico de la misma:
Reglas:
Su objetivo es salir f(n)den=2 a n=100.
Este es el código de golf, por lo que gana el código más corto.
Aquí están los valores con los que puede verificar:
1, 2, 2, 3, 2, 3, 3, 3, 3, 4, 3, 4, 3, 4, 4, 5, 3, 4, 4, 4, 4, 5, 4, 5, 4, 4, 4, 5, 4, 5, 5, 5, 5, 5, 4, 5, 4, 5, 5, 6, 4, 5, 5, 5, 5, 6, 5, 5, 5, 6, 5, 6, 4, 6, 5, 5, 5, 6, 5, 6, 5, 5, 6, 6, 5, 6, 6, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 5, 6, 7, 5, 7, 5, 6, 6, 7, 5, 6, 6, 6, 6, 6, 6, 7, 5, 6, 6
code-golf
math
sequence
kolmogorov-complexity
number-theory
Simplemente hermoso arte
fuente
fuente


xtales comophi(x)un número fijo particular.f(n), en lugar de ejecutarla en un rango de números fijos. Esto también hace una diferencia entre los idiomas con la capacidad de aplicar funciones en rangos con menos bytes (¿desafío de camaleón en parte?)Respuestas:
Haskell ,
5352 bytesGracias nimi por guardar 1 byte!
Pruébalo en línea!
sum[1|1<-gcd n<$>[1..n]]daφ(n)(tomado de flawr , ¡gracias!)fes una función recursiva que calcula1+φ(n)si n no es1, y genera0sines1, ya que no hay más iteraciones para alcanzar1Finalmente
f<$>[2..100]crea una lista defaplicados a cada elemento de[2..100]fuente
Haskell ,
70 6968 bytesLa función
(\n->sum[1|1<-gcd n<$>[1..n]])es la función totient, que aplicamos repetidamente en la función anónima. Gracias @laikoni por -1 byte!EDITAR: Acabo de descubrir que @xnor usó esta función totient exacta en un desafío anterior .
Pruébalo en línea!
fuente
MATL ,
1615 bytesPruébalo en línea!
Explicación
Versión anterior, 16 bytes
Pruébalo en línea!
Explicación
fuente
2 3 3 4 3, cuando el desafío dice que deberían ser1 2 2 3 2Jalea ,
1211109 bytesPruébalo en línea!
-1 byte gracias a HyperNeutrino!
-1 byte gracias al Sr. Xcoder!
-1 byte gracias a Dennis
Cómo funciona
Como esto fue hecho por Dennis, yo (comprensiblemente) no tengo idea de por qué esto funciona, solo que lo hace.
fuente
f(n)desde2a100, y la pregunta no menciona la entrada, así que creo que esta es la versión correctafparan=2quen=100, no sólo un valor.#en este caso? Algo parecido a esto (que claramente no funciona pero escrito por alguien que entienda claramente la sintaxis!)€generalmente es mejor que#.APL (Dyalog) ,
502925 bytes¡Mira, no hay un paciente incorporado!
4 bytes guardados gracias a @ H.PWiz
Pruébalo en línea!
¿Cómo?
Aparentemente fui por la fórmula totient más larga (y más difícil) primero. Ver historial de revisiones.
⍳⍵-1an⍵∨- mcd conn1=- igual a 1?+/- suma todosEste es el totient. Todo lo demás es envoltorio para contar (
1+∇) y aplicar en el rango2..100(¨1+⍳99).fuente
Mathematica, 44 bytes
-10 bytes de @Misha Lavrov
-2 bytes de @ user202729
Pruébalo en línea!
fuente
J REPL, 23 bytes
No lo he comprobado, pero esto probablemente funciona en J normal si lo define como un sustantivo (jugué golf en mi teléfono en el REPL).
Empotrados, yo.
Yo diría que hay al menos 2-3 bytes para eliminar (off-by-one debido a la forma en que
a:funciona, tener que usar|como noop, etc.).fuente
+/*<:5&p:^:a:2+i.99por 19 bytes ¡ Pruébelo en línea!"+lugar de"0, por lo que igualmente podría convertirse<:#@(5&p:^:a:)"+i.99+/1<a:5&p:2+i.99a:en su código? ¿Cómo funciona en lugar de^:?(5&p:)^:a: mse puede hacera: 5&p: musando la otra definición de&cuándo una diada se une con un sustantivo y luego se llama diádica.JavaScript (ES6),
115...10499 bytesLa codificación rígida puede ser más corta, pero intentemos un enfoque puramente matemático.
fuente
Python 2 , 80 bytes
Pruébalo en línea!
fuente
Python 2 , 82 bytes
Pruébalo en línea!
Esto utiliza las observaciones que:
f(a*b) = f(a) + f(b) - 1, excepto que-1se omite siaybson ambos paresf(p) = f(p-1) + 1cuandopes primo, conf(2)=1Esto implica que si
ntiene factorización priman = 2**a * 3**b * 5**c * 7**d * 11**e * ..., entoncesf(n) = max(a,1) + b + 2*c + 2*d + 3*e + ..., donde cada unop>2en la factorización contribuyef(p-1).No estoy seguro de si estos continúan reteniendo el pasado
n=100, pero si lo hacen, dan una forma de definir y calcularfsin usarφ.fuente
Chicle , 49 bytes
Pruébalo en línea!
fuente
PowerShell , 110 bytes
Pruébalo en línea!
Enfoque matemático.
En realidad, al mirarlo, es muy similar a la respuesta C , pero se desarrolló de forma independiente. Crea una matriz de
0s, bucles desde2hasta100, luego calculaphiutilizandogcdformulación. La parte en parens al final guarda el resultado en$ala siguiente ronda y coloca una copia en la tubería, lo que resulta en la salida implícita.PowerShell, 112 bytes
Pruébalo en línea!
Codificado duro. Ho-hum
Más corto de lo que podría obtener un enfoque matemático de aproximadamente 10-15 bytes.fuente
Python 2 , 83 bytes
Pruébalo en línea!
Combina una estimación heurística con una constante codificada que corrige cada estimación como
-0o-1.fuente
Casco ,
1017 bytesPruébalo en línea!
Editar : +7 bytes para mapear realmente la función en el rango que se solicitó, antes de que fuera solo la función que computaba A003434 .
Explicación
Lo siguiente calcula A003434 :
La
m(....)ḣ100parte solo asigna esa función en el rango [2..100], no estoy seguro de cómo me perdí esa parte antes: Sfuente
PHP, 98 bytes
Pruébalo en línea!
Empaqué todos los dígitos en una cadena binaria. Después de desempacarlo, convertirlo en una matriz y luego fusionar la matriz nuevamente, solo tuve que anteponer el 1,2 y agregar el 6 ya que no encajarían o provocarían que apareciera un código de control.
fuente
Perl 6 , 47 bytes
Pruébalo en línea!
fuente
05AB1E , 11 bytes
Pruébalo en línea!
Explicación
fuente
C, 112 bytes
Sin golf:
Pruébalo en línea!
fuente
Aluminio , 87 bytes
Pruébalo en línea!
Explicación
fuente
Pyth, 38 bytes (no competitivo)
Pruébelo en Pyth Herokuapp , porque no funciona en TIO por el motivo que sea.
No tengo dudas de que la solución explícita de Pyth es más pequeña, pero quería ver qué tan pequeño podría obtener el código al comprimir la secuencia y aprender Pyth, supongo. Esto utiliza el hecho de que un límite superior de la secuencia es
log2(n)+1.Explicación
Obtuve la cadena comprimida a través
Ci_.e+1-sl+1ksb"122323333434344534444545444545555545455645555655565646555656556656665656565656656757566756666667566"3, que es justo lo contrario del código anterior con algunas conversiones de tipo.fuente
Ohm v2 , 41 bytes
Pruébalo en línea!
Literalmente completamente codificado ... De hecho, tomé la secuencia anterior, eliminé todo lo que no era un número, lo interpreté como base 8, luego lo convertí en la representación de número 255 de Ohm incorporada. Eso es lo que hacen las citas. Luego, el programa simplemente convierte eso en base 8 nuevamente.
fuente