Fungsi minmod adalah varian dari min yang familier , yang muncul dalam skema resolusi tinggi yang membatasi-lereng untuk persamaan diferensial parsial. Diberikan sejumlah lereng, ia mengambil kemiringan yang paling rata, sambil menjaga tanda relatif di antara lereng.
Fungsi ini mengambil sejumlah parameter yang berubah-ubah. Kemudian minmod (x 1 , x 2 , ..., x n ) didefinisikan sebagai:
- min (x 1 , x 2 , ..., x n ) , jika semua x i benar-benar positif
- maks (x 1 , x 2 , ..., x n ) , jika semua x i benar-benar negatif
- 0 , jika tidak.
Kami hanya akan mempertimbangkan input integer, karena itu tidak benar-benar mempengaruhi implementasi dan harus lebih inklusif untuk beberapa bahasa (esoterik).
Tulis sebuah program atau fungsi, yang mengambil n bilangan bulat yang ditandatangani (untuk n> 0 ) melalui STDIN, ARGV atau argumen fungsi (Anda dapat menggunakan array jika itu lebih nyaman daripada fungsi variadic), dan mengembalikan atau mencetak (ke STDOUT) hasilnya dari minmod (a, b) .
Anda tidak boleh menggunakan fungsi min atau maks bawaan (dan jelas, tidak ada minmod bawaan juga, jika Anda dapat menemukannya). Selain itu, Anda tidak harus menggunakan built-in menyortir fungsi, kecuali untuk mengurutkan tetap sejumlah kecil item (kurang dari 5).
Jika bahasa Anda tidak memiliki tipe yang ditandatangani, Anda dapat menggunakan tipe yang tidak ditandatangani dan menafsirkannya sebagai pelengkap dari dua bahasa. Misalnya, jika bahasa Anda hanya menggunakan byte yang tidak ditandatangani, Anda dapat menggunakannya 255
untuk bertahan -1
dan 128
bertahan -128
, dll.
Ini kode golf, jadi jawaban tersingkat (dalam byte) menang.
Uji Kasus
Input Output
2 2
-3 -3
0 0
3 -5 0
2 4 1 1
0 1 2 0
-1 1 2 0
-4 -2 -3 -2 -2
-5 0 -1 0
1 0 -1 0
Papan peringkat
Cuplikan Stack berikut menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa. Jadi, bahkan jika bahasa pilihan Anda tidak membiarkan Anda memenangkan seluruh tantangan, mengapa tidak mencoba merebut tempat di daftar kedua?
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){$.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(e){answers.push.apply(answers,e.items);if(e.has_more)getAnswers();else process()}})}function shouldHaveHeading(e){var t=false;var n=e.body_markdown.split("\n");try{t|=/^#/.test(e.body_markdown);t|=["-","="].indexOf(n[1][0])>-1;t&=LANGUAGE_REG.test(e.body_markdown)}catch(r){}return t}function shouldHaveScore(e){var t=false;try{t|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(n){}return t}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading);answers.sort(function(e,t){var n=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[Infinity])[0],r=+(t.body_markdown.split("\n")[0].match(SIZE_REG)||[Infinity])[0];return n-r});var e={};var t=1;answers.forEach(function(n){var r=n.body_markdown.split("\n")[0];var i=$("#answer-template").html();var s=r.match(NUMBER_REG)[0];var o=(r.match(SIZE_REG)||[0])[0];var u=r.match(LANGUAGE_REG)[1];var a=getAuthorName(n);i=i.replace("{{PLACE}}",t++ +".").replace("{{NAME}}",a).replace("{{LANGUAGE}}",u).replace("{{SIZE}}",o).replace("{{LINK}}",n.share_link);i=$(i);$("#answers").append(i);e[u]=e[u]||{lang:u,user:a,size:o,link:n.share_link}});var n=[];for(var r in e)if(e.hasOwnProperty(r))n.push(e[r]);n.sort(function(e,t){if(e.lang>t.lang)return 1;if(e.lang<t.lang)return-1;return 0});for(var i=0;i<n.length;++i){var s=$("#language-template").html();var r=n[i];s=s.replace("{{LANGUAGE}}",r.lang).replace("{{NAME}}",r.user).replace("{{SIZE}}",r.size).replace("{{LINK}}",r.link);s=$(s);$("#languages").append(s)}}var QUESTION_ID=42079;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/;var NUMBER_REG=/\d+/;var LANGUAGE_REG=/^#*\s*([^,]+)/
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>Language<td>Size<tbody id=answers></table></div><div id=language-list><h2>Winners by Language</h2><table class=language-list><thead><tr><td>Language<td>User<td>Score<tbody id=languages></table></div><table style=display:none><tbody id=answer-template><tr><td>{{PLACE}}</td><td>{{NAME}}<td>{{LANGUAGE}}<td>{{SIZE}}<td><a href={{LINK}}>Link</a></table><table style=display:none><tbody id=language-template><tr><td>{{LANGUAGE}}<td>{{NAME}}<td>{{SIZE}}<td><a href={{LINK}}>Link</a></table>