Inspirado por esta pergunta de @ CᴏɴᴏʀO'Bʀɪᴇɴ .
Retirado da pergunta:
Sua tarefa é simples: dados dois inteiros aeb, output ∏ [a, b]; isto é, o produto do intervalo entre a e b. Você pode pegar aeb em qualquer formato razoável, sejam argumentos para uma função, uma entrada de lista, STDIN, etc. Você pode imprimir em qualquer formato razoável, como um valor de retorno (para funções) ou STDOUT. a sempre será menor que b.
Observe que o final pode ser exclusivo ou inclusivo de b. Eu não sou exigente. ^ _ ^
A diferença para esse desafio é que seremos exigentes quanto ao tipo de faixa. Entrada é uma cadeia da forma [a,b]
, (a,b]
, [a,b)
, ou (a,b)
onde um []
é um limite inclusivo e ()
é um limite exclusivo. Dados os limites explícitos, forneça o produto do intervalo. Além disso, o intervalo de entrada sempre incluirá pelo menos 1 número, o que significa intervalos (3,4)
inválidos e não precisam ser testados.
Casos de teste
[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
Este é um código de golfe , portanto o programa mais curto em bytes vence.
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](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 bytes
Para extrair os números que avaliamos
s[1:-1]
, a string de entrada com as extremidades removidas, o que fornece uma tupla. A idéia é obterrange
essa tupla e levar o produto.O fudging acontece para ajustar os pontos finais. O ponto final superior é fácil, basta cortar o primeiro elemento se a entrada começar com
(
, feito como[s<'[':]
.O outro ponto final é mais complicado. O Python não tem uma maneira limpa de remover condicionalmente o último elemento de uma lista porque
l[:0]
remove a coisa toda. Então, fazemos algo estranho. Modificamos a string da tupla antes que ela seja avaliada para aderência à string"+True"
ou"+False"
dependendo de s terminar em]
ou)
. O resultado é que algo como3,7
se torna o3,7+False
que é3,7
ou o3,7+True
que é3,8
.Alternativo, mais bonito 72:
fonte
Minecraft 15w35a +, tamanho do programa 638 total (veja abaixo)
Igual à minha resposta aqui , mas modificada. Como o Minecraft não tem entrada de string, tomei a liberdade de manter a entrada do placar. Se isso for um problema, considere esta resposta não competitiva.
Isso calcula
PI a,b
com inclusivo / exclusivo especificado pelas duas alavancas. A entrada é fornecida usando estes dois comandos:/scoreboard players set A A {num}
e/scoreboard players set B A {num}
. Lembre-se de usar/scoreboard objectives add A dummy
antes da entrada.Registados com:
{program size} + ( 2 * {input command} ) + {scoreboard command} = 538 + ( 2 * 33 ) + 34 = 638
.Este código corresponde ao seguinte psuedocode:
Baixe o mundo aqui .
fonte
Pitão, 20 bytes
Experimente on-line: Demonstration or Test Suite
Explicação:
fonte
Ruby,
7977 bytes79 bytesUngolfed:
Uso:
fonte
Sério, 31 bytes
Recebe entrada como uma string (entre aspas duplas)
Experimente online (a entrada deve ser inserida manualmente)
Explicação:
fonte
Python 3, 104
Recebe entrada de stdin.
fonte
MATLAB,
8670 bytesIsso também funciona com o Octave . Você pode tentar online aqui . Eu adicionei o código como um script a esse espaço de trabalho, para que você possa digitar
productRange
no prompt e digitar sua entrada, por exemplo'(2,5]'
.Portanto, o código primeiro verifica a entrada para extrair os colchetes e os números juntos:
Isso retorna uma matriz que é composta
[bracket, number, number, bracket]
.A matriz é comparada com
42
, na verdade, qualquer número entre 42 e 90, inclusive. Isso determina que tipo de colchete era, fornecendo 1 se for um colchete exclusivo e 0 se um colchete inclusivo.Por fim, exibimos o produto da faixa necessária:
O produto é de números que começam com o primeiro número
s(2)
mais o primeiro tipo de suportea(1)
(que é 1 se for um suporte exclusivo), variando até e incluindo o segundo números(3)
menos o segundo tipo de suportea(4)
. Isso fornece a faixa inclusiva / exclusiva correta.fonte
Julia, 75 bytes
Esta é uma função anônima que aceita uma string e retorna um número inteiro. Para chamá-lo, dê um nome, por exemplo
f=s->...
.Ungolfed:
fonte
Mathematica, 128 bytes
Isso é muito longo ... Atualmente, estou pensando em uma solução
StringReplace
+RegularExpression
.fonte
PowerShell,
146104 bytesGolpeou 42 bytes alterando a maneira como os números são extraídos da entrada. Uau!
fonte
Japonês,
4341 bytesExperimente online!
fonte
Perl 6 , 60 bytes
Há um pouco de incompatibilidade, porque a maneira como você escreveria o
(2,5]
exemplo no Perl 6 seria2^..5
([2^..5]
também funciona).Então eu tenho que trocar
(2
com[2^
, e,
com..
, então eu tenho que fazerEVAL
isso em um Range.uso:
fonte
CJam, 34 bytes
Experimente online
Explicação:
fonte
JavaScript (ES6), 90 bytes
Explicação
Teste
Mostrar snippet de código
fonte
R,
102104 bytesUngolfed
editar para permitir números negativos [à custa de mais 2 caracteres
fonte
R
(e corrigido na resposta)JavaScript (ES6), 79
Como método anônimo
Snippet de teste
fonte