/* 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.
où les points sont des espaces serait un meilleur test pour le bonus. (Et actuellement, le cas de test manque la fin.
)Réponses:
CJAM,
119117113112109 * 0,5 * 0,8 = 43,6 octetsMerci à Dennis d'avoir économisé 1 octet.
Voici un début ...
Testez la transformation directe . Testez la transformation inverse.
Je suis sûr qu'il existe un moyen plus court de générer la courbe ...
Explication
Tout d'abord, je définis une fonction pour couper un élément de la fin d'un tableau, car j'en ai besoin à plusieurs endroits. Il attend le tableau et l'élément (à l'intérieur d'un tableau séparé) au-dessus de la pile.
Maintenant, la majorité du code détermine la taille de la courbe de Hilbert requise et la construit comme un tableau 2D où les éléments sont des indices le long de la courbe. Je construis cela sur la base de l'observation suivante:
Considérons la courbe de Hilbert 2x2:
La courbe de Hilbert 4x4 est:
Si nous soustrayons la valeur minimale de chaque quadrant (et les séparons un peu pour plus de clarté visuelle), nous obtenons:
Ce motif est valable pour toutes les tailles. Cela signifie que nous pouvons construire le niveau suivant à partir du niveau actuel, en utilisant comme quatre quadrants: a) la transposition du niveau actuel, b) le niveau actuel lui-même, c) la transposition le long de l'anti-diagonale, d) à nouveau le niveau actuel lui-même. Et puis nous les compensons respectivement 0, 1, 3, 2 fois la taille du niveau actuel.
Enfin, nous utilisons cette courbe d'indices de Hilbert pour appliquer la transformation appropriée à l'entrée:
la source
Python 3,
467434423457451426386374342291304 * 80% * 95% = 231,04 octetsLa façon dont cela fonctionne est que je fais la courbe de Hilbert en utilisant un système Lindenmayer et que je suis les instructions gauche, droite et avant le long d'un tableau de chaînes. Il existe probablement de nombreuses façons de mieux jouer au golf; en particulier dans les conditions et dans la fabrication du tableau de chaînes. (J'ai essayé,
[" "*p for i in range(p)]
mais les chaînes ne prennent pas en charge l'attribution des éléments (apparemment). Si je pouvais faire en sorte que cela fonctionne, je pourrais également me débarrasser de la jointure)Edit: Golfé certaines des conditions avec merci à Dennis . Et j'ai joué au golf sur la gamme de cordes. Et un changement sans octet car les résultats sortaient transposés par rapport aux exemples ci-dessus.
Edit: implémentation du bonus de suppression des espaces.
Edit: correction d'un bug dans mon code de suppression des espaces pour six octets supplémentaires
Edit: Étant donné que cette réponse ne pollue pas l'espace de noms global, j'obtiens le bonus de 5%, selon wizzwizz4 ici .
Edit: changé la façon dont
g
est incrémentée et décrémentée. Maintenant en utilisanteval()
etstr.translate
.Edit: Cette réponse est maintenant un programme au lieu d'une fonction.
Edit: correction de quelques bugs du golf précédent.
Non golfé:
la source
Rubis,
358356344322319 * 80% * 95% = 242,44 octetsCeci est mon code Python transposé en Ruby. Je devrais écrire plus de réponses en Ruby. C'est une langue décente pour jouer au golf.
Edit: j'ai oublié que les fonctions n'ont pas besoin d'être nommées dans cette question.
Edit: Étant donné que cette réponse ne pollue pas l'espace de noms global, j'obtiens le bonus de 5%, selon wizzwizz4 ici .
Non golfé:
la source
JavaScript (ES6), 227 - 20%: 181,6 octets
Essayer d'obtenir le bonus de 5%
241 * 0.8 * 0.95: 183.16 plus grand
Moins golfé
Tester
la source
var
s pour obtenir le bonus de 5%?var s,x,y,u,v,t,p,q,n,h
non ça ne vaut pas @ wizzwizz4var
avant la première utilisation de chacun ... Oh, c'est encore pire.