La séquence du triangle binaire de Sierpinski est la séquence de nombres dont les représentations binaires donnent les lignes du triangle binaire de Sierpinski, qui est donnée en commençant par un 1 dans une ligne infinie de zéros, puis en remplaçant de façon répétée chaque paire de bits par le xor de ces bits. , ainsi:
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
Plus de chiffres sont donnés à OEIS: https://oeis.org/A001317
Entrée: Un entier non négatif n dans le format de votre choix. (Doit fonctionner pour tous n jusqu'à 30.)
Sortie: Le nième terme (indexé 0) de la séquence sous forme de nombre décimal.
Il s'agit de code-golf , essayez donc de donner la réponse la plus courte en octets dont votre langue est capable. Aucune réponse ne sera acceptée. Les failles standard s'appliquent (par exemple, pas de codage en dur de la séquence), sauf que vous pouvez utiliser une langue créée / modifiée après la publication de ce défi. (Évitez de publier une autre solution dans une langue qui a déjà été utilisée, sauf si votre solution est plus courte.)
Classement
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) en tant que liste des solutions les plus courtes par langue et b) en tant que classement général.
Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](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
pour laquelle rien ne déborde.Réponses:
05AB1E ,
54 octetsJe vous présente fièrement, 05AB1E. Bien qu'il soit très court, il est probablement très mauvais lors de longs défis.
Merci à ETHproductions d'avoir rasé 1 octet :)
Explication:
la source
}
insérer automatiquement un caractère de fin . Ce serait alors 4 octets. :)Pari / GP , 27 octets
La fonction prend la n-ième puissance du polynôme x + 1 dans l'anneau F 2 [x], la porte à Z [x], puis l'évalue à 2.
Essayez-le en ligne!
la source
Gelée , 6 octets
Essayez-le en ligne!
La version binaire qui fonctionne avec cette révision de l'interpréteur Jelly a le vidage xxd
Comment ça marche
la source
Haskell, 44 octets
Dans la
((->) r)
monade, c'est(f >>= g) x
égalg (f x) x
.la source
(iterate((2*)>>=xor)1!!)
Matlab, 45 octets
Solution:
Tester:
Explication:
pascal
construit un triangle Pascal, mais il commence à 1, donc l'entrée devrait l'êtrei+1
.fliplr
retourne le tableau de gauche à droite.mod(_,2)
prend le reste après la division par 2.diag
extrait la diagonale principale.2.^[0:i]
convertit le vecteur en décimalJe suis content, @flawr, d'avoir trouvé un concurrent Matlab ici :)
la source
JavaScript (ES6), 23 octets
Basé sur la première formule sur la page OEIS. Si cela ne vous dérange pas que le code prenne presque une éternité pour terminer pour une entrée de 30, nous pouvons raser un octet:
Voici une version non récursive, utilisant une
for
boucle dans uneval
: (32 octets)la source
f(35)
revient15
. Aussi, alerte à la bombe à la fourche: j'ai dû forcer la fermeture de Chromium pour arrêterf(30)
(révision d'origine) de fonctionner. : Pf=x=>x?(y=f(x-(x<31)))^y*2:1
marcherait.Matlab,
7770 octetsCette fonction calcule la n-ième ligne du triangle Pascal par convolution répétée avec
[1,1]
(aka expansion binomiale ou multiplication répétée avec un binôme), et calcule le nombre à partir de cela.la source
Rubis, 26 octets
fonction anonyme avec itération.
cette fonction récursive est d'un octet plus courte, mais comme elle doit être nommée pour pouvoir se référer à elle-même, elle finit par un octet de plus.
la source
Rubis, 25 octets
Plus court que les autres réponses jusqu'ici. Il construit cette chaîne:
Ensuite, il définit
n=1
(cela se produit en fait pendant la création de la chaîne) et évalue la chaîne ci-dessus, retournant le résultat.la source
*n=1
sauve réellement quelque chosem=1;"m^=2*"*n+?1
Samau , 4 octets
Maintenant Samau a des fonctions intégrées pour la multiplication XOR et la puissance XOR.
Vidage hexadécimal (Samau utilise le codage CP737):
Explication:
la source
▌
lit un nombre dans la chaîne. Si nous échangeons les deux premières commandes, il essaiera de lire un nombre3
, qui n'est pas une chaîne.CJam, 10 octets
Testez-le ici.
Solution itérative simple utilisant XOR au niveau du bit.
la source
Pure Bash (pas d'utilitaires externes), 37
Les entiers bash sont signés 64 bits, donc cela fonctionne pour les entrées jusqu'à 62 inclusivement:
la source
Python 2.7.6,
3833 bytesMerci à Dennis d'avoir rasé quelques octets!
la source
exec'x^=x*2;'*input()
enregistre quelques octets sur l'for
approche.f=lambda n:f(n-1)^2*f(n-1)if n>0 else 1
Pyth, 7 octets
Essayez-le en ligne: Démonstration
Explication:
la source
Perl 5 , 23 octets
Essayez-le en ligne!
la source
MIPS, 28 bytes
Input in
$a0
, output in$v0
.la source
Mathematica,
4024 bytesla source
k4, 26 bytes
0b\:
converts a number to a boolean vector (i.e. bitstring), XOR is implemented as "not equal",2/:
converts a bitstring back to a number by treating it as a polynomial to evaluate, andx f/y
withx
an integer isf
applied toy
first, and then to its successive outputsx
times.Sample run:
la source
Ruby,
3126 bytesEDIT: Changed to a different language entirely! All golfing suggestions welcome!
This program bitwise XORs the previous element of the sequence with twice itself, i.e.
f(n) = f(n-1) ^ 2*f(n-1)
.la source
MATL, 15 bytes
Similar to @flawr's answer:
EDIT (May 20, 2016) Try it online! with
X+
replaced byY+
to conform to version 18.0.0 of the language.Example
Explanation
la source
brainfuck, 87 bytes
Try it online!
Assumes infinite sized cells (otherwise it can’t get past 7, which is conveniently 255). The Pascal’s triangle mod 2 method is actually much longer because of the costly mod 2 operation, while XOR is much easier to implement.
la source
APL, 31 bytes
This is almost certainly awful code, but I'm a complete APL newb. I expect anyone with any skill could get rid of all the D-functions and shorten it considerably. The logic is more or less the same as my
k4
answer -- multiply by1
or2
, convert to bits with⊤
, XOR using not equals, convert back to a number with⊥
, wrap the whole thing in a function and ask for a specific number of iterations using⍣
. I have no idea why the result coming out of the inner product is enclosed, but⊃
cleans that up.la source
~1 2=.
to1 2≠.
{({2⊥⊃1 2≠.((64⍴2)⊤×)⍵}⍣⍵)1}
[28 bytes]Seriously, 12 bytes
Hex Dump:
Try it online
Since Seriously does not include any means of doing a bitwise xor, this solution takes the challenge completely literally, directly computing the given row of the triangle. This method gives correct answers up to n=1029 (after which there is not enough memory to compute the given row of Pascal's triangle).
Explanation:
la source
Pyt,
4010 bytesExplanation:
Observing that the Binary Sierpinski Triangle is equivalent to Pascal's Triangle mod 2,
Try it online!
la source
Stax, 5 bytes
Run and debug online!
Port of the Jelly answer.
Uses ASCII representation to explain:
la source