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>
Odpowiedzi:
Galaretka, 9 bajtów
Jest to monadyczny łańcuch, który przyjmuje jako argument wejściowy argument liczby całkowitej. Wykorzystuje mój
(x+5+(x%4)**3%7)
algorytm.Wypróbuj tutaj . Chociaż jest to aktualna wersja Jelly, działa również w tej wersji , która poprzedza wyzwanie. (Dzięki @Dennis!)
źródło
Mathematica,
45372724 bajtówUlepszenia dzięki @ MartinBüttner (10 bajtów) i @ChipHurst (kolejne 3 bajty).
źródło
#+5[6,6,11][[#~Mod~4]]&
5[6, 6, 11][[0]]
:)CJam,
211211 bajtów@martin znalazł bardzo prostą metodę!
Wypróbuj tutaj .
EDYCJA: Dzięki, Dennis!
źródło
5 6 6 11
sztuczkę, co w innych odpowiedziach, ale lista jest zakodowana jako „cyfry 9587 w podstawie 12” .gs2, 12 bajtów
Tłumaczenie mojej odpowiedzi CJam. Jak zwykle zakodowane w CP437. Wypróbuj online !
źródło
JavaScript (ES6),
504920 bajtów (bez bonusów)Algorytm @martin okazuje się być znacznie mniejszy, więc poszedłem z nim.
Wybrałem podejście matematyczne, ponieważ JavaScript jest zwykle pełna. Kod jest na tyle krótki, że premie wydłużają go.
Oto moja poprzednia odpowiedź (49 bajtów) i moja oryginalna odpowiedź (50 bajtów):
F=(a,b=a)=>((a+--a/4|0)-(b++/4+b|0))%7?F(++a,b):b
F=(a,b=a)=>(f=c=>(c--+c/4|0)%7)(a)-f(++b)?F(a,b):b
Działają, biorąc rok i obliczając liczbę (0–6) reprezentującą „początkowy dzień roku”. Ponieważ zakres dat tego wyzwania mieści się w przedziale lat, które są zgodne z prostymi regułami dotyczącymi lat przestępnych (bez pomijania w 2000 r.), Obliczenie jest dość proste. W takim razie wystarczy porównać przyszłość, aby znaleźć lata, które zaczynają się od tej samej wartości. Rekurencja okazała się najbardziej zwięzłym sposobem na zrobienie tego.
źródło
Pyth,
141211 bajtówCztery bajty w ciągu powinny być
05 06 06 0B
.EDYCJA: Dzięki, FryAmTheEggman!
EDYCJA: Dzięki, Dennis!
źródło
JavaScript (ES6), 104 bajty - 50% bonus = 52
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
Kod maszynowy Z80, 12 bajtów
Procedura Z80, która ma być przechowywana
0000h
, wywoływana z wejściem inHL
, a wszystkie inne rejestry usuwane:Pierwsze trzy instrukcje to „NOP”, ale są indeksowane jako dane w dalszej części kodu. Po powrocie wyjście jest włączone
HL
.źródło
DE
a zatem możesz użyćLD A, 3; AND E; LD L, A; LD L, (HL);
?Python 3,
14010010284,5154 * 0,5 = 77 bajtówPrawdopodobnie mógłbym napisać lepsze rozwiązanie z algorytmem Sakamoto, ale na razie to wystarczyMiałem rację. Oto implementacja wykorzystująca algorytm Sakamoto.
Wyjaśnienie:
źródło
w="SMTWTFSuouehranneduit"
drukowanie, a następnie drukowaniew[d(i)::7]
?Poważnie,
3517 bajtów[5,6,6,11]
trik ratuje dzień.Wypróbuj online
Wyjaśnienie:
Stara wersja:
Wypróbuj online
Wyjaśnienie:
Algorytm Sakamoto:
źródło
C, 31 bajtów
Po edycji pytania, które ogranicza zakres wprowadzania do 1970-2090, staje się to dość trywialne:
Bez lat, które nie przeskakują, istnieje prosta sekwencja odstępów 5,6,6,11 dla pierwszego powtórzenia tego samego dnia.
Kompletne rozwiązanie pierwotnego problemu (nieograniczone do 2090), 90 bajtów:
Program testowy:
Testowe uruchomienie:
źródło
R,
143136 * 0,5 = 68 bajtówUżyj
%A
dla pełnej nazwy dnia zamiast `% a, zależy od pożądanego stanu.R, 120 * 0,7 = 84 bajtów
R, 90 bajtów
Wszystkie powyższe odpowiedzi są pochodnymi pracami opartymi na odpowiedzi @plannapus. Używanie
;
separatora, aby uniknąć potrzebysource
pliku lub uruchomić go jako skrypt w wierszu polecenia.źródło
weekdays
, miło.R, 145 bajtów -50% -> 72,5
Przykłady:
R, 97 bajtów (bez premii)
Wcięte, z nowymi liniami:
Przypadki testowe:
źródło
;
...y=scan;
i używającx=y<-scan()+1
, myślęas.POSIXlt(paste(y,1),,"%Y %j")$wday
ciała funkcyjnegoscan
odczyta w drugim wierszu jako dane wejściowe.x=y<-scan()+1
z 2014 roku jako stdin daje x = y = 2015 i 2015 (czyli przyporządkowanie jesty <- scan()+1
) i jeśli spróbujesz zrobićx=1+y<-scan()
to daje błąd (Error in 1 + y <- scan() : target of assignment expands to non-language object
), ponieważ stara się przypisaćscan()
do1+y
....$wday
jest numer dnia tygodnia: ale tutaj potrzebuję nazwy dnia tygodnia, aby móc drukowaćAdvance Happy New Year, 2012 (Sun)
VBA, 130 * 0,50 = 65 bajtów
VBA sprawia, że znalezienie dni tygodnia jest takie proste ... Gdyby tylko nie było o tym tak Pełno.
źródło
PHP, 120
139bajtów - 50% = 60 bajtówFunkcjonalne podejście:
Pobiera jedno wejście z wiersza poleceń, na przykład:
Sposób OOP wydaje się być dłuższy, jak zawsze (143 bajty):
Edycje
+1year
, teraz po prostu zwiększam dany rok.-1-1
w zmiennej.źródło
C, wynik
5352 (104 bajty)Pomysł zapożyczony od Toby Speighta ; dodano wyświetlanie premii dnia tygodnia.
Skrócono ciąg znaków, przesuwając kody znaków do bardziej wygodnego zakresu. Musiałem wybrać odpowiednią kwotę przesunięcia (np. 43), aby kod obliczania krótkiego dnia tygodnia
x*5/4%7
działał.źródło
" !!&"
.Mathematica, 145 * 50% =
7473,572,5 bajtówKorzysta ze standardowych funkcji daty.
źródło
Pyth, 23 bajty
Nie kwalifikuje się do żadnego z bonusów.
Wypróbuj tutaj .
Podobne do czystej odpowiedzi na python.
źródło
Java,
(1-.2) * 323(1-.5) *350348339 =258,4175174169,5 bajtówUgh.
Nie golfowany:
Wypróbuj online!
Dzięki @Kenney za wskazanie, że mogę skrócić dzięki
new Long
iprintf
! :REźródło
long y=new Long(a[0])
zapisuje 6 (12) bajtów, a użycieprintf
zapisuje kolejne 3 (6).Coreutils GNU,
525149 bajtów(Program 98 bajtów - bonus 50%)
Dane wejściowe pochodzą z argumentu wiersza poleceń, a dane wyjściowe są wysyłane na standardowe wyjście.
Wyjaśnienie
Testowe uruchomienie:
Wszystkie ustawienia regionalne mogą być
C
lubPOSIX
.Ograniczenie: działa to tylko do roku 2147485519 (chociaż pytanie zostało zmienione, aby umożliwić dolny limit).
źródło
MATL , 28 bajtów
Przykład
Kod wyjaśniony
źródło
Perl 6 ,
7023 bajtówstosowanie:
źródło
J, 14 bajtów
źródło
Japt, 12 bajtów
Podobnie jak w przypadku odpowiedzi Pyth, cztery bajty w ciągu powinny być
05 06 06 0B
. Wypróbuj online!źródło
Galaretka , 14 bajtów
Wypróbuj online!
Do dzisiaj Jelly nie miała indeksowania tablic, więc powyższe będzie musiało wystarczyć. Od czasu ostatniego zatwierdzenia zaimplementowano indeksowanie tablicy jako
ị
, co daje następujące rozwiązanie ( 10 bajtów ).Wypróbuj online!
źródło
Pyth, 35 bajtów
Wypróbuj online.
źródło
C # (6.0) .Net Framework 4,6 173 bajtów - 30% = 121,1 bajtów
źródło
JavaScript ES7, 17 bajtów
Po raz pierwszy używam JS. Znalazłem to za pomocą skryptu Python i uważam, że jest optymalny. Działa, ponieważ
0**3
ma wartość 0 mod 7,1**3
a2**3
oba mają wartość 1 i3**3
wynosi 6.źródło
**
nie jest funkcją ES7 ? A może używasz Babel ?Python, 23 bajty
Port mojej odpowiedzi JavaScript.
źródło
Pyth , 12 bajtów
Wypróbuj online! lub Sprawdź pakiet testowy.
Pyth , 18 bajtów
To drugie podejście jest głównie golfem odpowiedzi Pyth na @ wizzwizz4 .
Wypróbuj online! lub Sprawdź pakiet testowy.
Wyjaśnienie
źródło