Die Binär-Sierpinski-Dreieck-Folge ist die Folge von Zahlen, deren binäre Darstellungen die Reihen des Binär-Sierpinski-Dreiecks ergeben, die gegeben sind, indem mit einer 1 in einer unendlichen Reihe von Nullen begonnen wird und dann jedes Bitpaar wiederholt durch das xor dieser Bits ersetzt wird , wie so:
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
Weitere Ziffern finden Sie unter OEIS: https://oeis.org/A001317
Eingabe: Eine nicht negative Ganzzahl n in einem beliebigen Format. (Muss für alle n bis 30 arbeiten.)
Ausgabe: Der n-te Term (0-indiziert) der Sequenz als Dezimalzahl.
Das ist Code-Golf, also versuchen Sie, die kürzeste Antwort in Bytes zu geben, die Ihre Sprache beherrscht. Es wird keine Antwort akzeptiert. Standard Lücken gelten (zB keine Hartcodierung der Sequenz), mit der Ausnahme , dass Sie möglicherweise wurde eine Sprache erstellt / geändert , nachdem diese Herausforderung geschrieben verwenden. (Posten Sie keine andere Lösung in einer Sprache, die bereits verwendet wurde, es sei denn, Ihre Lösung ist kürzer.)
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](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
für die nichts überläuft.Antworten:
05AB1E ,
54 BytesIch präsentiere Ihnen stolz, 05AB1E. Obwohl es sehr kurz ist, ist es bei langen Herausforderungen wahrscheinlich sehr schlecht.
Danke an ETHproductions für das Abschneiden von 1 Byte :)
Erläuterung:
quelle
}
automatisch einzufügen. Dann wären das 4 Bytes. :)Pari / GP , 27 Bytes
Die Funktion nimmt die n-te Potenz des Polynoms x + 1 im Ring F 2 [x], hebt sie auf Z [x] und wertet sie dann bei 2 aus.
Probieren Sie es online!
quelle
Gelee , 6 Bytes
Probieren Sie es online!
Die Binärversion, die mit dieser Version des Jelly-Interpreters funktioniert, hat den xxd-Dump
Wie es funktioniert
quelle
Haskell, 44 Bytes
In der
((->) r)
Monade(f >>= g) x
gleichg (f x) x
.quelle
(iterate((2*)>>=xor)1!!)
Matlab, 45 Bytes
Lösung:
Prüfung:
Erläuterung:
pascal
Konstruiert ein Pascal-Dreieck, beginnt jedoch bei 1, sodass die Eingabe erfolgen solltei+1
.fliplr
Kippt das Array von links nach rechts.mod(_,2)
Rest nach Division durch 2.diag
Extrahiert die Hauptdiagonale. Die Multiplikation mit2.^[0:i]
konvertiert den Vektor in eine DezimalzahlIch bin froh, @flawr, dass ich hier einen Matlab-Konkurrenten gefunden habe :)
quelle
JavaScript (ES6), 23 Byte
Basierend auf der ersten Formel auf der OEIS-Seite. Wenn es Ihnen nichts ausmacht, dass der Code bei einer Eingabe von 30 fast ewig dauert, können wir ein Byte entfernen:
Hier ist eine nicht-rekursive Version mit einer
for
Schleife in einemeval
: (32 Bytes)quelle
f(35)
zurückgegeben wird15
. Gabelbombenalarm: Ich musste Chromium zwangsweise schließen, um dief(30)
Ausführung zu stoppen (ursprüngliche Revision). : Pf=x=>x?(y=f(x-(x<31)))^y*2:1
würde funktionieren.Matlab,
7770 BytesDiese Funktion berechnet die n-te Zeile des Pascal-Dreiecks durch wiederholte Faltung mit
[1,1]
(auch als Binomial-Erweiterung oder wiederholte Multiplikation mit einem Binomial bezeichnet) und berechnet daraus die Zahl.quelle
Ruby, 26 Bytes
anonyme Funktion mit Iteration.
Diese rekursive Funktion ist ein Byte kürzer, aber da sie benannt werden muss, um auf sich selbst verweisen zu können, endet sie ein Byte länger.
quelle
Ruby, 25 Bytes
Kürzer als die anderen Antworten hier bisher. Es erstellt diese Zeichenfolge:
Dann setzt es
n=1
(dies geschieht tatsächlich, während die Zeichenfolge erstellt wird) und wertet die obige Zeichenfolge aus und gibt das Ergebnis zurück.quelle
*n=1
wirklich etwas mehr alsm=1;"m^=2*"*n+?1
Samau , 4 Bytes
Jetzt verfügt Samau über integrierte Funktionen für die XOR-Multiplikation und die XOR-Potenz.
Hex-Dump (Samau verwendet CP737-Codierung):
Erläuterung:
quelle
▌
liest eine Zahl aus der Zeichenfolge. Wenn wir die ersten beiden Befehle vertauschen, wird versucht, eine Zahl auszulesen3
, die keine Zeichenfolge ist.CJam, 10 Bytes
Teste es hier.
Einfache iterative Lösung mit bitweisem XOR.
quelle
Pure Bash (keine externen Dienstprogramme), 37
Bash-Ganzzahlen sind mit 64-Bit-Vorzeichen versehen. Dies funktioniert also für Eingaben bis einschließlich 62:
quelle
Python 2.7.6,
3833 BytesVielen Dank an Dennis für ein paar Bytes!
quelle
exec'x^=x*2;'*input()
spart ein paar Bytes über denfor
Ansatz.f=lambda n:f(n-1)^2*f(n-1)if n>0 else 1
Pyth, 7 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
Perl 5 , 23 Bytes
Probieren Sie es online!
quelle
MIPS, 28 Bytes
Eingabe in
$a0
, Ausgabe in$v0
.quelle
Mathematica,
4024 Bytesquelle
k4, 26 Bytes
0b\:
konvertiert eine Zahl in einen Booleschen Vektor (dh Bitstring), XOR wird als "ungleich" implementiert,2/:
konvertiert einen Bitstring zurück in eine Zahl, indem es als Polynom behandelt wird, um es auszuwerten, undx f/y
mitx
einer ganzen Zahl wirdf
esy
zuerst und dann auf sein angewendet aufeinanderfolgende Ausgabenx
.Probelauf:
quelle
Ruby,
3126 BytesEDIT: Wurde komplett in eine andere Sprache geändert! Alle Golfvorschläge sind willkommen!
Dieses Programm führt eine bitweise XOR-Verknüpfung des vorherigen Elements der Sequenz mit dem doppelten Wert durch, d
f(n) = f(n-1) ^ 2*f(n-1)
. H.quelle
MATL , 15 Bytes
Ähnlich wie bei der Antwort von @ flawr :
BEARBEITEN (20. Mai 2016) Probieren Sie es online! mit
X+
ersetzt durchY+
um Version 18.0.0 der Sprache zu entsprechen.Beispiel
Erläuterung
quelle
Brainfuck , 87 Bytes
Probieren Sie es online!
Nimmt Zellen mit unendlicher Größe an (andernfalls kann es nicht über 7 hinausgehen, was günstigerweise 255 ist). Die Pascal-Triangel-Mod-2-Methode ist aufgrund der teuren Mod-2-Operation viel länger, während XOR viel einfacher zu implementieren ist.
quelle
APL, 31 Bytes
Dies ist mit ziemlicher Sicherheit ein schrecklicher Code, aber ich bin ein kompletter APL-Neuling. Ich gehe davon aus, dass jeder mit jeglichem Können alle D-Funktionen loswerden und erheblich verkürzen kann. Die Logik ist mehr oder weniger die gleiche wie meine
k4
Antwort - multiplizieren mit1
oder2
in Bits konvertieren mit⊤
, XOR verwenden ungleich, zurück in eine Zahl konvertieren mit⊥
, das Ganze in eine Funktion einwickeln und nach einer bestimmten Anzahl von Iterationen fragen mit⍣
. Ich habe keine Ahnung, warum das Ergebnis, das aus dem inneren Produkt kommt, eingeschlossen ist, aber⊃
räumt das auf.quelle
~1 2=.
auf "1 2≠.
{({2⊥⊃1 2≠.((64⍴2)⊤×)⍵}⍣⍵)1}
[28 bytes]Im Ernst, 12 Bytes
Hex Dump:
Probieren Sie es online aus
Da Seriously keine Möglichkeit enthält, ein bitweises xor auszuführen, nimmt diese Lösung die Herausforderung vollständig wörtlich und berechnet direkt die angegebene Zeile des Dreiecks. Diese Methode liefert korrekte Antworten bis n = 1029 (danach ist nicht mehr genügend Speicher vorhanden, um die angegebene Zeile des Pascalschen Dreiecks zu berechnen).
Erläuterung:
quelle
Pyt ,
4010 BytesErläuterung:
In der Beobachtung, dass das binäre Sierpinski-Dreieck Pascals Triangle Mod 2 entspricht,
Probieren Sie es online!
quelle
Stax , 5 Bytes
Online ausführen und debuggen!
Port of the Jelly antworten.
Verwendet ASCII-Darstellung, um Folgendes zu erklären:
quelle