有些节日有固定的,容易记住的日期,如10月31日,12月25日等,然而,有些想麻烦。它们被指定为“9月的第一个星期一”或“11月的第四个星期四”。我怎么知道那是什么时候?
我只知道感恩节快到了,所以我需要一个程序来帮助我弄清楚什么时候是感恩节。有些人甚至说这是明天,所以你的程序需要尽可能短,以确保我能及时重新输入它。
挑战
创建一个程序或函数,给定一个四位数的年份(如2015或1984),输出或返回美国在该年的感恩节日期。根据维基百科页面的定义,感恩节是11月的第四个星期四。(提示:该页面还包含一些有关日期模式的有趣信息。)
输入:一个十进制数,最多四位数,代表公共时代的一年(C.E.)。例子: 987,1984,2101
产出:感恩节到来的日期,包括当月和日,如果有感恩节的话,会在该年下降。这可能是任何合理的格式,使用您的最佳判断。在所有情况下都要使用Gregorian,即使它当时没有使用。
(注意:确保正确处理闰年!)
测试用例输入1:
2015产出1:
Nov 26投入2:
1917产出2:
Nov 22提交的分数将以字节为单位。我建议本网站跟踪您的字节计数,尽管您可以使用任何您喜欢的计数器。
-25%的分数,如果你把B.C.E.的日期作为负数处理(例如-480将是塞莫皮拉战役的一年)。
负测试用例输入:
-480相应产出:
Nov 25这是密码-高尔夫,所以最低分赢了!
编辑:我是标记托马斯邝其志的TI-基本提交为接受。不要让这阻碍你提交新的条目!
这里有一个Stack代码片段,用于生成一个常规的领导板和一个按语言分列的获奖者概览。
为了确保您的答案显示出来,请使用下面的Markdown模板以标题开头:
# Language Name, N bytes其中N是您提交的大小。如果你提高你的分数,你可以保持旧的分数在标题中,通过敲击他们。例如:
# Ruby, <s>104</s> <s>101</s> 96 bytes如果您想在标题中包含多个数字(例如,因为您的分数是两个文件的总和,或者要分别列出解释器标志惩罚),请确保实际分数是标题中的最后一个数字:
# Perl, 43 + 2 (-p flag) = 45 bytes您还可以将语言名称作为链接,然后将其显示在领导板片段中:
# [><>](http://esolangs.org/wiki/Fish), 121 bytesvar QUESTION_ID=64785,OVERRIDE_USER=45162;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>发布于 2015-11-26 17:40:32
在我的TI-84+计算器上测试
1129-dayOfWk(Ans+ᴇ4,9,1感恩节是11月29日,减去9月1日那一周的那一天,那里1是星期天,7是星期六。这将以MMDD格式输出。
测试用例:2015 -> 1126,1917 -> 1122,-480 -> 1125已得到验证。TI-BASIC似乎对所有日期都使用公历。
TI-BASIC不支持负年份,但这会得到额外的奖励,因为我们在输入中增加了10000。因为公历有400年的时间,这不会改变一周中的每一天。
发布于 2015-11-25 21:56:37
lambda x:28.11-(x-2+x/4-x/100+x/400)%7虽然我注意到,在公历中没有0岁,所以这种行为有点可疑,但这对负数年份起作用的方式在问题中是明确的。
发布于 2015-11-26 02:59:55
~.4/.25/.4/2---+7%28\--11这使用了樱本的一周中的一天公式。因为有人这样做,所以输出以dd-mm的形式出现。以下是我先前提交的材料:
~.4/.25/.4/2---+7%"Nov "28@-https://codegolf.stackexchange.com/questions/64785
复制相似问题