/* 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>
Рубин, 29 байт
источник
Python,
5850 байтБерет строку x и разделяет на нули и инвертирует каждый элемент в разбиении, добавляет ноль и возвращает этот минус последний ноль.
источник
"0".join
а затем отбросить дополнение и часть.]
иfor
. Вы можете проверить нашу страницу советов для большего количества указателей, если хотите.lambda x:"0".join(n[::-1]for n in x.split("0"))
Mathematica, 30 байт
например
Join@@Reverse/@#~SplitBy~Sign&[{1,2,3,0,0,5,9,0}]
={3, 2, 1, 0, 0, 9, 5, 0}
источник
PowerShell v2 +, 45 байт
Злоупотребление неявным кастингом, как будто завтра нет. Вероятно, не может быть намного короче, так как нет встроенной функции реверса, которая короче этого трюка с индексированием.
объяснение
Пример того, как это работает - предположим,
123045
был вход$args
. После-split
включения0
конвейер будет содержать массив(123,45)
. Первый цикл с|%{...}
имеет текущий элемент,$_
равный123
, который затем неявно приводится в виде строки, а затем переворачивается при[]
индексации. Это делает его('3','2','1')
как массив символов. Цикл-join
помещает это обратно в строку"321"
и оставляет на конвейере. Следующая (последняя) итерация цикла меняет вход на"54"
. Так что теперь наш трубопровод"321"
,"54"
. Он инкапсулирован в паренах,()
поэтому преобразован в массив и преобразован-join
вместе с нулями для получения результирующей выходной строки."321054"
, Это остается на конвейере и вывод на консоль неявен.Если в исходном входе есть последующие нули, массив будет заполнен нулевыми элементами, поэтому на выходе будет правильное количество нулей. Например,
1230045-split0
превращается в(123,,45)
и все продолжается, как указано выше.источник
Желе, 5 байт
Попробуйте онлайн!
источник
Фактор, 35 байт
Бить Пифон и Clojure, буя!
Эта анонимная функция является буквальным переводом этого ответа Python .
Это довольно просто: просто разбить строку на нули, инвертировать каждый элемент полученного массива и соединить все элементы (включая строки нулевой длины)
"0"
.Вот пример его выполнения во всех тестовых случаях:
"00120"
->{ "" "" "12" "" }
->{ "" "" "21" "" }
->"00210"
источник
Haskell, 45 байт
До сих пор рекурсивно накапливает реверсированный кусок
r
, добавляя его при достижении a0
. Когда оставшаяся строка пуста, она также разряжаетсяr
.Первые два повторяют некоторый код, но я не нашел более короткого способа их объединения (45 и 47 байт):
источник
r%(h:t)=(h:r)%t
Пайк, 8 байт
Объяснение:
Попробуй это здесь!
источник
JavaScript (ES6),
5049 байтСтрунная версия:
Сохраненный байт благодаря @Kevin Lau!
Версия массива (60 байт):
источник
J,
2018 байтСпасибо Згарбу за помощь в этом! Принимает разделенный пробелами список в качестве правильного аргумента.
-2 байта благодаря Zgarb!
источник
Clojure / ClojureScript, 44 символа
То же решение, что и у других, только более подробное благодаря длинным именам функций. Не собирался публиковать это из-за этого, но это бьет некоторые другие ответы, так почему бы и нет?
Работает на любой тип последовательности. В ClojureScript это также работает со строками, поскольку строки могут обрабатываться в виде списков символов, которые на самом деле представляют собой строки длиной 1, которые приводят к числам для подобных вещей
pos?
.источник
Haskell, 46 байтов
Пример использования:
(reverse=<<).split(oneOf"0") $ "0123004500678090"
->"0321005400876090"
.К сожалению, эта
split
функция требует дорогостоящего импорта. Разделите входной список на каждый0
, напримерsplit(oneOf"0") "0120030"
->["","0","12","0","","0","3","0",""]
, инвертируйте каждый фрагмент и объединяйте в одну строку.источник
F #, 103 байта
источник
Java, 179 байт (с импортом)
Принимает строковые данные и разделяет символы на ноль, а затем добавляет их обратно, вызывая метод add класса StringJoiner.
источник
Oracle SQL 11.2,
131123 байтаЗлоупотребление функциями XML.
источник
Perl, 22 байта
Включая +1 для
-p
варианта:Это довольно банальная замена - извините, что так скучно. Обратите внимание, что если ваш ввод завершается символом новой строки (например, используется
perl -pe 's/[^0]+/reverse$&/eg' <<<21000543
в Bash), он поймает символ новой строки с цифрами - используйтеecho -n
илиprintf
избегайте этого. В качестве альтернативы, для стоимости одного дополнительного байта измените класс символов на[1-9]
, и вы можете предоставить много входных данных, по одному на строку.источник
C 105 байт
Вызов
f
со списком цифр в виде строки с нулевым символом в конце, и он выведет правильный вывод.Разгромил и объяснил:
Смотрите это в прямом эфире на Coliru
источник
Perl 5, 52 байта
Подпрограмма:
источник
-a
не работает (по крайней мере, в Strawberry), когда входная строка заканчивается0
, так какsplit/\b/
включает в себя$/
с0
.На самом деле, 22 байта
Это фактически заставило меня заметить, что в команде split есть ошибка - она не сохраняет пустые разбиения. В качестве обходного пути я окружаю входную строку символом
a
s перед выполнением разбиения, реверса и соединения, а затем удаляюa
s в конце. Ввод принимается как строка, вывод - список односимвольных строк.Попробуйте онлайн
Объяснение:
источник
C #, 131 байт ##
Решение ошибочно!
ungolfed:
источник
01201230
, это вернется02102130
. Это связано с тем, что метод String.Replace заменяет все вхождения первой строки второй. Эта ошибка также может быть вызвана, если один образец обнаружится при обращении (0120210
вернется0120120
).C #, 133 байта
Golfed
Ungolfed
Полный код
источник
Ява, 126
источник
s
переменную в начале с помощьюr
иt[]
, можете ли вы опустить объявление типаs
в цикле for?Clojure, 37 байт
Используется
#{0}
вместоpos?
(сохранить 1 байт путем объединения с%
) и использоватьmapcat
вместо(flatten(map
. Все еще дольше, чем фактор .источник