Seu trabalho é pegar os fatores primos de um número retirado da entrada (omitindo qualquer expoente igual a 1) e depois pegar os fatores primos de todos os expoentes e assim por diante, até que nenhum número composto permaneça; e depois produz o resultado.
Para deixar o que estou pedindo um pouco mais claro, aqui está um programa em javascript que faz isso, mas, com 782 bytes, ainda não está muito bem jogado:
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()));
Você deve deixar a ordem das operações o mais clara possível e classificar os principais fatores em ordem crescente em cada nível.
Você recebe um bônus de -50 bytes se você produzir a saída como impressão matemática formatada ou código de látex válido.
2^(5^11*11^(2^7))*541
).Respostas:
CJam,
3231292725 - 50 = -25 bytes7 bytes salvos por Dennis.
Woooo, Dennis reduziu isso em sete bytes surpreendentes e conseguiu vencer Pyth!
Teste aqui.
Explicação
Todo o conteúdo da pilha será impresso automaticamente lado a lado no final do programa.
fonte
"{}"
->{}s
Parece que você descobriu comoj
funciona.j
há um tempo. user23013 postou uma boa explicação sobre Conversão de Base Mista e aditsu algumas observações esclarecedoras para uso avançado em algum lugar do SourceForge.j
seja bem legal, uma função nomeada seria mais curta aqui:{mF{)_({Fa+'^}&*}%'**{}s\*}:F
q~S2*{mF{~'^'{@j'}'*}/;}j
Pitão, 27 - 50 = -23 bytes
Isso define uma função recursiva
y
. Experimente online: DemonstraçãoA saída é um código LaTeX válido, por isso reivindico o bônus. A chamada
y66430125
retorna a string3^{2^{2}*3}*5^{3}
, que é processada paraMuito orgulhoso por encontrar uma maneira de imprimir os colchetes sem usar colchetes no meu código.
Explicação:
fonte
repr(H)
truque, não importa. Então eu editei agora.{}
é o dicionário vazio em Python, não o conjunto vazio.Pitão -
39343228 bytesThanks Jakube
Define uma função
y
que aceita um número inteiro:Explicação:
Se
^(1)
não for permitido, tenho que usar 33 bytes:fonte
Mathematica,
106102101 - 50 = 51 bytesFormata como expoentes aninhados com multiplicação de pontos. Representações Unicode de exemplo de entrada e saída:
10
→2 · 5
120
→2³ · 3 · 5
16384
→2²˙⁷
fonte
CenterDot
para evitarTimes
. Ainda estou tentando descobrir onde a recursão ocorre.#0
refere-se à função pura mais interna, sem nomes de argumentos.#
Bash + coreutils + bsdgames, 117 - 50 = 67
Resultado
Estou reivindicando o bônus -50, porque essa saída é formatada em LaTeX e com uma ferramenta como http://www.sciweavers.org/free-online-latex-equation-editor processa:
Deixe-me saber se isso não é aceitável.
fonte
Clip ,
3633Explicação
fonte
Javascript, 388-50 = 338
Como o código LaTeX agora é elegível para o bônus, decidi incluir as modificações necessárias como parte do golfe para isso. Provavelmente ainda pode ser jogado ainda mais.
fonte