function getURL(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){$.ajax({url:getURL(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),useData(answers)}})}function getOwnerName(e){return e.owner.display_name}function useData(e){var s=[];e.forEach(function(e){var a=e.body.replace(/<s>.*<\/s>/,"").replace(/<strike>.*<\/strike>/,"");console.log(a),VALID_HEAD.test(a)&&s.push({user:getOwnerName(e),language:a.match(VALID_HEAD)[1],score:+a.match(VALID_HEAD)[2],link:e.share_link})}),s.sort(function(e,s){var a=e.score,r=s.score;return a-r}),s.forEach(function(e,s){var a=$("#score-template").html();a=a.replace("{{RANK}}",s+1+"").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SCORE}}",e.score),a=$(a),$("#scores").append(a)})}var QUESTION_ID=58047,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],answer_ids,answers_hash,answer_page=1;getAnswers();var VALID_HEAD=/<h\d>([^\n,]*)[, ]*(\d+).*<\/h\d>/;
body{text-align:left!important}table thead{font-weight:700}table td{padding:10px 0 0 30px}#scores-cont{padding:10px;width:600px}#scores tr td:first-of-type{padding-left:0}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id="scores-cont"><h2>Scores</h2><table class="score-table"><thead> <tr><td></td><td>User</td><td>Language</td><td>Score</td></tr></thead> <tbody id="scores"></tbody></table></div><table style="display: none"> <tbody id="score-template"><tr><td>{{RANK}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SCORE}}</td></tr></tbody></table>
[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]
?Réponses:
Pyth, 10 octets
Manifestation
Pour chaque puissance, il génère la liste de tous les nombres jusqu'à l'entrée prise pour cette puissance, puis vérifie si l'entrée est dans la liste.
la source
Haskell, 38
Assez simple. La compréhension de la liste trouve les valeurs
b
pour lesquelles l'entréen
apparaît parmi[1^b, 2^b, ..., n^b]
. Il suffit de vérifierb
la plage[1..n]
.la source
Python 2, 53
Brute force toutes les combinaisons de bases dans les exposants dans [0, n-1] et les bases dans [1, n].
la source
Python 3, 56 octets
C'est vraiment maladroit. Teste si chaque
i
racine potentielle -th donne un entier en l'arrondissant, en lui prenant la puissance dei
et en vérifiant qu'il est égal à l'original.Vérifier directement que la racine est un nombre entier est délicat car les virgules flottantes donnent des choses comme
64**(1/3) == 3.9999999999999996
. L'arrondir à un entier nous permet de vérifier si la prise de puissance revient à la valeur d'origine. Merci à ypercube de l'avoir suggéré, économisant 1 octet.feersum a une solution plus courte et plus intelligente . Vous devriez tous vraiment voter pour cela.
la source
round(n**(1/i),0)**i==n
?0
être la précision par défaut pour le tour, cela économise un octet.Pyth,
111012 octetsVérifie toutes les combinaisons de pouvoirs possibles. Très lent.
la source
CJam, 23 octets
Cela fonctionne en prenant la factorisation principale de n et en calculant l'intersection des diviseurs de tous les exposants.
Il est un peu plus long que mon autre solution , mais je m'attends à ce qu'il fonctionne (et se termine instantanément) pour tous les entiers compris entre 2 et 2 63 - 1 .
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source
APL, 17 octets
Mon premier programme APL; les suggestions de golf sont appréciées.
la source
pow(pow(7,3),1./3))
je reçois6.99999999999999
en C ou Python. En effet, la précision est perdue lors du calcul de 1 / A.JavaScript (ES5),
73 octets81 octets79 octets75 octetsVérifie si la puissance entière la plus proche de la racine possible est égale
n
.~~(.5+...)
est équivalent àMath.round(...)
pour les expressions dans la plage entière (0 à 2 ^ 31 - 1).Modifier: utilisé la
&&
logique paresseuse au lieu deif
raser 2 octets et ajouté une invite d'entrée car la question a ajouté une clarification. Supposait auparavant que l'entrée était stockée dansn
.Edit 2: modifié
~~(.5+...)
pour.5+...|0
enregistrer deux octets en évitant le regroupement.Edit 3: supprimé
var
pour enregistrer 4 octets. En mode non strict, cela est acceptable.la source
p=Math.pow
dans l'enregistrement rapide d'un octetvar
est requisefor
au lieu deprompt
..Brachylog , 8 octets
Essayez-le en ligne!
Prend l'entrée via sa variable d'entrée et génère chaque puissance via sa variable de sortie, dans l'ordre croissant selon les besoins, contrairement à l'ancienne solution
≥ℕ≜^↙.?∧
qui se trouve avoir exactement la même longueur.Je n'ai aucune justification rigoureuse pour affirmer que chaque exposant n'est pas supérieur à l'entrée, mais pour que le programme se termine réellement, il doit être limité.
ḋḅlᵛf
est une solution beaucoup plus courte (non génératrice) pour tous les cas de test donnés, mais elle échoue si l'entrée n'est pas une puissance d'un produit de nombres premiers distincts. (Venez y penser, puisque tous les cas de test sont des pouvoirs de nombres premiers,ḋlf
ça marche aussi ...) Le meilleur que j'ai trouvé pour sauver l'idéeḋḅlᵐḋˢ⊇ᵛ×f
,, sort à 10 octets.la source
Gelée , 6 octets
Essayez-le en ligne!
la source
05AB1E , 3 octets
Essayez-le en ligne!
Réponse de Port of Unrelated String's Jelly .
la source
JavaScript ES7, 66 octets
Tire parti des compréhensions expérimentales des tableaux. Fonctionne uniquement sur Firefox.
Golf possible. J'essaierai probablement d'écraser les expressions un peu plus courtes et j'espère trouver une alternative à la longue
Array(n).keys()
syntaxe.Peut être plus court mais JavaScript a une précision horriblement virgule flottante.
la source
CJam, 20 octets
Pour l'entrée n , cela calcule le log b n pour tout b inférieur ou égal à n et conserve les résultats qui sont des entiers.
Cela devrait fonctionner pour tous les entiers compris entre 2 et 9 999 . Le temps d'exécution est à peu près O (n) .
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source
Rubis, 50
Imprime à l'écran.
Rubis, 57
Renvoie un tableau.
En programme de test:
Calcule chaque racine et les teste modulo 1 pour voir si le reste est inférieur à 1e-8. En raison de la précision limitée, certaines racines entières valides sont calculées sous la forme 0,9999 .., d'où la nécessité de leur ajouter 1e-9.
On calcule jusqu'à la nième racine de n, ce qui est une surpuissance totale, mais semblait le moyen le plus court d'écrire une boucle non infinie.
la source
Stax , 6 octets
Exécuter et déboguer
Tous les diviseurs du nombre entier d'exposants dans la décomposition en facteurs premiers. C'est la même chose que l'algorithme de gelée.
la source
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>"
oudc <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.
trucs de démarrage
Macro pour élever une base à tous les pouvoirs jusqu'à ce que le résultat soit supérieur à la cible ou égal à la cible
Macro pour enregistrer une valeur d'exposant valide trouvée dans les macros d'exposant ci-dessus dans une autre pile
Macro pour exécuter la macro 2x ci-dessus (macro c) sur toutes les bases de 2 à notre nombre cible
Macro pour imprimer les valeurs de la pile f
la source
Rubis , 46 octets
Essayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 93 octets
Essayez-le en ligne!
la source
Japt , 10 octets
Essayez-le
la source