DC, 104 octets
L'entrée est prise à partir du terminal, la sortie est imprimée et également sur la pile.
Parce que cela utilise le? opérateur, vous devez utiliser dc -e "<solution>"
ou dc <file with solution in it>
.
Personne ne voit jamais mes réponses, encore moins voter sur elles, mais j'aime vraiment résoudre des problèmes dans DC. C'est la solution la moins efficace dans ce fil jusqu'à présent, mais j'ai pensé que je la publierais de toute façon.
1sb?sn[lesi]ss[lble1+dse^dln=sln>c]sc[liSflq1+sq]sm[Lfplq1-dsq0<p]dsp[lb1+sb0si0selcxli0!=mlbln!=h]dshxx
trucs de démarrage
1sb Store 1 in register b
?sn Store user input in register n
[lesi]ss A macro to copy the e to the i register, stored in the s register
Macro pour élever une base à tous les pouvoirs jusqu'à ce que le résultat soit supérieur à la cible ou égal à la cible
[lble1+dse^dln=sln>c]sc
[lb ] load our base num (register b)
[ le ] load our exponent (register e)
[ 1+dse ] add 1 to the exponent, copy and store in the e register
[ ^d ] raise the base to the exponent and copy it
[ ln=s ] load the user input, if that is equal to the power result run the macro in register s
[ ln>c] load the user input, if it's greater than the power result run the macro in register c (this one)
[ ]sc save this macro in register c
Macro pour enregistrer une valeur d'exposant valide trouvée dans les macros d'exposant ci-dessus dans une autre pile
[liSflq1+sq]sm
[liSf ] copy the i register to the top of the stack in register f
[ lq1+sq] add 1 to the q register
[ ]sm save this macro in the m register
Macro pour exécuter la macro 2x ci-dessus (macro c) sur toutes les bases de 2 à notre nombre cible
[lb1+sb0si0selcxli0!=mlbln!=h]dsh
[lb1+sb ] add 1 to the base number
[ 0si0se ] reset the i and e registers (previously found value and exponent
[ lcx ] load and run the c macro
[ li0!=m ] load the result of the c macro and if it's not 0, run m to save it to the f stack
[ lbln!=h] if our base number is not equal to our target number, run macro h (this macro)
[ ]dsh duplicate this macro and save one copy, so that one is left on the stack to run later
Macro pour imprimer les valeurs de la pile f
[Lfplq1-dsq0<p]dsp
[Lfp ] load the top value from the f register and print it
[ lq1-dsq ] load the q register and subtract one from it and save it
[ 0<p] if the q register is greater than 0, run macro p (this macro) again
[ ]dsp duplicate this macro and save one copy, so that one is left on the stack to run later
xx finally run the two macros on the stack (h and then p)
[1 2 3 6]
pour le dernier cas de test. Pourrait-il également imprimer[6 3 2 1]
,[1.0 2.0 3.0 6.0]
ou[6.0 3.0 2.0 1.0]
?