Додаткові факти!


17

У математиці факторний, скорочений "факт" невід'ємного цілого числа n , позначений n! , - добуток усіх натуральних чисел, менший або рівний n . Наприклад, 5! дорівнює 1 * 2 * 3 * 4 * 5 = 120

Коефіцієнт 0 дорівнює 1 , згідно з умовами про порожній продукт.


Це регулярні факти, до яких ми звикли. Додамо кілька альтернатив:

  1. Факториал (визначений вище)
  2. Подвійний факториал: n !! = 1 + 2 + ... + п
  3. Потрійний факторіал: п !!! = 1 - (2 - (3 - (... - n))) ...)
  4. Чотириразовий факторіал: п !!!! = 1 / (2 / (3 ... / n))) ...) . Примітка. Це ділення з плаваючою комою, а не ціле ділення.

Виклик

Візьміть невід'ємний цілий вхід n , безпосередньо за яким слід від 1 до 4 знаків оклику. Вхід буде виглядати (точно) приблизно так: 0! , 5 !! , 132 !!! або 4 !!!! . У цьому виклику ви не можете приймати гнучкий формат введення, вибачте.

Вихідні дані

Вихід повинен бути результатом у будь-якому зручному форматі. Результат чотириразового факторіалу повинен мати щонайменше 2 цифри після десяткової коми, за винятком 0 !!!! = 0 .

Тестові приклади:

0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
---
0!! = 0
1!! = 1
2!! = 3
3!! = 6
4!! = 10
5!! = 15
6!! = 21
7!! = 28
8!! = 36
9!! = 45
10!! = 55
---
0!!! = 0
1!!! = 1
2!!! = -1
3!!! = 2
4!!! = -2
5!!! = 3
6!!! = -3
7!!! = 4
8!!! = -4
9!!! = 5
10!!! = -5
---
0!!!! = 0
1!!!! = 1
2!!!! = 0.5
3!!!! = 1.5
4!!!! = 0.375
5!!!! = 1.875
6!!!! = 0.3125
7!!!! = 2.1875
8!!!! = 0.27344
9!!!! = 2.4609
10!!!! = 0.24609

Виграє найкоротше рішення в кожній мові.


2
Чи може чотириразовий факторіал також бути раціональним поділом?
Мартін Ендер

6
Визначення подвійного
факторіуму

4
@Erik, це альтернативний подвійний факт ;-)
Стюі Гріффін

1
@StewieGriffin BTW трохи підступно, що 0!-> 1.
Erik the Outgolfer

5
Заголовок повинен бути Альтернативними фактами
Digital Trauma

Відповіді:


7

JavaScript (ES6), 88 байт

s=>eval(([a,b]=s.split(/\b/),g=k=>+a?k-a?k+'_*+-/'[b.length]+`(${g(k+1)})`:k:+!b[1])(1))

Тестові справи

Відформатовано та прокоментовано

s =>                                // given the input string s,
  eval(                             // evaluate as JS code:
    ( [a, b] = s.split(/\b/),       //   a = integer (as string) / b = '!' string
      g = k =>                      //   g = recursive function taking k as input
        +a ?                        //     if a is not zero:
          k - a ?                   //       if k is not equal to a:
            k + '_*+-/'[b.length] + //         append k and the operation symbol
            `(${g(k + 1)})`         //         append the result of a recursive call
          :                         //       else:
            k                       //         just append k and stop recursion
        :                           //     else:
          +!b[1]                    //       return 1 for multiplication / 0 otherwise
    )(1)                            //   initial call to g() with k = 1
  )                                 // end of eval()

7

Лушпиння , 15 байт

§!ëΠΣF-F/#'!oṫi

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

Пояснення

Індексація до списку функцій: радості використання функціональної мови.

§!ëΠΣF-F/#'!oṫi  Implicit input, say x = "6!!!"
              i  Convert to integer (parses the leading sequence of digits): 6
            oṫ   Descending range to 1: y = [6,5,4,3,2,1]
  ë              Four-element list containing the functions
   Π             product,
    Σ            sum,
     F-          left fold with subtraction (gives 0 for empty list), and
       F/        left fold with division (gives 0 for empty list).
 !               1-based index into this list with
         #'!     count of !-characters in input: gives F-
§                Apply to y and print implicitly: -3

Я використовую низхідний діапазон і ліву складку, оскільки -і /приймаю їх аргументи у зворотному порядку в Хуску.


Indexing into a list of functionsє woah ...
Erik the Outgolfer

Я думав про Хаскелла, а потім бачу це ... Воістину, здається, це правильний інструмент для роботи. +1
алекс

Ось для чого був зроблений Хуск: D
Лев

6

C # (.NET Core) , 134 130 128 байт

s=>{double e=s.Split('!').Length,n=int.Parse(s.Trim('!')),i=n,r=n;for(;--i>0;)r=e>4?i/r:e>3?i-r:e>2?i+r:i*r;return n<1&e<3?1:r;}

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

Найкраща частина кодового гольфу - це те, чого ви дізнаєтесь, намагаючись вирішити проблеми. У цьому я дізнався, що в C # ви можете обрізати інші символи, окрім пробілів від рядків.

  • 4 байти збережено завдяки LiefdeWen!
  • 2 байти збережено, тому що мені не потрібно піддавати 1 до s.Split('!').Length, просто встановити межі в e>4?i/r:e>3?i-r:e>2?i+r:i*rі n<1&e<3?1:r.

1
Ви можете зробити, e nа iтакож doubleуникнути оголошення його за r, щоб зберегти 4 байти.
LiefdeWen

1
@LiefdeWen Або floatзберегти інший байт.
Kevin Cruijssen

4

Perl 5 , 62 байти

61 байт код + 1 для -p.

$_=/^0!$/+eval join(qw{| *( +( -( /(}[s/!//g],1..$_).")"x--$_

Завдяки @GB за те, що вказав на пропуску з мого боку!

Спробуйте в Інтернеті! (це використовується -lдля читабельності)


4
0! має бути 1, а не 0
GB

@GB Ну, це не має сенсу ... Визначено за +5!
Дом Гастінгс

4

R , 113 111 байт

function(s){z=strtoi((n=strsplit(s,'!')[[1]])[1])
n=length(n)
`if`(z,Reduce(c('*','+','-','/')[n],1:z,,T),n<2)}

Спробуйте кілька тестових випадків!

неозорений:

function(s){
  n <- strsplit(s,"!")[[1]]          # split on "!"
  z <- strtoi(n[1])                  # turn to integer
  n <- length(n)                     # count number of "!"
  FUN <- c(`*`,`+`,`-`,`/`)[[n]]     # select a function
  right <- TRUE                      # Reduce (fold) from the right
  if( z > 0)                         # if z > 0
    Reduce(FUN, 1:z,,right)          # return the value
  else    
    (n < 2)                          # 1 if n = 1, 0 if n > 1
}

el(strsplit(s,"!")) економить 1 байт
буутбол

4

Python3, 124 130 121 119 байт

На даний момент я вважаю, що рекурсія є ключем до подальшої економії байтів.

s=input()
l=s.count('!')
v=int(s[:-l])+1
print(eval((" *+-/"[l]+"(").join(map(str,range(1,v)))+")"*(v-2)or"0")+(l<2>v))

Спробуйте тести на Спробуйте онлайн!

-9 байт завдяки @ Mr.Xcoder !

-2 байти завдяки @Felipe Nardi Batista !


Не вдалося 6! . Це повинно бути 720.
Містер Xcoder

Я оновив тестовий набір Tio.
Містер Xcoder


О так, звичайно, цього не помітили
містер Xcoder


3

Pyth , 34 30 байт

+uv++H@"/*+-"/Q\!G_tUK.vQKq"0!

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

Пояснення

+uv++H@"/*+-"/Q\!G_tUK.vQKq"0!"Q    Implicit: append "Q
                                    Implicit: read input to Q
                      .vQ           Evaluate Q as Pyth code. This evaluates the integer,
                                    any !'s are parsed as unary NOT for the next expression
                                    and discarded.
                     K              Save the result to K.
                    U               Get a list [0, 1, ..., K-1].
                   t                Drop the first item to get [1, 2, ..., K-1].
                  _                 Reverse to get [K-1, K-2, ..., 1].
 u                       K          Starting from G = K, for H in [K-1, K-2, ..., 1] do:
             /Q\!                     Count the !'s in Q.
      @"/*+-"                         Get the correct operator.
    +H                                Prepend the current H.
   +             G                    Append the previous value G.
  v                                   Evaluate as Python code.
                          q"0!"Q    See if Q == "0!".
+                                   If so, add 1.


2

05AB1E , 27 байт

þL"/*+-"¹'!¢©è".»"ì.VD_нi®Θ

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


Чи знаєте ви, чому „.»не працює?
Райлі

@Riley »є частиною незавершеного стисненого рядка, тому він виходить з помилки і, як зазвичай в 05AB1E, помилка ігнорується.
Erik the Outgolfer

Я намагався зробити це "*+-/"èUпісля використання Lподальшої роботи, .»Xале це трактує Xяк рядок, а не команду і .»X.Vнавіть winkier.
Чарівний восьминіг Урна

@MagicOctopusUrn Xне зрівняється . X.Vє дві команди.
Erik the Outgolfer

@EriktheOutgolfer так, але я сподівався, що це буде до того, як обробити складку. Сподіваючись , не сподіваючись :(. Могли б присягнути, що було "використовувати єдину символьну строку як команду в діадичному ланцюжку" чи щось таке
Magic Octopus Urn

2

Рубі , 83 80 79 байт

->s{z=s.count ?!;s<?1?1+1<=>z:eval([*1..w=s.to_i]*(".0"+"_*+-/"[z]+?()+?)*~-w)}

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

Пояснення:

->s{
    # Get number of !
    z=s.count ?!

    # Special case: if the number is 0, then output 0 or 1 depending on z
    s<?1?1+1<=>z:

    # Otherwise build the full expression as a string and then evaluate it
    eval([*1..w=s.to_i]*(".0"+"_*+-/"[z]+?()+?)*~-w)
}

2

Java 8, 141 136 134 байт

s->{float q=s.split("!",-1).length,n=new Float(s.split("!")[0]),i=n,r=n;for(;--i>0;r=q<3?i*r:q<4?i+r:q<5?i-r:i/r);return n<1&q<3?1:r;}

-5 байт (141 → 136) завдяки відповіді C # @CarlosAlejo .

Пояснення:

Спробуйте тут.

s->{                                // Method with String parameter and float return-type
  float q=s.split("!",-1).length,   //  Amount of exclamation marks + 1
        n=new Float(s.split("!")[0]),
                                    //  The number before the exclamation marks
        i=n,                        //  Index (starting at `n`)
        r=n;                        //  Return sum (starting at `n`)
  for(;--i>0;                       //  Loop from `i-1` down to 1
    r=                              //   Change the result (`r`) to:
      q<3?                          //    If `q` is 2:
       i*r                          //     Multiply
      :q<4?                         //    Else if `q` is 3:
       i+r                          //     Addition
      :q<5?                         //    Else if `q` is 4:
       i-r                          //     Subtraction
      :                             //    Else (if `q` is 5):
       i/r                          //     Division
  );                                //  End of loop
  return n<1&q<3?                   //  Edge case if the input is `0!`:
          1                         //   Then return 1
         :                          //  Else:
          r;                        //   Return the result
}                                   // End of method

1
Я бачив подібну відповідь десь інше ...: -Я забуваю, що floatце коротше double.
Чарлі

@CarlosAlejo Так, я помітив вашу відповідь після моєї початкової відповіді на 141 байт. Зміна float q=s.length()-(s=s.replace("!","")).length(),n=new Float(s)поточної відповіді врятувала мені 5 байт. :) Забув додати частину " байтів, збережених завдяки ", яку я помітив зараз. Пробачте про це.
Kevin Cruijssen

о, ніколи цього не майте на увазі, я радий, що вам сподобалась моя відповідь. :-)
Чарлі

2

Желе ,  24 23 26  25 байт

+  3  2 байти, виправлення до виправлення після неправильного тлумачення :(

×
+
_
÷
ṣ”!µḢVRṚȯL©Ị$®ŀ@/

Повна програма (монадійна посилання з помічниками, на які посилається місце розташування програми)

Спробуйте в Інтернеті! або переглянути тестовий набір .

Як?

× - Link 1, multiply: number, number

+ - Link 2, add: number, number

_ - Link 1, subtract: number, number

÷ - Link 1, divide: number, number

ṣ”!µḢVRṚȯL©Ị$®ŀ@/ - Main link: list of characters, a
ṣ”!               - split s at '!' characters
   µ              - monadic separation, call that b
    Ḣ             - head - pop and yield the digit list from b, modifying b
     V            - evaluate as Jelly code (get the number, say N)
      R           - range = [1,2,3,...,N]
       Ṛ          - reverse = [N,...,3,2,1]
            $     - last two links as a monad:
         L        -   length of modified b (number of '!' characters)
          ©       -   (copy to register)
           Ị      -   insignificant? (1 when just one '!', 0 when two or more)
        ȯ         - logical or (1 for "0!", 0 for "0!!...", the reversed-range otherwise)
                / - cumulative reduce by:
               @  -  with swapped arguments:
              ŀ   -    dyadic call of link at index:
             ®    -      recall value from register (number of '!' characters)

Невдачі для 0!.
Erik the Outgolfer

О, ха-ха - я неправильно прочитав ваш коментар під ОП - я подумав, що вони зробили 0! визначено як 0, що було б неправильно.
Джонатан Аллан

Все виправлено зараз :)
Джонатан Аллан

На жаль, TIO порушено зараз, щоб я не міг перевірити, чи він все ще недійсний. :(: P Крім того, дуже погано , що ви не можете використовувати /. На порожній список D: EDIT: Мабуть дійсно для 0!, 0!!, 0!!!і 0!!!!+1.
Ерік Outgolfer

2

Самостійний модифікаційний код машини x86_64, 123 байти

0f b6 0f 31 c0 eb 11 0f be c9 8d 04 80 8d 44 41 d0 0f b6 4f 01 48 ff c7 83 f9 21 75 ea b9 21 21 21 a1 33 0f 0f bc c9 81 c1 ff 07 00 00 c1 e9 03 0f b6 c9 89 ca 09 c2 74 35 55 48 89 e5 c7 45 fc 59 58 5c 5e 8a 4c 0d fc 88 0d 15 00 00 00 f3 0f 2a c8 83 f8 02 5d 7c 1f ff c8 0f 57 c0 f3 0f 2a c0 f3 0f 5e c1 83 f8 01 0f 28 c8 7f eb c3 f3 0f 10 05 03 01 00 00 c3 0f 28 c1 c3

Чому інтерпретовані мови зможуть динамічно запускати код з фантазійним evals, але не простим машинним кодом?

Спробуйте:

#include <stdio.h>
#include <sys/mman.h>
#include <errno.h>

char ff[] = "\x0f\xb6\x0f\x31\xc0\xeb\x11\x0f\xbe\xc9\x8d\x04\x80\x8d\x44\x41\xd0\x0f\xb6\x4f\x01\x48\xff\xc7\x83\xf9\x21\x75\xea\xb9\x21\x21\x21\xa1\x33\x0f\x0f\xbc\xc9\x81\xc1\xff\x07\x00\x00\xc1\xe9\x03\x0f\xb6\xc9\x89\xca\x09\xc2\x74\x35\x55\x48\x89\xe5\xc7\x45\xfc\x59\x58\x5c\x5e\x8a\x4c\x0d\xfc\x88\x0d\x15\x00\x00\x00\xf3\x0f\x2a\xc8\x83\xf8\x02\x5d\x7c\x1f\xff\xc8\x0f\x57\xc0\xf3\x0f\x2a\xc0\xf3\x0f\x5e\xc1\x83\xf8\x01\x0f\x28\xc8\x7f\xeb\xc3\xf3\x0f\x10\x05\x03\x01\x00\x00\xc3\x0f\x28\xc1\xc3";
int main()
{
    char* page = (char*)((unsigned long)((char*)ff) & (~0xfffLL));
    if (mprotect(page, 0x1000, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) {
        perror("mprotect");
        return -1;
    }
    float (*f)(char*) = (float (*)(char*))ff;
    char* testcases[] = { "0!","1!","2!","3!","4!","5!","6!","7!","8!","9!","10!",
                          "0!!","1!!","2!!","3!!","4!!","5!!","6!!","7!!","8!!","9!!","10!!",
                          "0!!!","1!!!","2!!!","3!!!","4!!!","5!!!","6!!!","7!!!","8!!!","9!!!","10!!!",
                          "0!!!!","1!!!!","2!!!!","3!!!!","4!!!!","5!!!!","6!!!!","7!!!!","8!!!!","9!!!!","10!!!!",
                        };
    for (int i = 0; i < 44; i++) {
        printf("%s -> %f\n", testcases[i], f(testcases[i]));
    }
}

Збірка:

_f:
100000d4f:  0f b6 0f    movzx   ecx, byte ptr [rdi]
100000d52:  31 c0   xor eax, eax
100000d54:  eb 11   jmp 17 <_f+18>
100000d56:  0f be c9    movsx   ecx, cl
100000d59:  8d 04 80    lea eax, [rax + 4*rax]
100000d5c:  8d 44 41 d0     lea eax, [rcx + 2*rax - 48]
100000d60:  0f b6 4f 01     movzx   ecx, byte ptr [rdi + 1]
100000d64:  48 ff c7    inc rdi
100000d67:  83 f9 21    cmp ecx, 33
100000d6a:  75 ea   jne -22 <_f+7>
100000d6c:  b9 21 21 21 a1  mov ecx, 2703302945
100000d71:  33 0f   xor ecx, dword ptr [rdi]
100000d73:  0f bc c9    bsf ecx, ecx
100000d76:  81 c1 ff 07 00 00   add ecx, 2047
100000d7c:  c1 e9 03    shr ecx, 3
100000d7f:  0f b6 c9    movzx   ecx, cl
100000d82:  89 ca   mov edx, ecx
100000d84:  09 c2   or  edx, eax
100000d86:  74 35   je  53 <_f+6E>
100000d88:  55  push    rbp
100000d89:  48 89 e5    mov rbp, rsp
100000d8c:  c7 45 fc 59 58 5c 5e    mov dword ptr [rbp - 4], 1583110233
100000d93:  8a 4c 0d fc     mov cl, byte ptr [rbp + rcx - 4]
100000d97:  88 0d 15 00 00 00   mov byte ptr [rip + 21], cl
100000d9d:  f3 0f 2a c8     cvtsi2ss    xmm1, eax
100000da1:  83 f8 02    cmp eax, 2
100000da4:  5d  pop rbp
100000da5:  7c 1f   jl  31 <_f+77>
100000da7:  ff c8   dec eax
100000da9:  0f 57 c0    xorps   xmm0, xmm0
100000dac:  f3 0f 2a c0     cvtsi2ss    xmm0, eax
100000db0:  f3 0f 5e c1     divss   xmm0, xmm1
100000db4:  83 f8 01    cmp eax, 1
100000db7:  0f 28 c8    movaps  xmm1, xmm0
100000dba:  7f eb   jg  -21 <_f+58>
100000dbc:  c3  ret
100000dbd:  f3 0f 10 05 03 01 00 00     movss   xmm0, dword ptr [rip + 259]
100000dc5:  c3  ret
100000dc6:  0f 28 c1    movaps  xmm0, xmm1
100000dc9:  c3  ret

Пояснення будуть додані пізніше. Основна ідея полягає в тому, щоб змінити divss xmm0, xmm1інструкцію 0x100000db0і замінити його mulss, addss, subssабоdivss в відповідно з доданим операндом. Невеликий трюк також використовується для розбору вхідного рядка.

Збірка створена за допомогою:

float f (char* s)
{
    int x;
    for (x=0; *s != '!'; s++) {
        x=10*x + (*s-'0');
    }
    unsigned char op = (__builtin_ctz(*(unsigned int *)s ^ 0xa1212121)-1) >> 3;
    if (x == 0 && op == 0) {
        return 1;
    }
    unsigned int lookup = 0x5e5c5859;
    unsigned char new_code = ((unsigned char*)&lookup)[op];
    asm("movb %0, 0x15(%%rip)" : : "r" (new_code));
    float sum;
    for (sum = x--; x>0; x--) {
        sum = x / sum;
    }
    return sum;
}

2

Haskell, 105 102 98 96 байт

0!3=0
x!y=foldr([(*),(+),(-),(/)]!!y)([1,0,0,1]!!y)[1..x]
f s|[(n,b)]<-lex s=read n!(length b-1)

Збережено 9 байт завдяки Zgarb та nimi.

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


@Zgarb Ви маєте рацію. Виправлено.
Крістіан Лупаску

Я думаю, що ви також можете скидати парени навколо read n, і f=це є непотрібним згідно з нашими правилами .
Згарб

@Zgarb Знову прямо :). Спасибі!
Крістіан Лупаску

Перемикання назад до імені функції і використовуючи lexзберігає два байта: f s|[(n,b)]<-lex s=read n!(length b-1).
німі

@nimi Вау, дякую! Я так новачок у Haskell, що навіть не знав про це lex. Це круто! :) Я не бачу, як це економить байти - я отримую 99 байт після цього.
Крістіан Лупаску

1

Гая , 26 25 байт

ẋ)@d┅v;l“×+⁻÷”=“ₔ⊢”+e¤ḥ!∨

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

Пояснення

ẋ                          Split the input into runs of the same character.
 )                         Get the last one (the !'s).
  @                        Push an input (since there's none left, use the last one).
   d                       Parse as number (ignores the !'s).
    ┅v                     Get the reverse range: [n .. 1]
      ;                    Copy the ! string
       l“×+⁻÷”=            Get its length and index into this string of operators.
               “ₔ⊢”+       Append 'ₔ⊢' to the operator.
                    e      Eval the resulting string, which is "reduce by <operator> with
                            swapped arguments." Reducing an empty list gives 0.
                     ¤     Bring the !'s back to the top.
                      ḥ!   Remove the first character and check if it's empty.
                        ∨  Logical OR; turns 0 from 0! to 1, doesn't change anything else.


1

APL (Dyalog) , 30 байт

Натхненний рішенням lstefano .

{0::0⋄(⍎'×+-⌹'⊃⍨≢⍵~⎕D)/⍳⍎⍵∩⎕D}

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

{} Анонімна функція, де аргумент представлений :

0:: якщо трапляється якась помилка:

  0 повернути нуль

 тепер спробуйте:

  ⍵∩⎕D перетин аргументу та безлічі D запалює (видаляє знаки оклику)

   виконати це (перетворює його в число)

  ɩ ноти цього

  ()/ Вставити (APL є правильним асоціативним, при необхідності) наступну функцію між термінами:

   ⍵~⎕D аргумент без D імітує (залишає знак оклику)

   підрахунок цього (тобто скільки знаків оклику)

  '×+-⌹'⊃⍨ використовуйте це для вибору зі списку символів *

   виконати (перетворює символ у функцію)


(матричний поділ) використовується замість ÷(звичайний поділ), щоб викликати помилку в порожньому списку


What does :: do in a dfn?
Zacharý

It is an error guard. If at any point after the error guard is set up, an error with any of the numbers (0=1…999, 1000=1001…) to the left of the :: happens, then the value to the right of the :: is immediately returned.
Adám

Well, I never knew about that, thanks!
Zacharý


0

Dyalog APL, at least 29 chars

{(⍎i⊃'×+-÷')/⍳⍎⍵↓⍨-i←+/'!'=⍵}

The expression is ALMOST correct. It passes all the test cases EXCEPT 0!!!! for which it gives 1 instead of the required 0 and that's because in APL the reduction of an empty vector is supposed to return the neutral element for the function used to reduce. For the quotient that's 1. At the moment I don't have time to try and fix it but I'll leave it here for a rainy day.


It is raining: {0::0⋄(⍎'×+-⌹'⊃⍨≢⍵~⎕D)/⍳⍎⍵∩⎕D} Try it online!
Adám

Very cool! I don't mind at all if you claim it as your solution, given that the differences are more than the similarities.
lstefano



0

Mathematica, 152 bytes

(T=ToExpression;If[#=="0!!!!",0,s=T@StringCount[#,"!"];t=T@StringDrop[#,-s];{#!,i~Sum~{i,#},Sum[-i(-1)^i,{i,#}],N@Product[1/i^(-1)^i,{i,#}]}[[s]]&[t]])&

0

Javascript, 111 163 bytes

s=>([a,b]=s.split(/\b/),c=b.length,a==0&c==1||eval((p=[...Array(+a+1).keys()].slice(1).join(c-1?c-2?c-3?'/(':'-(':'+':'*'))+')'.repeat((p.match(/\(/g)||[]).length)))

Readable Version

s=>([a,b]=s.split(/\b/),c=b.length,a==0&c==1||eval((p=
[...Array(+a+1).keys()].slice(1).join(c-1?c-2?c-3?'/(':'-
(':'+':'*'))+')'.repeat((p.match(/\(/g)||[]).length)))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.