/* 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
fuente
Python,
5850 bytesToma una cadena x y se divide en ceros e invierte cada elemento en la división y agrega un cero y devuelve este menos el último cero.
fuente
"0".joiny luego soltar la adición y el corte.]yfor. Puede consultar nuestra página de consejos para obtener más sugerencias, si lo desea.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}fuente
PowerShell v2 +, 45 bytes
Abusando del casting implícito como si no hubiera un mañana. Probablemente no puede acortarse mucho más, ya que no hay un reverso incorporado que sea más corto que este truco de indexación.
Explicación
Un ejemplo de cómo funciona esto; supongamos que
123045fue la entrada$args. Después del-splitencendido0, la tubería contendría una matriz(123,45). El primer bucle con|%{...}tiene el elemento actual$_igual a123, que luego se convierte implícitamente en una cadena, luego se invierte con la[]indexación. Eso lo convierte en('3','2','1')un conjunto de caracteres. El bucle-joinlo vuelve a poner en una cadena"321"y lo deja en la tubería. La siguiente (última) iteración de bucle invierte la entrada"54". Así que ahora nuestra cartera es"321","54". Eso está encapsulado en parens,()por lo que se reformó en una matriz, y re . Eso queda en la tubería y la salida a la consola está implícita.-joina juntar con ceros para producir la cadena de salida resultante"321054"Si hay ceros posteriores en la entrada original, la matriz se rellenará con elementos nulos, por lo que hay la cantidad correcta de ceros en la salida. Por ejemplo, se
1230045-split0convierte en(123,,45)y las cosas continúan como anteriormente.fuente
Jalea, 5 bytes
Pruébalo en línea!
fuente
Factor, 35 bytes
¡Derrotando a Pyfon y Clojure, booyah!
Esta función anónima es una traducción literal de esta respuesta de Python .
Es bastante simple, solo divide la cadena en ceros, invierte cada elemento de la matriz resultante y une todos los elementos (incluidas las cadenas de longitud cero) con
"0".Aquí hay un ejemplo de cómo se ejecuta en todos los casos de prueba:
"00120"->{ "" "" "12" "" }->{ "" "" "21" "" }->"00210"fuente
Haskell, 45 bytes
Acumula recursivamente el trozo invertido hasta ahora
r, precediéndolo cuando un0se alcanza a. Cuando la cadena restante está vacía, también se descargar.Los dos primeros repiten algo de código, pero no encontré una forma más corta de combinarlos (45 y 47 bytes):
fuente
r%(h:t)=(h:r)%tPyke, 8 bytes
Explicación:
Pruébalo aquí!
fuente
JavaScript (ES6),
5049 bytesVersión de cadena:
¡Ahorré un byte gracias a @Kevin Lau!
Versión de matriz (60 bytes):
fuente
J,
2018 bytes¡Gracias a Zgarb por ayudar con esto! Toma una lista separada por espacios como argumento correcto.
-2 bytes gracias a Zgarb!
fuente
Clojure / ClojureScript, 44 caracteres
La misma solución que otras, solo que más detallada gracias a los nombres largos de funciones. No iba a publicarlo por eso, pero supera algunas otras respuestas, ¿por qué no?
Funciona en cualquier tipo de secuencia. En ClojureScript, esto también funciona en cadenas ya que las cadenas son procesables como listas de caracteres, que en realidad son solo cadenas de 1 longitud, que obligan a los números para cosas como
pos?.fuente
Haskell, 46 bytes
Ejemplo de uso:
(reverse=<<).split(oneOf"0") $ "0123004500678090"->"0321005400876090".Lamentablemente, la
splitfunción requiere la costosa importación. Divida la lista de entrada en cada0, por ejemplo,split(oneOf"0") "0120030"->["","0","12","0","","0","3","0",""], invierta cada fragmento y concatene en una sola cadena.fuente
F #, 103 bytes
fuente
Java, 179 bytes (con importación)
Toma una entrada de cadena y divide los caracteres por cero y luego los vuelve a agregar llamando al método add en la clase StringJoiner.
fuente
Oracle SQL 11.2,
131123 bytesAbusar de funciones XML.
fuente
Perl, 22 bytes
Incluyendo +1 para la
-popción:Esta es una sustitución bastante trivial, lamento ser tan aburrida. Tenga en cuenta que si su entrada está terminada en nueva línea (por ejemplo, usando
perl -pe 's/[^0]+/reverse$&/eg' <<<21000543Bash), capturará la nueva línea con los dígitos; useecho -noprintfpara evitar eso. Alternativamente, por un costo de un byte adicional, cambie la clase de caracteres a[1-9], y puede proporcionar muchas entradas, una por línea.fuente
C, 105 bytes
Llame
fcon la lista de dígitos como una cadena terminada en nulo e imprimirá la salida correcta.Ungolfed y explicó:
Véalo en vivo en Coliru
fuente
Perl 5, 52 bytes
Una subrutina:
fuente
-ano funciona (al menos en Strawberry) cuando la cadena de entrada termina0, ya quesplit/\b/incluye el$/con0.En realidad, 22 bytes
Esto realmente me hizo notar que hay un error en el comando de división: no conserva divisiones vacías. Como solución alternativa, rodeo la cadena de entrada con
as antes de dividir, invertir y unir, luego elimino laas al final. La entrada se toma como una cadena, la salida es una lista de cadenas de un solo carácter.Pruébalo en línea
Explicación:
fuente
C #, 131 bytes ##
solución defectuosa!
sin golf:
fuente
01201230, esto volvería02102130. Esto se debe a que el método String.Replace reemplaza todas las apariciones de la primera cadena con la segunda. Este error también se causaría si aparece un patrón cuando se invierte (0120210volvería0120120).C #, 133 bytes
Golfed
Sin golf
Código completo
fuente
Java, 126
fuente
svariable en el frente conryt[], ¿puede omitir la declaración de tipo desen el bucle for?Clojure, 37 bytes
Utiliza en
#{0}lugar depos?(ahorra 1 byte concatenando con%) y usa enmapcatlugar de(flatten(map. Todavía más largo que Factor .fuente