Найбільш короткий спосіб перерахувати нульові переходи конкретної спіралі

Який найбільш стислий спосіб (у псевдокоді) створити наступну карту f від натуральних до цілих чисел f (0) = 0; f (1) = 1; f (2) = -1; f (3) = 2; f (4) = -2; f (5) = 3; тощо

Можна уявити їх як перетин нуля подвійної симетричної спіралі Архімеда.

Ах, і не плавати математики дозволено! Плаваюча математика була б ... потворною в цій ситуації.

1

3 Відповіді

Wolfram Alpha found a closed form for calculating the nth term directly:

closed form

Вираз -1 n також може бути записаний як (n% 2 == 0? 1: -1) , якщо n додатне ціле число.

3
додано

З C-позначенням f (n) буде n% 2 == 0? -n/2: (n + 1)/2 , тобто:

If n is even then -n/2, if n is odd then (n+1)/2

1
додано

Не гарний, але один лайнер, який працює і не використовує умови:

f(i):
  f := (2 * (i mod 2) - 1) * ((i + 1) >> 1)

Звичайно, використовуючи умови, вона стає більш читаною:

f(i):
  if (i mod 2) is
    0: f := -((i + 1) >> 1)
    1: f :=  ((i + 1) >> 1)
1
додано