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]
untuk test case terakhir. Bisakah juga dicetak[6 3 2 1]
,[1.0 2.0 3.0 6.0]
atau[6.0 3.0 2.0 1.0]
?Jawaban:
Pyth, 10 byte
Demonstrasi
Untuk setiap daya, itu menghasilkan daftar semua angka hingga input yang diambil untuk kekuatan itu, dan kemudian memeriksa apakah input ada dalam daftar.
sumber
Haskell, 38
Cukup mudah. Pemahaman daftar menemukan nilai
b
input yangn
muncul[1^b, 2^b, ..., n^b]
. Cukup untuk memeriksab
rentang[1..n]
.sumber
Python 2, 53
Brute memaksa semua kombinasi pangkalan dalam eksponen dalam [0, n-1] dan pangkalan dalam [1, n].
sumber
Python 3, 56 byte
Ini benar-benar canggung. Menguji apakah setiap
i
root -th potensial memberikan bilangan bulat dengan membulatkannya, mengambil kekuatannyai
, dan memeriksa bahwa itu sama dengan yang asli.Langsung memeriksa bahwa root adalah bilangan bulat itu rumit karena floating point memberikan hal-hal seperti
64**(1/3) == 3.9999999999999996
. Membulatkannya ke bilangan bulat, mari kita periksa apakah mengambil daya kembali ke nilai semula. Terima kasih kepada ypercube karena menyarankan ini, menghemat 1 byte.feersum memiliki solusi yang lebih pendek dan lebih pintar . Anda semua harus benar-benar merasa terharu karenanya.
sumber
round(n**(1/i),0)**i==n
?0
akurasi default untuk putaran, ini menghemat satu byte.Pyth,
111012 bytePeriksa semua kemungkinan kombinasi kekuatan. Sangat lambat.
sumber
CJam, 23 byte
Ini bekerja dengan mengambil faktorisasi utama n dan menghitung persimpangan pembagi semua eksponen.
Hal ini sedikit lebih lama dari solusi saya yang lain , tapi saya berharap untuk bekerja (dan menyelesaikan langsung) untuk semua bilangan bulat antara 2 dan 2 63 - 1 .
Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
APL, 17 byte
Program APL pertama saya; saran bermain golf dihargai.
sumber
pow(pow(7,3),1./3))
saya dapatkan6.99999999999999
di C atau Python. Ini karena akurasi hilang ketika menghitung 1 / A.JavaScript (ES5),
73 byte81 byte,79 byte,75 byteCek untuk melihat apakah kekuatan bilangan bulat terdekat dari kemungkinan root sama
n
.~~(.5+...)
sama denganMath.round(...)
untuk ekspresi dalam rentang integer (0 hingga 2 ^ 31 - 1).Sunting: Digunakan
&&
logika malas alih-alihif
mencukur 2 byte dan menambahkan prompt untuk input karena pertanyaan menambahkan klarifikasi. Sebelumnya dengan asumsi input disimpan din
.Edit 2: Berubah
~~(.5+...)
untuk.5+...|0
menyelamatkan dua byte dengan menghindari pengelompokan.Sunting 3: Dihapus
var
untuk menyimpan 4 byte. Dalam mode non-ketat, ini dapat diterima.sumber
p=Math.pow
ke tabungan cepat 1 bytevar
diperlukanfor
bukanprompt
..Brachylog , 8 byte
Cobalah online!
Mengambil input melalui variabel inputnya dan menghasilkan setiap daya melalui variabel outputnya, dalam urutan naik sesuai kebutuhan, tidak seperti solusi lama
≥ℕ≜^↙.?∧
yang kebetulan memiliki panjang yang sama persis.Saya tidak memiliki pembenaran yang ketat untuk menyatakan bahwa setiap eksponen tidak lebih besar dari input, tetapi agar program untuk benar-benar menghentikannya perlu dibatasi.
ḋḅlᵛf
adalah solusi yang jauh lebih pendek (non-generator) untuk semua kasus uji yang diberikan, tetapi gagal jika input bukan kekuatan produk dari bilangan prima yang berbeda. (Kalau dipikir-pikir, karena semua kasus uji adalah kekuatan bilangan prima,ḋlf
juga berfungsi ...) Yang terbaik yang saya temukan untuk menyelamatkan ide,,ḋḅlᵐḋˢ⊇ᵛ×f
keluar hingga 10 byte.sumber
Jelly , 6 byte
Cobalah online!
sumber
05AB1E , 3 byte
Cobalah online!
Port of Jelly String yang tidak terkait jawabannya .
sumber
JavaScript ES7, 66 byte
Mengambil keuntungan dari pemahaman array eksperimental. Hanya berfungsi di Firefox.
Kemungkinan bermain golf. Saya mungkin akan mencoba untuk menekan ekspresi sedikit lebih pendek dan mudah-mudahan menemukan alternatif untuk
Array(n).keys()
sintaks yang panjang .Bisa lebih pendek tetapi JavaScript memiliki akurasi titik mengambang yang mengerikan.
sumber
CJam, 20 byte
Untuk input n , ini menghitung log b n untuk semua b kurang atau sama dengan n dan menjaga hasil yang bilangan bulat.
Ini harus bekerja untuk semua bilangan bulat antara 2 dan 9.999 . Run time kira-kira O (n) .
Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
Ruby, 50
Mencetak ke layar.
Ruby, 57
Mengembalikan array.
Dalam program uji:
Hitung setiap root dan uji mereka modulo 1 untuk melihat apakah sisanya kurang dari 1e-8. Karena presisi terbatas, beberapa akar integer yang valid dihitung sebagai bentuk 0,9999 .., maka kebutuhan untuk menambahkan 1e-9 ke dalamnya.
Sampai ke akar n dari n dihitung, yang merupakan total berlebihan, tetapi tampaknya cara terpendek untuk menulis loop non-infinite.
sumber
Stax , 6 byte
Jalankan dan debug itu
Semua pembagi dari gcd eksponen dalam faktorisasi utama. Ini sama dengan algoritma jelly.
sumber
DC, 104 byte
Input diambil dari terminal, output dicetak dan juga di stack.
Karena ini menggunakan? operator, Anda harus menggunakan
dc -e "<solution>"
ataudc <file with solution in it>
.Tidak ada yang pernah melihat jawaban saya, apalagi memilihnya, tapi saya benar-benar menikmati menyelesaikan masalah di DC. Ini solusi paling efisien di utas ini sejauh ini, tapi saya pikir saya akan mempostingnya.
barang pemula
Makro menaikkan basis ke semua kekuatan hingga hasilnya lebih besar dari target atau sama dengan target
Makro untuk menyimpan nilai eksponen yang valid seperti yang ditemukan dari makro eksponen di atas ke tumpukan lain
Makro menjalankan makro 2x di atas (makro c) melalui semua basis dari 2 hingga nomor target kami
Makro untuk mencetak nilai dari f stack
sumber
Ruby , 46 byte
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) , 93 byte
Cobalah online!
sumber
Japt , 10 byte
Cobalah
sumber