Продукт в ассортименте


39

Ваша задача проста: дано два целых числа aи b, вывод ∏[a,b]; то есть произведение диапазона между aи b. Вы можете взять aи bв любом разумном формате, будь то аргументы функции, ввод списка, STDIN и так далее. Вы можете выводить данные в любом приемлемом формате, например, возвращаемое значение (для функций) или STDOUT. aвсегда будет меньше чем b.

Обратите внимание, что конец может быть исключительным или включающим b. Я не требователен ^ _ ^

Контрольные примеры

[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

Это , поэтому выигрывает самая короткая программа в байтах.


Leaderboard

Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.

Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:

## Language Name, N bytes

где Nразмер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:

## Perl, 43 + 2 (-p flag) = 45 bytes

Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


1
Я отвечу на это в TI-BASIC завтра.
SuperJedi224

@ SuperJedi224 Удачи;)
Конор О'Брайен

Может ли вход восприниматься как b, a?
FlipTack

@FlipTack да, вы можете
Конор О'Брайен

Ответы:


36

Желе, 2 байта

rP

Принимает два числа в качестве аргументов командной строки. Попробуйте онлайн.

Обратите внимание, что это всеобъемлющий диапазон. Для стоимости байта (3 байта) мы можем сделать это эксклюзивным:

’rP

Попробуйте онлайн. Обратите внимание, что аргументы должны быть приведены в порядке b aдля этой версии.

объяснение

включительно

a rP b
  r   dyadic atom, creates inclusive range between a and b
   P  computes product of the list

исключающее

b ’rP a
  ’   decrement b (by default, monadic atoms in dyadic chains operate on the left argument)
   r  range
    P product 

10
Я сомневаюсь, что это можно победить ...
kirbyfan64sos

14
@ kirbyfan64sos ты желе?
Аарон

30

ArnoldC , 522 511 байт

Первый пост на Codegolf!

Мне было весело делать это. Эксклюзивный ассортимент.

LISTEN TO ME VERY CAREFULLY f
I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE a
I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE b
GIVE THESE PEOPLE AIR
HEY CHRISTMAS TREE r
YOU SET US UP 1
HEY CHRISTMAS TREE l
YOU SET US UP 1
STICK AROUND l
GET TO THE CHOPPER r
HERE IS MY INVITATION r
YOU'RE FIRED a
ENOUGH TALK
GET TO THE CHOPPER a
HERE IS MY INVITATION a
GET UP 1
ENOUGH TALK
GET TO THE CHOPPER l
HERE IS MY INVITATION b
LET OFF SOME STEAM BENNET a
ENOUGH TALK
CHILL
I'LL BE BACK r
HASTA LA VISTA, BABY

Пояснения (спасибо Биджан):

DeclareMethod f
        MethodArguments a
        MethodArguments b
        NonVoidMethod
        DeclareInt r
        SetInitialValue 1
        DeclareInt l
        SetInitialValue 1
        WHILE l
                AssignVariable r
                        SetValue r
                        MultiplicationOperator a
                EndAssignVariable
                AssignVariable a
                        SetValue a
                        + 1
                EndAssignVariable
                AssignVariable l
                        SetValue b
                        > a
                EndAssignVariable
        EndWhile
        Return r
EndMethodDeclaration

Хахаха ... Я все еще смеюсь
rpax

но объяснение было бы здорово
rpax

Здесь это преобразовано и отступ с использованием этого в качестве ссылки
Биджан

Какой переводчик вы используете?
lirtosiast

Официальный один . Вы правы насчет @NO PROBLEMO и 1 (не 0;))
Зихо

18

Python, 30 байт

f=lambda a,b:a>b or a*f(a+1,b)

Инклюзивный ассортимент. Повторно умножается на левую конечную точку и увеличивает ее до тех пор, пока она не станет выше, чем правая конечная точка, в этом случае это пустое произведение 1 (как True).


13

Minecraft 15w35a +, размер программы 456 всего (см. Ниже)

enter image description here

Это рассчитывает PI [a,b). Ввод осуществляется с помощью этих двух команд: /scoreboard players set A A {num}и /scoreboard players set B A {num}. Не забудьте использовать /scoreboard objectives add A dummyперед вводом.

Забил с помощью: {program size} + ( 2 * {input command} ) + {scoreboard command} = 356 + ( 2 * 33 ) + 34 = 456.

Этот код соответствует следующему psuedocode:

R = 1
loop:
  R *= A
  A += 1
  if A == B:
    print R
    end program

Скачать мир здесь .


Размер программы учитывается этим методом оценки .
GamrCorps

Черт возьми, ты добрался до этого раньше, чем я. : Я
Эддисон Крамп

Необходимо указать версию снимка, то есть 15w46aили что - то.
Эддисон Крамп

Minecraft: D LoL, игра в гольф в Minecraft: D
username.ak

12

TI-BASIC, 9 байтов

Input A
prod(randIntNoRep(A,Ans

Берет один номер из Ans другого, а другой из приглашения.

Также 9 байтов, принимая входные данные в виде списка из Ans:

prod(randIntNoRep(min(Ans),max(Ans

1
Мне потребовалось некоторое время, чтобы выяснить для себя, поэтому я опубликую это здесь: каждая функция в TI-BASIC - один байт.
Фонд Моники Иск

3
@QPaysTaxes Многие из них делают, но не все. %это два байта.
mbomb007

12

Python 2, 44 38 байт

lambda l:reduce(int.__mul__,range(*l))

Довольно очевидная анонимная функция ответа.

РЕДАКТИРОВАТЬ: Спасибо xnor за сохранение 6 байтов с некоторыми функциями, которые я не знал.


1
Вы можете использовать встроенный int.__mul__, который работает вместо вашей лямбды. Эти два числа x,yтакже могут быть записаны в распакованном виде *l.
xnor

36
Вычеркнуто 44 все еще выглядит как 44.
спагетто

10

Pyth, 5 байт

*FrQE

У Pyth нет продукта, поэтому мы уменьшаем * в пределах диапазона.

Использует эксклюзивный ассортимент.


4
*FrFQэквивалентно, но с другим входом, просто для удовольствия :)
FryAmTheEggman


8

Mathematica, 15 байт

1##&@@Range@##&

Более короткое решение, которое работает только для неотрицательных целых чисел:

#2!/(#-1)!&

3
Еще короче для неотрицательных целых чисел:#2!#/#!&
Андерс Касорг



7

Japt , 7 байт

Легкие испытания, подобные этому, всегда веселые. :)

UoV r*1

Попробуйте онлайн!

объяснение

UoV r*1  // Implicit: U = first input, V = second input
UoV      // Generate range [U,V).
    r*1  // Reduce by multiplication, starting at 1.

Ничего себе, это кажется жалким по сравнению с другими ответами до сих пор. Мне нужно еще поработать над Джаптом ...


Объяснение? : 3
Конор О'Брайен

@ CᴏɴᴏʀO'Bʀɪᴇɴ Готово :)
ETHproductions

2
Woot, 5K респ! : D
ETHпродукция

6

Haskell, 19 17 байт

a#b=product[a..b]

Пример использования: 2#5-> 120.


Вы можете включить б.
xnor

@xnor: Упс, должно быть, не заметили этого. Благодарность!
Nimi

Я не уверен, но я думаю, что PPCG позволяет ответы в виде выражений.
гордый haskeller

@proudhaskeller: по умолчанию разрешены полные программы и функции. Фрагменты, выражения и т. Д. Должны быть явно разрешены в описании задачи.
Ними,

5

Пролог, 45 байт

Код:

p(A,B,C):-A=B,C=A;D is A+1,p(D,B,E),C is A*E.

Разъяснение:

p(A,B,C):-A=B,      % A is unifiable with B
          C=A       % Unify C with A
          ;         % OR
          D is A+1, % D is the next number in the range
          p(D,B,E), % Recurse on the range after the first element
          C is A*E. % The result C is the product of the first element and the result 
                      of the recursion

Пример:

p(5,10,X).
X = 151200

p(-4,-1,X).
X = 24

5

Октава, 15 байт

@(a,b)prod(a:b)

Непосредственная. Использует включенный диапазон.


5

CJam, 6 19 18 10 байт

Спасибо Деннису и РетоКоради за помощь в игре в гольф!

q~1$-,f+:*

Попробуйте онлайн

Принимает вход как a b. Рассчитывает PI [a,b).

Примечание: эта программа 6 байт, и работает только тогда , когда aи bположительны.

q~,>:*

Попробуйте онлайн

Принимает вход как a b. Рассчитывает PI [a,b).


q~{_)_W$<}g;]:*сохраняет три байта.
Деннис

4
q~1$-,f+:*для 10 байтов.
Рето Коради

5

Утилиты Bash + GNU, 13

seq -s* $@|bc

Предполагается, что в текущем каталоге нет файлов, имена которых начинаются с -s . Начало и конец (включительно) передаются как параметры командной строки.

Это просто создает последовательность от начала до конца, разделенную *, затем конвейерами bcдля арифметической оценки.


2
Но я начинаю все свои файлы с -s! : P
Конор О'Брайен

5

MATL (неконкурентный), 4 байта

Включенный диапазон

2$:p

Попробуйте онлайн!

объяснение

2$: % Implicitly grab two input arguments and create the array input1:input2
p   % Take the product of all array elements

Спасибо @Don Muesli за помощь в освоении всей этой MATL-игры.


Хороший ответ! Поскольку язык датирует задание, вы можете опубликовать ответ, но, возможно, вам следует указать, что он не имеет права на победу
Луис Мендо

Разве &:pбайт не короче?
DJMcMayhem

@DrGreenEggsandIronMan да, так что я думаю, что он не конкурирует в любом случае, поэтому я мог сократить его, но в то время, когда я опубликовал свой ответ, у нас не было&
Suever


4

Ruby, 22 bytes

->i,n{(i..n).reduce:*}

Ungolfed:

-> i,n {
  (i..n).reduce:* # Product of a range
}

Usage:

->i,n{(i..n).reduce:*}[5,10]
=> 151200

1
I was thinking about this same solution last night but didn't have the time to write it up.
Alexis Andersen

4

C, 32 bytes

For [a,b):

f(a,b){return a-b?a*f(a+1,b):1;}

For [a,b] (On Katenkyo's suggestions, 32 bytes again) :

f(a,b){return a<b?a*f(a+1,b):b;}

1
Я нашел другое решение в C, если вам интересно, это также 32 байта f(a,b){return a<b?a*f(a+1,b):b;}. :)
Katenkyo

-5 байт в gcc с a=...вместоreturn...

4

05AB1E, 2 bytes (non-competing)

Код:

ŸP

Объяснение:

Ÿ   # Inclusive range [input, ..., input]
 P  # Total product of the list
    # Implicit printing top of the stack

4

J, 8 байт

[:%/!@<:

использование

>> f =: [:%/!@<:
>> f 10 5
<< 15120

где >>находится STDIN и<< is STDOUT.

объяснение

Это вычисляется ∏[a,b]как (b-1)!/(a-1)!.

minus_one =: <:
factorial =: !
of        =: @
monadic   =: [:
division  =: %/
f =: monadic division factorial of minus_one

Предыдущая 13-байтовая версия

Написано, когда я понятия не имел, что Jвообще такое: p

*/(}.[:>:i.)/

Использование:

   */(}.[:>:i.)/ 5 10
30240

Объяснение:

*/            NB. multiply over
  (
   }.         NB. remove [the first x items] from
     [:>:     NB. increment all of
         i.   NB. the numbers from 0 to [y-1]
           )
            / NB. insert the above code into the following numbers

Детальное объяснение:

i.10 would produce 0 1 2 3 4 5 6 7 8 9

>:i.10 would make it 1 2 3 4 5 6 6 7 8 9 10

the [: is used to make the ">:" take only one argument (a monad)
because if it takes two arguments, it is a different function.
so [:>:i.10 becomes 1 2 3 4 5 6 7 8 9 10

}. means take away the first [x] items from the following list,
so 5}.1 2 3 4 5 6 7 8 9 10 becomes 6 7 8 9 10

the two slashes "/" in the code are actually the same
for example, */6 7 8 9 10 becomes 6*7*8*9*10

1
Отличное объяснение!
wizzwizz4

2
Вы можете использовать [:*/]+i.@-для 10 байт , если вы берете диапазон , [a, b)как , b ([:*/]+i.@-) aнапример , что 10 ([:*/]+i.@-) 5выходы 15120.
миль

@miles Этот ответ был написан, когда я совсем не знал J: p
Leaky Nun

Ваше 8-байтовое решение не сработает, если ни один из аргументов не будет положительным.
Деннис

4

JavaScript (ES6), 22 байта

I can't believe none of us JS golfers thought to use recursion...

a=>F=b=>a-b?b*F(b-1):a

Assign to a variable with e.g. var q = a=>F=b=>a-b?b*F(b-1):a, then call like q(2)(5).


4

Brachylog, 3 bytes

⟦₃×

Try it online!

Input is passed as [A,B]. The range is exclusive of B, but could be made inclusive by replacing the with .


3
Welcome to PPCG! Nowadays, it doesn't matter when languages are made, so this answer is perfectly competitive. Hope you enjoy your stay!
Conor O'Brien

Ah, good to know! I guess I've been looking at too many old challenges with answers sorted by votes.
Unrelated String

@UnrelatedString By the way, if you see those non-competing messages it's perfectly fine to edit them out.
Esolanging Fruit


3

Python, 52 bytes

Very simple code; a bit too long.

def p(a,b):
 t=1
 for i in range(a,b):t*=i
 return t

3

JavaScript (ES6), 45 41 bytes

Saved 4 bytes thanks to @Cᴏɴᴏʀ O'Bʀɪᴇɴ

(a,b)=>[...Array(b-a)].reduce(x=>x*a++,1)

Seems a little too long...

(a,b)=>           // Define an anonymous function that takes parameters a and b, and returns:
[...Array(b-a)]   // An array of b-a items,
.reduce(          // Reduced by
x=>x*a++          //  multiplying each item with the previous,
,1)               //  starting at 1.

That works? kudos! I don't think you need the y in the reduce mapping, so cut it off at x=>x*a++
Conor O'Brien

@CᴏɴᴏʀO'Bʀɪᴇɴ Thanks, that trick works really well!
ETHproductions

2
you should add a semicolon at the end. for the score.
Seadrus

3

Julia, 16 bytes

f(a,b)=prod(a:b)

Note: if the range object a:b (which is literally stored as a start value and a stop value, and internally includes a "increment by 1 on each step" value) is permitted as the input, then just 4 bytes are required: prod.


3

Perl 6, 14 bytes

{[*] $^a..$^b}

usage:

my &code = {[*] $^a..$^b}
say code |$_ for (2,5),(5,10),(-4,3),(0,3),(-4,-1);
# 120
# 151200
# 0
# 0
# 24

say chars code 1,10000;
# 35660

If you wanted to exclude the last element use ..^ instead of ..

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.