A sequência do triângulo binário de Sierpinski é a sequência de números cujas representações binárias fornecem as linhas do triângulo binário de Sierpinski, que são dadas começando com 1 em uma linha infinita de zeros, substituindo repetidamente cada par de bits pelo xor desses bits , igual a:
f(0)= 1 =1
f(1)= 1 1 =3
f(2)= 1 0 1 =5
f(3)= 1 1 1 1 =15
f(4)= 1 0 0 0 1 =17
Mais dígitos são fornecidos no OEIS: https://oeis.org/A001317
Entrada: Um número inteiro não negativo n em qualquer formato que você desejar. (Deve funcionar para todos os n até 30.)
Saída: o enésimo termo (indexado 0) da sequência como um número decimal.
Isso é código-golfe, então tente dar a resposta mais curta em bytes da qual seu idioma é capaz. Nenhuma resposta será aceita. As brechas padrão se aplicam (por exemplo, não codificam a sequência), exceto que você pode usar um idioma criado / modificado após o lançamento deste desafio. (Evite postar outra solução em um idioma que já tenha sido usado, a menos que sua solução seja mais curta.)
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
/* Configuration */
var QUESTION_ID = 67497; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 47050; // This should be the user ID of the challenge author.
/* App */
var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;
function answersUrl(index) {
return "http://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "http://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
});
else console.log(body);
});
valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
lang = jQuery('<a>'+lang+'</a>').text();
languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang, user: a.user, size: a.size, link: a.link};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.lang_raw.toLowerCase() > b.lang_raw.toLowerCase()) return 1;
if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body { text-align: left !important}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
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="language-list">
<h2>Shortest Solution 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>
<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>
<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>
n
para o qual nada excede.Respostas:
05AB1E ,
54 bytesEu orgulhosamente apresento a você, 05AB1E. Embora seja muito curto, provavelmente é muito ruim em longos desafios.
Graças à ETHproductions por reduzir 1 byte :)
Explicação:
fonte
}
inserir automaticamente um final . Então isso seria 4 bytes. :)Pari / GP , 27 bytes
A função toma a n-ésima potência do polinômio x + 1 no anel F 2 [x], eleva-o para Z [x] e depois avalia-o em 2.
Experimente online!
fonte
Gelatina , 6 bytes
Experimente online!
A versão binária que funciona com esta revisão do interpretador Jelly possui o dxxx dump
Como funciona
fonte
Haskell, 44 bytes
Na
((->) r)
mônada,(f >>= g) x
é igualg (f x) x
.fonte
(iterate((2*)>>=xor)1!!)
Matlab, 45 bytes
Solução:
Teste:
Explicação:
pascal
constrói o triângulo Pascal, mas começa a partir de 1, portanto a entrada deve seri+1
.fliplr
vira a matriz da esquerda para a direita.mod(_,2)
toma o restante após a divisão por 2.diag
extrai a diagonal principal. Multiplicação usando2.^[0:i]
converte vetor em decimalEstou feliz, @flawr por ter encontrado o concorrente do Matlab aqui :)
fonte
JavaScript (ES6), 23 bytes
Com base na primeira fórmula na página OEIS. Se você não se importa que o código demore quase uma eternidade para terminar com uma entrada de 30, podemos reduzir um byte:
Aqui está uma versão não recursiva, usando um
for
loop emeval
: (32 bytes)fonte
f(35)
retornam15
. Além disso, alerta de bomba de garfo: eu tive que fechar o Chromium para pararf(30)
(revisão original) de rodar. : Pf=x=>x?(y=f(x-(x<31)))^y*2:1
funcionaria.Matlab,
7770 bytesEsta função calcula a n-ésima linha do triângulo Pascal por convolução repetida com
[1,1]
(também conhecida como expansão binomial ou multiplicação repetida com um binomial) e calcula o número a partir disso.fonte
Ruby, 26 bytes
função anônima com iteração.
essa função recursiva é um byte mais curta, mas como precisa ser nomeada para poder se referir a si mesma, acaba um byte a mais.
fonte
Ruby, 25 bytes
Mais curto que as outras respostas aqui até agora. Ele constrói essa sequência:
Em seguida, ele define
n=1
(isso realmente acontece enquanto a string está sendo criada) e avalia a string acima, retornando o resultado.fonte
*n=1
realmente salva tudom=1;"m^=2*"*n+?1
Samau , 4 bytes
Agora, a Samau possui funções integradas para multiplicação e potência XOR.
Dump hexadecimal (a Samau usa a codificação CP737):
Explicação:
fonte
▌
lê um número da sequência. Se trocarmos os dois primeiros comandos, ele tentará ler um número3
, que não é uma string.CJam, 10 bytes
Teste aqui.
Solução iterativa simples usando XOR bit a bit.
fonte
Pure Bash (sem utilitários externos), 37
Os números inteiros Bash são assinados em 64 bits, portanto, isso funciona para entradas de até 62, inclusive:
fonte
Python 2.7.6,
3833 bytesAgradeço ao Dennis por remover alguns bytes!
fonte
exec'x^=x*2;'*input()
economiza alguns bytes sobre afor
abordagem.f=lambda n:f(n-1)^2*f(n-1)if n>0 else 1
Pitão, 7 bytes
Experimente online: Demonstração
Explicação:
fonte
Perl 5 , 23 bytes
Experimente online!
fonte
MIPS, 28 bytes
Entrada
$a0
, saída$v0
.fonte
Mathematica,
4024 bytesfonte
k4, 26 bytes
0b\:
converte um número em um vetor booleano (ou seja, bitstring), o XOR é implementado como "diferente de",2/:
converte um bitstring de volta em um número, tratando-o como um polinômio a ser avaliado e,x f/y
comx
um número inteiro, éf
aplicadoy
primeiro e depois ao seu saídas sucessivasx
tempos de .Exemplo de execução:
fonte
Ruby,
3126 bytesEDITAR: Alterado para um idioma completamente diferente! Todas as sugestões de golfe são bem-vindas!
Este programa bit a bit XORs o elemento anterior da sequência com o dobro duas vezes, ie
f(n) = f(n-1) ^ 2*f(n-1)
.fonte
MATL , 15 bytes
Semelhante à resposta de @ flawr :
EDIT (20 de maio de 2016) Experimente online! com
X+
substituídas porY+
se conformar com a versão 18.0.0 do idioma.Exemplo
Explicação
fonte
brainfuck , 87 bytes
Experimente online!
Assume células de tamanho infinito (caso contrário, não poderá ultrapassar 7, o que é convenientemente 255). O método do triângulo mod 2 de Pascal é realmente muito mais longo devido à operação cara do mod 2, enquanto o XOR é muito mais fácil de implementar.
fonte
APL, 31 bytes
Este é quase certamente um código terrível, mas eu sou um novato em APL completo. Espero que qualquer pessoa com alguma habilidade possa se livrar de todas as funções D e reduzi-la consideravelmente. A lógica é mais ou menos a mesma que a minha
k4
resposta - multiplique por1
ou2
, converta em bits com⊤
, XOR usando não iguais, converta novamente em um número com⊥
, envolva tudo em uma função e peça um número específico de iterações usando⍣
. Não faço ideia por que o resultado que sai do produto interno está incluído, mas o⊃
limpa.fonte
~1 2=.
para1 2≠.
{({2⊥⊃1 2≠.((64⍴2)⊤×)⍵}⍣⍵)1}
[28 bytes]Sério, 12 bytes
Hex Dump:
Experimente online
Como Seriously não inclui nenhum meio de executar um xor bit a bit, essa solução aceita o desafio completamente literalmente, computando diretamente a linha do triângulo. Este método fornece respostas corretas até n = 1029 (após o que não há memória suficiente para calcular a linha do triângulo de Pascal).
Explicação:
fonte
Pyt ,
4010 bytesExplicação:
Observando que o Triângulo Binário de Sierpinski é equivalente ao Triângulo de Pascal mod 2,
Experimente online!
fonte
Stax , 5 bytes
Execute e depure online!
Resposta do porto da geléia.
Usa representação ASCII para explicar:
fonte