/* Configuration */
var QUESTION_ID = 78510; // 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 = 32014; // 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+)(?=[^\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 = '<i>' + lang + '</i>';
lang = jQuery(lang).text().toLowerCase();
languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link, uniq: lang};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.uniq > b.uniq) return 1;
if (a.uniq < b.uniq) 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/Sites/codegolf/all.css?v=617d0685f6f3">
<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><a href="{{LINK}}">{{SIZE}}</a></td></tr>
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
<tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr>
</tbody>
</table>
Rubis, 29 octets
la source
Python,
5850 octetsPrend une chaîne x et se divise sur les zéros et inverse chaque élément de la division et ajoute un zéro et renvoie le dernier moins ce zéro.
la source
"0".join
puis supprimer l'ajout et la tranche.]
etfor
. Vous pouvez consulter nos conseils page de pour plus de pointeurs, si vous le souhaitez.lambda x:"0".join(n[::-1]for n in x.split("0"))
Mathematica, 30 octets
par exemple
Join@@Reverse/@#~SplitBy~Sign&[{1,2,3,0,0,5,9,0}]
={3, 2, 1, 0, 0, 9, 5, 0}
la source
PowerShell v2 +, 45 octets
Abuser du casting implicite comme s'il n'y avait pas de lendemain. Il est probable qu'il ne puisse pas être beaucoup plus court, car il n'y a pas de fonction intégrée pour l'inverse plus courte que cette astuce d'indexation.
Explication
Un exemple de la façon dont cela fonctionne - supposons
123045
était l'entrée$args
. Après l'-split
activation0
, le pipeline contiendrait un tableau(123,45)
. La première boucle avec|%{...}
a l'élément courant$_
égal à123
, qui est ensuite implicitement converti en chaîne, puis inversé avec l'[]
indexation. Cela en fait('3','2','1')
un tableau de caractères. La boucle-join
remet cela en chaîne"321"
et le laisse sur le pipeline. L'itération de boucle suivante (dernière) inverse l'entrée"54"
. Alors maintenant , notre pipeline est"321"
,"54"
. C'est encapsulé en parens()
donc il est reformé en un tableau et ré--join
édité avec des zéros pour produire la chaîne de sortie résultante"321054"
. Cela reste sur le pipeline et la sortie vers la console est implicite.S'il y a des zéros ultérieurs dans l'entrée d'origine, le tableau serait rempli d'éléments nuls, donc il y a le nombre correct de zéros sur la sortie. Par exemple, se
1230045-split0
transforme en(123,,45)
et les choses continuent comme ci-dessus.la source
Gelée, 5 octets
Essayez-le en ligne!
la source
Facteur, 35 octets
Battre Pyfon et Clojure, booyah!
Cette fonction anonyme est une traduction littérale de cette réponse Python .
C'est assez simple, il suffit de diviser la chaîne sur des zéros, d'inverser chaque élément du tableau résultant et de joindre tous les éléments (y compris les chaînes de longueur nulle) avec
"0"
.Voici un exemple de son exécution sur tous les cas de test:
"00120"
->{ "" "" "12" "" }
->{ "" "" "21" "" }
->"00210"
la source
Haskell, 45 octets
Accumule récursivement le morceau inversé jusqu'à présent
r
, l'ajoutant quand a0
est atteint. Lorsque la chaîne restante est vide, elle se décharge égalementr
.Les deux premiers répètent du code, mais je n'ai pas trouvé de moyen plus court de les combiner (45 et 47 octets):
la source
r%(h:t)=(h:r)%t
Pyke, 8 octets
Explication:
Essayez-le ici!
la source
JavaScript (ES6),
5049 octetsVersion chaîne:
Un octet enregistré grâce à @Kevin Lau!
Version de la baie (60 octets):
la source
J,
2018 octetsMerci à Zgarb pour votre aide! Prend une liste séparée par des espaces comme argument de droite.
-2 octets grâce à Zgarb!
la source
Clojure / ClojureScript, 44 caractères
Même solution que les autres, juste plus verbeuse grâce aux longs noms de fonction. N'allait pas le poster à cause de cela, mais il bat d'autres réponses, alors pourquoi pas?
Fonctionne sur tout type de séquence. Dans ClojureScript, cela fonctionne également sur les chaînes, car les chaînes peuvent être traitées comme des listes de caractères, qui ne sont en réalité que des chaînes de 1 longueur, qui contraignent les nombres à des choses comme
pos?
.la source
Haskell, 46 octets
Exemple d'utilisation:
(reverse=<<).split(oneOf"0") $ "0123004500678090"
->"0321005400876090"
.Malheureusement, la
split
fonction nécessite une importation coûteuse. Divisez la liste d'entrée à chaque0
, par exemplesplit(oneOf"0") "0120030"
->["","0","12","0","","0","3","0",""]
, inversez chaque bloc et concaténez en une seule chaîne.la source
F #, 103 octets
la source
Java, 179 octets (avec importation)
Prend une entrée de chaîne et divise les caractères par zéro, puis les ajoute en appelant la méthode add sur la classe StringJoiner.
la source
Oracle SQL 11.2,
131123 octetsAbus des fonctions XML.
la source
Perl, 22 octets
Y compris +1 pour l'
-p
option:C'est une substitution assez banale - désolé d'être si ennuyeux. Notez que si votre entrée se termine par un saut de ligne (par exemple, en utilisant
perl -pe 's/[^0]+/reverse$&/eg' <<<21000543
Bash), il attrapera le saut de ligne avec les chiffres - utilisezecho -n
ouprintf
pour éviter cela. Alternativement, pour un coût d'un octet supplémentaire, remplacez la classe de caractères par[1-9]
, et vous pouvez fournir de nombreuses entrées, une par ligne.la source
C, 105 octets
Appel
f
avec la liste des chiffres sous forme de chaîne terminée par zéro et il affichera la sortie correcte.Non golfé et expliqué:
Voir en direct sur Coliru
la source
Perl 5, 52 octets
Un sous-programme:
la source
-a
ne fonctionne pas (au moins dans Strawberry) lorsque la chaîne d'entrée se termine0
, carsplit/\b/
inclut le$/
avec le0
.En fait, 22 octets
Cela m'a fait remarquer qu'il y a un bug dans la commande split - elle ne conserve pas les divisions vides. Pour contourner ce problème, j'entoure la chaîne d'entrée de
a
s avant de faire le fractionnement, l'inverse et la jointure, puis je supprime lea
s à la fin. L'entrée est considérée comme une chaîne, la sortie est une liste de chaînes à un seul caractère.Essayez-le en ligne
Explication:
la source
C #, 131 octets ##
solution imparfaite!
non golfé:
la source
01201230
, cela reviendrait02102130
. En effet, la méthode String.Replace remplace toutes les occurrences de la première chaîne par la seconde. Ce bogue serait également provoqué si un motif apparaît lorsqu'il est inversé (0120210
reviendrait0120120
).C #, 133 octets
Golfé
Non golfé
Code complet
la source
Java, 126
la source
s
variable à l'avant avecr
ett[]
, pouvez-vous omettre la déclaration de type des
dans la boucle for?Clojure, 37 octets
Utilise à la
#{0}
place depos?
(enregistrez 1 octet en concaténant avec%
) et utilisez à lamapcat
place de(flatten(map
. Encore plus long que Factor .la source