tło
Niektóre święta mają ustalone, łatwe do zapamiętania daty, takie jak 31 października, 25 grudnia itp. Niektóre jednak chcą być kłopotliwe. Są one określane jako „pierwszy poniedziałek września” lub „czwarty czwartek listopada”. Skąd mam wiedzieć, kiedy to jest?
Wiem tylko, że Święto Dziękczynienia zbliża się bardzo szybko, dlatego potrzebuję programu, który pomoże mi ustalić, kiedy to nastąpi. Niektórzy nawet twierdzą, że jest jutro , więc twój program musi być jak najkrótszy, aby upewnić się, że mogę go ponownie wpisać na czas.
Wyzwanie
Utwórz program lub funkcję, która, biorąc pod uwagę maksymalnie czterocyfrowy rok (np. 2015 lub 1984), wyświetla lub zwraca datę Święta Dziękczynienia Stanów Zjednoczonych w tym roku. Święto Dziękczynienia jest zdefiniowane jako czwarty czwartek listopada według strony Wikipedii . (Wskazówka: ta strona zawiera także kilka interesujących informacji na temat wzorca daty).
Wprowadzanie : liczba dziesiętna z maksymalnie czterema cyframi reprezentującymi rok w erze wspólnej (CE). Przykłady: 987, 1984, 2101
Wyjście : data, w tym miesiąc i dzień, w którym przypada Święto Dziękczynienia, lub spadłoby, gdyby istniało, w tym roku. Może to być dowolny rozsądny format; użyj najlepszej oceny. Korzystaj z kalendarza gregoriańskiego we wszystkich przypadkach, nawet jeśli w tym czasie nie był używany.
(Uwaga: pamiętaj, aby poprawnie obchodzić lata przestępne!)
Przypadki testowe
Wejście 1:
2015
Wyjście 1:
Nov 26
Wejście 2:
1917
Wyjście 2:
Nov 22
Punktacja
Zgłoszenia będą oceniane w bajtach . Polecam tę stronę do śledzenia liczby bajtów, chociaż możesz użyć dowolnego licznika, który ci się podoba.
Bonusy
-25% do twojego wyniku, jeśli traktujesz daty BCE jako liczby ujemne (np. -480 byłby rokiem bitwy pod Termopilami).
Wprowadzanie negatywnych przypadków testowych:
-480
Odpowiednia wydajność:
Nov 25
To jest golf golfowy , więc wygrywa najniższy wynik!
Edycja: Oznaczam zgłoszenie TI-BASIC Thomasa Kwa jako zaakceptowane. Nie zniechęcaj Cię do przesyłania nowych wpisów!
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var 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>