/* Configuration */
var QUESTION_ID = 107050; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 47650; // This should be the user ID of the challenge author.
/* App */
var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;
function answersUrl(index) {
return "http://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "http://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
});
else console.log(body);
});
valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
lang = jQuery('<a>'+lang+'</a>').text();
languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang, user: a.user, size: a.size, link: a.link};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.lang_raw.toLowerCase() > b.lang_raw.toLowerCase()) return 1;
if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body { text-align: left !important}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
table td {
padding: 5px;
}
<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="language-list">
<h2>Shortest Solution by Language</h2>
<table class="language-list">
<thead>
<tr><td>Language</td><td>User</td><td>Score</td></tr>
</thead>
<tbody id="languages">
</tbody>
</table>
</div>
<div id="answer-list">
<h2>Leaderboard</h2>
<table class="answer-list">
<thead>
<tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
<tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
all the numbers from 1....n
. Saya tidak tahu bagaimana mengucapkannya kembali dengan cara yang sederhana.Jawaban:
Jelly ,
1413 byteCobalah online!
Bagaimana itu bekerja
sumber
d`
trik adalah sesuatu yang lain ...Python 2 ,
106102100 byteCobalah online!
Latar Belakang
Untuk mengidentifikasi bilangan prima, kami menggunakan wajar teorema Wilson :
Bagaimana itu bekerja
Kita mulai dengan menginisialisasi k dan m sebagai 1 dan p sebagai set {0} . Perhatikan bahwa m = 1 = 0! ² = (k - 1)! ² . Segera setelah itu, kode berikut dijalankan n kali, di mana n adalah bilangan bulat dibaca dari input standar.
Dengan akibat wajar, m% k akan menjadi 1 jika k adalah prima dan 0 sebaliknya. Dengan demikian,
{m%k*k,0}
akan mengembalikan set {k, 0} jika k adalah prime dan set {0} sebaliknya.Jika (dan hanya jika) k adalah bilangan prima, karena p tidak dapat memuat k pada titik ini, perbedaan simetris in-place
p^={m%k*k,0}
akan menambahkan k ke himpunan p . Juga, p akan berisi 0 setelah pembaruan jika dan hanya jika tidak mengandung 0 sebelumnya, jadi 0 ∊ p jika dan hanya jika k adalah genap.Pada baris yang sama, kita mendefinisikan fungsi c via
c=bin(k).count
, yang akan menghitung kemunculan argumennya dalam representasi biner k .Baris kedua menghasilkan output aktual.
{k,c('1'),c('0')-1}
mengembalikan himpunan yang terdiri dari k itu sendiri, jumlah bit yang diatur dalam k , dan jumlah bit yang tidak diset dalam k . Karena outputbin(k)
dimulai dengan 0b , kita harus mengurangic('0')
ke akun untuk 0 terkemuka .Jika semuanya prima, semuanya akan menjadi milik p , yang sekarang berisi semua bilangan prima hingga k (dan berpotensi 0 ). Jika k adalah angka Mersenne (yaitu, jika hanya menetapkan bit),
c('0')-1
akan menghasilkan 0 . Karena angka Mersenne ganjil, p tidak akan berisi 0 , sehingga kondisinya akan gagal.Setelah (berpotensi) mencetak k , kami mengalikan m dengan k² . Karena m = (k-1)! ² sebelum pembaruan, m = k! ² setelahnya. Setelah menambah k , relasi m = (k-1)! ² bertahan lagi dan kami siap untuk iterasi berikutnya.
sumber
Mathematica,
806854 bytePenjelasan
sumber
JavaScript (ES6),
12311811511110496 byteDisimpan 4 byte berkat @Arnauld
Kombinasi dari tiga fungsi rekursif yang khas. Memperingatkan urutan dalam urutan terbalik dan mengakhiri kesalahan "terlalu banyak rekursi".
Cuplikan tes
(dimodifikasi menjadi keluaran ke halaman)
Tampilkan cuplikan kode
Fungsi utama dapat mengembalikan array untuk 104 byte:
Itu juga bisa non-rekursif dengan biaya byte lain:
Inilah yang saya mulai dengan: (Disimpan 6 byte berkat @Arnauld)
Saya mencoba bermain golf ini lebih jauh dan berhasil melakukannya dalam 104 byte — kemudian menyadari bahwa saya sudah menemukan solusi itu (itu ada di bagian bawah jawabannya). Tidakkah kamu membencinya saat itu terjadi? : P
Upaya non-rekursif pada fungsi utama (sekali lagi, jumlah byte yang sama):
Yang ini mengambil rute yang mudah untuk menghitung berapa banyak 0 dan 1 dalam representasi biner:
Hal yang sama dengan pemahaman array:
Yang ini mengambil rute yang sedikit lebih sulit untuk melakukan hal yang sama:
Dan yang satu ini mengambil rute terkait lainnya yang sependek yang asli:
Sekali lagi, Anda bisa bermain golf 8 byte dengan membuatnya mengingatkan urutan dalam urutan terbalik:
sumber
a
. Inisialisasi saja di panggilan awal keG
. (Itu seharusnya menghemat 4 byte.)Jelly ,
1716 byteCobalah online!
Bagaimana?
sumber
ẠBÇЀfĠ...
LƵ;P
bit selalu membingungkan saya.05AB1E , 14 byte
Cobalah online!
Penjelasan
sumber
.¡
, tantangan ini tampak bagus untuknya, tetapi lebih lama:FNb{.¡€gpONp+3QiN}})
05AB1E ,
1715 byteMenggunakan pengkodean CP-1252 . Cobalah online!
sumber
LDpÏvybSD_)OpP—
selama 15 byte harus bekerja.MATL ,
1615 byteCobalah online!
sumber
Perl, 101 byte
99 byte kode +
-nl
bendera.Untuk menjalankannya:
Beberapa penjelasan singkat
$r
memegang regex pengecekan prime klasik (q/^1?$|^(11+)\1+$/
).Untuk semua angka antara 2 dan input,
(1x$@)!~$r
periksa apakah bilangan prima,y/01/1/dr!~$r
periksa apakah jumlah0
dalam representasi biner adalah prima,s/0//gr!~$r
periksa apakah angka1
dalam representasi biner adalah prima.(jika 3 kondisi terpenuhi,
print$@
cetaklah).sumber
Python,
129125123 byteJika hanya nol yang utama ...
Cobalah online
Fungsi
p
adalah fungsi prime-checking, yang>0
pada akhirnya berfungsi untuk nol juga, yang sebaliknya akan kembali-1
. Lambda anonim adalah lambda yang memeriksa semua kondisi yang diperlukan.Berikut adalah metode yang sedikit berbeda menggunakan pemahaman himpunan. Hasilnya akan menjadi set. ( 124 byte ):
sumber
Perl 6 , 65 byte
Cobalah
Diperluas:
sumber
Oktaf, 73 byte
Cobalah secara Online!
sumber
CJam ,
2627 byteAlgoritma langsung, akan golf lebih lanjut.
EDIT: Lupa dan inklusif.
Cobalah online!
Untuk bersenang-senang, ini sangat mirip dan juga 27 byte:
Penjelasan
sumber
Jelly , 14 byte
Cobalah online!
Sayangnya, saya hanya bisa mengaitkannya dengan @Dennis, tetapi algoritmenya agak berbeda jadi saya tetap memposting ini.
Penjelasan
Fungsi helper (menghapus elemen daftar yang tidak memiliki jumlah kejadian utama dari bit yang diberikan):
Program utama:
sumber
Haxe,
169171 byteTidak ada yang gila. Pada dasarnya saringan Eratosthenes yang dimodifikasi yang mengevaluasi keutamaan hitungan 0/1 dalam iterasi yang sama dengan mencoret non-bilangan prima yang lebih tinggi. Dengan spasi putih:
Tapi hari ini saya belajar bahwa saya bisa memasukkan
continue
operator ternary dan Haxe bahkan tidak keberatan.Sunting: +2 karena
n
merupakan batas atas yang inklusif!sumber
n
ini inklusif.Utilitas Bash + GNU,
129126123114111109 byteCobalah online!
Memperhatikan komentar bahwa output tidak harus dalam urutan meningkat - mencukur 3 byte dengan menghitung mundur, bukan menghitung.
Grep diganti dengan wc untuk menghemat 3 byte tambahan.
Dieliminasi variabel (off 9 byte lebih).
Mengubah cara faktor digunakan - 3 byte lebih.
Membuatnya golf dengan seq (2 byte).
sumber
Python,
172170168159154133130 bytePenggunaan: Panggil fungsi lambda anonim.
Metode
p
memeriksa apakah suatu bilangan primaDisimpan 2 + 2 + 9 = 13 bytes berkat Gurupad Mamadapur
Tersimpan 5 bytes berkat mbomb007
sumber
v
-def v(n):a=bin(n)[2:];return p(n)and(p(a.count('1'))and p(a.count('0')))
v=lambda a:p(a)and all(p(bin(a)[2:].count(x))for x in['1','0'])
for x in'01'
.Pyke, 21 byte
Coba di sini!
sumber
Groovy, 120 byte
Ini adalah penutupan tanpa nama.
Coba di sini!
sumber
Pyth , 18 byte
Cobalah online di sini .
sumber
U
keS
eS
Python 3 , 97 byte
Ini adalah algoritma yang sama dengan jawaban Python 2 saya , tetapi implementasinya sangat berbeda. Fungsi mencetak ke STDOUT dan berakhir dengan kesalahan.
Cobalah online!
sumber
JavaScript (ES6), 110 byte
Tampilkan cuplikan kode
sumber
MATLAB, 50 byte
sumber
Haxe,
158147 byteOutput ke STDOUT dan berakhir pada kesalahan "terlalu banyak rekursi"; panggilan dengan mis
f(1000);
. Anda dapat menggunakanwhile
loop tanpa kesalahan untuk 156 byte:Menggunakan rentang ternyata tiga byte lebih lama:
Uji secara online!
sumber
Rust, 147 byte
tautan taman bermain
Metode
count_ones
,,count_zeros
danleading_zeros
metode berguna.Versi terformat
sumber
Perl 6 , 50 byte
Variasi jawaban b2gills ' , menggunakan operator
&
persimpangan untuk efek besar.Cobalah online!
Bagaimana itu bekerja
sumber