/* 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
. Nie wiem, jak to sformułować w prosty sposób.Odpowiedzi:
Galaretka ,
1413 bajtówWypróbuj online!
Jak to działa
źródło
d`
sztuczka to coś innego ...Python 2 ,
106102100 bajtówWypróbuj online!
tło
Aby zidentyfikować liczby pierwsze, używamy następstwa twierdzenia Wilsona :
Jak to działa
Zaczniemy od inicjalizacji k i m jako 1 i p jako zbiór {0} . Zauważ, że m = 1 = 0! ² = (k - 1)! ² . Natychmiast potem następujący kod jest wykonywany n razy, gdzie n jest liczbą całkowitą odczytaną ze standardowego wejścia.
W związku z tym m% k wyniesie 1, jeśli k jest liczbą pierwszą, a 0 w przeciwnym razie. Zatem
{m%k*k,0}
zwróci zestaw {k, 0}, jeśli k jest liczbą pierwszą, a zestaw {0} w przeciwnym razie.Jeśli (i tylko jeśli) k jest liczbą pierwszą, ponieważ p nie może zawierać k w tym punkcie, różnica symetryczna w miejscu
p^={m%k*k,0}
doda k do zbioru p . Ponadto p będzie zawierało 0 po aktualizacji, tylko wtedy, gdy nie zawiera 0 wcześniej, więc 0 ∊ p wtedy i tylko wtedy, gdy k jest parzyste.W tej samej linii definiujemy funkcję c pośrednictwem
c=bin(k).count
, która będzie liczyć wystąpień swojej argumentacji w k „s reprezentacji binarnej.Drugi wiersz przedstawia rzeczywistą wydajność.
{k,c('1'),c('0')-1}
zwraca zestaw, który składa się z samego k , liczby ustawionych bitów w k oraz liczby nieustawionych bitów w k . Ponieważ dane wyjściowebin(k)
zaczynają się od 0b , musimy zmniejszyć wartość,c('0')
aby uwzględnić wiodące 0 .Jeśli wszystkie są liczbami pierwszymi, wszystkie będą należeć do p , który do tej pory zawiera wszystkie liczby pierwsze do k (i potencjalnie 0 ). Jeśli k jest liczbą Mersenne'a (tzn. Jeśli ma tylko ustawione bity),
c('0')-1
zwróci 0 . Ponieważ liczby Mersenne są nieparzyste, str nie będzie zawierać 0 , więc warunek się nie powiedzie.Po (potencjalnie) wydrukowaniu k mnożymy m przez k² . Ponieważ m = (k-1)! ² przed aktualizacją, m = k! ² po niej. Po zwiększeniu k relacja m = (k-1)! ² ponownie i jesteśmy gotowi do następnej iteracji.
źródło
Mathematica,
806854 bajtówWyjaśnienie
źródło
JavaScript (ES6),
12311811511110496 bajtówZaoszczędź 4 bajty dzięki @Arnauld
Połączenie trzech typowych funkcji rekurencyjnych. Ostrzega sekwencję w odwrotnej kolejności i kończy się z powodu błędu „zbyt dużej rekurencji”.
Testowy fragment kodu
(zmodyfikowany w celu wyświetlenia na stronie)
Pokaż fragment kodu
Główna funkcja może zwrócić tablicę dla 104 bajtów:
Może być również nierekurencyjny kosztem innego bajtu:
Oto ten, od którego zacząłem: (Zapisałem 6 bajtów dzięki @Arnauld)
Próbowałem pograć w golfa i udało mi się to zrobić w 104 bajtach - potem zdałem sobie sprawę, że już znalazłem to rozwiązanie (jest na dole odpowiedzi). Czy nie nienawidzisz, kiedy to się dzieje? : P
Nierekurencyjna próba głównej funkcji (ponownie ta sama liczba bajtów):
Ten pozwala łatwo policzyć, ile zer i jedynek znajduje się w reprezentacji binarnej:
To samo dotyczy zrozumienia tablicy:
Ten obiera nieco trudniejszą drogę, aby zrobić to samo:
A ta idzie inną pokrewną trasą, tak krótką jak oryginał:
Ponownie możesz zagrać w 8 bajtów, ustawiając ostrzeżenie w odwrotnej kolejności:
źródło
a
. Po prostu zainicjuj go w pierwszym wywołaniu doG
. (To powinno zaoszczędzić 4 bajty.)Galaretka ,
1716 bajtówWypróbuj online!
W jaki sposób?
źródło
ẠBÇЀfĠ...
LƵ;P
bit zawsze mnie myli.05AB1E , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
.¡
, wyzwanie to wydawało się dobre, ale jest dłuższe:FNb{.¡€gpONp+3QiN}})
05AB1E ,
1715 bajtówWykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
LDpÏvybSD_)OpP—
na 15 bajtów powinno działać.MATL ,
1615 bajtówWypróbuj online!
źródło
Perl, 101 bajtów
99 bajtów kodu +
-nl
flagi.Aby uruchomić:
Kilka krótkich wyjaśnień
$r
zawiera klasyczną funkcję sprawdzania liczb pierwszych regex (q/^1?$|^(11+)\1+$/
).Dla wszystkich liczb od 2 do danych wejściowych
(1x$@)!~$r
sprawdza, czy liczba jest liczbą pierwszą,y/01/1/dr!~$r
sprawdza, czy liczba0
w reprezentacji binarnej jest liczbą pierwszą,s/0//gr!~$r
sprawdza, czy liczba1
w reprezentacji binarnej jest liczbą pierwszą.(jeśli 3 warunki są spełnione,
print$@
drukuje je).źródło
Python,
129125123 bytesIf only zero were prime...
Try it online
Function
p
is the prime-checking function, which has>0
at the end so that it works for zero as well, which would otherwise return-1
. The anonymous lambda is the lambda that checks all the conditions required.Here's a slightly different method using a set comprehension. The result will be a set. (124 bytes):
źródło
Perl 6, 65 bytes
Try it
Expanded:
źródło
Octave, 73 bytes
Try It Online!
źródło
CJam,
2627 bytesStraightforward algorithm, will golf further.
EDIT: Forgot n was inclusive.
Try it online!
For fun, this is very similar and also 27 bytes:
Explanation
źródło
Jelly, 14 bytes
Try it online!
Unfortunately, I could only tie with @Dennis, but the algorithm seems to be somewhat different so I'm posting this anyway.
Explanation
Helper function (deletes list elements that don't have a prime number of occurrences of a given bit):
Main program:
źródło
Haxe,
169171 bytesNothing crazy. Essentially a modified sieve of Eratosthenes that evaluates the primality of the 0 / 1 count in the same iteration as crossing out higher non-primes. With some whitespace:
But today I learned I could put
continue
in a ternary operator and Haxe doesn't even mind.Edit: +2 because
n
is an inclusive upper bound!źródło
n
is inclusive.Bash + GNU utilities,
129126123114111109 bytesTry it online!
Noticed the comment that the output doesn't have to be in increasing order -- shaved off 3 bytes by counting down instead of counting up.
Replaced grep with wc to save 3 additional bytes.
Eliminated a variable (9 more bytes off).
Changed the way factor is used -- 3 more bytes.
Made it golfier with seq (2 bytes).
źródło
Python,
172170168159154133130 bytesUsage: Call the anonymous lambda function
Method
p
checks whether a number is primeSaved 2+2+9=13 bytes thanks to Gurupad Mamadapur
Saved 5 bytes thanks to mbomb007
źródło
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 bytes
Try it here!
źródło
Groovy, 120 bytes
This is an unnamed closure.
Try it here!
źródło
Pyth, 18 bytes
Try it online here.
źródło
U
toS
eS
Python 3, 97 bytes
This is the same algorithm as in my Python 2 answer, but the implementation is quite different. The function prints to STDOUT and terminates with an error.
Try it online!
źródło
JavaScript (ES6), 110 bytes
Show code snippet
źródło
MATLAB, 50 bytes
źródło
Haxe,
158147 bytesOutputs to STDOUT and terminates on a "too much recursion" error; call with e.g.
f(1000);
. You can use awhile
loop with no error for 156 bytes:Using a range turned out three bytes longer:
Test it online!
źródło
Rust, 147 bytes
playground link
The
count_ones
,count_zeros
, andleading_zeros
methods came in handy.Formatted version
źródło
Perl 6, 50 bytes
Variation of b2gills' answer, using the
&
junction operator to great effect.Try it online!
How it works
źródło