var QUESTION_ID=80608,OVERRIDE_USER=49561;function answersUrl(e){return"https://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"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}
<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 ,
2220 bytesExperimente online!
Como funciona
fonte
Julia,
5248 bytesExperimente online!
fundo
Nas funções casadas de Hofstadter , o autor mostra que
onde φ denota a proporção áurea ,
e F n indica o n th número de Fibonacci .
Além disso, em Advanced Problems and Solutions, H-187: Fibonacci é um quadrado , o proponente mostra que
em que L n indica o n th número Lucas , e que - por outro lado - se
então n é um número de Fibonacci e m é um número de Lucas.
A partir disso, deduzimos que
sempre que n> 0 .
Como funciona
Dada a entrada x , construímos uma matriz 2 por x , onde | é adição na primeira coluna e subtração na segunda e n itera sobre os números inteiros entre 1 e x nas linhas.
O primeiro termo de F (n - 1) e M (n - 1) é simples
n÷φ
.Computamos δ (n) e ε (n) calculando 5n² | 4 e testando se o resultado pertence à matriz de quadrados dos números inteiros entre 2 e 3n . Isso testa a esquadria e, como 1 não está no intervalo, para n> 1 se | é subtração.
Finalmente, adicionamos ou subtraímos o Booleano resultante de
5n^2|4∈(2:3n).^2
ou para o número inteiro previamente calculado.fonte
Python 2,
7970 bytesIterativo em vez de recursivo, porque porque não. A primeira linha tem um espaço à direita - se isso não for bom, pode ser corrigido por um byte extra. -9 bytes graças a @Dennis.
Aqui estão algumas lambdas combinadas que realmente não ajudaram:
Ambos tomam
n
e um parâmetrok
0 ou 1, especificando masculino / feminino. O primeiro lambda retorna o enésimo elemento e o segundo lambda retorna os primeiros n elementos (com tempo de execução exponencial).fonte
MATL , 23 bytes
Experimente online!
Explicação
Isso funciona iterativamente. Cada sequência é mantida em uma matriz. Para cada índice n, o novo termo de cada sequência é calculado e anexado à matriz correspondente. Um
for
loop com termos N- 1 é usado, onde N é o número de entrada.A atualização para a sequência M precisa ser feita primeiro. Isso ocorre porque a sequência F é sempre maior ou igual à sequência M para o mesmo índice, portanto, se tentarmos atualizar F primeiro, precisaríamos de um termo de M ainda não computado.
As duas equações de atualização são as mesmas que trocam F e M. Portanto, o código para atualização é reutilizado aplicando um
for
loop com duas iterações e trocando as seqüências na pilha.fonte
J, 47 bytes
Usa a definição recursiva. As duas primeiras linhas definem os verbos
f
em
que representam as funções feminina e masculina, respectivamente. A última linha é um verbo que usa um único argumenton
e gera os primeirosn
termos das seqüências feminina e masculina.Uso
fonte
JavaScript (ES6), 75 bytes
Eu poderia salvar 2 bytes se tivesse permissão para retornar a sequência Male primeiro:
fonte
Haskell, 57 bytes
Exemplo de uso:
(<$>[v,w]).take $ 5
->[[1,1,2,2,3],[0,0,1,2,2]]
A função auxiliar
#
cria uma lista infinita com valor inicials
e uma listal
para procurar todos os outros elementos (no índice do valor anterior).v = w#1
é aw = v#0
sequência feminina e masculina. Na função principal, pegamos os primeirosn
elementos de ambosv
ew
.fonte
Python 2, 107 bytes
Experimente online
Valores de entrada maiores causam um RuntimeError (muita recursão). Se isso for um problema, posso escrever uma versão em que o erro não ocorra.
fonte
Julia, 54 bytes
Experimente online!
fonte
Pitão, 24 bytes
Provavelmente é impossível usar
reduce
para reduzir a contagem de bytes.Implementação direta.
Experimente online!
Como funciona
fonte
Braquilog , 65 bytes
Minha tentativa de combinar os dois predicados masculino e feminino em um só tornou o código mais longo.
Você pode usar o seguinte liner com o mesmo número de bytes:
Nota : Isso funciona com o transpilador Prolog, não com o antigo Java.
Explicação
Predicado principal:
Predicado 2 (feminino):
Predicado 3 (masculino):
fonte
{:1-:0re.}
usado para criar a lista de intervalos.Clojure,
132131 bytesSimplesmente constrói as seqüências iterativamente de zero a n.
Versão ungolfed
fonte
Pitão, 23 bytes
Experimente online: Demonstração
Explicação:
Solução alternativa que usa uma função em vez de reduzir (também 23 bytes):
fonte
Ruby,
104929782 bytesEdit:
f
em
agora são uma função graças a HopfullyHelpful . Eu mudei a segunda função para imprimirf
entãom
. O espaço em branco depoisp
é significativo, caso contrário, a função é impressa em(0...n)
vez do resultado demap
.A terceira função imprime primeiro uma matriz dos primeiros n termos de
f
, seguida por uma matriz dos primeiros n termos dem
Essas funções são chamadas assim:
fonte
n
ei
n>0?n-f(f(n-1,i),-i):i>0?1:0
f
em
, preciso imprimi-la. Caso contrário, eu apenas recebo uma matriz como[[1, 1, 2, 2, 3, 3, 4, 5, 5, 6], [0, 0, 1, 2, 2, 3, 4, 4, 5, 6]]
APL (Dyalog Unicode) ,
4525 bytesFunção tácita anônima. Requer
⎕IO←0
, que é padrão em muitos sistemas APL.Experimente online!
Isso funciona combinando F e M em uma única função diádica com um argumento à esquerda booleano que seleciona a função a ser aplicada. Usamos 1 para F e 0 para M, para que possamos usar esse seletor como valor de retorno para F (0) e M (0). Observamos então que ambas as funções precisam se chamar primeiro (no argumento menos um) e depois a outra função no resultado disso; portanto, primeiro recorremos ao seletor fornecido e depois ao seletor logicamente negado.
⍳
d ndices; zero através do argumento menos um1 0∘.{
…}
"Produto" externo (cartesiano) (mas com a função abaixo em vez de multiplicação) usando[1,0]
como argumentos à esquerda (⍺
) e os índices como argumentos à direita (⍵
):×⍵
se o argumento correto for estritamente positivo (lit. o sinal do argumento correto):⍵-1
subtrair um do argumento certo⍺∇
chamar self com isso como argumento certo e o argumento esquerdo como argumento esquerdo(~⍺)∇
chame self com isso como arg direito e a negação lógica do arg esquerdo como arg esquerdo⍵-
subtraia isso do argumento correto e retorne o resultado⋄
outro:⍺
retornar o argumento esquerdofonte
n
) + além de uma nova linha.ES6,
898583 bytes2 bytes salvos graças a @ Bálint
Implementação ingênua.
Explicação:
fonte
&&
curto-circuitos, que é procurado, mas eu removido de qualquer maneira porque a sintaxe cinta é igualmente curta de qualquer maneiraMathematica,
6962 bytesAgradecemos ao Sp3000 por sugerir um formulário funcional que salvou 14 bytes.
Isso define uma função auxiliar nomeada
f
e avalia como uma função não nomeada que resolve a tarefa real de imprimir as duas seqüências.fonte
Perl 5.10,
8580 bytesMeh, não sei se eu tenho mais idéias para jogar isso ...
Experimente online!
Eu tive que adicionar o
use 5.10.0
Ideone para que ele aceitasse asay
função, mas ela não conta para a contagem de bytes.É uma implementação ingênua do algoritmo,
@a
sendo a lista "feminina" e@b
a lista "masculina".85 riscado ainda é 85?
fonte
push
termo ed, nem do ponto e vírgula final antes da chave.Java, total de 169 bytes
F (), M () 56 bytes
impressão recursiva para loop e impressão 77 bytes
saída das listas em duas linhas diferentes 37 bytes
entrada: p (
10
)saída:
fonte
C, 166 bytes
Uso:
Saída:
Sem Golfe (331 Bytes)
fonte
8o , 195 bytes
Código
Uso
Explicação
Esse código usa recursão e palavra adiada
defer: M
- A palavraM
é declarada para ser definida posteriormente. Esta é uma palavra adiada: F dup not if 1 nip else dup n:1- recurse M n:- then ;
- DefinaF
recursivamente para gerar números femininos de acordo com a definição. Observe queM
ainda não foi definido( dup not if 0 nip else dup n:1- recurse F n:- then ) is M
- DefinirM
recursivamente para gerar números masculinos de acordo com a definição: FM n:1- dup ( F . space ) 0 rot loop cr ( M . space ) 0 rot loop cr ;
- Palavra usada para imprimir sequências de números femininos e masculinosfonte