/* 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
. Eu não sei como reformulá-lo de uma maneira simples.Respostas:
Geléia ,
1413 bytesExperimente online!
Como funciona
fonte
d`
truque é outra coisa ...Python 2 ,
106102100 bytesExperimente online!
fundo
Para identificar números primos, usamos um corolário do teorema de Wilson :
Como funciona
Nós começar por inicializar k e m como 1 e p como o conjunto {0} . Note que m = 1 = 0! ² = (k - 1)! ² . Imediatamente depois, o código a seguir é executado n vezes, onde n é o número inteiro lido da entrada padrão.
Pelo corolário, m% k será 1 se k for primo e 0 caso contrário. Assim,
{m%k*k,0}
retornará o conjunto {k, 0} se k for primo e o conjunto {0} caso contrário.Se (e somente se) k for primo, já que p não pode conter k neste momento, a diferença simétrica no local
p^={m%k*k,0}
adicionará k ao conjunto p . Além disso, p conterá 0 após a atualização se e somente se não contiver 0 antes, então 0 ∊ p se e somente se k for par.Na mesma linha, definimos uma função c via
c=bin(k).count
, que contará as ocorrências de seu argumento na representação binária de k .A segunda linha produz a saída real.
{k,c('1'),c('0')-1}
retorna o conjunto que consiste em k , o número de bits definidos em k e o número de bits não definidos em k . Como a saídabin(k)
começa com 0b , temos que diminuirc('0')
para dar conta do 0 inicial .Se todos eles forem primos, todos pertencerão a p , que agora contém todos os números primos até k (e potencialmente 0 ). Se k for um número de Mersenne (ou seja, se tiver apenas bits definidos),
c('0')-1
produzirá 0 . Como os números de Mersenne são impares, p irá não contêm 0 , então a condição falhará.Após (potencialmente) imprimir k , multiplicamos m por k² . Como m = (k-1)! ² antes da atualização, m = k! ² depois dela. Depois de incrementar k , a relação m = (k-1)! ² se mantém novamente e estamos prontos para a próxima iteração.
fonte
Mathematica,
806854 bytesExplicação
fonte
JavaScript (ES6),
12311811511110496 bytesGuardado 4 bytes graças a @Arnauld
Uma combinação de três funções recursivas típicas. Alerta a sequência na ordem inversa e termina com um erro "muita recursão".
Snippet de teste
(modificado para enviar para a página)
Mostrar snippet de código
A função principal pode retornar uma matriz para 104 bytes:
Também pode ser não recursivo à custa de outro byte:
Aqui está o que eu comecei: (Salvo 6 bytes graças a @Arnauld)
Tentei jogar mais e consegui fazê-lo em 104 bytes - depois percebi que já havia encontrado a solução (está na parte inferior da resposta). Você não odeia quando isso acontece? : P
Uma tentativa não recursiva na função principal (novamente, mesma contagem de bytes):
Este segue a rota fácil de contar quantos 0 e 1 estão na representação binária:
A mesma coisa com uma compreensão de matriz:
Este segue um caminho um pouco mais difícil para fazer a mesma coisa:
E este segue mais uma rota relacionada que é tão curta quanto a original:
Novamente, você pode obter 8 bytes de golfe, alertando a sequência na ordem inversa:
fonte
a
. Apenas inicialize-o na chamada inicial paraG
. (Isso deve salvar 4 bytes.)Geléia ,
1716 bytesExperimente online!
Quão?
fonte
ẠBÇЀfĠ...
LƵ;P
sempre me confunde.05AB1E , 14 bytes
Experimente online!
Explicação
fonte
.¡
, esse desafio parecia bom para ele, mas é mais longo:FNb{.¡€gpONp+3QiN}})
05AB1E ,
1715 bytesUsa a codificação CP-1252 . Experimente online!
fonte
LDpÏvybSD_)OpP—
por 15 bytes deve funcionar.MATL ,
1615 bytesExperimente online!
fonte
Perl, 101 bytes
99 bytes de código +
-nl
sinalizadores.Para executá-lo:
Algumas explicações curtas
$r
contêm o clássico regex de verificação primária (q/^1?$|^(11+)\1+$/
).Para todos os números entre 2 e a entrada,
(1x$@)!~$r
verifica se o número é primo,y/01/1/dr!~$r
verifica se o número de0
na representação binária é primo,s/0//gr!~$r
verifica se o número1
na representação binária é primo.(se as três condições forem atendidas,
print$@
imprima-a).fonte
Python,
129125123 bytesSe apenas zero fosse primo ...
Experimente online
Function
p
é a função de verificação primária, que possui>0
no final, para que também funcione com zero, que de outra forma retornaria-1
. O lambda anônimo é o lambda que verifica todas as condições necessárias.Aqui está um método ligeiramente diferente usando uma compreensão de conjunto. O resultado será um conjunto. ( 124 bytes ):
fonte
Perl 6 , 65 bytes
Tente
Expandido:
fonte
Oitava, 73 bytes
Experimente Online!
fonte
CJam ,
2627 bytesAlgoritmo simples, irá jogar mais.
EDIT: Esqueceu n foi inclusivo.
Experimente online!
Por diversão, isso é muito semelhante e também 27 bytes:
Explicação
fonte
Gelatina , 14 bytes
Experimente online!
Infelizmente, eu só poderia amarrar com @Dennis, mas o algoritmo parece ser um pouco diferente, então eu estou postando isso de qualquer maneira.
Explicação
Função auxiliar (exclui elementos da lista que não possuem um número primo de ocorrências de um determinado bit):
Programa principal:
fonte
Haxe,
169171 bytesNada maluco. Essencialmente, uma peneira modificada de Eratóstenes que avalia a primalidade da contagem de 0/1 na mesma iteração que o cruzamento de não primos mais altos. Com algum espaço em branco:
Mas hoje eu aprendi que poderia
continue
contratar um operador ternário e Haxe nem se importa.Edit: +2 porque
n
é um limite superior inclusivo!fonte
n
é inclusivo.Utilitários Bash + GNU,
129126123114111109 bytesExperimente online!
Percebeu o comentário de que a saída não precisa estar em ordem crescente - reduza 3 bytes fazendo contagem regressiva em vez de contagem regressiva.
Grep substituído por wc para salvar 3 bytes adicionais.
Eliminada uma variável (mais 9 bytes de desconto).
Mudou a maneira como o fator é usado - mais 3 bytes.
Tornou-o mais golfista com seq (2 bytes).
fonte
Python,
172170168159 159154133130 bytesUso: Chame a função lambda anônima. O
método
p
verifica se um número é primoGuardado 2 + 2 + 9 = 13 bytes graças a Gurupad Mamadapur
Guardado 5 bytes graças a mbomb007
fonte
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
Experimente aqui!
fonte
Groovy, 120 bytes
Este é um fechamento sem nome.
Experimente aqui!
fonte
Pitão , 18 bytes
Experimente online aqui .
fonte
U
paraS
eS
Python 3 , 97 bytes
Este é o mesmo algoritmo da minha resposta do Python 2 , mas a implementação é bem diferente. A função imprime em STDOUT e termina com um erro.
Experimente online!
fonte
JavaScript (ES6), 110 bytes
Mostrar snippet de código
fonte
MATLAB, 50 bytes
fonte
Haxe,
158147 bytesSai para STDOUT e termina com um erro "muita recursão"; ligue com por exemplo
f(1000);
. Você pode usar umwhile
loop sem erro para 156 bytes:O uso de um intervalo ficou três bytes mais longo:
Teste online!
fonte
Ferrugem, 147 bytes
link para parque infantil
Os
count_ones
,count_zeros
eleading_zeros
métodos veio a calhar.Versão formatada
fonte
Perl 6 , 50 bytes
Variação da resposta de b2gills , usando o operador de
&
junção com grande efeito.Experimente online!
Como funciona
fonte