Suma kolejnych liczb nieparzystych

24

Chociaż zadano pokrewne wyzwania , to jedno jest inne, aby uzasadnić swoje własne pytanie.


Wyzwanie

Biorąc pod uwagę dodatnią liczbę całkowitą, zwróć najdłuższą sekwencję kolejnych dodatnich nieparzystych liczb całkowitych, których suma jest podaną liczbą całkowitą. Jeśli taka sekwencja nie istnieje, możesz zgłosić błąd w dowolny sposób, który ma sens dla twojego języka, w tym zwrócić wartość fałszowania lub zgłosić wyjątek.

Przypadki testowe

  1 -> [1]
  2 -> []
  3 -> [3]
  4 -> [1, 3]
  5 -> [5]
  6 -> []
  9 -> [1, 3, 5] (zwróć uwagę, że [9] nie jest prawidłową odpowiedzią)
 15 -> [3, 5, 7]
104 -> [23, 25, 27, 29] (zauważ, że [51, 53] nie jest prawidłową odpowiedzią)

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w każdym języku.

musicman523
źródło
2
Czy mój program może działać wiecznie, jeśli nie ma rozwiązania?
Dennis,
Bardzo spokrewniony . Jednak fakt, że niektóre liczby parzyste nie mogą być reprezentowane w tym, może uchronić go przed duplikatem.
ETHprodukcje
6
Czy 15 nie może dać [-1, 1, 3, 5, 7]? Jeśli dozwolone są tylko wartości dodatnie, należy to powiedzieć.
xnor
2
@ ЕвгенийНовиков opuściłeś 17
kalsowerus
1
@kalsowerus yes. Nie rozumiem słowa „konsekutywne”
Евгений Новиков

Odpowiedzi:

11

Haskell, 67 65 63 62 58 bajtów

Zaoszczędzono 4 bajty dzięki Julianowi Wolfowi

f x=[[2*n+1,2*n+3..2*m]|n<-[0..x],m<-[n..x],m^2-n^2==x]!!0

Wypróbuj online!

I sprawdzić, czy liczba ta może być wyrażona jako on różnicy dwóch kwadratów: m^2-n^2. Mogę następnie skonstruować listę kolejnych liczb nieparzystych: [2n+1,2n+3...2m-1]. Zauważ, że ponieważ nwybrano minimum , zostanie wydrukowana najdłuższa lista

H.PWiz
źródło
7
Głosujący na niższy głos: Dodanie komentarza z podaniem przyczyny byłoby bardziej przyjazne i konstruktywne, zwłaszcza gdy głosowanie w dół nowego użytkownika będzie negatywne.
Jonathan Allan,
1
Chyba że coś mi umknie, możesz zaoszczędzić 4 bajty, przechodząc do xobu nim
Julian Wolf
Właśnie dlatego wiesz, że opinia głosowa została automatycznie przesłana przez użytkownika społeczności podczas edytowania odpowiedzi. Uważam to za błąd . (CC @ JonathanAllan)
Dennis
Ach, to był jeden z nich.
Jonathan Allan,
9

Python 2 , 66 62 bajtów

f=lambda n,k=0,*r:n-sum(r)and f(n,k+1,*range(k%n|1,k/n,2))or r

Wychodzi z RuntimeError (przekroczona maksymalna głębokość rekurencji), jeśli nie ma rozwiązania.

Wypróbuj online!

Dennis
źródło
1
Jeśli wartości wejściowe są wystarczająco wysokie, ale istnieje rozwiązanie, czy spowoduje to RuntimeError ?
Okx
Jeśli limit rekurencji nie jest wystarczająco wysoki i / lub stos nie jest wystarczająco duży, tak. Jednak powszechne jest ignorowanie ograniczeń fizycznych (np. Odpowiedź C musi działać tylko w przypadku 32-bitowych liczb całkowitych), a OP wyraźnie stwierdził, że ciągłe działanie jest dopuszczalne, jeśli nie ma rozwiązania.
Dennis
9

Galaretka ,  11  10 bajtów

-1 bajt dzięki Dennis (niejawnie budynku z zakresu - wymienić Rm2Ẇz ẆḤ’)

ẆḤ’S_¥Ðḟ⁸Ṫ

Monadyczny link zwracający listę sum, jeśli to możliwe, a 0jeśli nie.

Wypróbuj online!

W jaki sposób?

ẆḤ’S_¥Ðḟ⁸Ṫ - Link: number, n
Ẇ          - all sublists (implicit range of input) note: ordered by increasing length
           -                i.e. [[1], [2], [3], ..., [1,2], [2,3], ..., [1,2,3], ...]]
 Ḥ         - double              [[2], [4], [6], ..., [2,4], [4,6], ..., [2,4,6], ...]]
  ’        - decrement           [[1], [3], [5], ..., [1,3], [3,5], ..., [1,2,5], ...]]
        ⁸  - link's left argument, n
      Ðḟ   - filter out items for which the following yields a truthy value:
     ¥     -   last two links as a dyad:
   S       -     sum
    _      -     subtract the right from the left = sum - n
         Ṫ - tail (last and hence longest such run)
Jonathan Allan
źródło
1
ẆḤ’zapisuje bajt.
Dennis,
8

JavaScript (ES7), 87 86 85 81 bajtów

Zwraca rozdzielaną przecinkami listę liczb całkowitych lub 0 jeśli nie ma rozwiązania.

n=>(g=(s,k,x=n+s)=>(x**.5|0)**2-x?k>n?0:g(s+k,k+2):(n-=k)?k+','+g(-n,k+2):k)(0,1)

W jaki sposób?

Najpierw szukamy najmniejszego idealny kwadrat s takie, że x + y = N inny kwadratem.

Jeśli istnieje s , n jest różnicą x - s 2 doskonałych kwadratów, którą można zapisać jako różnicę 2 sekwencji kolejnych liczb nieparzystych. Następnie tworzymy wynikową listę.

Przykład:

Dla n = 104 :

Znajdujemy s = 11² = 121, co spełnia x = n + s = 225 = 15²

Następnie:

15² = 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 + 21 + 23 + 25 + 27 + 29
11² = 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 + 21
104 = 15² - 11² = 23 + 25 + 27 + 29

Arnauld
źródło
3
Zaraz, mówisz mi, że n^2zawsze jest równa sumie pierwszych nliczb nieparzystych? Ciekawe
Skidsdev,
2
@Mayube Rzeczywiście !
Arnauld
7

05AB1E , 9 8 bajtów

-1 bajt dzięki Emignie

ÅÉŒʒOQ}н

Wyjaśnienie:

ÅÉ           Generate a list of odd numbers up to, and including, the input
  Œ          Substrings
   ʒ         Only keep values
    O          where the sum
     Q         equals the input
       }     End
             For 9, the result would look like this:
             [[1, 3, 5], [9]]
        н    Get the first value

W przypadku nieprawidłowego wejścia nic nie wyświetla.

Wypróbuj online!

Okx
źródło
ʒOQ}zamiast DO¹QÏzapisuje bajt.
Emigna,
@JonathanAllan Docs mówią „nierówne”, więc mogło to być mylone ...
Erik Outgolfer
1
@JonathanAllan Mały błąd. Naprawiony.
Okx,
6

Haskell , 61 60 bajtów

Dzięki @maple_shaft za golenie 1 bajtu

f n=[k|r<-[1,3..],s<-[r,r+2..n],k<-[[r,r+2..s]],sum k==n]!!0

Wypróbuj online!

Wykorzystuje fakt, że najdłuższym przebiegiem zawsze będzie przebieg rozpoczynający się od najniższej liczby.

Chciałem zrobić coś z arytmetyką zamiast brutalnego forsowania k, ale fromIntegerwydaje się, że to zabija.

Julian Wolf
źródło
Możesz zaoszczędzić jeden bajt, zmieniając [1,3..n]na[1,3..]
maple_shaft
1
Możesz zapisać 7 bajtów dzięki funkcji pomocniczej r?n=[r,r+2..n]. Wypróbuj online!
Ørjan Johansen
4

Python , 67 bajtów

f=lambda n,R=[1]:n-sum(R)and f(n,[R+[R[-1]+2],R[1:]][sum(R)>n])or R

Wypróbuj online!

I skopiowane moją odpowiedź z poprzedniego rzędu suma wyzwanie i zmienił +1się +2. Kto wiedział, że ten golfowy kod może być tak modułowy?

Dziwnie prosta strategia: wyszukaj przedział Rz żądaną sumą.

  • Jeśli suma jest zbyt mała, przesuń prawy punkt końcowy interwału w górę 2, dołączając kolejny numer 2 powyżej.
  • Jeśli suma jest zbyt duża, przesuń lewy punkt końcowy w górę, usuwając najmniejszy element
  • Jeśli suma jest poprawna, wypisz R.

Ponieważ dolny koniec przedziału tylko się zwiększa, dłuższe przedziały znajdują się przed krótszymi. Jeśli nie można znaleźć możliwego interwału, kończy się z IndexError.

xnor
źródło
4

JavaScript (ES6), 65 64 bajtów

f=(a,i=1)=>a>i?(c=f(a-i,i+=2))[0]==i?[i-2,...c]:f(a,i):a<i?0:[i]

Zwraca tablicę, jeśli istnieje rozwiązanie, lub 0 dla braku rozwiązania.

Jest to bardzo nieefektywny, ale golfowy rozwiązanie problemu.

Szuka pierwszego rozwiązania za pomocą a-ii i=1, nawet jeśli nie działa na stos rekurencyjny. Jeśli to rozwiązanie się nie zacznie i+2, wówczas rekurencyjnie szukamy pierwszego rozwiązania za pomocą ai i+2.

Bez golfa

f=(a,i=1)=>
  a > i ? 
    (c = f(a - i, i += 2))[0] == i ? 
      [i-2, ...c] : 
      f(a, i) :
  a < i ? 
    0 :
    [i]

Przypadki testowe:

Aby dowiedzieć się, jak to jest nieefektywne, rozwiązanie f(104)wymaga 69 535 połączeń rekurencyjnych. Stos nigdy nie ma więcej niż 51 poziomów głębokości, więc nie ma problemu z przepełnieniem stosu.

Rozwiązanie f(200)wymaga 8,6 miliona połączeń rekurencyjnych, z głębokością stosu 99 poziomów. (Jego rozwiązaniem jest [11,13,15,17,19,21,23,25,27,29].)

Oto wizualna reprezentacja uruchomionego programu:

Rick Hitchcock
źródło
3

Python 2.7, 109 108 97 bajtów

11 bajtów w dół, dzięki Erik the Outgolfer.

To mój pierwszy golfowy kod!

def f(N):
 for n in range(N):
    x=(n*n+N)**.5-n
    if x%1==0:return[2*(k+n)+1for k in range(int(x))]

Jak to działa

Użyłem tej dobrze znanej tożsamości 1 + 3 + 5 + ... + (2n - 1) = n²

Weźmy przypadek 15

15 = 3 + 5 + 7 = (1 + 2) + (3 + 2) + (5 + 2) = (1 + 3 + 5) + 3×2 = 3² + 3×2

Ogólnie rzecz biorąc, jeśli istnieją x warunki zaczynające się od 2n + 1, np

(2n + 1) + (2n + 3) + (2n + 5) ... (2n + (2x-1))


Jest równa 2nx + x²

Jeśli Nwejściowa liczba całkowita, problem sprowadza się do znalezienia maksimum xtakiego, że

x² + 2nx - N = 0

Jest to równanie kwadratowe z rozwiązaniem

x = sqrt(n² + N) - n

Najdłuższa sekwencja to jedna z największymi x. Program dokonuje iteracji nod 0do Ni kiedy stwierdzi, że xjest liczbą całkowitą, tworzy listę (2n + 1) + (2n + 3) + (2n + 5) ... (2n + (2x-1))i zwraca ją.

dark32
źródło
@EriktheOutgolfer, Dzięki, zapomniałem o używaniu tabulatorów (=
dark32,
3

Python 3, 190 81 bajtów

def c(q,l,i):
    if sum(l)0:
        l.append(i)
        return c(q,l,i+2)
    elif sum(l)>q:
        l.pop(0)
        return c(q,l,i)
    else:
        print(l)
c(q,[1],1)

c=lambda q,l=[1]:c(q,l+[l[-1]+2])if(sum(l)<q)*l else c(q,l[1:])if sum(l)>q else l

Dzięki @ovs i @ musicman523

Szymon, Szymek
źródło
4
Możesz to zmniejszyć do 122 bajtów, po prostu usuwając wcięcia . Jeśli chcesz jeszcze bardziej skrócić swój kod, spójrz na Wskazówki dotyczące gry w golfa w Pythonie .
ovs
3
Nie działa to w Pythonie 3, ponieważ printbrakuje połączenia w nawiasach
musicman523,
2
Możesz usunąć l.append(i), używając po prostu l+[i]w wywołaniu rekurencyjnym. Możesz usunąć l.pop(0), używając l[1:]w połączeniu rekurencyjnym. Możesz usunąć wywołanie cna samym dole, używając zamiast tego argumentów słów kluczowych. Możesz usunąć >0wiersz 2. Na koniec możesz zamienić swoje wyrażenia ifi elsena wyrażenia, używając formy trójskładnikowej, która prowadzi do 92 bajtów jako wyrażenia lambda. Wypróbuj online!
musicman523
1
W oparciu o sugestie @ musicman523 nadal możemy skrócić warunki i upuścić, iaby uzyskać w sumie 81 bajtów .
ovs
Myślę, że możesz zmienić sum(l)>q elsena, q<sum(l)elseaby zapisać 1 bajt.
Zacharý
2

QBIC , 47 bajtów

{_Cg=q┘q=q+2~g>:|_Xp\?g,[q,a,2|?b,┘g=g+b~g=a|_X

Próbuje policzyć wszystkie liczby nieparzyste od jednego, aż do jego sumy n. Jeśli mija n, zresetuj pętlę, zwiększ od 1 do 3 i spróbuj ponownie. Wyjdź, drukując 0, jeśli na początku pętli nasz numer > n.

Wyjaśnienie

{       Do infinitely
_C      Clear the screen (we basically print every run of odd numbers, but clear out everything that doesn't sum up to n)
g=q     Set g to the first num of this cycle (q starts as 1 in QBIC)    
┘       (Syntatcic linebreak)
q=q+2   Raise q to the next odd number, this sets up both the next outer loop as well as a coming FOR loop
~g>:|   If we start out with a number > n (read as 'a' from the cmd line)
_Xp     THEN quit, printing 0 (the value of the number var 'p')
\       ELSE
[q,a,2| FOR b = q, b <= n, b+=2
?b,┘    PRINT b followed by a tab
g=g+b   Add 'b' to running total 'g'
~g=a|   and if that lands us on 'n'
_X      QUIT (printing nothing: everything is already printed)
Steenbergh
źródło
1

R , 90 bajtów

f=function(x,y=1)'if'(length(w<-which(cumsum(r<-y:x*2-1)==x)),r[1:w],'if'(y>x,0,f(x,y+1)))

Wypróbuj online!

Używa funkcji rekurencyjnej, która testuje skumulowaną sumę sekwencji y: x zamienioną na sekwencję liczb nieparzystych. y jest zwiększane przy każdej rekurencji, dopóki nie przekroczy x. Pierwsza sekwencja sumująca się z celem zostanie zwrócona.

MickyT
źródło
1

Python 2 , 89 bajtów

lambda n,r=range:[v for v in[r(1,n+1,2)[i:j]for i in r(n)for j in r(n+1)]if sum(v)==n][0]

Nienazwana funkcja przyjmująca dodatnią liczbę całkowitą ni zwracająca wynik, jeśli istnieje, i zwraca wartość IndexErrorinną.

Wypróbuj online!

Tworzy listę wszystkich odpowiednich liczb nieparzystych, z r(1,n+1,2)którymi jest range(start=1, stop=n+1, step=2); tworzy wszystkie odpowiednie pod-plastry (oraz kilka pustych) przez cięcie, że od iwłącznie z jwyłącznym z [i:j]drugiej iw [0, n), z użyciem r(n)i jw [0, n], za pomocą r(n+1)(na pustych podczas i>=jlub ijest poza zakresem); filtry dla tych z poprawną sumą za pomocą if sum(v)==n; zwraca pierwszy (i stąd najdłuższy) taki plasterek za pomocą [0].

Jonathan Allan
źródło
1

Python 2 , 91 90 bajtów

-1 bajt dzięki @CMcAvoy

lambda n,r=range:[r(i,j+1,2)for i in r(1,n+1,2)for j in r(i,n+1,2)if(i+j)*(2+j-i)==4*n][0]

Wypróbuj online!

ovs
źródło
1

PHP , 73 bajty

żadne rozwiązanie nie jest nieskończoną pętlą

for($e=-1;$s-$i=$argn;)$s+=$s<$i?$n[]=$e+=2:-array_shift($n);print_r($n);

Wypróbuj online!

PHP , 83 bajty

nic nie drukuje bez rozwiązania

każdy mod wejściowy 4 == 2 nie ma rozwiązania

for($e=-1;($i=$argn)%4-2&&$s-$i;)$s+=$s<$i?$n[]=$e+=2:-array_shift($n);print_r($n);

Wypróbuj online!

Jörg Hülsermann
źródło
nie wykrywa nierozwiązywalnego wejścia
Tytus
@Titus naprawiono ...
Jörg Hülsermann
0

Python 2 , 122 121 119 115 bajtów

-1 bajt dzięki musicman523. -4 bajty dzięki Step Hen. ha ha

def f(n,R=range):r=R(1,n,2);print[i for w in R(1,len(r)+1)for i in[r[j:j+w]for j in R(len(r)-w+1)]if sum(i)==n][-1]

Wypróbuj online!

całkowicie ludzki
źródło
1
Jest to o jeden bajt krótszy jako funkcja. Wypróbuj online!
musicman523,
Oszczędź bajty, jeśli przedefiniujesz range, wypróbuj online!
Stephen
Nie udaje się to przez 1 .
Dennis,
0

Python 3 , 93 bajty

lambda n,r=range:[[*r(s,e+1,2)]for s in r(1,n+1,2)for e in r(s,n+1,2)if(s+e)*(2+e-s)==4*n][0]

Wypróbuj online!

Jedyną rzeczą, którą zrobiłem, było zauważenie, że (s+e)*(2+e-s)==4*njest to równoważne sum(range(s,e+1,2))==n, i chociaż są one tego samego rozmiaru, kiedy r=rangeto pierwsze można umieścić bliżej ifoświadczenia.

C McAvoy
źródło
0

Python 3 , 185 bajtów

def f(s):
  d={k:v for k,v in{a:(1-a+((a-1)**2+4*s)**(.5))/2 for a in range(1,s,2)}.items()if int(v)==v};m=max(d.keys(), key=(lambda k: d[k]));return list(range(int(m),int(m+2*d[m]),2))

Wypróbuj online!


Jeśli chodzi o to, jak to działa, starałem się znaleźć nieco bardziej eleganckie rozwiązanie niż proste wyszukiwanie brutalnej siły. Zmieniłem formułę na sumę sekwencji arytmetycznej i zastosowałem wzór kwadratowy, aby uzyskać wyrażenie (1-a+((a-1)**2+4*s)**(.5))/2, które pojawia się w kodzie. To, co wylicza, oblicza się, biorąc pod uwagę pożądaną sumę si pierwszy termin dla sekwencji arytmetyczneja , długość sekwencji. Te długości są przechowywane w słowniku jako wartości do pierwszych haseł jako klucze.

Następnie wszystkie wartości niecałkowite są usuwane ze słownika, ponieważ reprezentują one niepoprawne sekwencje. Stamtąd identyfikowana jest największa wartość max(d.keys(), key=(lambda k: d[k]))i tworzona jest sekwencja liczb nieparzystych w tej pozycji i na tej długości list(range(int(m),int(m+2*d[m]),2)).


Szukam pomocy w grze w golfa, jeśli coś zobaczysz. Bardziej interesowało mnie, jak dobrze radzę sobie z nietrywialnym algorytmem; moja odpowiedź jest prawie dwa razy dłuższa niż najlepsze rozwiązanie Python.

Chase Vogeli
źródło
Czy to zadziała? repl.it/JTt7 (177 bajtów)
Zacharý
0

Mathematica, 56 bajtów

Last@Cases[Subsequences@Table[n,{n,1,#,2}],x_/;Tr@x==#]&

Functionz pierwszym argumentem #. Table[n,{n,1,#,2}]oblicza listę dodatnich liczb nieparzystych mniejszych lub równych #. Subsequenceszwraca wszystkie podsekwencje tej listy uporządkowane według długości. Następnie bierzemy Casespasujące x_/;Tr@x==#sekwencje, to znaczy xtakie sekwencje , że ich suma Tr@xjest równa wejściowej #. Następnie przyjmujemy Lasttaką sekwencję.

ngenisis
źródło
0

JavaScript (ES6), 72 bajty

n=>(g=s=>s?s>0?g(s-(u+=2)):g(s+l,l+=2):u-l?l+' '+g(s,l+=2):u)(n-1,l=u=1)

Zwraca ciąg nieparzystych liczb oddzielonych spacjami lub zgłasza nieprawidłowe dane wejściowe. Wersja 84-bajtowa, która zwraca tablicę (w razie potrzeby pustą):

n=>n%4-2?(g=s=>s?s>0?g(s-(u+=2)):g(s+l,l+=2):u-l?[l,...g(s,l+=2)]:[u])(n-1,l=u=1):[]

Objaśnienie: Luźno oparty na rozwiązaniu awk @ Cabbie407 dla Sumów kolejnych liczb całkowitych, z wyjątkiem tego, że byłem w stanie zaoszczędzić kilka bajtów za pomocą rekurencji.

Neil
źródło
0

PHP, 78 bajtów

for($b=-1;$s-$argn;)for($n=[$s=$x=$b+=2];$s<$argn;)$s+=$n[]=$x+=2;print_r($n);

nieskończona pętla, jeśli nie ma rozwiązania. wstaw ?$b>$argn+2?$n=[]:1:0po$s-$argn zamiast wydrukować pustą tablicę.

Uruchom -nRlub wypróbuj online .

Tytus
źródło
0

C # (.NET Core) , 129 bajtów

(i)=>{int s,j,b=1,e=3;for(;;){var o="";s=0;for(j=b;j<e;j+=2){s+=j;o+=j+" ";}if(s==i)return o;s=s<i?e+=2:b+=2;if(b==e)return"";}};

Wyświetla liczby w ciągu, rozdzielane spacjami (każdy inny znak wymagałby tylko zmiany " "). Dane wejściowe bez rozwiązania zwracają pusty ciąg znaków (chociaż jeśli ciągłe działanie bez błędu jest prawidłowym sposobem wskazania braku rozwiązania, można usunąć 17 bajtów, usuwającif(b==e)return"";).

Algorytm to:

  1. Zacznij od [1]
  2. Jeśli suma jest równa celowi, zwróć listę
  3. Jeśli suma jest mniejsza niż docelowa, dodaj następną liczbę nieparzystą
  4. Jeśli suma jest większa niż cel, usuń pierwszy element
  5. Jeśli lista jest pusta, zwróć ją
  6. Powtórz od 2
Kamil Drakari
źródło
You can write (i)=> as i=>
aloisdg says Reinstate Monica
0

C++, 157 -> 147 Bytes


-10 Bytes thanks to DJMcMayhem

will return 0 if there's no answer, 1 otherwise

the last line it prints is the answer

int f(int n){for(int i=1;;i+=2){int v=0;for(int k=i;;k+=2){v+=k;std::cout<<k<<" ";if(v==n)return 1;if(v>n)break;}if(i>n)return 0;std::cout<<"\n";}}

ungolfed:

int f(int n)
{
    for (int i = 1;; i += 2)
    {
        int v = 0;
        for (int k = i;; k += 2)
        {
            v += k;
            std::cout << k << " ";
            if (v == n)
                return 1;
            if (v > n)
                break;

        }
        if (i > n)
            return 0;
        std::cout << "\n";
    }
}

this is my first code golf ^^

Zobacz oprogramowanie
źródło
Możesz zapisać niektóre bajty, jeśli uczynisz go funkcją int i zwrócisz 0 lub 1. Możesz także zrobić int v=0;zamiast, int v;....v=0;a jeśli std::cout<<k<<"\n";
określiłeś
jeśli zrobię ostatnią rekomendację, wydrukuje nową linię na każdym numerze, ale chcę oddzielić grupy liczb, ale i tak dziękuję za -10 bajtów
SeeSoftware
0

Kotlin, 152 bajty

fun f(a:Double){var n=Math.sqrt(a).toInt()+1;var x=0;while(n-->0){if(((a/n)-n)%2==0.0){x=((a/n)-n).toInt()+1;while(n-->0){println(x.toString());x+=2}}}}

Wypróbuj online (Zaczekaj 4-5 sekund, kompilator działa wolno)

Bez golfa

fun f(a: Double){
    var n=Math.sqrt(a).toInt()+1;
    var x=0;

    while(n-->0){
        if(((a/n)-n)%2==0.0){
            x=((a/n)-n).toInt()+1;

            while(n-->0){
                println(x.toString());
                x+=2;
            }

        }
    }
}
Евгений Новиков
źródło
0

Excel VBA, 139 bajtów

Subroutine that takes input n of expected type integer and reports the longest sequence of consecutive odd numbers to cell [A1]

Sub a(n)
For i=1To n Step 2
s=0
For j=i To n Step 2
s=s+j
If s=n Then:For k=i To j-1 Step 2:r=r &k &"+":Next:[A1]=r &j:End
Next j,i
End Sub
Taylor Scott
źródło