Hàm minmod là một biến thể của min quen thuộc , xuất hiện trong các sơ đồ độ phân giải cao giới hạn độ dốc cho các phương trình vi phân từng phần. Đưa ra một số độ dốc, nó chọn ra độ dốc phẳng nhất, trong khi chăm sóc các dấu hiệu tương đối giữa các sườn dốc.
Hàm lấy một số lượng tham số tùy ý. Sau đó minmod (x 1 , x 2 , ..., x n ) được định nghĩa là:
- min (x 1 , x 2 , ..., x n ) , nếu tất cả x i đều dương
- max (x 1 , x 2 , ..., x n ) , nếu tất cả x i đều âm
- 0 , nếu không.
Chúng tôi sẽ chỉ xem xét các đầu vào số nguyên, vì điều đó không thực sự ảnh hưởng đến việc triển khai và nên bao quát hơn đối với một số ngôn ngữ (bí truyền).
Viết chương trình hoặc hàm, lấy n số nguyên đã ký (cho n> 0 ) thông qua STDIN, ARGV hoặc đối số hàm (bạn có thể sử dụng một mảng nếu thuận tiện hơn hàm matrixdic) và trả về hoặc in (cho STDOUT) của minmod (a, b) .
Bạn không được sử dụng các hàm min hoặc max tích hợp (và rõ ràng, không có minmod tích hợp nào, nếu bạn thực sự có thể tìm thấy điều đó). Ngoài ra, bạn không được sử dụng bất kỳ chức năng sắp xếp tích hợp nào, ngoại trừ để sắp xếp một số lượng nhỏ các mục cố định (dưới 5).
Nếu ngôn ngữ của bạn không có loại đã ký, bạn có thể sử dụng loại không dấu và giải thích nó là hai loại bổ sung. Ví dụ: nếu ngôn ngữ của bạn chỉ sử dụng các byte không dấu, bạn có thể sử dụng 255
để thay thế -1
và 128
thay thế -128
, v.v.
Đây là mã golf, vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.
Các trường hợp thử nghiệm
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
Bảng xếp hạng
Đoạn trích sau đây tạo ra cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ. Vì vậy, ngay cả khi ngôn ngữ bạn chọn không cho phép bạn chiến thắng toàn bộ thử thách, tại sao bạn không thử giành một vị trí trong danh sách thứ hai?
Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:
# Language Name, N bytes
nơi N
là kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:
# 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>