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


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

Це , тому виграє найкоротша програма в байтах.


Таблиця лідерів

Фрагмент стека внизу цієї публікації генерує каталог з відповідей а) як список найкоротших варіантів для кожної мови та б) як загальний таблиця лідерів.

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

## 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 Удачі;)
Conor O'Brien

Чи можна ввести дані як такі b, a?
FlipTack

@FlipTack так можна
Conor O'Brien

Відповіді:


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
Я сумніваюсь, що це можна
побороти

14
@ kirbyfan64так, ти желе?
Аарон

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

Тут він перетворюється та відступає, використовуючи це як посилання
Біджан

Якого перекладача ви використовуєте?
lirtosiast

Офіційний один . Ви маєте рацію щодо @NO PROBLEMO та 1 (не 0;))
Zycho

18

Пітон, 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
ім'я користувача.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))

Досить очевидна відповідь анонімної функції.

EDIT: Завдяки xnor за збереження 6 байт з деякими функціями, яких я не знав.


1
Ви можете використовувати вбудований int.__mul__, який працює замість вашої лямбда. Два числа x,yтакож можна записати розпакованими як *l.
xnor

36
Закреслений 44 все ще схожий на 44.
спагето

10

Pyth, 5 байт

*FrQE

У Pyth немає продукту, тому ми зменшуємо * за діапазоном.

Використовує ексклюзивний асортимент.


4
*FrFQеквівалентний, але з різним вкладом, просто для задоволення :)
FryAmTheEggman


8

Математика, 15 байт

1##&@@Range@##&

Коротше рішення, яке працює лише для невід'ємних цілих чисел:

#2!/(#-1)!&

3
Ще коротше для невід’ємних цілих чисел:#2!#/#!&
Anders Kaseorg

8

JavaScript (ES6), 34 байти

(a,b)=>eval("for(c=a;a<b;)c*=++a")

Іноді найпростіша відповідь найкраща! Просто forпетля всередині eval. Інклюзивний асортимент


Ого. Це вражає!
Conor O'Brien

О, чоловіче, я подумав про це точне рішення, намагаючись лише зараз шахти в гольф ... +1
ETHproductions

1
Цей ще коротший з 25 символами: f=(a,b)=>a<b?a*f(a+1,b):1
Маттіас Бертшер


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.

Нічого собі, це здається жалюгідним порівняно з іншими відповідями поки що. Мені потрібно ще трохи попрацювати над Japt ...


Пояснення? : 3
Conor O'Brien

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

2
Woot, 5K представників! : D
ETHproductions

6

Haskell, 19 17 байт

a#b=product[a..b]

Приклад використання: 2#5-> 120.


Вам дозволяється вибрати b.
xnor

@xnor: Ups, мабуть, це не помітили. Спасибі!
німі

Я не впевнений, але я думаю, що 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

CJam, 6 19 18 10 байт

Дякуємо Деннісу та RetoKoradi за допомогу в гольфі!

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
Conor O'Brien

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

Рубін, 22 байти

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

Безголовки:

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

Використання:

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

1
Я думав про це саме рішення минулої ночі, але не встиг його написати.
Олексій Андерсен

4

C, 32 байти

Для [a,b):

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

Для [a,b](За пропозиціями Катенкіо, знову 32 байти):

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 байти (не конкуруючий)

Код:

Ÿ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 і<< STDOUT.

Пояснення

Він обчислюється ∏[a,b]як (b-1)!/(a-1)!.

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

Попередня 13-байтна версія

Написав, коли я не мав уявлення, що Jнавіть таке: с

*/(}.[:>: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на всіх: р
Дірявий Nun

Ваше 8-байтне рішення не працюватиме, якщо жоден аргумент не є позитивним.
Денніс

4

JavaScript (ES6), 22 байти

Я не можу повірити, що ніхто з нас, гольфістів JS, не думав використовувати рекурсію ...

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

Призначте змінну з, наприклад var q = a=>F=b=>a-b?b*F(b-1):a, тоді дзвоніть як q(2)(5).


4

Брахілог , 3 байти

⟦₃×

Спробуйте в Інтернеті!

Вхід передається як [A,B]. Діапазон ексклюзиву В, але може бути включено шляхом заміни з .


3
Ласкаво просимо до PPCG! Сьогодні не має значення, коли викладаються мови, тому ця відповідь є абсолютно конкурентоспроможною. Сподіваюся, вам сподобається ваше перебування!
Conor O'Brien

Ах, добре знати! Я думаю, я переглядав занадто багато старих викликів з відповідями, відсортованими за голосами.
Непов’язана струна

@UnrelatedString До речі, якщо ви бачите ці неконкурентні повідомлення, їх цілком чудово відредагувати.
Esolanging Fruit


3

Пітон, 52 байти

Дуже простий код; трохи занадто довго.

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

3

JavaScript (ES6), 45 41 байт

Збережено 4 байти завдяки @ Cᴏɴᴏʀ O'Bʀɪᴇɴ

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

Здається, занадто довго ...

(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.

Це працює? кудо! Я не думаю, що вам потрібне yзменшення карти, тому відріжте це наx=>x*a++
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Дякую, цей трюк працює дуже добре!
ETHproductions

2
вам слід додати крапку з комою в кінці. за рахунок.
Seadrus

3

Джулія, 16 байт

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

Примітка: якщо об'єкт діапазону a:b(який буквально зберігається як початкове значення і значення зупинки, і внутрішньо включає в себе «прирощення на 1 на кожен крок» значення) допускаються в якості вхідних даних, а потім всього 4 байта необхідно: prod.


3

Perl 6 , 14 байт

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

використання:

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

Якщо ви хочете виключити останній елемент ..^замість,..

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.