var QUESTION_ID=62587,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/62587/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}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>
Jawaban:
CJam,
1210 byteIni adalah fungsi anonim, yang mengambil
s p
tumpukan dan meninggalkan hasilnya di tumpukan. Demo onlineDengan terima kasih kepada Martin Büttner untuk 2 byte.
Pembedahan
sumber
{_$@$er}
lebih pendek dua byte.J, 9 byte
Ini adalah kata kerja diad yang menggunakan p dan s sebagai argumen kiri dan kanan. Cobalah online dengan J.js .
Uji coba
Bagaimana ini bekerja?
Katakanlah kita mendefinisikan menetapkan input kiri dan kanan dari contoh via
Kemudian:
Kereta
/:^:2~/:~
adalah kait dari kata kerja/:^:2~
dan/:~
, begitu panggilandieksekusi
Kata keterangan
~
di dalam/:~
adalah refleksif , karena/:
digunakan secara monadik. Demikian panggilandieksekusi
Kata keterangan
~
di dalam/:^:2~
adalah pasif , karena kata kerjanya/:^:2
digunakan secara dua arah. Demikian panggilandieksekusi
Kata keterangannya
^:
adalah kekuatan . Demikian panggilandieksekusi
Menyatukan semuanya, menelepon
dieksekusi
Bagaimana bahwa karya
Diad
/:
adalah kelas dengan menggunakan , yaitu,x /:y
mengembalikan unsur x , diurutkan sesuai dengan nilai-nilai yang sesuaiy
.s /: s
cukup mengurutkan elemen s .(s /: s) /: p
mengurutkan elemen (diurutkan) dari s sesuai dengan nilai yang sesuai dari p .Peningkatan dua kali pada dasarnya menghitung tata cara argumen yang benar.
Jadi,
(s /: s) /: (s /: s) /: p
pilah elemen (sortir) dari s , meniru urutan elemen p .sumber
Mathematica,
3227 byteContoh penggunaan:
Upaya sebelumnya:
sumber
o = Ordering; (Sort@#)[[o@o@#2]] &
Permute
! Penggunaan permutasi yang sangat berguna.J, 17 byte
Ini mengevaluasi ke kata kerja diad (artinya biner). Ini dapat ditimbulkan sebagai berikut:
Penjelasan
Ini mungkin bukan solusi terpendek yang mungkin, tetapi ini adalah pendekatan baru.
sumber
Pyth, 10 byte
Cobalah online: Demonstrasi
Penjelasan
sumber
XQSQSvz
lebih pendek tiga byte.Pyth, 7 byte
Ini adalah program lengkap yang mengharapkan representasi string dari s dan p pada dua baris. Cobalah online.
Bagaimana itu bekerja
sumber
Python 2, 51
sumber
a=sorted
akan memiliki efek yang sama.=
.Mathematica
56 43 3029 byteOrdering@#2
mengembalikan urutan angka dalam pola.Ordering@Ordering@#2
memberikan posisi yang harus ditempati oleh elemen yang diurutkan dalam sumber.Sort[#][[o@o@#2]]&
mengembalikan sumber dalam posisi yang diperlukan, yaitu, mereka yang memiliki urutan relatif sama dengan daftar pola.Pengujian
sumber
CJam, 8 byte
Ini adalah fungsi anonim yang mengharapkan s dan p (paling atas) pada stack dan mendorong s yang disusun ulang sebagai balasannya. Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
J, 13 byte
Saya masih kesulitan membungkus kepala saya di sekitar komposisi kata kerja J, jadi saya merasa seperti itu
@
dan[]
mungkin tidak perlu. Jika beberapa pengguna J yang lebih berpengalaman dapat memberi tahu saya jika ini dapat dikompresi, itu akan bagus. :)Kata kerjanya dapat digunakan sebagai berikut:
Penjelasan
sumber
/:
untuk menghilangkan{
dan@
, untuk 11 byte:/:~@]/:/:@[
/:
, tapi saya belum sempat memperbarui jawabannya (({~/:)&/:{[
).APL,
1712 byteBerkat @ Dennis, ini sekarang sangat elegan.
Inilah solusi 14 byte yang bagus yang tidak menggunakan pengindeksan ganda:
Sayangnya, kami tidak dapat mengindeks array dari dalam kereta di APL.
sumber
Python 2, 48
Gumpalan fungsi yang besar. Ini menggunakan pendekatan terjemahan elemen dari banyak jawaban lain menggunakan kamus.
Input yang
*l
berkilau bintangnya mengharapkan pola dan sumber dalam urutan itu, dan mengubahnya menjadi daftarl
.Memetakan
sorted
mengurutkan kedua daftar, dandict(zip(_))
mengubah sepasang daftar menjadi kamus dengan kunci dari daftar pertama cocok dengan nilai-nilai di urutan kedua, dalam urutan menaik. Jadi, hasilnya adalah bahwai
elemen terbesar ke-2 dari pola tersebut cocok dengani
elemen ke-terbesar dari sumber.Akhirnya, kami mengubah pola (
l[0]
) melalui kamus ini dengan memetakan.get
metodenya.sumber
Bash + coreutils, 55
Input diambil sebagai dua nama file, masing-masing untuk sumber dan pola:
sumber
R, 38 byte
sumber
match
.Ruby, 51 byte
sumber
Haskell, 65 byte
Contoh penggunaan:
[-5,9,4,13,11,-6,0] # [7,-4,1,-8,4,-3,12]
->[11,-5,4,-6,9,0,13]
.Bagaimana itu bekerja:
sumber
R, 37 byte
sumber
TeaScript, 15 byte
Ini mengambil input sebagai array. Penerjemah sedang down karena saya memasang penerjemah baru yang mewah
Penjelasan
sumber
13 9 -6 4 11 -5 0
input sampel. ??Jelly , 6 byte, tantangan tanggal kiriman bahasa
Cobalah online!
Ini mengambil pola, diikuti oleh sumber, sebagai dua argumen terpisah.
Penjelasan
sumber
Haskell, 56 byte
Menentukan fungsi biner
%
. Setiap entri masukp
ditransformasikan menjadi entris
dengan statistik urutan yang sama, yaitu peringkat relatif dalam daftar. Statistik urutanx
inp
ditemukan dengan menghitung elemen-elemen yang lebih kecil dari itu (sort p!!x
menghasilkan yang menjengkelkanMaybe
). Hasilnya diindeks menjadisort s
.Sebuah
zip/lookup
solusi adalah sama panjang, kecuali memberikanJust
nomor.sumber