var QUESTION_ID=69510,OVERRIDE_USER=31716;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}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="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><div id="language-list"> <h2>Winners 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><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>
0001 --> 5
? De acuerdo con esta página (y mi código) debería ser abril y julio.Respuestas:
Pyth, 73 bytes
Pruébalo en línea!
Usando el algoritmo de Gauss, como en mi respuesta de Python. ~ 55 bytes del código son para el cálculo del día de la semana, por lo que elegir un mejor algoritmo podría reducir esto mucho, supongo ... pero bueno, ¡al menos está funcionando ahora! :)
fuente
Python 2,
157144136 BytesMi solución usa el algoritmo de Gauss. La entrada es el año como entero. La salida es la lista de meses con un viernes 13 como números (1-12). Probablemente un poco más de golf posible, pero se está haciendo tarde ... Voy a editar este mañana y bajarlo un poco más. ¡Las sugerencias siempre son bienvenidas mientras tanto!
editar: Lo bajé a 144 reemplazando el ciclo for con una comprensión de la lista y haciendo algunos otros pequeños ajustes.
edit2: se redujo a 136 con las sugerencias de Morgan Thrapp y solucionó el error que descubrió. ¡Muchas gracias! :)
fuente
Perl -
141107103 bytesEsto usa una versión modificada de la fórmula para el día juliano para calcular el día de la semana del 13 de marzo, luego usa la cantidad de días de la semana que cada mes se compensa desde enero para encontrar el día de la semana para el resto de la semana. meses, comenzando con los últimos 2 meses del año anterior a partir de marzo y luego los primeros 10 meses del año actual (para evitar calcular dos años bisiestos).
fuente
C -
164153112 bytesEncontré una pequeña solución con una versión muy modificada del método de Schwerdtfeger. Codifica la tabla necesaria en un número entero usando la base 7, modificada para caber en una palabra de 32 bits con signo. Emite el mes como un carácter ASCII, con enero codificado como
1
, febrero como2
y así sucesivamente, con octubre codificado como:
, noviembre codificado como;
y diciembre codificado como<
.Aquí está un poco ignorado:
Estoy seguro de que hay algunas formas de hacerlo aún más pequeño, pero creo que el algoritmo, o una ligera variación del mismo, es casi ideal para encontrar los meses en los que se produce el viernes 13 (con respecto al tamaño del código). Notas:
+5
).m
no es realmente necesaria, ya que el mes que estamos viendo es deduciblet
.Dejo mi respuesta anterior a continuación, ya que utiliza un método completamente diferente que no se ve en otras respuestas aquí.
Esto se basa en una solución a un problema relacionado ( /codegolf//a/22531/7682 ).
Básicamente simula el calendario gregoriano, avanzando un día a la vez, imprimiendo el mes cuando es viernes y 13. Aquí está en una forma ligeramente más legible:
fuente
1:
para123456789
, donde:
denota octubre. Aclaré la codificación anterior.Excel, 137 bytes
Toma año de entrada en A1. La salida es una lista no separada de Hexidecimal. (Enero = 0, diciembre = B)
Utiliza el algoritmo de Gauss para enero y agosto.
fuente
C,
276219 bytesentrada de salida stdin en stdout intente http://ideone.com/XtuhGj [la función de depuración es z]
fuente