Ihre Aufgabe ist es, die Primfaktoren einer Zahl aus der Eingabe zu nehmen (ohne Exponenten gleich 1) und dann die Primfaktoren aller Exponenten usw. zu nehmen, bis keine zusammengesetzten Zahlen mehr übrig sind. und geben Sie dann das Ergebnis aus.
Um das, was ich verlange, etwas klarer zu machen, hier ist ein Javascript-Programm, das dies tut, aber mit 782 Bytes ist es noch nicht sehr gut gespielt:
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()));
Sie müssen die Reihenfolge der Operationen so klar wie möglich gestalten und die Primfaktoren auf jeder Ebene in aufsteigender Reihenfolge sortieren.
Sie erhalten einen Bonus von -50 Byte, wenn Sie die Ausgabe als formatierten Mathprint oder gültigen Latexcode erstellen.
2^(5^11*11^(2^7))*541
).Antworten:
CJam,
3231292725 - 50 = -25 Bytes7 Bytes von Dennis gespeichert.
Woooo, Dennis hat dies um erstaunliche sieben Bytes reduziert und es geschafft, Pyth zu schlagen!
Testen Sie es hier.
Erläuterung
Alle diese Stapelinhalte werden am Ende des Programms automatisch hintereinander gedruckt.
quelle
"{}"
->{}s
Sieht so aus, als hätten Sie herausgefunden, wie esj
funktioniert.j
für eine Weile verwendet. user23013 hat eine nette Erklärung zu Mixed Base Conversion veröffentlicht und einige klarstellende Bemerkungen zur erweiterten Verwendung irgendwo auf SourceForge hinzugefügt.j
es ziemlich cool ist, wäre eine benannte Funktion hier kürzer:{mF{)_({Fa+'^}&*}%'**{}s\*}:F
q~S2*{mF{~'^'{@j'}'*}/;}j
Pyth, 27 - 50 = -23 Bytes
Dies definiert eine rekursive Funktion
y
. Probieren Sie es online aus: DemonstrationDie Ausgabe ist ein gültiger LaTeX-Code, daher beanspruche ich den Bonus. Der Aufruf
y66430125
gibt die Zeichenfolge zurück3^{2^{2}*3}*5^{3}
, die in gerendert wirdSehr stolz darauf, einen Weg gefunden zu haben, die geschweiften Klammern zu drucken, ohne geschweifte Klammern in meinem Code zu verwenden.
Erläuterung:
quelle
repr(H)
Trick gefunden habe, spielt es keine Rolle. Also habe ich es jetzt bearbeitet.{}
ist das leere Wörterbuch in Python nicht die leere Menge.Pyth -
39343228 BytesDanke Jakube
Definiert eine Funktion,
y
die eine Ganzzahl akzeptiert:Erläuterung:
Wenn
^(1)
nicht erlaubt, muss ich 33 Bytes verwenden:quelle
Mathematica,
106102101 - 50 = 51 BytesFormate als verschachtelte Exponenten mit Punktmultiplikation. Unicode-Darstellungen der Beispieleingabe und -ausgabe:
10
→2 · 5
120
→2³ · 3 · 5
16384
→2²˙⁷
quelle
CenterDot
zu vermeidenTimes
. Ich versuche immer noch herauszufinden, wo die Rekursion stattfindet.#0
bezieht sich auf die innerste reine Funktion ohne Argumentnamen.#
Bash + Coreutils + BSD-Spiele, 117 - 50 = 67
Ausgabe
Ich beanspruche den -50-Bonus, weil diese Ausgabe LaTeX-formatiert ist und mit einem Tool wie http://www.sciweavers.org/free-online-latex-equation-editor Folgendes rendert:
Lassen Sie mich wissen, wenn dies nicht akzeptabel ist.
quelle
Clip ,
3633Erläuterung
quelle
Javascript, 388-50 = 338
Da der LaTeX-Code jetzt für den Bonus berechtigt ist, habe ich beschlossen, die erforderlichen Änderungen als Teil des Golfspiels dafür aufzunehmen. Es kann aber wahrscheinlich noch weiter gespielt werden.
quelle