/* Configuration */
var QUESTION_ID = 66958; // 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 = 43394; // 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+(?:[.]\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 = jQuery(lang).text();
languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.lang > b.lang) return 1;
if (a.lang < b.lang) 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/codegolf/all.css?v=83c949450c8b">
<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>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
<tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
No..hitespac..her.
di mana titik-titik adalah spasi akan menjadi ujian yang lebih baik untuk bonus. (Dan saat ini, test case tidak ada jejaknya.
)Jawaban:
CJam,
119117113112109 * 0,5 * 0,8 = 43,6 byteTerima kasih kepada Dennis untuk menghemat 1 byte.
Ini awal ...
Uji transformasi maju . Uji transformasi terbalik.
Saya yakin ada cara yang lebih pendek untuk menghasilkan kurva ...
Penjelasan
Pertama, saya mendefinisikan fungsi untuk memangkas beberapa elemen dari akhir array, karena saya membutuhkannya di beberapa tempat. Itu mengharapkan array dan elemen (di dalam array terpisah) di atas tumpukan.
Sekarang mayoritas kode menentukan ukuran kurva Hilbert yang diperlukan dan mengkonstruksinya sebagai array 2D di mana elemen-elemennya adalah indeks di sepanjang kurva. Saya membangun ini berdasarkan pengamatan berikut:
Pertimbangkan kurva 2x2 Hilbert:
Kurva 4x4 Hilbert adalah:
Jika kita mengurangi nilai minimum dari setiap kuadran (dan memisahkannya sedikit untuk kejelasan visual), kita mendapatkan:
Pola ini berlaku untuk berbagai ukuran. Ini berarti bahwa kita dapat membangun level berikutnya dari level saat ini, dengan menggunakan empat kuadran: a) transpos level saat ini, b) level saat itu sendiri, c) transpos di sepanjang anti-diagonal, d) lagi level saat ini sendiri. Dan kemudian kita mengimbangi mereka 0, 1, 3, 2 kali ukuran level saat ini, masing-masing.
Akhirnya, kami menggunakan kurva indeks Hilbert ini untuk menerapkan transformasi yang sesuai untuk input:
sumber
Python 3,
467434423457451426386374342291304 * 80% * 95% = 231,04 byteCara kerjanya adalah saya membuat kurva Hilbert menggunakan sistem Lindenmayer dan mengikuti instruksi kiri, kanan dan maju di sepanjang deretan string. Mungkin ada banyak cara ini bisa bermain golf lebih baik; terutama di conditional dan dalam membuat berbagai string. (Saya memang berusaha
[" "*p for i in range(p)]
tetapi string tidak mendukung penugasan item (rupanya). Jika saya bisa membuatnya berfungsi, saya bisa menyingkirkan bergabung juga)Sunting: Mem Golf beberapa persyaratan dengan terima kasih Dennis . Dan saya bermain golf di deretan string. Dan perubahan no-byte karena hasilnya keluar ditransposisikan dibandingkan dengan contoh di atas.
Edit: Menerapkan bonus pengupasan spasi.
Edit: Memperbaiki bug dalam kode stripping spasi putih saya selama enam byte lagi
Sunting: Karena jawaban ini tidak mencemari namespace global, saya mendapatkan bonus 5%, menurut wizzwizz4 di sini .
Sunting: Mengubah cara
g
bertambah dan dikurangi. Sekarang menggunakaneval()
danstr.translate
.Edit: Jawaban ini sekarang adalah program, bukan fungsi.
Sunting: Memperbaiki beberapa bug dari golf sebelumnya.
Tidak Disatukan:
sumber
Ruby,
358356344322319 * 80% * 95% = 242,44 byteIni adalah kode Python saya dipindahkan ke Ruby. Saya harus menulis lebih banyak jawaban di Ruby. Ini adalah bahasa yang layak untuk bermain golf.
Sunting: Saya lupa bahwa fungsi tidak perlu disebutkan dalam pertanyaan ini.
Sunting: Karena jawaban ini tidak mencemari namespace global, saya mendapatkan bonus 5%, menurut wizzwizz4 di sini .
Tidak Disatukan:
sumber
JavaScript (ES6), 227 - 20%: 181,6 byte
Mencoba mendapat bonus 5%
241 * 0.8 * 0.95: 183.16 lebih besar
Kurang golf
Uji
sumber
var
s untuk mendapatkan bonus 5%?var s,x,y,u,v,t,p,q,n,h
tidak itu tidak layak @ wizzwizz4var
sebelum penggunaan pertama masing-masing ... Oh, itu lebih buruk.