La fonction minmod est une variante du min familier , qui apparaît dans les schémas haute résolution limitant la pente pour les équations différentielles partielles. Étant donné un certain nombre de pentes, il sélectionne la pente la plus plate, tout en prenant soin des signes relatifs entre les pentes.
La fonction prend un nombre arbitraire de paramètres. Alors minmod (x 1 , x 2 , ..., x n ) est défini comme:
- min (x 1 , x 2 , ..., x n ) , si tous les x i sont strictement positifs
- max (x 1 , x 2 , ..., x n ) , si tous les x i sont strictement négatifs
- 0 sinon.
Nous ne considérerons que les entrées entières, car cela n'affecte pas vraiment l'implémentation et devrait être plus inclusif pour certaines langues (ésotériques).
Écrire un programme ou une fonction, qui prend n entiers signés (pour n> 0 ) via STDIN, ARGV ou argument de fonction (vous pouvez utiliser un tableau si cela est plus pratique qu'une fonction variadique), et retourne ou imprime (à STDOUT) le résultat de minmod (a, b) .
Vous ne devez pas utiliser les fonctions min ou max intégrées (et évidemment, pas de minmod intégré non plus, si vous pouvez réellement le trouver). De plus, vous ne devez utiliser aucune fonction de tri intégrée, sauf pour trier un petit nombre fixe d'éléments (moins de 5).
Si votre langue n'a pas de types signés, vous pouvez utiliser un type non signé et l' interpréter comme un complément à deux. Par exemple, si votre langue n'utilise que des octets non signés, vous pouvez utiliser 255
pour remplacer -1
et 128
pour remplacer -128
, etc.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.
Cas de test
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
Classements
L'extrait de pile suivant génère à la fois un classement régulier et un aperçu des gagnants par langue. Donc, même si la langue de votre choix ne vous permet pas de remporter l'intégralité du défi, pourquoi ne pas essayer de vous arracher une place sur la deuxième liste?
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
# 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>