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
? Selon cette page (et mon code) ce devrait être avril et juillet.Réponses:
Pyth, 73 octets
Essayez-le en ligne!
Utiliser l'algorithme de Gauss, comme dans ma réponse Python. ~ 55 octets du code sont pour le calcul de la semaine, donc choisir un meilleur algorithme pourrait le faire baisser beaucoup je suppose ... mais bon, au moins ça marche maintenant! :)
la source
Python 2,
157144136 136 octetsMa solution utilise l'algorithme de Gauss. L'entrée est l'année en tant que nombre entier. La sortie est la liste des mois avec un vendredi 13 sous forme de nombres (1-12). Probablement un peu plus de golf possible, mais il se fait tard ... Je vais éditer celui-ci demain et descendre un peu plus. En attendant, les suggestions sont toujours les bienvenues!
edit: Je suis descendu à 144 en remplaçant la boucle for par une liste complète et en faisant quelques autres petits ajustements.
edit2: Il est passé à 136 avec les suggestions de Morgan Thrapp et a corrigé le bug qu'il a découvert. Merci beaucoup! :)
la source
Perl -
141107103 octetsCela utilise une version modifiée de la formule pour le jour julien pour calculer le jour de la semaine du 13 mars, puis utilise le nombre de jours de la semaine chaque mois est décalé de janvier pour trouver le jour de la semaine pour le reste de la mois, en commençant par les 2 derniers mois de l'année précédente débutant en mars puis les 10 premiers mois de l'année en cours (pour éviter de calculer deux fois les années bissextiles).
la source
C -
164153112 octetsJ'ai trouvé une jolie petite solution en utilisant une version fortement modifiée de la méthode de Schwerdtfeger. Il code la table nécessaire dans un entier en utilisant la base 7, modifiée pour tenir dans un mot signé de 32 bits. Il affiche le mois sous forme de caractère ASCII, avec janvier codé comme
1
, février comme2
et ainsi de suite, avec octobre codé comme:
, novembre codé comme;
et décembre codé comme<
.Ici, il est légèrement non golfé:
Je suis sûr qu'il existe plusieurs façons de le rendre encore plus petit, mais je pense que l'algorithme, ou une légère variation de celui-ci, est presque idéal pour trouver les mois où le vendredi 13 se produit (en ce qui concerne la taille du code). Remarques:
+5
).m
n'est pas réellement nécessaire, car le mois que nous regardons est déductiblet
.Je laisse ma réponse plus ancienne ci-dessous, car elle utilise une méthode complètement différente que l'on ne voit pas dans les autres réponses ici.
Ceci est basé sur une solution à un problème connexe ( /codegolf//a/22531/7682 ).
Il simule essentiellement le calendrier grégorien, avançant un jour à la fois, imprimant le mois alors qu'il s'agit d'un vendredi et du 13. Le voici sous une forme légèrement plus lisible:
la source
1:
pour123456789
, où:
dénote octobre. J'ai clarifié l'encodage ci-dessus.Excel, 137 octets
Prend l'année d'entrée dans A1. La sortie est une liste non séparée de Hexidecimal. (Janvier = 0, décembre = B)
Utilise l'algorithme de Gauss pour janvier et août.
la source
C,
276219 octetsentrée depuis la sortie stdin dans stdout, essayez de http://ideone.com/XtuhGj [la fonction de débogage est z]
la source