/* 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>
Ruby, 29 Bytes
quelle
Python,
5850 BytesNimmt einen String x auf, teilt die Nullen auf und kehrt jedes Element in der Teilung um, fügt eine Null hinzu und gibt das Minus der letzten Null zurück.
quelle
"0".join
den Zusatz und die Scheibe zu tun und dann fallen zu lassen.]
und entfernenfor
. Auf unserer Seite mit Tipps finden Sie weitere Hinweise.lambda x:"0".join(n[::-1]for n in x.split("0"))
Mathematica, 30 Bytes
zB
Join@@Reverse/@#~SplitBy~Sign&[{1,2,3,0,0,5,9,0}]
={3, 2, 1, 0, 0, 9, 5, 0}
quelle
PowerShell v2 +, 45 Byte
Missbrauch des impliziten Castings, als gäbe es kein Morgen. Kann wahrscheinlich nicht viel kürzer werden, da es kein integriertes Reverse gibt, das kürzer ist als dieser Indizierungstrick.
Erläuterung
Ein Beispiel dafür, wie das funktioniert - nehmen wir an,
123045
die Eingabe$args
. Nach dem-split
auf0
würde die Pipeline ein Array enthalten(123,45)
. Die erste Schleife mit|%{...}
hat das aktuelle Element$_
gleich123
, das dann implizit als Zeichenfolge umgewandelt und mit der[]
Indizierung umgekehrt wird . Das macht es('3','2','1')
zu einem char-Array. Die Schleife-join
fügt das wieder in einen String ein"321"
und belässt es in der Pipeline. Die nächste (letzte) Schleifeniteration kehrt die Eingabe in um"54"
. So , jetzt unsere Pipeline ist"321"
,"54"
. Das ist in Parens eingekapselt,()
so dass es in ein Array umgewandelt wird, und wieder . Dies verbleibt in der Pipeline und die Ausgabe an die Konsole ist implizit.-join
zusammen mit Nullen zurückgeschnitten wird, um die resultierende Ausgabezeichenfolge zu erzeugen"321054"
Wenn die ursprüngliche Eingabe nachfolgende Nullen enthält, wird das Array mit Nullelementen gefüllt, sodass die Ausgabe die richtige Anzahl von Nullen enthält. Zum Beispiel wird
1230045-split0
zu(123,,45)
und es geht weiter wie oben.quelle
Gelee, 5 Bytes
Probieren Sie es online!
quelle
Faktor 35 Byte
Pyfon und Clojure besiegen, Booyah!
Diese anonyme Funktion ist eine wörtliche Übersetzung dieser Python-Antwort .
Es ist ganz einfach: Teilen Sie die Zeichenfolge in Nullen auf, kehren Sie jedes Element des resultierenden Arrays um und verbinden Sie alle Elemente (einschließlich Zeichenfolgen mit der Länge Null) mit
"0"
.Hier ist ein Beispiel dafür, wie es in allen Testfällen ausgeführt wird:
"00120"
->{ "" "" "12" "" }
->{ "" "" "21" "" }
->"00210"
quelle
Haskell, 45 Bytes
r
Sammelt rekursiv den bis dahin umgedrehten Chunk vor dem0
Erreichen von a. Wenn die verbleibende Zeichenfolge leer ist, wird sie ebenfalls entladenr
.Die ersten beiden wiederholen Code, aber ich habe keinen kürzeren Weg gefunden, um sie zu kombinieren (45 und 47 Bytes):
quelle
r%(h:t)=(h:r)%t
Pyke, 8 Bytes
Erläuterung:
Probieren Sie es hier aus!
quelle
JavaScript (ES6),
5049 BytesString-Version:
Dank @Kevin Lau ein Byte gespart!
Array-Version (60 Byte):
quelle
J,
20 bis18 BytesVielen Dank an Zgarb für die Hilfe! Nimmt eine durch Leerzeichen getrennte Liste als richtiges Argument.
-2 Bytes dank Zgarb!
quelle
Clojure / ClojureScript, 44 Zeichen
Gleiche Lösung wie andere, nur ausführlicher dank langer Funktionsnamen. Wollte es deswegen nicht posten, aber es schlägt ein paar andere Antworten, also warum nicht?
Funktioniert mit jedem Sequenztyp. In ClojureScript funktioniert dies auch für Zeichenfolgen, da Zeichenfolgen als Listen von Zeichen verarbeitet werden können, bei denen es sich eigentlich nur um Zeichenfolgen mit einer Länge handelt, die für Dinge wie z
pos?
.quelle
Haskell, 46 Bytes
Anwendungsbeispiel:
(reverse=<<).split(oneOf"0") $ "0123004500678090"
->"0321005400876090"
.Leider
split
erfordert die Funktion den teuren Import. Teilen Sie die Eingabeliste bei jedem auf0
, z. B.split(oneOf"0") "0120030"
->["","0","12","0","","0","3","0",""]
, kehren Sie jeden Block um und verketten Sie ihn zu einer einzelnen Zeichenfolge.quelle
F #, 103 Bytes
quelle
Java, 179 Bytes (mit Import)
Nimmt eine Zeichenfolge-Eingabe auf, teilt die Zeichen durch Null und fügt sie dann wieder hinzu, indem die add-Methode für die StringJoiner-Klasse aufgerufen wird.
quelle
Oracle SQL 11.2,
131123 BytesMissbrauch von XML-Funktionen.
quelle
Perl, 22 Bytes
Einschließlich +1 für
-p
Option:Dies ist ein ziemlich trivialer Ersatz - tut mir leid, dass ich so langweilig bin. Beachten Sie, dass Ihre Eingabe bei Zeilenumbrüchen (z. B. bei Verwendung von
perl -pe 's/[^0]+/reverse$&/eg' <<<21000543
in Bash) die Zeilenumbrüche mit den Ziffern erfasst - verwenden Sieecho -n
oderprintf
, um dies zu vermeiden. Ändern Sie alternativ für ein zusätzliches Byte die Zeichenklasse in[1-9]
, und Sie können mehrere Eingaben vornehmen, eine pro Zeile.quelle
C 105 Bytes
Anruf
f
mit der Liste der Ziffern als nullterminierte Zeichenfolge auf, und es wird die richtige Ausgabe gedruckt.Ungolfed und erklärte:
Sehen Sie es live auf Coliru
quelle
Perl 5, 52 Bytes
Ein Unterprogramm:
quelle
-a
funktioniert nicht (zumindest in Strawberry), wenn die Eingabezeichenfolge auf endet0
, dasplit/\b/
das$/
mit dem einschließt0
.Eigentlich 22 Bytes
Dadurch habe ich festgestellt, dass der Befehl split einen Fehler enthält - leere Teilungen werden nicht beibehalten.
a
Um dieses Problem zu umgehen, umgebe ich die Eingabezeichenfolge vor dem Teilen, Umkehren und Verbinden mit s und entferne dann dasa
s am Ende. Die Eingabe wird als Zeichenfolge interpretiert, die Ausgabe ist eine Liste von Zeichenfolgen mit nur einem Zeichen.Probieren Sie es online aus
Erläuterung:
quelle
C #, 131 Bytes ##
Lösung fehlerhaft!
ungolfed:
quelle
01201230
, würde dies zurückkehren02102130
. Dies liegt daran, dass die String.Replace-Methode alle Vorkommen der ersten Zeichenfolge durch die zweite ersetzt. Dieser Fehler würde auch verursacht, wenn ein Muster bei der Umkehrung auftaucht (zurückkehren0120210
würde0120120
).133 Bytes
Golf gespielt
Ungolfed
Vollständiger Code
quelle
Java, 126
quelle
s
Variable vorne mitr
und deklarierent[]
, können Sie die Typdeklaration vons
in der for-Schleife weglassen ?Clojure, 37 Bytes
Verwendet
#{0}
anstelle vonpos?
(1 Byte durch Verketten mit%
) und verwendetmapcat
anstelle von(flatten(map
. Immer noch länger als Factor .quelle