/* 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
. No sé cómo reformularlo de una manera simple.Respuestas:
Jalea ,
1413 bytesPruébalo en línea!
Cómo funciona
fuente
d`
truco es otra cosa ...Python 2 ,
106102100 bytesPruébalo en línea!
Fondo
Para identificar números primos, usamos un corolario del teorema de Wilson :
Cómo funciona
Comenzamos inicializando k y m como 1 y p como el conjunto {0} . Tenga en cuenta que m = 1 = 0! ² = (k - 1)! ² . Inmediatamente después, el siguiente código se ejecuta n veces, donde n es el entero leído desde la entrada estándar.
Según el corolario, m% k será 1 si k es primo y 0 en caso contrario. Por lo tanto,
{m%k*k,0}
devolverá el conjunto {k, 0} si k es primo y el conjunto {0} de lo contrario.Si (y solo si) k es primo, ya que p no puede contener k en este punto, la diferencia simétrica in situ
p^={m%k*k,0}
agregará k al conjunto p . Además, p contendrá 0 después de la actualización si y solo si no contiene 0 antes, por lo que 0 ∊ p si y solo si k es par.En la misma línea, definimos una función c vía
c=bin(k).count
, que contará las ocurrencias de su argumento en la representación binaria de k .La segunda línea produce la salida real.
{k,c('1'),c('0')-1}
devuelve el conjunto que consta de k , el número de bits establecidos en k y el número de bits no establecidos en k . Como la salida debin(k)
comienza con 0b , tenemos que disminuirc('0')
para tener en cuenta el 0 inicial .Si todos ellos son primos, todos pertenecerán a p , que ahora contiene todos los números primos hasta k (y potencialmente 0 ). Si k es un número de Mersenne (es decir, si solo ha establecido bits),
c('0')-1
producirá 0 . Puesto que los números de Mersenne son impares, p será no contiene 0 , por lo que la condición se producirá un error.Después de (potencialmente) imprimir k , multiplicamos m por k² . Como m = (k-1)! ² antes de la actualización, m = k! ² después de ella. Después de incrementar k , la relación m = (k-1)! ² se mantiene nuevamente y estamos listos para la próxima iteración.
fuente
Mathematica,
806854 bytesExplicación
fuente
JavaScript (ES6),
12311811511110496 bytesGuardado 4 bytes gracias a @Arnauld
Una combinación de tres funciones recursivas típicas. Alerta la secuencia en orden inverso y termina en un error de "demasiada recursividad".
Fragmento de prueba
(modificado para enviar a la página)
Mostrar fragmento de código
La función principal puede devolver una matriz de 104 bytes:
También puede ser no recursivo a costa de otro byte:
Aquí está el que comencé con: (Guardado 6 bytes gracias a @Arnauld)
Intenté jugar más al golf y logré hacerlo en 104 bytes, luego me di cuenta de que ya había encontrado esa solución (está en la parte inferior de la respuesta). ¿No odias cuando eso sucede? :PAGS
Un intento no recursivo en la función principal (de nuevo, el mismo recuento de bytes):
Éste toma la ruta fácil de contar cuántos 0 y 1 hay en la representación binaria:
Lo mismo con una comprensión de matriz:
Este toma una ruta un poco más difícil para hacer lo mismo:
Y esta toma otra ruta relacionada que es tan corta como la original:
Una vez más, puedes jugar 8 bytes haciendo que alerta la secuencia en orden inverso:
fuente
a
. Simplemente inicialícelo en la llamada inicial aG
. (Eso debería ahorrar 4 bytes.)Jalea ,
1716 bytesPruébalo en línea!
¿Cómo?
fuente
ẠBÇЀfĠ...
LƵ;P
bit siempre me confunde.05AB1E , 14 bytes
Pruébalo en línea!
Explicación
fuente
.¡
, este desafío me pareció bien, pero es más largo:FNb{.¡€gpONp+3QiN}})
05AB1E ,
1715 bytesUtiliza la codificación CP-1252 . Pruébalo en línea!
fuente
LDpÏvybSD_)OpP—
para 15 bytes debería funcionar.MATL ,
1615 bytesPruébalo en línea!
fuente
Perl, 101 bytes
99 bytes de código +
-nl
banderas.Para ejecutarlo:
Algunas explicaciones breves
$r
contienen la clásica expresión regular de verificación regex (q/^1?$|^(11+)\1+$/
).Para todos los números entre 2 y la entrada,
(1x$@)!~$r
verifica si el número es primo,y/01/1/dr!~$r
verifica si el número0
en la representación binaria es primo,s/0//gr!~$r
verifica si el número1
en la representación binaria es primo.(si se cumplen las 3 condiciones, lo
print$@
imprime).fuente
Pitón,
129125123 bytesSi solo cero fuera primo ...
Pruébalo en línea
La función
p
es la función de verificación principal, que tiene>0
al final para que también funcione para cero, que de lo contrario volvería-1
. La lambda anónima es la lambda que verifica todas las condiciones requeridas.Aquí hay un método ligeramente diferente usando una comprensión establecida. El resultado será un conjunto. ( 124 bytes ):
fuente
Perl 6 , 65 bytes
Intentalo
Expandido:
fuente
Octava, 73 bytes
¡Pruébelo en línea!
fuente
CJam ,
2627 bytesAlgoritmo directo, jugará más golf.
EDITAR: Olvidé n fue inclusivo.
Pruébalo en línea!
Por diversión, esto es muy similar y también de 27 bytes:
Explicación
fuente
Jalea , 14 bytes
Pruébalo en línea!
Desafortunadamente, solo pude vincularme con @Dennis, pero el algoritmo parece ser algo diferente, así que estoy publicando esto de todos modos.
Explicación
Función auxiliar (elimina elementos de la lista que no tienen un número primo de ocurrencias de un bit dado):
Programa principal:
fuente
Haxe,
169171 bytesNada loco Esencialmente, un tamiz modificado de Eratóstenes que evalúa la primalidad del recuento 0/1 en la misma iteración que tachando los no primos superiores. Con algo de espacio en blanco:
Pero hoy aprendí que podía poner
continue
un operador ternario y a Haxe ni siquiera le importa.Editar: +2 porque
n
es un límite superior inclusivo!fuente
n
es inclusivo.Bash utilidades + GNU,
129126123114111109 bytesPruébalo en línea!
Noté el comentario de que la salida no tiene que estar en orden creciente: redujo 3 bytes al contar hacia atrás en lugar de contar hacia arriba.
Se reemplazó grep con wc para guardar 3 bytes adicionales.
Se eliminó una variable (9 bytes más desactivados).
Se modificó la forma en que se usa el factor: 3 bytes más.
Lo hizo más golfista con seq (2 bytes).
fuente
Python,
172170168159154133130 bytesUso: llamar a la función lambda anónima El
método
p
verifica si un número es primoGuardado 2 + 2 + 9 = 13 bytes gracias a Gurupad Mamadapur
Guardado 5 bytes gracias a mbomb007
fuente
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
Pruébalo aquí!
fuente
Groovy, 120 bytes
Este es un cierre sin nombre.
Pruébalo aquí!
fuente
Pyth , 18 bytes
Pruébelo en línea aquí .
fuente
U
aS
eS
Python 3 , 97 bytes
Este es el mismo algoritmo que en mi respuesta de Python 2 , pero la implementación es bastante diferente. La función se imprime en STDOUT y termina con un error.
Pruébalo en línea!
fuente
JavaScript (ES6), 110 bytes
Mostrar fragmento de código
fuente
MATLAB, 50 bytes
fuente
Haxe,
158147bytesSale a STDOUT y termina en un error de "demasiada recursividad"; llamar con, por ejemplo
f(1000);
. Puede usar unwhile
bucle sin error para 156 bytes:Usando un rango resultó tres bytes más largos:
¡Pruébalo en línea!
fuente
Óxido, 147 bytes
enlace de juegos
Las
count_ones
,count_zeros
yleading_zeros
los métodos fueron muy útiles.Versión formateada
fuente
Perl 6 , 50 bytes
Variación de la respuesta de b2gills , utilizando el operador de
&
unión con gran efecto.Pruébalo en línea!
Cómo funciona
fuente