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
:? Laut dieser Seite (und meinem Code) sollte es April und Juli sein.Antworten:
Pyth, 73 Bytes
Probieren Sie es online!
Mit dem Gauß-Algorithmus, wie in meiner Python-Antwort. ~ 55 Bytes des Codes sind für die Wochentagsberechnung bestimmt, also könnte die Wahl eines besseren Algorithmus dies um ein Vielfaches verringern ... aber hey, zumindest funktioniert es jetzt! :)
quelle
Python 2,
157144136 BytesMeine Lösung verwendet den Gauß-Algorithmus. Eingabe ist das Jahr als Ganzzahl. Ausgabe ist die Liste der Monate mit einem Freitag 13. als Zahlen (1-12). Wahrscheinlich ist noch mehr Golf möglich, aber es wird spät ... Ich werde das morgen bearbeiten und es noch ein bisschen runterholen. Vorschläge sind in der Zwischenzeit immer willkommen!
edit: Es wurde auf 144 reduziert, indem die for-Schleife durch ein Listenverständnis ersetzt und einige andere kleine Anpassungen vorgenommen wurden.
edit2: Golfed es auf 136 mit den Vorschlägen von Morgan Thrapp und behebt den Fehler, den er entdeckt hat. Vielen Dank! :)
quelle
Perl -
141107103 BytesDies verwendet eine modifizierte Version der Formel für die Julianischen Tag verwendet , um den Wochentag des 13. März zu berechnen. Anschließend wird die Anzahl der Wochentage verwendet, die jeder Monat vom Januar abweicht, um den Wochentag für den Rest des Monats zu ermitteln Monate, beginnend mit den letzten 2 Monaten des Vorjahres, beginnend im März, dann den ersten 10 Monaten des laufenden Jahres (um die Schaltjahre nicht zweimal zu berechnen).
quelle
C -
164153112 BytesIch fand eine nette kleine Lösung mit einer stark modifizierten Version von Schwerdtfegers Methode. Die erforderliche Tabelle wird mit der Basis 7 in einer Ganzzahl codiert, die so geändert wird, dass sie in ein vorzeichenbehaftetes 32-Bit-Wort passt. Es gibt den Monat als ASCII-Zeichen aus, wobei der Januar als
1
, der Februar als2
und so weiter, der Oktober als:
, der November als;
und der Dezember als codiert sind<
.Hier ist es leicht ungolfed:
Ich bin mir sicher, dass es ein paar Möglichkeiten gibt, es noch kleiner zu machen, aber ich denke, der Algorithmus oder eine kleine Variation davon ist fast ideal, um die Monate zu finden, in denen Freitag der 13. auftritt (in Bezug auf die Codegröße). Anmerkungen:
+5
) .m
ist eigentlich nicht notwendig, da der Monat, auf den wir schauen, ableitbar istt
.Ich lasse meine ältere Antwort unten, da sie eine völlig andere Methode verwendet, als in anderen Antworten hier.
Dies basiert auf einer Lösung für ein verwandtes Problem ( /codegolf//a/22531/7682 ).
Es simuliert im Grunde den Gregorianischen Kalender, der jeden Tag vorrückt und den Monat druckt, in dem es ein Freitag und der 13. ist. Hier ist es in einer etwas besser lesbaren Form:
quelle
1:
für123456789
, wo:
Oktober bezeichnet , ausgibt . Ich habe die obige Kodierung geklärt.Excel, 137 Bytes
Nimmt das Eingabejahr in A1 auf. Die Ausgabe ist eine nicht getrennte Liste von Hexidecimal. (Januar = 0, Dezember = B)
Verwendet den Gauß-Algorithmus für Januar und August.
quelle
C,
276219 BytesEingabe von STDIN-Ausgabe in STDOUT versuchen Sie, http://ideone.com/XtuhGj [die Debug-Funktion ist z]
quelle