/* 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".join
y 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
123045
fue la entrada$args
. Después del-split
encendido0
, 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-join
lo 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.-join
a 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-split0
convierte 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 un0
se 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)%t
Pyke, 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
split
funció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
-p
opció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' <<<21000543
Bash), capturará la nueva línea con los dígitos; useecho -n
oprintf
para 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
f
con 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
-a
no 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
a
s antes de dividir, invertir y unir, luego elimino laa
s 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 (0120210
volvería0120120
).C #, 133 bytes
Golfed
Sin golf
Código completo
fuente
Java, 126
fuente
s
variable en el frente conr
yt[]
, ¿puede omitir la declaración de tipo des
en el bucle for?Clojure, 37 bytes
Utiliza en
#{0}
lugar depos?
(ahorra 1 byte concatenando con%
) y usa enmapcat
lugar de(flatten(map
. Todavía más largo que Factor .fuente