/* 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
. Ich weiß nicht, wie ich es auf einfache Weise umformulieren soll.Antworten:
Jelly ,
1413 BytesProbieren Sie es online!
Wie es funktioniert
quelle
d`
Trick ist etwas anderes ...Python 2 ,
106102100 BytesProbieren Sie es online!
Hintergrund
Um Primzahlen zu identifizieren, verwenden wir eine Folgerung aus Wilsons Theorem :
Wie es funktioniert
Wir beginnen mit der Initialisierung von k und m als 1 und p als Menge {0} . Man beachte, dass m = 1 = 0! ² = (k - 1)! ² ist . Unmittelbar danach wird der folgende Code n- mal ausgeführt, wobei n die von der Standardeingabe gelesene Ganzzahl ist.
In der Konsequenz ist m% k 1, wenn k eine Primzahl ist, und 0, wenn dies nicht der Fall ist . Somit
{m%k*k,0}
wird die Menge {k, 0} zurückgegeben, wenn k eine Primzahl ist, und die Menge {0}, wenn dies nicht der Fall ist .Wenn (und nur wenn) k eine Primzahl ist, da p zu diesem Zeitpunkt k nicht enthalten kann ,
p^={m%k*k,0}
addiert die vorhandene symmetrische Differenz k zur Menge p . Auch p enthalten 0 nach dem Update , wenn und nur wenn es nicht enthält 0 vor, so 0 ε p , wenn und nur wenn k gerade ist.In derselben Zeile definieren wir eine Funktion c via
c=bin(k).count
, die die Vorkommen ihres Arguments in der Binärdarstellung von k zählt .Die zweite Zeile erzeugt die tatsächliche Ausgabe.
{k,c('1'),c('0')-1}
liefert die Menge , die besteht aus k selbst, der Anzahl der gesetzten Bits in k , und die Anzahl der Bits in ungesetzt k . Da die Ausgabe vonbin(k)
mit 0b beginnt , müssen wir dekrementierenc('0')
, um die führende 0 zu berücksichtigen .Wenn sie alle Primzahlen sind, gehören sie alle zu p , das inzwischen alle Primzahlen bis zu k (und möglicherweise 0 ) enthält. Wenn k eine Mersenne-Zahl ist (dh wenn es nur gesetzte Bits hat),
c('0')-1
ergibt sich 0 . Da Mersenne - Zahlen ungerade sind, p wird nicht enthalten 0 , so wird der Zustand fehlschlagen.Nach dem (potentiellen) Ausdruck von k multiplizieren wir m mit k² . Da m = (k-1)! ² vor dem Update ist, ist m = k! ² danach. Nach dem Inkrementieren von k gilt wieder die Beziehung m = (k-1)! ² und wir sind bereit für die nächste Iteration.
quelle
Mathematica,
806854 BytesErläuterung
quelle
JavaScript (ES6),
12311811511110496 Byte4 Bytes dank @Arnauld eingespart
Eine Kombination von drei typischen rekursiven Funktionen. Warnt die Sequenz in umgekehrter Reihenfolge und endet bei einem "zu viel Rekursion" -Fehler.
Testschnipsel
(geändert, um auf der Seite auszugeben)
Code-Snippet anzeigen
Die Hauptfunktion kann ein Array für 104 Bytes zurückgeben:
Es kann auch auf Kosten eines anderen Bytes nicht rekursiv sein:
Hier ist die, mit der ich angefangen habe: (6 Bytes dank @Arnauld gespeichert)
Ich habe es weiter versucht und es in 104 Bytes geschafft - dann wurde mir klar, dass ich diese Lösung bereits gefunden hatte (sie steht am Ende der Antwort). Hassen Sie es nicht, wenn das passiert? : P
Ein nicht-rekursiver Versuch, die Hauptfunktion aufzurufen (wieder die gleiche Anzahl von Bytes):
Mit dieser Methode können Sie ganz einfach zählen, wie viele Nullen und Einsen in der Binärdarstellung enthalten sind:
Dasselbe gilt für ein Array-Verständnis:
Dieser nimmt einen etwas schwierigeren Weg, um dasselbe zu tun:
Und dieser nimmt noch eine andere verwandte Route, die so kurz wie das Original ist:
Wiederum können Sie 8 Bytes Golf spielen, indem Sie die Sequenz in umgekehrter Reihenfolge warnen lassen:
quelle
a
. Initialisiere es einfach beim ersten Aufruf vonG
. (Das sollte 4 Bytes sparen.)Jelly ,
1716 BytesProbieren Sie es online!
Wie?
quelle
ẠBÇЀfĠ...
LƵ;P
verwirrt mich immer ein bisschen.05AB1E , 14 Bytes
Probieren Sie es online!
Erläuterung
quelle
.¡
, diese Herausforderung schien gut dafür zu sein, ist aber länger:FNb{.¡€gpONp+3QiN}})
05AB1E ,
1715 BytesVerwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
LDpÏvybSD_)OpP—
für 15 Bytes sollte funktionieren.MATL ,
1615 BytesProbieren Sie es online!
quelle
Perl, 101 Bytes
99 Byte Code +
-nl
Flags.Um es auszuführen:
Einige kurze Erklärungen enthalten
$r
den klassischen Prime Checking Regex (q/^1?$|^(11+)\1+$/
).Prüft für alle Zahlen zwischen 2 und der Eingabe,
(1x$@)!~$r
ob die Zahl eine Primzahl ist,y/01/1/dr!~$r
prüft, ob die Zahl0
in der Binärdarstellung eine Primzahl ist,s/0//gr!~$r
prüft, ob die Zahl1
in der Binärdarstellung eine Primzahl ist.(Wenn die 3 Bedingungen erfüllt sind, wird es
print$@
gedruckt).quelle
Python,
129125123 BytesWenn nur Null Primzahl wäre ...
Probieren Sie es online aus
Function
p
ist die Prim-Checking-Funktion, die>0
am Ende so eingestellt ist, dass sie auch für Null arbeitet, was andernfalls zurückkehren würde-1
. Das anonyme Lambda ist das Lambda, das alle erforderlichen Bedingungen überprüft.Hier ist eine etwas andere Methode unter Verwendung eines Mengenverständnisses. Das Ergebnis ist eine Menge. ( 124 Byte ):
quelle
Perl 6 , 65 Bytes
Versuch es
Erweitert:
quelle
Oktave, 73 Bytes
Probieren Sie es online!
quelle
CJam ,
2627 BytesEinfacher Algorithmus, wird weiter Golf spielen.
EDIT: Passwort n war inklusive.
Probieren Sie es online!
Zum Spaß ist dies sehr ähnlich und auch 27 Bytes:
Erläuterung
quelle
Jelly , 14 Bytes
Probieren Sie es online!
Leider konnte ich nur mit @Dennis binden, aber der Algorithmus scheint etwas anders zu sein, also poste ich das trotzdem.
Erläuterung
Hilfsfunktion (löscht Listenelemente, die keine Primzahl des Auftretens eines bestimmten Bits haben):
Hauptprogramm:
quelle
Haxe,
169171 BytesNichts verrücktes. Im Wesentlichen ein modifiziertes Sieb aus Eratosthenes, das die Primzahl der 0/1-Zählung in derselben Iteration bewertet, in der höhere Nicht-Primzahlen durchgestrichen werden. Mit etwas Leerzeichen:
Aber heute habe ich gelernt, ich könnte setzen
continue
einen ternären Operator einsetzen kann, und Haxe macht es nichts aus.Edit: +2 weil
n
ist eine inklusive Obergrenze!quelle
n
ist inklusive.Bash + GNU-Dienstprogramme,
129126123114111109 BytesProbieren Sie es online!
Bemerkte den Kommentar, dass die Ausgabe nicht in aufsteigender Reihenfolge erfolgen muss - 3 Bytes durch Abwärtszählen statt Aufwärtszählen werden eingespart.
Grep wurde durch wc ersetzt, um 3 zusätzliche Bytes zu sparen.
Eliminierte eine Variable (9 weitere Bytes aus).
Der verwendete Wegefaktor wurde geändert - 3 weitere Bytes.
Hat es mit seq (2 Bytes) golfer gemacht.
quelle
Python,
172170168159154133130 BytesVerwendung: Rufen Sie die anonyme Lambda-Funktion auf
Methode
p
prüft, ob eine Zahl eine Primzahl ist2 + 2 + 9 = 13 Bytes dank Gurupad Mamadapur
gespeichert 5 Bytes dank mbomb007 gespeichert
quelle
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
Probieren Sie es hier aus!
quelle
Groovy, 120 Bytes
Dies ist eine namenlose Schließung.
Probieren Sie es hier aus!
quelle
Pyth , 18 Bytes
Probieren Sie es hier online aus .
quelle
U
zuS
eS
Python 3 , 97 Bytes
Dies ist der gleiche Algorithmus wie in meiner Python 2-Antwort , aber die Implementierung ist ganz anders. Die Funktion wird auf STDOUT gedruckt und mit einem Fehler beendet.
Probieren Sie es online!
quelle
JavaScript (ES6), 110 Byte
Code-Snippet anzeigen
quelle
MATLAB, 50 Bytes
quelle
Haxe,
158–147BytesGibt STDOUT aus und wird bei einem "zu viel Rekursion" -Fehler beendet. anrufen mit zb
f(1000);
. Sie können einewhile
fehlerfreie Schleife für 156 Bytes verwenden:Wenn Sie einen Bereich verwenden, der drei Bytes länger ist:
Testen Sie es online!
quelle
Rust, 147 Bytes
Spielplatz Link
Das
count_ones
,count_zeros
undleading_zeros
Methoden waren sehr praktisch.Formatierte Version
quelle
Perl 6 , 50 Bytes
Variation der Antwort von b2gills unter Verwendung des
&
Junction- Operators mit großer Wirkung.Probieren Sie es online!
Wie es funktioniert
quelle