/* 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 byte
sumber
Python,
5850 byteMengambil dalam string x dan membelah pada nol dan membalikkan setiap elemen dalam split dan menambahkan nol dan mengembalikan minus terakhir ini.
sumber
"0".join
dan kemudian menjatuhkan tambahan dan slice.]
danfor
. Anda dapat memeriksa halaman tips kami untuk petunjuk lebih lanjut, jika Anda mau.lambda x:"0".join(n[::-1]for n in x.split("0"))
Mathematica, 30 byte
misalnya
Join@@Reverse/@#~SplitBy~Sign&[{1,2,3,0,0,5,9,0}]
={3, 2, 1, 0, 0, 9, 5, 0}
sumber
PowerShell v2 +, 45 byte
Menyalahgunakan casting implisit seperti tidak ada hari esok. Kemungkinan tidak bisa jauh lebih pendek, karena tidak ada builtin untuk mundur yang lebih pendek dari trik pengindeksan ini.
Penjelasan
Contoh cara kerjanya - anggaplah
123045
input$args
. Setelah-split
on0
, pipeline akan berisi array(123,45)
. Loop pertama dengan|%{...}
elemen saat ini$_
sama dengan123
, yang kemudian secara implisit dilemparkan sebagai string, kemudian dibalik dengan[]
pengindeksan. Itu menjadikannya('3','2','1')
sebagai char-array. Lingkaran-join
menempatkan itu kembali ke string"321"
dan meninggalkannya di pipa. Iterasi loop (terakhir) berikutnya membalikkan input ke"54"
. Jadi sekarang pipa kami adalah"321"
,"54"
. Itu dirangkum dalam parens()
sehingga direformasi menjadi array, dan-join
diedit kembali bersama dengan nol untuk menghasilkan string output yang dihasilkan"321054"
. Yang tertinggal di pipeline dan output ke konsol tersirat.Jika ada nol berikutnya dalam input asli, array akan diisi dengan elemen nol, jadi ada jumlah nol yang benar pada output. Misalnya,
1230045-split0
berubah menjadi(123,,45)
dan hal-hal berlanjut seperti di atas.sumber
Jelly, 5 byte
Cobalah online!
sumber
Faktor, 35 byte
Mengalahkan Pyfon dan Clojure, booyah!
Fungsi anonim ini adalah terjemahan literal dari jawaban Python ini .
Ini cukup sederhana, cukup pisahkan string pada nol, balikkan setiap elemen dari array yang dihasilkan, dan gabungkan semua elemen (termasuk string panjang nol) dengan
"0"
.Berikut ini contohnya yang berjalan pada semua kasus uji:
"00120"
->{ "" "" "12" "" }
->{ "" "" "21" "" }
->"00210"
sumber
Haskell, 45 byte
Secara terakumulasi mengakumulasi potongan terbalik sejauh ini
r
, menambahkannya ketika0
tercapai. Ketika string yang tersisa kosong, itu juga dibuangr
.Dua yang pertama mengulang beberapa kode, tetapi saya tidak menemukan cara yang lebih pendek untuk menggabungkannya (45 dan 47 byte):
sumber
r%(h:t)=(h:r)%t
Pyke, 8 byte
Penjelasan:
Coba di sini!
sumber
JavaScript (ES6),
5049 byteVersi string:
Menyimpan satu byte berkat @Kevin Lau!
Versi array (60 byte):
sumber
J,
2018 byteTerima kasih kepada Zgarb karena telah membantu ini! Mengambil daftar yang dipisahkan oleh ruang sebagai argumen yang benar.
-2 byte terima kasih kepada Zgarb!
sumber
Clojure / ClojureScript, 44 karakter
Solusi yang sama seperti yang lain, hanya lebih banyak berkat berkat nama fungsi yang panjang. Tidak akan memposting karena itu, tetapi mengalahkan beberapa jawaban lain jadi mengapa tidak?
Bekerja pada semua jenis urutan. Di ClojureScript, ini juga berfungsi pada string karena string dapat diproses sebagai daftar karakter, yang sebenarnya hanya string 1-panjang, yang memaksa angka untuk hal-hal seperti
pos?
.sumber
Haskell, 46 byte
Contoh penggunaan:
(reverse=<<).split(oneOf"0") $ "0123004500678090"
->"0321005400876090"
.Sayangnya
split
fungsi ini membutuhkan impor yang mahal. Membagi daftar input di setiap0
, misalnyasplit(oneOf"0") "0120030"
->["","0","12","0","","0","3","0",""]
, membalikkan setiap chunk dan menyatukan menjadi satu string.sumber
F #, 103 byte
sumber
Java, 179 byte (dengan impor)
Mengambil input string dan membagi karakter dengan nol kemudian menambahkannya kembali dengan memanggil metode add pada kelas StringJoiner.
sumber
Oracle SQL 11.2,
131123 byteMenyalahgunakan fungsi XML.
sumber
Perl, 22 byte
Termasuk +1 untuk
-p
opsi:Ini adalah substitusi yang cukup sepele - maaf membosankan. Perhatikan bahwa jika input Anda diakhiri baris baru (misalnya menggunakan
perl -pe 's/[^0]+/reverse$&/eg' <<<21000543
dalam Bash), itu akan menangkap baris baru dengan digit - gunakanecho -n
atauprintf
untuk menghindarinya. Atau, dengan biaya satu byte tambahan, ubah kelas karakter menjadi[1-9]
, dan Anda dapat memberikan banyak input, satu byte per baris.sumber
C, 105 byte
Panggil
f
dengan daftar digit sebagai string yang diakhiri nul, dan itu akan mencetak output yang benar.Tidak digabungkan dan dijelaskan:
Lihat langsung di Coliru
sumber
Perl 5, 52 byte
Subrutin:
sumber
-a
tidak berfungsi (setidaknya dalam Strawberry) ketika string input berakhir0
, karenasplit/\b/
termasuk$/
dengan0
.Sebenarnya, 22 byte
Ini benar-benar membuat saya memperhatikan bahwa ada bug dalam perintah split - tidak menyimpan pemisahan kosong. Sebagai solusinya, saya mengelilingi string input dengan
a
s sebelum melakukan split, membalikkan, dan bergabung, lalu lepaskana
s di akhir. Input diambil sebagai string, output adalah daftar string karakter tunggal.Cobalah online
Penjelasan:
sumber
C #, 131 byte ##
solusi cacat!
ungolfed:
sumber
01201230
, ini akan kembali02102130
. Ini karena metode String.Replace menggantikan semua kemunculan string pertama dengan yang kedua. Bug ini juga akan disebabkan jika satu pola muncul ketika terbalik (0120210
akan kembali0120120
).C #, 133 byte
Golf
Tidak disatukan
Kode lengkap
sumber
Jawa, 126
sumber
s
variabel di depan denganr
dant[]
, dapatkah Anda menghilangkan deklarasi tipes
dalam for for?Clojure, 37 byte
Menggunakan
#{0}
alih-alihpos?
(simpan 1 byte dengan menyatu dengan%
) dan menggunakanmapcat
alih-alih(flatten(map
. Masih lebih lama dari Factor .sumber