Часткова сума гармонійної послідовності!

Arjun 05/28/2017. 24 answers, 1.268 views
code-golf math sequence

Визначення

У математиці Harmonic Sequence відноситься до послідовності де

Гармонічна послідовність рівнянь

тобто n й член послідовності дорівнює зворотній n .


Вступ

У цьому виклику, враховуючи позитивне ціле число n як вхід, виведіть часткову суму перших n умов Гармонічної послідовності.


Вхідний

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

Ви можете взяти вхід будь-яким способом, за винятком того, що він буде присутній у визначеній змінній. Читання з файлу, терміналу, модального вікна ( prompt() в JavaScript) тощо. Введення в якості аргументу функцій також допускається.


Вихідні дані

Ваша програма повинна вивести суму перших n умов Гармонічної Послідовності як поплавці (або ціле число, якщо вихід рівномірно ділиться на 1) з точністю до 5 значущих цифр, де n відноситься до вводу. Щоб передати те ж саме в математичному жаргоні, потрібно обчислити

Гармонічна послідовність Часткова сума перших n умов

де n відноситься до введення.

Ви можете виводити будь-яким способом, за винятком написання виводу на змінну. Написання на екран, термінал, файл, модальне вікно ( alert() в JavaScript) і т. Д. Допускається. Також допускається виведення результатів як значення return значення функції.


Додаткові правила


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

Тестові випадки передбачають, що вхід буде 1-індексований

Input     Output
1         1
2         1.5
3         1.8333
4         2.0833
5         2.2833 

Перемога критерію

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

5 Comments
Cows quack 05/28/2017
Не могли б ви дати нам кілька тестів?
2 Level River St 05/28/2017
Яка точність потрібна? Точне виведення, як правило, можливе лише як частка, але на багатьох мовах, які повинні мати окремі номери для чисельника і знаменника. Чи можемо ми вивести а) поплавок, б) частку або цілу пару c) або?
2 Level River St 05/28/2017
@ Arjun Серія гармонік зростає до нескінченності, тому він стане важко зустріти 10 десяткових знаків після того, як число потрапить у тисячі і мільйони. Я б пішов на значні цифри, а не на десятковій частині, і я не бачу, щоб це було настільки чітко. 5 значущих цифр повинно бути достатньо. так 9.9999E10 а не 99999999999.9999999999
Erik the Outgolfer 05/28/2017
Чи можемо ми перейти на 5 значущих цифр?
Greg Martin 05/28/2017
До речі, відомо, що гармонічна послідовність не містить цілих чисел, відмінних від початкового a_1 = 1. (Ідея докази того, що a_n не є цілим числом для n> 1: нехай 2 ^ k - найбільша потужність 2, не перевищує n, тоді 2 ^ k розділяє знаменник a_n.)

24 Answers


Erik the Outgolfer 05/29/2017.

Желе , 3 байти

İ€S 

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

1-індексований.

Пояснення:

İ€S Main link, monadic
İ€         1 / each one of [1..n]
  S Sum of 

shooqie 05/28/2017.

Python 3, 27 bytes

h=lambda n:n and 1/n+h(n-1) 
4 comments
Arjun 05/28/2017
0-індексування або 1-індексування?
2 sagiksp 05/28/2017
Запускає RuntimeError при обробці вхідних значень, що перевищують ліміт рекурсії, 1000 за замовчуванням.
cat 05/29/2017
ви можете зробити sys.setrecursionlimit(473755252663) але стек буде зрештою переповнений досить легко
shooqie 05/29/2017
@Arjun це 1-індексований

Cows quack 05/28/2017.

JavaScript, 19 18 байт

1 byte saved thanks to @RickHitchcock

f=a=>a&&1/a+f(--a) 

Це 1-індексований.

 f=a=>a&&1/a+f(--a)

for(i=0;++i<10;)console.log(f(i)) 

4 comments
Rick Hitchcock 05/28/2017
З того, що я бачив інших публікацій, ви можете видалити f= з вашої відповіді, щоб зберегти 2 байти.
1 Cows quack 05/28/2017
@RickHitchcock Я не можу видалити f= оскільки функція є рекурсивною, і вона посилається на себе у f(--a) -a f(--a) . Але якщо це не було рекурсивним рішенням, я міг би це зробити
Rick Hitchcock 05/28/2017
Ах, має сенс! Збережіть один байт за допомогою f=a=>a&&1/a+f(--a) .
Cows quack 05/28/2017
@RickHitchcock Красивий!

Jenny_mathy 05/28/2017.

Mathematica, 21 20 16 байт

Це рішення 1-індексоване.

Sum[1./i,NO 
5 comments
Jenny_mathy 05/28/2017
Це 1-індексування
1 MCCCS 05/28/2017
> Ви не повинні використовувати вбудований для розрахунку часткової суми перших n елементів. (Так, це для вас Mathematica!)
3 Jenny_mathy 05/28/2017
OP означає, що я не можу використовувати HarmonicNumber [#] &
4 Greg Martin 05/28/2017
І можна ще скоротити до Tr[1./Range@#]& .
2 LLlAMnYP 05/30/2017
@Ian Mathematica може display 5 sig fig, але функція returns машини-точні номери (52 двійкові біти або точно до 16 десяткових цифр точності)

Cows quack 05/28/2017.

APL (Dyalog) , 5 байт

 +/÷∘⍳ 

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

Ви можете додати ⎕PP←NO до заголовку, щоб змінити точність до NO .

Це 1-індексований.

Пояснення

 +/÷∘⍳                     Right argument; n
    ⍳                     Range; 1 2 ... n
  ÷                       Reciprocal; 1/1 1/2 ... 1/n
+/                        Sum; 1/1 + 1/2 + ... + 1/n 

Jörg Hülsermann 05/28/2017.

PHP, 33 байти

1-індексування

for(;$i++<$argn;)$s+=1/$i;echo$s; 

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


alephalpha 05/28/2017.

Pari / GP , 18 байт

n->sum(i=1,n,1./i) 

1-індексування.

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


Erik the Outgolfer 05/29/2017.

CJam , 11 байт

1.ri,:)f/:+ 

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

1-індексований.


Shaggy 06/01/2017.

Japt , 8 6 5 3 + 1 = 4 байти

+1 байт для прапор -x .

õpJ 

З деякою спасибі ETHproductions

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

5 comments
Arjun 05/28/2017
0-індексування або 1-індексування?
ETHproductions 05/28/2017
Я думаю, ви можете зберегти байт з õ x@1/X
ETHproductions 05/28/2017
... і ще кілька байт, використовуючи XpJ замість 1/X :-)
Shaggy 05/28/2017
Спасибі, @ETHproductions :) Я змарнував їх, як тільки я пішов.
ETHproductions 05/28/2017
Насправді я не думаю, що вам навіть не потрібна _ за рахунок автоматичних функцій. Я дійсно напишу цей відгук: P (Я маю час сьогодні або завтра, завдяки тому, що це День пам'яті)

Luis Mendo 05/28/2017.

CJam , 11 10 bytes

1 байт знято завдяки Еріку, перестрільцеві

ri),NO 

Це використовує індексування на основі 1.

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

Пояснення

ri            e# Read integer, n
  )           e# Increment by 1: gives n+1
   ,          e# Range: gives [0 1 2 ... n]
    {   }*    e# Fold this block over the array
     W#       e# Inverse of a number
       +      e# Add two numbers 
4 comments
Erik the Outgolfer 05/28/2017
Ви можете використовувати W замість -1 .
Luis Mendo 05/28/2017
@EriktheOutgolfer перехитрив себе :-)
Erik the Outgolfer 05/28/2017
@LuisMendo Мені подобається моє ім'я, це просто ім'я. І так, я перевернув себе в процесі допомагати колегам гольф-гольфу навіть далі.
Luis Mendo 05/28/2017
@ Ерік Це малося на увазі як жарт. Дякую за допомогу

Ryan McCleary 05/28/2017.

Haskell, 20 байт

f 0=0
f n=1/n+f(n-1) 

Оригінальне рішення, 22 байти

f n=sum[1/k|k<-[1..n]] 

Ці рішення приймають 1-індексний вхід.


Nitrodon 05/28/2017.

R 15 байт

 sum(1/1:scan()) 

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


avl42 05/28/2017.

Tcl 38 байт

proc h x {expr $x?1./($x)+\[h $x-1]:0} 

Це дуже брудний хак, і рекурсивні виклики передають буквені рядки типу "5-1-1-1 ...", поки не буде оцінено до 0.

2 comments
avl42 05/28/2017
Дякую @Чрістофер за форматування. З цією метою дублювання зворотної слішки більше не потрібне.
Christopher 2EZ 4RTZ 05/28/2017
Без проблем! Це виглядає краще

Erik the Outgolfer 05/29/2017.

05AB1E , 3 байти

LzO 

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

1-індексований.


Suever 05/28/2017.

MATL, 5 байт

:l_^s 

Це рішення використовує індексування на основі 1.

Спробуйте це в MATL Online

Explanation

% Implicitly grab input (N)
:   % Create an array from [1...N]
l_^ % Raise all elements to the -1 power (take the inverse of each)
s   % Sum all values in the array and implicitly display the result 

RosLuP 05/28/2017.

Аксіома, 45 34 байти

f(x:PI):Any==sum(1./n,n=1..x)::Any 

1-індексований; Вона має аргумент одного позитивного цілого числа (PI) і повертає "Any", що sys перетворює (або не перетворює) в тип, корисний для наступної функції arg (нарешті, це виглядає так, див. Нижче приклади)

(25) -> [[i,f(i)] for i in 1..9]
   (25)
   [[1,1.0], [2,1.5], [3,1.8333333333 333333333], [4,2.0833333333 333333333],
    [5,2.2833333333 333333333], [6,2.45], [7,2.5928571428 571428572],
    [8,2.7178571428 571428572], [9,2.8289682539 682539683]]
                                                      Type: List List Any
(26) -> f(3000)
   (26)  8.5837498899 591871142
                                        Type: Union(Expression Float,...)
(27) -> f(300000)
   (27)  13.1887550852 056117
                                        Type: Union(Expression Float,...)
(29) -> f(45)^2
   (29)  19.3155689383 88117644
                                                   Type: Expression Float 

Erik the Outgolfer 05/29/2017.

Pyth, 5 байт

scL1S 

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

1-індексований.


Uriel 05/28/2017.

C 54 байти

i;float f(n){float s;for(i=n+1;--i;s+=1./i);return s;} 

Використовує 1-індексовані номери.


Fatalize 05/29/2017.

Brachylog , 6 байт

⟦₁/₁ᵐ+ 

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

Це 1-індексований.

Пояснення

⟦₁         Range [1, …, Input]
    ᵐ      Map:
  /₁         Inverse
     +     Sum 

steenbergh 05/30/2017.

QBIC , 13 байт

[:|c=c+1/a]?c 

Пояснення

[ |        FOR a = 1 to
 :            the input n
   c=c+    Add to c (starts off as 0)
   1/a     the reciprocal of the loop iterator
]          NEXT
?c         PRINT c 

Uri Goren 05/29/2017.

Haskell, 21 байт

f n=sum$map(1/)[1..n] 

Giacomo Garabello 05/30/2017.

C (gcc) , 35 байт

 float f(n){return n?1./n+f(--n):0;} 

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


Mayube 05/30/2017.

Braingolf, 20 байт [не конкуруючих]

VR1-1[1,!/M,$_1+]v&+ 

Це фактично не спрацьовує через неможливість роботи braingolf працювати з поплавками, однак логіка правильна.

Пояснення:

VR1-1[1,!/M,$_1+]v&+   Implicit input
VR                     Create new stack and return to main stack
  1-                   Decrement input
    1                  Push 1
     [..........]      Loop, always runs once, then decrements first item on stack at ]
                       Breaks out of loop if first item on stack reaches 0
      1,!/             Push 1, swap last 2 values, and divide without popping
                       Original values are kept on stack, and result of division is pushed
          M,$_         Move result of division to next stack, then swap last 2 items and
                       Silently pop last item (1)
              1+       Increment last item on stack
                 v&+   Move to next stack, sum entire stack 
                       Implicit output of last item on current stack 

Ось модифікований інтерпретатор, який підтримує поплавки. Перший аргумент вводить.


sergiol 06/14/2017.

Tcl, 61 байт

proc h {x s\ 0} {time {set s [expr $s+1./[incr i]]} $x;set s} 

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

Related questions

Hot questions

Language

Popular Tags