38
\$\begingroup\$

Your input will be a integer between 1970 and 2090 (inclusive), representing a year. Your program should output the next year on which New Years Day falls on the same day of the week as the input year.

Test Cases:

Below are the sample inputs and outputs

2001 => 2007
2047 => 2058
2014 => 2020
1970 => 1976
1971 => 1982
1977 => 1983
2006 => 2012

20% Bonus: Output the day of the week of New Years Day

2001 => 2007 (Mon)
2047 => 2058 (Tue)
2014 => 2020 (Wed)
1970 => 1976 (Thu)
1971 => 1982 (Fri)
1977 => 1983 (Sat)
2006 => 2012 (Sun)

30% Bonus: Output Advance Happy New Year, <year>

2010 => Advance Happy New Year, 2016

50% Bonus: Do both above bonuses

2010 => Advance Happy New Year, 2016 (Fri)

Write a program which reads input from STDIN or accepts command line arguments, or a function which takes an argument.

Note: Please add a link to test your code if possible.

Leaderboard:

    var QUESTION_ID=66656,OVERRIDE_USER=16196;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/66656/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://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}#answer-list{padding-right: 100px}
    <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>

\$\endgroup\$
4
  • 7
    \$\begingroup\$ I feel like every single dates challenge requires doing the leap years calculation as a subproblem, and it's getting stale. \$\endgroup\$
    – xnor
    Dec 15, 2015 at 10:35
  • \$\begingroup\$ Related: this question. \$\endgroup\$ Dec 15, 2015 at 11:09
  • \$\begingroup\$ @xnor If that wasn't the case, it would have been just a +7. I.e. "too broad" \$\endgroup\$ Sep 11, 2016 at 1:08
  • \$\begingroup\$ @EriktheGolfer No. When I wrote that comment, my answer was the accepted one. \$\endgroup\$
    – Dennis
    Sep 11, 2016 at 1:37

34 Answers 34

1
2
1
\$\begingroup\$

Vyxal, 9 bytes

4%3e7%+5+

Try it Online!

Port of lirtosiast's Jelly answer.

-2 thanks to @lyxal

Explanation

4%3e7%+5+  # Implicit input
4%         # Input mod 4
  3e       # Cubed
    7%     # Mod 7
      +5+  # Plus 5 plus input
           # Implicit output

Old:

4%»&ṗ»12τi+  # Implicit input
4%           # Input mod 4
         i   # Indexed into
  »&ṗ»12τ    # The list [5,6,6,11]
          +  # Added to the input
             # Implicit output
\$\endgroup\$
2
  • \$\begingroup\$ Try it Online! for 9 bytes porting Jelly. Smh making long answers like this. \$\endgroup\$
    – lyxal
    Aug 25 at 4:41
  • \$\begingroup\$ @lyxαl thanks. And we were talking the other day about how you don't have a monograph for "cube" lol \$\endgroup\$
    – The Thonnu
    Aug 25 at 6:41
1
\$\begingroup\$

Thunno 2, 8 bytes

4%³7%+5+

Try it online!

Port of lirtosiast's Jelly answer.

Explanation

4%³7%+5+  # Implicit input
4%        # Input mod 4
  ³       # Cubed
   7%     # Mod 7
     +5+  # Plus 5 plus input
          # Implicit output

Old:

4%¿çƑ{ç¿i+  # Implicit input
4%          # Input mod 4
        i   # Indexed into
  ¿çƑ{ç¿    # The list [5,6,6,11]
         +  # Added to the input
            # Implicit output
\$\endgroup\$
0
\$\begingroup\$

Python 2, 32 bytes

x=input()
print[5,6,6,11][x%4]+x

Uses the 5 6 6 11 trick.

\$\endgroup\$
0
\$\begingroup\$

𝔼𝕊𝕄𝕚𝕟 2, 12 chars / 18 bytes (non-competitive)

ï+⟨566ḋ[ï%4]

Try it here (Firefox only).

Explanation

ï+⟨566ḋ[ï%4] // implicit: ï = input, ḋ = 11
ï+           // add ï to:
  ⟨566ḋ      // [5,6,6,11]
       [ï%4] // get index at input mod 4
\$\endgroup\$
1
2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.