/* 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 bajtów
źródło
Python,
5850 bajtówPobiera ciąg x i dzieli na zera i odwraca każdy element w podziale, dodaje zero i zwraca ten minus ostatnie zero.
źródło
"0".join
a następnie upuścić dodatek i plasterek.]
ifor
. Możesz sprawdzić nasze wskazówki stronie więcej wskazówek, jeśli chcesz.lambda x:"0".join(n[::-1]for n in x.split("0"))
Mathematica, 30 bajtów
np.
Join@@Reverse/@#~SplitBy~Sign&[{1,2,3,0,0,5,9,0}]
={3, 2, 1, 0, 0, 9, 5, 0}
źródło
PowerShell v2 +, 45 bajtów
Nadużywanie niejawnego castingu, jakby nie było jutra. Prawdopodobnie nie może być znacznie krótszy, ponieważ nie ma wbudowanej funkcji cofania, która byłaby krótsza niż ta sztuczka indeksowania.
Wyjaśnienie
Przykładem tego, jak to działa - załóżmy, że
123045
był to wkład$args
. Po-split
ON0
rurociąg będzie zawierać tablicę(123,45)
. Pierwsza pętla z|%{...}
ma bieżący element$_
równy123
, który jest następnie domyślnie rzutowany jako ciąg, a następnie odwracany za pomocą[]
indeksowania. To sprawia, że('3','2','1')
jest to tablica znaków. Pętla-join
umieszcza to z powrotem w łańcuch"321"
i pozostawia w rurociągu. Kolejna (ostatnia) iteracja pętli odwraca wejście do"54"
. Więc teraz nasz rurociąg jest"321"
,"54"
. Jest on enkapsulowany w parens,()
więc jest przekształcany w tablicę i ponownie-join
edytowany wraz z zerami, aby uzyskać wynikowy ciąg wyjściowy"321054"
. Pozostaje to w potoku, a dane wyjściowe do konsoli są niejawne.Jeśli na oryginalnym wejściu znajdują się kolejne zera, tablica zostanie zapełniona elementami zerowymi, więc na wyjściu jest poprawna liczba zer. Na przykład
1230045-split0
zmienia się w(123,,45)
i wszystko działa jak wyżej.źródło
Galaretka, 5 bajtów
Wypróbuj online!
źródło
Współczynnik, 35 bajtów
Pokonaj Pyfona i Clojure, boja!
Ta anonimowa funkcja jest dosłownym tłumaczeniem tej odpowiedzi w języku Python .
To bardzo proste, wystarczy podzielić ciąg na zera, odwrócić każdy element wynikowej tablicy i połączyć wszystkie elementy (w tym ciągi zerowej długości)
"0"
.Oto przykład jego działania we wszystkich przypadkach testowych:
"00120"
->{ "" "" "12" "" }
->{ "" "" "21" "" }
->"00210"
źródło
Haskell, 45 bajtów
Rekurencyjnie gromadzi odwróconą
r
porcję do tej pory , przygotowując ją po0
osiągnięciu a. Gdy pozostały ciąg jest pusty, również się rozładowujer
.Pierwsze dwa powtarzają jakiś kod, ale nie znalazłem krótszego sposobu na ich połączenie (45 i 47 bajtów):
źródło
r%(h:t)=(h:r)%t
Pyke, 8 bajtów
Wyjaśnienie:
Wypróbuj tutaj!
źródło
JavaScript (ES6),
5049 bajtówWersja łańcuchowa:
Zapisano bajt dzięki @Kevin Lau!
Wersja tablicy (60 bajtów):
źródło
J,
2018 bajtówDzięki Zgarbowi za pomoc w tym! Bierze listę rozdzieloną spacjami jako właściwy argument.
-2 bajty dzięki Zgarb!
źródło
Clojure / ClojureScript, 44 znaki
Takie samo rozwiązanie jak inne, tylko bardziej szczegółowe dzięki długim nazwom funkcji. Z tego powodu nie zamierzałem tego opublikować, ale bije inne odpowiedzi, więc dlaczego nie?
Działa na dowolnym typie sekwencji. W ClojureScript działa to również na ciągi, ponieważ ciągi są przetwarzalne jako listy znaków, które są tak naprawdę ciągami o długości 1, które zmuszają do liczb np
pos?
.źródło
Haskell, 46 bajtów
Przykład użycia:
(reverse=<<).split(oneOf"0") $ "0123004500678090"
->"0321005400876090"
.Niestety
split
funkcja wymaga kosztownego importu. Podziel listę wejściową przy każdym0
, np.split(oneOf"0") "0120030"
->["","0","12","0","","0","3","0",""]
, odwróć każdą porcję i konkatenuj w pojedynczy ciąg.źródło
F #, 103 bajtów
źródło
Java, 179 bajtów (z importem)
Pobiera ciąg znaków i dzieli znaki na zero, a następnie dodaje je z powrotem, wywołując metodę add w klasie StringJoiner.
źródło
Oracle SQL 11.2,
131123 bajtówNadużywanie funkcji XML.
źródło
Perl, 22 bajty
W tym +1 dla
-p
opcji:Jest to dość trywialna zmiana - przepraszam, że jestem tak nudna. Zauważ, że jeśli twoje wejście jest zakończone znakiem nowej linii (np. Używając
perl -pe 's/[^0]+/reverse$&/eg' <<<21000543
Bash), złapie nową linię cyframi - użyjecho -n
lub,printf
aby tego uniknąć. Alternatywnie, za koszt jednego dodatkowego bajtu, zmień klasę znaków na[1-9]
i możesz podać wiele danych wejściowych, po jednym w wierszu.źródło
C, 105 bajtów
Wywołaj
f
z listą cyfr jako ciąg zakończony znakiem NUL, a wydrukuje poprawne wyjście.Nie golfił i wyjaśnił:
Zobacz na żywo na Coliru
źródło
Perl 5, 52 bajty
Podprogram:
źródło
-a
nie działa (przynajmniej w Strawberry), gdy łańcuch wejściowy kończy się na0
, ponieważsplit/\b/
zawiera$/
z0
.Właściwie 22 bajty
W rzeczywistości zauważyłem, że w poleceniu podziału występuje błąd - nie zachowuje on pustych podziałów. Aby obejść ten problem, otaczam ciąg wejściowy
a
s przed wykonaniem podziału, odwrócenia i łączenia, a następnie usuwama
s na końcu. Dane wejściowe są traktowane jako ciąg, dane wyjściowe to lista ciągów jednoznakowych.Wypróbuj online
Wyjaśnienie:
źródło
C #, 131 bajtów ##
błędne rozwiązanie!
bez golfa:
źródło
01201230
, zwróci to02102130
. Wynika to z faktu, że metoda String.Replace zastępuje wszystkie wystąpienia pierwszego ciągu drugim. Ten błąd zostałby również spowodowany, jeśli jeden wzór pojawi się po odwróceniu (0120210
powróci0120120
).C #, 133 bajty
Grał w golfa
Nie golfił
Pełny kod
źródło
Java, 126
źródło
s
zmienną z przodu za pomocąr
it[]
, czy możesz pominąć deklarację typus
w pętli for?Clojure, 37 bajtów
Używa
#{0}
zamiastpos?
(oszczędza 1 bajt łącząc się z%
) i używamapcat
zamiast(flatten(map
. Nadal dłużej niż czynnik .źródło