Inspirado en esta pregunta por @ CᴏɴᴏʀO'Bʀɪᴇɴ .
Tomado de la pregunta:
Su tarea es simple: dados dos enteros a y b, salida ∏ [a, b]; es decir, el producto del rango entre a y b. Puede tomar ayb en cualquier formato razonable, ya sean argumentos de una función, una entrada de lista, STDIN, etc. Puede imprimir en cualquier formato razonable, como un valor de retorno (para funciones) o STDOUT. a siempre será menor que b.
Tenga en cuenta que el final puede ser exclusivo o inclusivo de b. Yo no soy exigente. ^ _ ^
La diferencia para este desafío es que vamos a ser exigentes con el tipo de rango. Entrada es una cadena de la forma [a,b]
, (a,b]
, [a,b)
, o (a,b)
donde un []
es un límite incluido y ()
es un límite exclusivo. Dados los límites explícitos, proporcione el producto del rango. Además, el rango de entrada siempre incluirá al menos 1 número, lo que significa que los rangos como (3,4)
no son válidos y no necesitan ser probados.
Casos de prueba
[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 es un código de golf , por lo que gana el programa más corto en bytes.
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntuación, se puede mantener viejas cuentas en el título, golpeándolos a través. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](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 extraer los números que evaluamos
s[1:-1]
, la cadena de entrada con los extremos eliminados, lo que da una tupla. La idea es obtenerrange
esta tupla y tomar el producto.La falsificación pasa para ajustar los puntos finales. El punto final superior es fácil, solo corte el primer elemento si la entrada comienza con
(
, hecho como[s<'[':]
.El otro punto final es más complicado. Python no tiene una forma limpia de eliminar condicionalmente el último elemento de una lista porque
l[:0]
elimina todo. Entonces, hacemos algo raro. Modificamos la cadena de tupla antes de que se evalúe para agregarla"+True"
o"+False"
dependiendo de si s termina en]
o)
. El resultado es que algo así se3,7
convierte en3,7+False
cuál es3,7
o3,7+True
cuál es3,8
.Alterno, más bonito 72:
fuente
Minecraft 15w35a +, tamaño total del programa 638 (ver más abajo)
Igual que mi respuesta aquí , pero modificado. Dado que Minecraft no tiene entrada de cadena, me tomé la libertad de mantener la entrada del marcador. Si eso es un problema, considere esta respuesta no competitiva.
Esto se calcula
PI a,b
con inclusivo / exclusivo especificado por las dos palancas. La entrada se proporciona mediante el uso de estos dos comandos:/scoreboard players set A A {num}
y/scoreboard players set B A {num}
. Recuerde usar/scoreboard objectives add A dummy
antes de la entrada.Calificado usando:
{program size} + ( 2 * {input command} ) + {scoreboard command} = 538 + ( 2 * 33 ) + 34 = 638
.Este código corresponde al siguiente psuedocódigo:
Descarga el mundo aquí .
fuente
Pyth, 20 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación:
fuente
Ruby,
7977 bytes79 bytesSin golf:
Uso:
fuente
En serio, 31 bytes
Toma la entrada como una cadena (entre comillas dobles)
Pruébelo en línea (la entrada debe ingresarse manualmente)
Explicación:
fuente
Pitón 3, 104
Toma información de stdin.
fuente
MATLAB,
8670 bytesEsto también funciona con Octave . Puedes probar en línea aquí . He agregado el código como un script a ese espacio de trabajo, por lo que puede ingresar
productRange
en el indicador y luego ingresar su entrada, por ejemplo'(2,5]'
.Entonces, el código primero escanea la entrada para extraer los corchetes y los números juntos:
Esto devuelve una matriz que está hecha de
[bracket, number, number, bracket]
.La matriz se compara con
42
, en realidad cualquier número entre 42 y 90 inclusive lo hará. Esto determina qué tipo de corchete era, dando un 1 si es un corchete exclusivo y un 0 si es un corchete inclusivo.Finalmente, mostramos el producto del rango requerido:
El producto es de números que comienzan con el primer número
s(2)
más el primer tipo de paréntesisa(1)
(que es un 1 si es un paréntesis exclusivo), que van hasta e incluyen el segundo números(3)
menos el segundo tipo de paréntesisa(4)
. Esto proporciona el rango inclusivo / exclusivo correcto.fuente
Julia, 75 bytes
Esta es una función anónima que acepta una cadena y devuelve un entero. Para llamarlo, dale un nombre, por ejemplo
f=s->...
.Sin golf:
fuente
Mathematica, 128 bytes
Esto es demasiado largo ... Actualmente estoy pensando en una solución
StringReplace
+RegularExpression
.fuente
PowerShell,
146104bytesGolfó 42 bytes cambiando cómo se extraen los números de la entrada. ¡Cortejar!
fuente
Japt,
4341 bytesPruébalo en línea!
fuente
Perl 6 , 60 bytes
Hay un poco de falta de coincidencia porque la forma en que escribiría el
(2,5]
ejemplo en Perl 6 sería2^..5
([2^..5]
también funciona).Entonces tengo que intercambiar
(2
con[2^
, y,
con..
, luego tengo queEVAL
hacerlo en un Rango.uso:
fuente
CJam, 34 bytes
Pruébalo en línea
Explicación:
fuente
JavaScript (ES6), 90 bytes
Explicación
Prueba
Mostrar fragmento de código
fuente
R,
102104 bytesSin golf
editar para permitir números negativos [a expensas de 2 caracteres más
fuente
R
(y corregido en respuesta)JavaScript (ES6), 79
Como un método anónimo
Fragmento de prueba
fuente