/* 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
fonte
Python,
5850 bytesPega uma string x e divide os zeros e inverte cada elemento na divisão e adiciona um zero e retorna o último menos esse zero.
fonte
"0".join
e soltar a adição e a fatia.]
efor
. Você pode conferir nossa página de dicas para obter mais dicas, se desejar.lambda x:"0".join(n[::-1]for n in x.split("0"))
Mathematica, 30 bytes
eg
Join@@Reverse/@#~SplitBy~Sign&[{1,2,3,0,0,5,9,0}]
={3, 2, 1, 0, 0, 9, 5, 0}
fonte
PowerShell v2 +, 45 bytes
Abusando do elenco implícito como se não houvesse amanhã. Provavelmente não pode ficar muito mais curto, pois não há um mecanismo de reversão mais curto que esse truque de indexação.
Explicação
Um exemplo de como isso funciona - suponha que
123045
foi a entrada$args
. Após a-split
ativação0
, o pipeline conteria uma matriz(123,45)
. O primeiro loop com|%{...}
tem o elemento atual$_
igual a123
, que é convertido implicitamente como uma string e depois revertido com a[]
indexação. Isso faz com que('3','2','1')
seja um array de caracteres. O loop-join
coloca isso de volta em uma string"321"
e deixa no pipeline. A próxima (última) iteração do loop reverte a entrada para"54"
. Então agora nosso pipeline é"321"
,"54"
. Isso é encapsulado em parênteses,()
para que seja reformado em uma matriz e-join
editado novamente com zeros para produzir a sequência de saída resultante"321054"
. Isso é deixado no pipeline e a saída para o console está implícita.Se houver zeros subsequentes na entrada original, a matriz será preenchida com elementos nulos, portanto, há o número correto de zeros na saída. Por exemplo,
1230045-split0
se transforma(123,,45)
e as coisas continuam como acima.fonte
Geléia, 5 bytes
Experimente online!
fonte
Fator, 35 bytes
Vencendo Pyfon e Clojure, booyah!
Essa função anônima é uma tradução literal dessa resposta em Python .
É bem simples, basta dividir a string em zeros, inverter todos os elementos da matriz resultante e juntar todos os elementos (incluindo as de comprimento zero)
"0"
.Aqui está um exemplo dele em execução em todos os casos de teste:
"00120"
->{ "" "" "12" "" }
->{ "" "" "21" "" }
->"00210"
fonte
Haskell, 45 bytes
Recursivamente acumula o pedaço invertido até agora
r
, acrescentando-o quando a0
é atingido. Quando a sequência restante está vazia, ela também é descarregadar
.Os dois primeiros repetem algum código, mas não encontrei uma maneira mais curta de combiná-los (45 e 47 bytes):
fonte
r%(h:t)=(h:r)%t
Pyke, 8 bytes
Explicação:
Experimente aqui!
fonte
JavaScript (ES6),
5049 bytesVersão da string:
Guardou um byte graças a @Kevin Lau!
Versão da matriz (60 bytes):
fonte
J,
2018 bytesAgradecemos a Zgarb por ajudar com isso! Pega uma lista separada por espaço como argumento correto.
-2 bytes graças ao Zgarb!
fonte
Clojure / ClojureScript, 44 caracteres
Mesma solução que outras, apenas mais detalhada graças a nomes de funções longos. Não publicaria por causa disso, mas supera outras respostas, por que não?
Funciona em qualquer tipo de sequência. No ClojureScript, isso também funciona em cadeias de caracteres, uma vez que elas são processáveis como listas de caracteres, que são na verdade apenas cadeias de um comprimento, que são coerentes com números para coisas como
pos?
.fonte
Haskell, 46 bytes
Exemplo de uso:
(reverse=<<).split(oneOf"0") $ "0123004500678090"
->"0321005400876090"
.Infelizmente, a
split
função requer a importação cara. Divida a lista de entrada a cada0
, por exemplosplit(oneOf"0") "0120030"
- ->["","0","12","0","","0","3","0",""]
, inverta cada bloco e concatene em uma única sequência.fonte
F #, 103 bytes
fonte
Java, 179 bytes (com importação)
Recebe uma entrada de string e divide os caracteres por zero e os adiciona novamente chamando o método add na classe StringJoiner.
fonte
Oracle SQL 11.2,
131123 bytesAbusando de funções XML.
fonte
Perl, 22 bytes
Incluindo +1 para a
-p
opção:Esta é uma substituição bastante trivial - desculpe ser tão chata. Observe que, se sua entrada for finalizada com nova linha (por exemplo, usando
perl -pe 's/[^0]+/reverse$&/eg' <<<21000543
no Bash), ela trará a nova linha com os dígitos - useecho -n
ouprintf
para evitar isso. Como alternativa, por um custo de um byte adicional, altere a classe de caracteres para[1-9]
e você poderá fornecer muitas entradas, uma por linha.fonte
C, 105 bytes
Ligue
f
com a lista de dígitos como uma sequência terminada em nulo e ela imprimirá a saída correta.Ungolfed e explicou:
Veja ao vivo em Coliru
fonte
Perl 5, 52 bytes
Uma sub-rotina:
fonte
-a
não funciona (pelo menos no Strawberry) quando a string de entrada termina0
, poissplit/\b/
inclui o$/
com o0
.Na verdade, 22 bytes
Isso realmente me fez notar que há um erro no comando split - ele não preserva as divisões vazias. Como solução alternativa, envolvo a sequência de entrada com
a
s antes de dividir, inverter e unir e, em seguida, removo osa
s no final. A entrada é tomada como uma sequência, a saída é uma lista de cadeias de caracteres únicos.Experimente online
Explicação:
fonte
C #, 131 bytes ##
solução falho!
ungolfed:
fonte
01201230
, isso retornará02102130
. Isso ocorre porque o método String.Replace substitui todas as ocorrências da primeira seqüência de caracteres pela segunda. Esse bug também seria causado se um padrão aparecer quando revertido (0120210
retornaria0120120
).C #, 133 bytes
Golfe
Ungolfed
Código completo
fonte
Java, 126
fonte
s
variável na frente comr
et[]
, poderá omitir a declaração de tipos
no loop for?Clojure, 37 bytes
Usa em
#{0}
vez depos?
(salve 1 byte concatenando com%
) e usando emmapcat
vez de(flatten(map
. Ainda mais que o fator .fonte