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
? Согласно этой странице (и моему коду) это должны быть апрель и июль.Ответы:
Pyth, 73 байта
Попробуйте онлайн!
Используя алгоритм Гаусса, как в моем ответе на Python. ~ 55 байтов кода предназначены для вычисления дня недели, поэтому выбор лучшего алгоритма может значительно снизить это, я полагаю ... но, по крайней мере, теперь он работает! :)
источник
Python 2,
157144136 байтМое решение использует алгоритм Гаусса. Вводим год как целое число. Выводится список месяцев с пятницей 13 числа в виде цифр (1-12). Возможно, возможно еще немного игры в гольф, но уже поздно ... Собираюсь отредактировать это завтра и разобраться в этом немного больше. Предложения всегда приветствуются!
редактирование: опустил до 144, заменив цикл for списком и сделав некоторые другие небольшие изменения.
edit2: Гольф до 136 с предложениями от Morgan Thrapp и исправил обнаруженную ошибку. Большое спасибо! :)
источник
Perl -
141107103 байтПри этом используется модифицированная версия формулы для юлианского дня, чтобы вычислить день недели 13 марта, затем используется число дней недели, которые каждый месяц смещается относительно января, чтобы найти день недели для оставшейся части дня. месяцы, начиная с последних 2 месяцев предыдущего года, начиная с марта, затем с первых 10 месяцев текущего года (чтобы избежать високосных лет дважды).
источник
C -
164153112 байтЯ нашел милое небольшое решение, используя сильно модифицированную версию метода Швердтфегера. Он кодирует необходимую таблицу в целое число, используя основание 7, измененное, чтобы соответствовать 32-битному слову со знаком. Он выводит месяц в виде ASCII-символа, причем январь кодируется как
1
, февраль - как2
и так далее, октябрь - как:
, ноябрь - как,;
а декабрь - как<
.Вот это немного разглажено:
Я уверен, что есть несколько способов сделать его еще меньше, но я думаю, что алгоритм или его небольшая вариация почти идеальны для нахождения месяцев, когда наступает пятница 13-е (в отношении размера кода). Примечания:
+5
).m
самом деле не нужна, так как месяц, на который мы смотрим, выводится изt
.Я оставляю свой старый ответ ниже, поскольку он использует совершенно другой метод, которого нет в других ответах здесь.
Это основано на решении связанной проблемы ( /codegolf//a/22531/7682 ).
Он в основном имитирует григорианский календарь, продвигаясь по одному за раз, печатая месяц, когда это пятница и 13-е число. Вот это в несколько более читаемой форме:
источник
1:
для123456789
, где:
обозначает октябрь. Я уточнил кодировку выше.Excel, 137 байт
Вводит год в А1. Выводится неразделенным списком шестнадцатеричного числа. (Январь = 0, декабрь = B)
Использует алгоритм Гаусса для января и августа.
источник
C
276219 байтввод из stdin вывод в stdout попробуйте http://ideone.com/XtuhGj [функция отладки z]
источник