/* Configuration */
var QUESTION_ID = 66958; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 43394; // 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 "https://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 "https://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,]*[^\s,]),.*?(\d+(?:[.]\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,
});
});
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;
if (/<a/.test(lang)) lang = jQuery(lang).text();
languages[lang] = languages[lang] || {lang: a.language, 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 > b.lang) return 1;
if (a.lang < b.lang) 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="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>
No..hitespac..her.
donde los puntos son espacios sería un mejor caso de prueba para la bonificación. (Y actualmente, el caso de prueba no tiene el seguimiento.
)Respuestas:
CJAM,
119117113112109 * 0.5 * 0.8 = 43.6 bytesGracias a Dennis por guardar 1 byte.
Aquí hay un comienzo ...
Prueba la transformación directa . Prueba la transformación inversa.
Estoy seguro de que hay una forma más corta de generar la curva ...
Explicación
Primero, defino una función para recortar algún elemento desde el final de una matriz, porque lo necesito en varios lugares. Espera la matriz y el elemento (dentro de una matriz separada) en la parte superior de la pila.
Ahora, la mayoría del código determina el tamaño de la curva de Hilbert requerida y la construye como una matriz 2D donde los elementos son índices a lo largo de la curva. Construyo esto basado en la siguiente observación:
Considere la curva de Hilbert 2x2:
La curva de Hilbert 4x4 es:
Si restamos el valor mínimo de cada cuadrante (y los separamos un poco para mayor claridad visual), obtenemos:
Este patrón es válido para cualquier tamaño. Significa que podemos construir el siguiente nivel a partir del actual, utilizando como los cuatro cuadrantes: a) la transposición del nivel actual, b) el nivel actual en sí, c) la transposición a lo largo de la diagonal, d) nuevamente El nivel actual en sí. Y luego los compensamos 0, 1, 3, 2 veces el tamaño del nivel actual, respectivamente.
Finalmente, usamos esta curva de índices de Hilbert para aplicar la transformación apropiada a la entrada:
fuente
Python 3,
467434423457451426386374342291304 * 80% * 95% = 231.04 bytesLa forma en que esto funciona es que hago la curva de Hilbert usando un sistema Lindenmayer y sigo las instrucciones izquierda, derecha y hacia adelante a lo largo de una serie de cadenas. Sin embargo, probablemente hay muchas maneras en que esto podría jugar mejor; especialmente en los condicionales y en la formación de la serie de cuerdas. (Intenté
[" "*p for i in range(p)]
pero las cadenas no admiten la asignación de elementos (aparentemente). Si pudiera hacer que eso funcione, también podría deshacerme de la unión)Editar: Golfé algunos de los condicionales gracias a Dennis . Y jugué golf en el conjunto de cuerdas. Y un cambio sin byte porque los resultados salían transpuestos en comparación con los ejemplos anteriores.
Editar: implementado el bono de eliminación de espacios en blanco.
Editar: se corrigió un error en mi código de eliminación de espacios en blanco por seis bytes más
Editar: como esta respuesta no contamina el espacio de nombres global, obtengo el 5% de bonificación, de acuerdo con wizzwizz4 aquí .
Editar: se modificó cómo
g
se incrementa y disminuye. Ahora usandoeval()
ystr.translate
.Editar: esta respuesta ahora es un programa en lugar de una función.
Editar: se corrigieron algunos errores del golf anterior.
Sin golf:
fuente
Ruby,
358356344322319 * 80% * 95% = 242.44 bytesEste es mi código Python transpilado a Ruby. Debería escribir más respuestas en Ruby. Es un lenguaje decente para jugar golf.
Editar: Olvidé que las funciones no necesitan ser nombradas en esta pregunta.
Editar: como esta respuesta no contamina el espacio de nombres global, obtengo el 5% de bonificación, de acuerdo con wizzwizz4 aquí .
Sin golf:
fuente
JavaScript (ES6), 227 - 20%: 181,6 bytes
Tratando de obtener el 5% de bonificación
241 * 0.8 * 0.95: 183.16 más grande
Menos golf
Prueba
fuente
var
s para obtener el 5% de bonificación?var s,x,y,u,v,t,p,q,n,h
no, no vale la pena @ wizzwizz4var
antes del primer uso de cada ... Oh, eso es aún peor.