Inspiré de cette question par @ CᴏɴᴏʀO'Bʀɪᴇɴ .
Tiré de la question:
Votre tâche est simple: étant donné deux entiers a et b, la sortie ∏ [a, b]; c'est-à-dire le produit de la plage entre a et b. Vous pouvez prendre a et b dans n'importe quel format raisonnable, que ce soit des arguments à une fonction, une entrée de liste, STDIN, et cetera. Vous pouvez sortir dans n'importe quel format raisonnable, comme une valeur de retour (pour les fonctions) ou STDOUT. a sera toujours inférieur à b.
Notez que la fin peut être exclusive ou inclusive de b. Je ne suis pas pointilleux. ^ _ ^
La différence pour ce défi est que nous allons être pointilleux sur le type de gamme. Entrée est une chaîne de la forme [a,b]
, (a,b]
, [a,b)
, ou (a,b)
où []
est une limite inclusive et ()
est une limite exclusive. Compte tenu des limites explicites, fournir le produit de la gamme. De plus, la plage d'entrée comprendra toujours au moins 1 chiffre, ce qui signifie que les plages comme ne (3,4)
sont pas valides et n'ont pas besoin d'être testées.
Cas de test
[a,b) => result
[2,5) => 24
[5,10) => 15120
[-4,3) => 0
[0,3) => 0
[-4,0) => 24
[a,b] => result
[2,5] => 120
[5,10] => 151200
[-4,3] => 0
[0,3] => 0
[-4,-1] => 24
(a,b] => result
(2,5] => 60
(5,10] => 30240
(-4,3] => 0
(0,3] => 6
(-4,-1] => -6
(a,b) => result
(2,5) => 12
(5,10) => 3024
(-4,3) => 0
(0,3) => 2
(-4,0) => -6
Il s'agit d'un code-golf , donc le programme le plus court en octets l'emporte.
Classement
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) en tant que liste des solutions les plus courtes par langue et b) en tant que classement général.
Pour vous assurer que votre réponse s'affiche, 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 barrant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=66285,OVERRIDE_USER=44713;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/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>
Python 2, 72 octets
Pour extraire les nombres que nous évaluons
s[1:-1]
, la chaîne d'entrée avec les extrémités supprimées, ce qui donne un tuple. L'idée est de récupérerrange
ce tuple et de prendre le produit.Le fudging se produit pour ajuster les points de terminaison. Le point final supérieur est facile, il suffit de couper le premier élément si l'entrée commence par
(
, faites comme[s<'[':]
.L'autre point final est plus délicat. Python n'a pas de méthode propre pour supprimer conditionnellement le dernier élément d'une liste car
l[:0]
supprime le tout. Donc, nous faisons quelque chose de bizarre. Nous modifions la chaîne de tuple avant qu'elle ne soit évaluée pour clouer sur la chaîne"+True"
ou"+False"
selon que s se termine par]
ou)
. Le résultat est que quelque chose comme3,7
devient ce3,7+False
qui est3,7
ou3,7+True
ce qui est3,8
.Alterné, plus joli 72:
la source
Minecraft 15w35a +, taille du programme 638 au total (voir ci-dessous)
Identique à ma réponse ici , mais modifiée. Comme Minecraft n'a pas d'entrée de chaîne, j'ai pris la liberté de conserver l'entrée du tableau de bord. Si c'est un problème, considérez cette réponse comme non compétitive.
Celui-ci est calculé
PI a,b
avec inclusif / exclusif spécifié par les deux leviers. L'entrée est donnée en utilisant ces deux commandes:/scoreboard players set A A {num}
et/scoreboard players set B A {num}
. N'oubliez pas d'utiliser/scoreboard objectives add A dummy
avant la saisie.A marqué en utilisant:
{program size} + ( 2 * {input command} ) + {scoreboard command} = 538 + ( 2 * 33 ) + 34 = 638
.Ce code correspond au pseudo-code suivant:
Téléchargez le monde ici .
la source
Pyth, 20 octets
Essayez-le en ligne: démonstration ou suite de tests
Explication:
la source
Rubis,
7977 octets79 octetsNon golfé:
Usage:
la source
Sérieusement, 31 octets
Prend l'entrée sous forme de chaîne (entourée de guillemets doubles)
Essayez-le en ligne (l'entrée doit être entrée manuellement)
Explication:
la source
Python 3, 104
Prend l'entrée de stdin.
la source
MATLAB,
8670 octetsCela fonctionne également avec Octave . Vous pouvez essayer en ligne ici . J'ai ajouté le code en tant que script à cet espace de travail, vous pouvez donc simplement entrer
productRange
à l'invite, puis entrez votre entrée, par exemple'(2,5]'
.Ainsi, le code analyse d'abord l'entrée pour extraire les crochets et les nombres ensemble:
Cela renvoie un tableau qui est fait de
[bracket, number, number, bracket]
.Le tableau est comparé à
42
, en fait, n'importe quel nombre entre 42 et 90 inclus fera l'affaire. Cela détermine de quel type de parenthèse il s'agit, en donnant un 1 s'il s'agit d'une parenthèse exclusive et un 0 s'il s'agit d'une parenthèse inclusive.Enfin, nous affichons le produit de la gamme souhaitée:
Le produit est composé de nombres commençant par le premier nombre
s(2)
plus le premier type de parenthèsea(1)
(qui est un 1 s'il s'agit d'une parenthèse exclusive), allant jusqu'au deuxième nombre inclus,s(3)
moins le deuxième type de parenthèsea(4)
. Cela donne la gamme inclusive / exclusive correcte.la source
Julia, 75 octets
Il s'agit d'une fonction anonyme qui accepte une chaîne et renvoie un entier. Pour l'appeler, donnez-lui un nom, par exemple
f=s->...
.Non golfé:
la source
Mathematica, 128 octets
C'est trop long ... Je pense actuellement à une solution
StringReplace
+RegularExpression
.la source
PowerShell,
146104 octetsGolfed off 42 octets en modifiant la façon dont les nombres sont extraits de l'entrée. Courtiser!
la source
Japt,
4341 octetsEssayez-le en ligne!
la source
Perl 6 , 60 octets
Il y a un peu de mauvaise correspondance car la façon dont vous écririez l'
(2,5]
exemple en Perl 6 serait2^..5
([2^..5]
fonctionne également).Je dois donc échanger
(2
avec[2^
, et,
avec..
, puis je dois le faireEVAL
dans une plage.usage:
la source
CJam, 34 octets
Essayez-le en ligne
Explication:
la source
JavaScript (ES6), 90 octets
Explication
Tester
Afficher l'extrait de code
la source
R,
102104 octetsNon golfé
modifier pour autoriser les nombres négatifs [au détriment de 2 caractères supplémentaires
la source
R
(et corrigé dans la réponse)JavaScript (ES6), 79
Comme méthode anonyme
Extrait de test
la source