Підпишіть вираз


20

Для тих, хто не знав, Сігма - грецька літера, яка широко використовується в математиці як знак підсумовування. Давши рядок, що представляє вираз залежно від який будемо позначати , обчислити суму результатів для для кожного . Точно, ви повинні знайти таким, що:кE ( k ) k { 1 , 2 , 3 , 4 , 5 } SЕ(к)Е(к)к{1,2,3,4,5}S

S=к=15Е(к)

Приклад виразу:Е(к)=к2+к2


Технічні характеристики

  • Вам гарантовано:
    • що вираз є дійсним, тому він не містить помилок і що він залежить від обраного синтаксису (наприклад: якщо ви лише підтримуєте 2*k, не буде 2k)
    • тільки визначили значення серед ваших результатів, тому значення не подобається 1/0, infабо nanз'явиться
  • Ви можете припустити, що вираз вище відповідає межі мови програмування на ваш вибір, тому це не призведе до переповнення або будь-яких інших помилок, пов'язаних з обмеженнями
  • Будь-який інший символ ASCII, що не має пробілу, kможе бути обраний замість
  • Ваша програма повинна підтримувати такі операції:
    • додавання ( +, plus(), add(), sum())
    • віднімання ( -, minus(), subtract())
    • експоненцірованіе ( **, ^, pow()або інші, повинні бути визначені), з підтримкою негативних підстав і показників
    • квадратний корінь у вигляді sqrt(k), k^0.5, k**0.5, або як ще ви хочете
    • множення і ділення
  • Подання може бути як повноцінною програмою, так і функцією, при цьому згадується її використання
  • Під час виведення дозволено будь-який простір / ведучий пробіл
  • Мінімальна точність: 2 знаки після коми

Випробування (з k)

+---------------+--------------+   
|  Input = E(k) |    Output    |
|---------------+--------------|
|2*k            | 30           |
|---------------+--------------|
|sqrt(k)        | 8.38         | (* with minimum decimal precision)
|---------------+--------------|
|k+k/2+k**2     | 77.5         |
|---------------+--------------|
|k**2           | 55           |
+---------------+--------------+

Оцінка буде кількістю байтів (прапорців джерела + компілятора). Виграє найнижча кількість дійсних заявок, беручи до уваги, що ці лазівки суворо заборонені. Ось псевдокод Python, щоб зробити речі зрозумілішими.


Чи можемо ми взяти plus()замість +? (Те саме питання стосується і всіх інших операторів)
Стюі Гріффін

@StewieGriffin Так plus(), add(), sum()і еквіваленти допускаються. Дивіться редагування.
Містер Xcoder

Ні, ви можете приймати вираз лише один раз, @ComradeSparklePony
Містер Xcoder

Чи можемо ми використовувати позначення постфікса? Наприклад, тест 3 з верхньої частини буде що - щось на кшталт: N N2/+N2**+.
Товариш СпарклПоні

Це дуже дивно, але це дозволено, якщо ви чітко E(x)заявляєте "формат" @ComradeSparklePony
Містер Xcoder

Відповіді:



9

Математика, 17 14 13 байт

Завдяки Ієну Міллеру за збереження 3 байтів.

Завдяки LegionMammal978 за збереження 1 байта.

#~NSum~{k,5}&

Вхід повинен бути фактичним виразом, що містить k, наприклад:

#~NSum~{k,5}&[Sqrt[k]^3+4]

2
Я повинен був здогадатися, що Mathematica для цього
вбудував

2
Математика завжди має вбудовані ситуації. : P
повністюлюдський

Вам не потрібно 1,в ньому Sum.
Ян Міллер

Насправді це може скоротитися доN@#~Sum~{k,5}&
Ієн Міллер

@IanMiller О так, звичайно. Дякую!
Мартін Ендер



3

05AB1E , 8 7 6 байт

6G¹.VO

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

Введення в постфіксной записи і використовує змінну N . 05AB1E - мова на основі стека, тому працює лише позначення постфіксу.

Формат E(N): напишіть номер (и), з яким потрібно виконати операцію, а потім напишіть знак операції. Наприклад, 3+4було б 3 4+, 3*4+2*3було б 3 4* 2 3* +. Також зауважте, що це використовується tзамість sqrt, а mзамість того **, як sqrt(N)було б Nt.

Пояснення:

6G¹.VO
6G     For N in range(1,6). This includes [1,2,3,4,5].
  ¹.V  Read and eval input.
     O Sum results.

3

Октава , 50 46 31 29 байт

@(d)eval(["k=1:5;sum(" d 41])

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

Експоненція позначається каретою, .^а множення позначається .*.

Це оголошує анонімну функцію, яка бере аргумент d. Він встановлюється kрівним діапазону 1:5і підсумовує оцінений dі повертає його.


3

Japt , 10 байт

6ÆK=XOxUÃx

Рядок введення повинен мати змінну у верхньому регістрі K. sqrt(K)слід вводити як K**0.5.

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

Пояснення

evalсфера не працювала на мою користь; довелося переглядати лічильну змінну Xяк глобальну K.

6ÆK=XOxUÃx      // implicit: U = input string
6oXYZ{K=XOxU} x // expanded

6oXYZ{      }   // create array [0, 6) and map to function:
      K=X       //   redefine the array value to global K
         OxU    //   eval the input string
              x // sum the resulting array

Хм, мені цікаво, чи допоможе перекладка Oxбезпосередньо, щоб eval(допомогти у цьому ...
ETHproductions


2

APL (Dyalog) , 9 байт

+/⍎⎕⊣k←⍳5

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

Додавання є +, віднімання є -, множення є ×, ділення є ÷експоненціацією є *і виконання праворуч ліворуч, тому використовуйте ()для групових виразів.

Вхід є з точки зору k.

Пояснення

k←⍳5                    Set k to be equal to the vector 1 2 3 4 5
                       The left argument:
+/                      Sum of
⍎⎕                      The evaluated input (the eval returns an array because k is an array)

А ось рішення , яке приймає поїзда в якості вхідних даних (наприклад , відповідь Jelly) +/(⍎⎕)¨⍳5.


2

Лист звичайний, 55 байт

(defun f(x)#.(read))(print(+(f 1)(f 2)(f 3)(f 4)(f 5)))

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

Example input - output: 
(* x 2) - 30 
(sqrt x) - 8.382333 
(+ (/ x 2) x (expt x 2)) - 155/2 
(expt x 2) - 55

інша, довша (58 байт) версія - починає скорочуватися, якщо робити підсумки від 1 до 7.

(print #.`(+,@(mapcar #'(lambda(x)#.(read))'(1 2 3 4 5))))

ще один і довший метод ( 65 64 байти) - не визначає функцію - просто вставляє вираз у цикл. Слід скоротити більші суми.

(setf a(read)b 0)(loop as x from 1 to 5 do(incf b #.a))(print b)

2

Свіфт, 202 184 байти

import Foundation;func s(i:String){print([1,2,3,4,5].map{NSExpression(format:i.replacingOccurrences(of:"k",with:"\($0).0")).expressionValue(with:nil,context:nil)as!Float}.reduce(0,+))}

Чомусь це буде працювати лише локально :(.

Ось пояснення того, що я роблю:

import Foundation // Import the Foundation module

func s(i:String){ // Create a function that takes in a String and returns a Float

    print( // Print the result of the follow algorithm to strdout

        [1,2,3,4,5].map{ //Conduct the follow code on numbers 1 - 5

            NSExpression(format: // Create an expression with the following String and return it 

            i.replacingOccurrences(of:"k",with:"\($0).0")) // Create a string replacing all ocurrances of 'k' in `i` with the current Float from the map

           .expressionValue(with:nil,context:nil)as!Float // Get the resulting value of the expression

       }.reduce(0,+) // Add the result of all the expressions together
    )
}

Завдяки @Mr. Xcoder для економії 15 байт!


2

TI-Basic, 12 байт

Σ(expr(Ans),K,1,5

Зателефонуйте за допомогою "string":prgmNAME, де stringє будь-який дійсний вираз TI-Basic K.


Цікаве рішення однакової тривалості:Ans->u:sum(u(1,5
ліртосія

1

Складено , 16 байт

5~>[@k#~]2/"!sum

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

5~>є діапазоном від 1 до 5 включно. 2/робить функціональним діадічним, "парним і !виконує. Таким чином, це відображає діапазон [1, 5]з входом, який потім оцінюється після визначення члена діапазону k. Потім результати підсумовуються.


1

DC , 31 24 байт

?sa1k[lax+Kd1+k5>p]dspxp

Вхід повинен бути поданий у зворотно-польській позначці (також відомий як позначення постфіксу) та укладений у квадратні дужки ( []) з:

  • Kзаміна kяк параметр;
  • + що представляє додавання;
  • -представлення віднімання і _наступного будь-якого числа, що представляє від’ємне число;
  • * репрезентація множення;
  • / що представляє поділ;
  • ^ що представляє експоненцію;
  • v що представляє квадрат-корінь.

Наприклад, -2*k+k+3*k**2+k**0.5-k/2буде введено як [_2K*K+K2^3*+Kv+K2/-]. Це належним чином використовує той факт, що Kце dcкоманда, яка повертає поточну точність (спочатку встановлена ​​на 1). Тому до кінця це повертає результат з точністю до 6.

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



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