Şey ... sıralamada etiketli 59 (şu an 60) soru var , fakat basit bir çabukluk yok.
Bu sabit olmalı.
Quicksort'a aşina olmayanlar için , işte bir döküm, Wikipedia’nın izniyle
- Diziden, özet olarak adlandırılan bir öğe seçin .
- Diziyi, pivottan daha az değere sahip tüm elementlerin pivottan önce geleceği şekilde yeniden düzenleyin; Bu bölümlemeden sonra, pivot son konumunda. Buna bölüm işlemi denir.
- Yukarıdaki adımları, daha küçük değerlere sahip elementlerin alt dizisine ve ayrı olarak daha büyük değerlere sahip elementlerin alt dizisine tekrar tekrar uygulayın.
kurallar
Kurallar basit:
- Seçtiğiniz programlama dilinde sayısal bir hızlı bağlantı noktası uygulayın.
- Pivot rasgele veya üç ortanca (1., son ve orta eleman) ile seçilmelidir .
- Programınız eksiksiz bir program veya işlev olabilir.
- STDIN, komut satırı argümanları veya fonksiyon parametrelerini kullanarak girişi alabilirsiniz. Bir dize girişi kullanıyorsanız, giriş boşlukla ayrılmıştır.
- Giriş ondalık ve negatif değerler içerebilir. Ancak, hiçbir kopya olmayacak.
- STDOUT'a veya işlevden döndürerek çıktı alabilirsiniz.
- Dahili sıralama (veya ilişkili sıralama) işlevi veya standart boşluklar yok.
- Liste isteğe bağlı bir uzunluk olabilir.
Bonus # 1: Uzunluğu <= 5 olan listelerde veya alt listelerde, işleri biraz hızlandırmak için ekleme sıralamasını kullanın. Ödül: -15%.
Bonus # 2: Diliniz eşzamanlılığı destekliyorsa, listeyi paralel olarak sıralayın. Alt listelerde bir ekleme düzeni kullanıyorsanız, son ekleme düzeninin paralel olması gerekmez. Yerleşik diş havuzları / iş parçacığı planlamasına izin verilir. Ödül: -15%.
Not: Üçte birinin medyanı bazı insanların kafasını karıştırıyordu, bu yüzden burada (yine) Wikipedia'dan bir açıklama, nezaket:
Pivot için bölmenin ilk, orta ve son elemanının medyanını seçme
puanlama
Bu kod golfü . Temel puan bayt cinsindendir. Bir bonusunuz varsa, bu numaradan% 15 indirim alın. Eğer ikisini birden aldıysan,% 30 indirim yap. Bu gerçekten bir satış perdesi gibi geliyor.
Bu, genel olarak en kısa cevabı bulmakla ilgili değil, her dilde en kısa cevabı bulmakla ilgilidir.
Ve şimdi, büyük afiş snippet'in utanmaz bir kopyası.
Afiş
Bu yazının altındaki Yığın Parçacığı, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.
Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:
## Language Name, N bytes
N, gönderiminizin büyüklüğüdür. Puanınızı yükseltirseniz, başlıkları üstüne vurarak eski skorları başlıkta tutabilirsiniz. Örneğin:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun:
## Perl, 43 + 2 (-p flag) = 45 bytes
Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
/* Configuration */
var QUESTION_ID = 62476; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 41505; // 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 "http://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 "http://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,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\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,
});
else console.log(body);
});
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;
lang = jQuery('<a>'+lang+'</a>').text();
languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang, 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_raw.toLowerCase() > b.lang_raw.toLowerCase()) return 1;
if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) 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="language-list">
<h2>Shortest Solution 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>
<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>
<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>