Su trabajo es tomar los factores primos de un número tomado de la entrada (omitiendo cualquier exponente igual a 1) y luego tomar los factores primos de todos los exponentes, y así sucesivamente, hasta que no queden números compuestos; y luego da salida al resultado.
Para aclarar un poco lo que pido, aquí hay un programa de JavaScript que lo hace, pero, a 782 bytes, todavía no está muy bien:
var primes=[2,3];
function nextPrime(){
var n=2;
while(isAMultipleOfAKnownPrime(n)){n++}
primes.push(n);
}
function isAKnownPrime(n){return primes.indexOf(n)!=-1};
function isAMultipleOfAKnownPrime(n){
for(var i=0;i<primes.length;i++)if(n%primes[i]==0)return true;
return false;
}
function primeFactorize(n){
while(primes[primes.length-1]<n)nextPrime();
if(isAKnownPrime(n)||n==1)return n;
var q=[];while(q.length<=n)q.push(0);
while(n!=1){
for(var i=0;i<primes.length;i++){
var x=primes[i];
if(n%x==0){q[x]++;n/=x}
}
}
var o="";
for(var i=2;i<q.length;i++){
if(q[i]){if(o)o+="x";o+=i;if(q[i]>1){o+="^("+primeFactorize(q[i])+")"}}
}
return o;
}
alert(primeFactorize(+prompt()));
Debe establecer el orden de operaciones lo más claro posible y clasificar los factores primos en orden ascendente en cada nivel.
Obtiene una bonificación de -50 bytes si produce la salida como un formato matemático formateado o un código de látex válido.
2^(5^11*11^(2^7))*541
).Respuestas:
CJam,
3231292725-50 = -25 bytes7 bytes guardados por Dennis.
¡Woooo, Dennis redujo esto en siete bytes increíbles y logró vencer a Pyth!
Pruébalo aquí.
Explicación
Todos los contenidos de la pila se imprimirán de forma consecutiva al final del programa.
fuente
"{}"
->{}s
Parece que has descubierto cómoj
funciona.j
durante un tiempo. user23013 publicó una buena explicación sobre la Conversión de base mixta, y agregó algunos comentarios aclaratorios para el uso avanzado en algún lugar de SourceForge.j
es genial, una función con nombre sería más corta aquí:{mF{)_({Fa+'^}&*}%'**{}s\*}:F
q~S2*{mF{~'^'{@j'}'*}/;}j
Pyth, 27-50 = -23 bytes
Esto define una función recursiva
y
. Pruébelo en línea: demostraciónLa salida es un código válido de LaTeX, por lo que reclamo el bono. La llamada
y66430125
devuelve la cadena3^{2^{2}*3}*5^{3}
, que se procesa enMuy orgulloso de encontrar una manera de imprimir los corchetes sin usar corchetes en mi código.
Explicación:
fuente
repr(H)
truco, no importa. Así que lo edité ahora mismo.{}
es el diccionario vacío en Python, no el conjunto vacío.Pyth -
39343228 bytesGracias Jakube
Define una función
y
que toma un número entero:Explicación:
Si
^(1)
no está permitido, tengo que usar 33 bytes:fuente
Mathematica,
106102101 - 50 = 51 bytesFormatos como exponentes anidados con multiplicación de puntos. Representaciones Unicode de entrada y salida de ejemplo:
10
→2 · 5
120
→2³ · 3 · 5
16384
→2²˙⁷
fuente
CenterDot
para evitarTimes
. Todavía estoy tratando de averiguar dónde tiene lugar la recursión.#0
refiere a la función pura más interna sin nombres de argumentos.#
Bash + coreutils + bsdgames, 117-50 = 67
Salida
Estoy reclamando la bonificación de -50, porque esta salida está formateada en LaTeX y con una herramienta como http://www.sciweavers.org/free-online-latex-equation-editor se procesa en:
Avísame si esto no es aceptable.
fuente
Clip ,
3633Explicación
fuente
Javascript, 388-50 = 338
Como el código LaTeX ahora es elegible para el bono, decidí incluir las modificaciones necesarias como parte del golf para esto. Sin embargo, probablemente todavía se pueda jugar más al golf.
fuente