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>
Respostas:
Geléia, 9 bytes
Essa é uma cadeia monádica que recebe como argumento um argumento inteiro da linha de comando. Ele usa meu
(x+5+(x%4)**3%7)
algoritmo.Experimente aqui . Embora essa seja a versão atual do Jelly, ela também funciona nesta versão , que antecede o desafio. (Obrigado @Dennis!)
fonte
Mathematica,
45372724 bytesMelhorias graças a @ MartinBüttner (10 bytes) e @ChipHurst (mais 3 bytes).
fonte
#+5[6,6,11][[#~Mod~4]]&
5[6, 6, 11][[0]]
:)CJam,
211211 bytesO @martin encontrou um método muito simples!
Experimente aqui .
EDIT: Obrigado, Dennis!
fonte
5 6 6 11
truque usado em outras respostas, mas a lista é codificada como "os dígitos de 9587 na base 12" .gs2, 12 bytes
Tradução da minha resposta CJam. Codificado no CP437 como de costume. Experimente online !
fonte
JavaScript (ES6),
504920 bytes (sem bônus)O algoritmo do @martin mostra-se muito menor, então fui com ele.
Eu escolhi uma abordagem matemática porque o JavaScript tende a ser detalhado. O código é curto o suficiente para que os bônus o tornem mais longo.
Aqui está minha resposta anterior (49 bytes) e minha resposta original (50 bytes):
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
Eles trabalham tomando o ano e calculando um número (0-6) para representar o "dia do ano inicial". Como o período para esse desafio está dentro do intervalo de anos que seguem regras simples para o ano bissexto (sem pular em 2000), é bastante simples calcular. Depois, basta comparar para encontrar anos que começam com o mesmo valor. A recursão provou ser a maneira mais concisa de fazer isso.
fonte
Pitão,
141211 bytesOs quatro bytes na string devem ser
05 06 06 0B
.EDIT: Obrigado, FryAmTheEggman!
EDIT: Obrigado, Dennis!
fonte
JavaScript (ES6), 104 bytes - bônus de 50% = 52
Explicação
Teste
Mostrar snippet de código
fonte
Código da máquina Z80, 12 bytes
Um procedimento Z80 para ser armazenado em
0000h
, chamado com a entrada inHL
e todos os outros registradores são limpos:As três primeiras instruções são "NOPs", mas são indexadas como dados posteriormente no código. Ao retornar, a saída está em
HL
.fonte
DE
e, portanto, você pode usarLD A, 3; AND E; LD L, A; LD L, (HL);
?Python 3,
14010010284,5154 * 0,5 = 77 bytesProvavelmente eu poderia escrever uma solução melhor com o algoritmo de Sakamoto, mas isso servirá por enquantoEu tinha razão. Aqui está uma implementação usando o algoritmo de Sakamoto.
Explicação:
fonte
w="SMTWTFSuouehranneduit"
e depois imprimirw[d(i)::7]
?Sério,
3517 bytes[5,6,6,11]
truque salva o dia.Experimente online
Explicação:
Versão antiga:
Experimente online
Explicação:
Algoritmo de Sakamoto:
fonte
C, 31 bytes
Após a edição da pergunta que restringe o intervalo de entrada a 1970-2090, isso se torna bastante trivial:
Sem os anos do século não bissexto, há uma sequência simples de 5,6,6,11 intervalos para a primeira repetição do mesmo dia.
Solução completa para o problema original (não restrito a 2090), 90 bytes:
Programa de teste:
Execução de teste:
fonte
R,
143136 * 0,5 = 68 bytesUsar
%A
para o nome do dia inteiro em vez de `% a, depende do estado desejado.R, 120 * 0,7 = 84 bytes
R, 90 bytes
Todas as respostas acima são trabalhos derivados baseados na resposta @plannapus. Usando o
;
separador para evitar a necessidadesource
do arquivo ou executá-lo como script na linha de comando.fonte
weekdays
, legal.R, 145 bytes -50% -> 72,5
Exemplos:
R, 97 bytes (sem bônus)
Recuado, com novas linhas:
Casos de teste:
fonte
;
...y=scan;
e usandox=y<-scan()+1
Achoas.POSIXlt(paste(y,1),,"%Y %j")$wday
como seu corpo funcionalscan
irá ler na segunda linha como entrada.x=y<-scan()+1
com 2014 como stdin, você fornecerá x = 2015 ey = 2015 (ou seja, a atribuição éy <- scan()+1
) e, se você tentar fazerx=1+y<-scan()
isso, receberá um erro (Error in 1 + y <- scan() : target of assignment expands to non-language object
) porque está tentando atribuirscan()
a1+y
....$wday
é o número da semana: mas aqui eu preciso o nome da semana para que eu possa imprimirAdvance Happy New Year, 2012 (Sun)
VBA, 130 * 0,50 = 65 bytes
O VBA facilita a busca por dias da semana ... Se ao menos não fosse tão detalhado.
fonte
PHP, 120
139bytes - 50% = 60 bytesUma abordagem funcional:
Toma uma entrada da linha de comando, como:
O caminho OOP parece ser mais longo, como sempre (143 bytes):
Edições
+1year
, agora simplesmente incremento o ano indicado.-1-1
em uma variável.fonte
C, pontuação
5352 (104 bytes)Ideia emprestada de Toby Speight ; adicionada a exibição de bônus do dia da semana.
Encurtou a corda alterando os códigos de caracteres para um intervalo mais confortável. Tinha que escolher a quantidade de deslocamento correta (por exemplo, 43) para fazer o código de cálculo de dias úteis curto
x*5/4%7
.fonte
" !!&"
.Mathematica, 145 * 50% =
7473,572,5 bytesUsa funções de data padrão.
fonte
Pitão, 23 bytes
Não se qualifica para nenhum dos bônus.
Experimente aqui .
Semelhante à resposta python pura.
fonte
Java,
(1-.2) * 323(1-.5) *350348339 =258,4175174169,5 bytesUgh.
Ungolfed:
Experimente online!
Obrigado a @Kenney por apontar que eu poderia diminuir com
new Long
eprintf
! : Dfonte
long y=new Long(a[0])
salva 6 (12) bytes e o usoprintf
salva outros 3 (6).Coreutils GNU,
525149 bytes(Programa de 98 bytes - bônus de 50%)
A entrada é do argumento da linha de comando e a saída é para stdout.
Explicação
Execução de teste:
Todas as configurações de localidade podem ser
C
ouPOSIX
.Limitação: isso funciona apenas até o ano 2147485519 (embora a pergunta agora tenha sido alterada para permitir um limite mais baixo).
fonte
MATL , 28 bytes
Exemplo
Código explicado
fonte
Perl 6 ,
7023 bytesuso:
fonte
J, 14 bytes
fonte
Japonês, 12 bytes
Como na resposta Pyth, os quatro bytes na string devem ser
05 06 06 0B
. Experimente online!fonte
Gelatina , 14 bytes
Experimente online!
Até hoje, Jelly não tinha indexação de matriz, portanto, o que foi dito acima terá que ser feito. Desde a confirmação mais recente, a indexação de matriz foi implementada como
ị
, fornecendo a seguinte solução ( 10 bytes ).Experimente online!
fonte
Pitão, 35 bytes
Experimente online.
fonte
C # (6.0) .Net Framework 4.6 173 bytes - 30% = 121.1 bytes
fonte
Javascript ES7, 17 bytes
É a minha primeira vez usando JS. Encontrei isso usando um script Python e acredito que seja ideal. Funciona porque
0**3
é 0 mod 71**3
e2**3
é 1 e3**3
é 6.fonte
**
não é um recurso do ES7 ? Ou você está usando Babel ?Python, 23 bytes
Uma porta da minha resposta JavaScript.
fonte
Pitão , 12 bytes
Experimente online! ou Confira o Conjunto de Testes.
Pitão , 18 bytes
Essa segunda abordagem é principalmente um campo de golfe da resposta Pyth de @ wizzwizz4 .
Experimente online! ou Confira o Conjunto de Testes.
Explicação
fonte