La secuencia del Triángulo de Sierpinski binario es la secuencia de números cuyas representaciones binarias dan las filas del Triángulo de Sierpinski binario, que se obtiene al comenzar con un 1 en una fila infinita de ceros, y luego reemplazar repetidamente cada par de bits con el xor de esos bits , al igual que:
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
Se dan más dígitos en OEIS: https://oeis.org/A001317
Entrada: Un número entero no negativo n en cualquier formato que desee. (Debe funcionar para todos n hasta 30.)
Salida: el enésimo término (indexado a 0) de la secuencia como un número decimal.
Este es el código de golf, así que trate de dar la respuesta más corta en bytes de los que su idioma es capaz. No se aceptarán respuestas. Se aplican las lagunas estándar (por ejemplo, sin codificar la secuencia), excepto que puede usar un lenguaje creado / modificado después de que se publique este desafío. (Evite publicar otra solución en un idioma que ya se haya utilizado a menos que su solución sea más corta).
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](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 la que nada se desborda.Respuestas:
05AB1E ,
54 bytesOs presento con orgullo, 05AB1E. Aunque es muy corto, probablemente sea muy malo en desafíos largos.
Gracias a ETHproductions por eliminar 1 byte :)
Explicación:
fuente
}
insertar automáticamente un final . Entonces esto sería de 4 bytes. :)Pari / GP , 27 bytes
La función toma la enésima potencia del polinomio x + 1 en el anillo F 2 [x], la eleva a Z [x] y luego la evalúa en 2.
Pruébalo en línea!
fuente
Jalea , 6 bytes
Pruébalo en línea!
La versión binaria que funciona con esta revisión del intérprete Jelly tiene el volcado xxd
Cómo funciona
fuente
Haskell, 44 bytes
En la
((->) r)
mónada,(f >>= g) x
es igualg (f x) x
.fuente
(iterate((2*)>>=xor)1!!)
Matlab, 45 bytes
Solución:
Prueba:
Explicación:
pascal
construye el triángulo de Pascal, pero comienza desde 1, por lo que la entrada debe seri+1
.fliplr
voltea la matriz de izquierda a derecha.mod(_,2)
toma el resto después de la división por 2.diag
extrae la diagonal principal. Multiplicación usando2.^[0:i]
convierte el vector a decimalMe alegro, @flawr de haber encontrado al competidor de Matlab aquí :)
fuente
JavaScript (ES6), 23 bytes
Basado en la primera fórmula en la página OEIS. Si no le importa que el código tarde casi una eternidad en terminar para una entrada de 30, podemos eliminar un byte:
Aquí hay una versión no recursiva, que usa un
for
bucle en uneval
: (32 bytes)fuente
f(35)
regresa15
. Además, alerta de bomba tenedor: tuve que forzar el cierre de Chromium para detener laf(30)
ejecución (revisión original). : Pf=x=>x?(y=f(x-(x<31)))^y*2:1
funcionaría.Matlab,
7770 bytesEsta función calcula la enésima fila del triángulo de Pascal mediante una convolución repetida con
[1,1]
(también conocida como expansión binomial o multiplicación repetida con un binomio) y calcula el número a partir de eso.fuente
Rubí, 26 bytes
Función anónima con iteración.
esta función recursiva es un byte más corta, pero como necesita ser nombrada para poder referirse a sí misma, termina un byte más.
fuente
Rubí, 25 bytes
Más corto que las otras respuestas aquí hasta ahora. Construye esta cadena:
Luego se establece
n=1
(esto realmente sucede mientras se hace la cadena) y evalúa la cadena anterior, devolviendo el resultado.fuente
*n=1
realmente ahorra algo?m=1;"m^=2*"*n+?1
Samau, 4 bytes
Now Samau has built-in functions for XOR multiplication and XOR power.
Hex dump (Samau uses CP737 encoding):
Explanation:
fuente
▌
lee un número de la cadena. Si intercambiamos los dos primeros comandos, intentaría leer un número3
, que no es una cadena.CJam, 10 bytes
Pruébalo aquí.
Solución iterativa simple usando XOR bit a bit.
fuente
Pure Bash (sin utilidades externas), 37
Los enteros Bash están firmados de 64 bits, por lo que esto funciona para entradas de hasta 62 inclusive:
fuente
Python 2.7.6,
3833 bytes¡Gracias a Dennis por reducir unos pocos bytes!
fuente
exec'x^=x*2;'*input()
guarda algunos bytes sobre elfor
enfoque.f=lambda n:f(n-1)^2*f(n-1)if n>0 else 1
Pyth, 7 bytes
Pruébelo en línea: demostración
Explicación:
fuente
Perl 5 , 23 bytes
Pruébalo en línea!
fuente
MIPS, 28 bytes
Entrada
$a0
, salida en$v0
.fuente
Mathematica,
4024 bytesfuente
k4, 26 bytes
0b\:
convierte un número en un vector booleano (es decir, una cadena de bits), XOR se implementa como "no igual",2/:
convierte una cadena de bits en un número al tratarlo como un polinomio para evaluar, yx f/y
conx
un número entero sef
aplicay
primero, y luego a su salidas sucesivasx
veces.Ejecución de muestra:
fuente
Ruby,
3126 bytesEDITAR: ¡ Cambiado a un idioma completamente diferente! ¡Todas las sugerencias de golf son bienvenidas!
Este programa XOR bit a bit el elemento anterior de la secuencia con el doble de sí mismo, es decir
f(n) = f(n-1) ^ 2*f(n-1)
.fuente
MATL , 15 bytes
Similar a la respuesta de @ flawr :
EDITAR (20 de mayo de 2016) ¡ Pruébelo en línea! con
X+
reemplazado porY+
para cumplir con la versión 18.0.0 del lenguaje.Ejemplo
Explicación
fuente
brainfuck , 87 bytes
Pruébalo en línea!
Asume celdas de tamaño infinito (de lo contrario no puede pasar de 7, que es convenientemente 255). El método de Mod 2 del triángulo de Pascal es en realidad mucho más largo debido a la costosa operación de Mod 2, mientras que XOR es mucho más fácil de implementar.
fuente
APL, 31 bytes
Es casi seguro que es un código horrible, pero soy un APL completamente nuevo. Espero que cualquier persona con alguna habilidad pueda deshacerse de todas las funciones D y acortarla considerablemente. La lógica es más o menos la misma que mi
k4
respuesta: multiplique por1
o2
, convierta a bits con⊤
XOR usando no es igual, vuelva a convertir a un número con⊥
, envuelva todo en una función y solicite un número específico de iteraciones usando⍣
. No tengo idea de por qué el resultado que sale del producto interno está incluido, pero lo⊃
limpia.fuente
~1 2=.
a1 2≠.
{({2⊥⊃1 2≠.((64⍴2)⊤×)⍵}⍣⍵)1}
[28 bytes]En serio, 12 bytes
Hex Dump:
Pruébalo en línea
Dado que Seriamente no incluye ningún medio para hacer un xor bit a bit, esta solución toma el desafío completamente literalmente, calculando directamente la fila dada del triángulo. Este método da respuestas correctas hasta n = 1029 (después de lo cual no hay suficiente memoria para calcular la fila dada del triángulo de Pascal).
Explicación:
fuente
Pyt ,
4010 bytesExplicación:
Observando que el Triángulo de Sierpinski binario es equivalente al Triángulo de Pascal mod 2,
Pruébalo en línea!
fuente
Stax , 5 bytes
¡Ejecute y depure en línea!
La respuesta de Port of the Jelly.
Utiliza representación ASCII para explicar:
fuente