একটানা বিজোড় সংখ্যার যোগফল


24

যদিও সম্পর্কিত চ্যালেঞ্জ জিজ্ঞাসা করা হয়েছে, এটি নিজের প্রশ্নের ওয়ারেন্ট দেওয়ার পক্ষে আলাদা।


চ্যালেঞ্জ

ধনাত্মক পূর্ণসংখ্যা দেওয়া, ক্রমাগত ধনাত্মক বিজোড় পূর্ণসংখ্যার দীর্ঘতম ক্রমটি প্রদান করুন যার যোগফল পূর্ণসংখ্যা। যদি এ জাতীয় কোনও অনুক্রম বিদ্যমান না থাকে, আপনি মিথ্যা মান ফিরিয়ে দেওয়া বা একটি ব্যতিক্রম ছুঁড়ে ফেলা সহ আপনার ভাষার জন্য যেভাবেই অর্থ বোধ করে তা ত্রুটি হিসাবে রিপোর্ট করতে পারেন।

পরীক্ষার মামলা

  1 -> [1]
  2 -> []
  3 -> [3]
  4 -> [1, 3]
  5 -> [5]
  6 -> []
  9 -> [1, 3, 5] (নোট করুন [9] একটি বৈধ উত্তর নয়)
 15 -> [3, 5, 7]
104 -> [২৩, ২৫, ২ 27, ২৯] (মনে রাখবেন যে [৫১, ৫৩] একটি কার্যকর উত্তর নয়)

স্কোরিং

এটি , তাই প্রতিটি ভাষার সংক্ষিপ্ত উত্তর জিততে পারে।


2
সমাধান না হলে আমার প্রোগ্রাম কি চিরকাল চলতে পারে?
ডেনিস

খুব সম্পর্কিত । কিছু এক এমনকি সংখ্যার এই একটিতে প্রতিনিধিত্ব করা যায় না, যদিও এটি ডুপ হওয়া থেকে বাঁচাতে পারে।
ETH প্রোডাকশনগুলি

6
15 টি দিতে পারে না [-1, 1, 3, 5, 7]? যদি কেবলমাত্র ইতিবাচক মানগুলিই অনুমোদিত হয় তবে আপনার এটি বলা উচিত।
xnor

2
@। আপনি 17
এড়ালেন

1
@ ক্যালসওয়ারাস হ্যাঁ আমি "একটানা" শব্দটি ভুল বুঝি
Новиков

উত্তর:


11

হাস্কেল, 67 65 63 62 58 বাইট

জুলিয়ান ওল্ফকে 4 টি বাইট সংরক্ষণ করে

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

এটি অনলাইন চেষ্টা করুন!

তিনি দুটি স্কোয়ারের পার্থক্য হিসাবে সংখ্যাটি প্রকাশ করা যেতে পারে কিনা তা আমি পরীক্ষা করে দেখি m^2-n^2। আমি তখন পরপর বিজোড় সংখ্যার তালিকা গঠন করা যেতে পারে: [2n+1,2n+3...2m-1]। নোট করুন যেহেতু সর্বনিম্ন nচয়ন করা হয়েছে, দীর্ঘতম তালিকাটি আউটপুট হবে


7
নিচে ভোটার: আপনার যুক্তি যুক্ত করে একটি মন্তব্য যুক্ত করা বন্ধুত্বপূর্ণ এবং আরও গঠনমূলক উভয়ই হবে, বিশেষত কোনও নতুন ব্যবহারকারীকে যখন ভোট দিয়ে যায়।
জোনাথন অ্যালান

1
যদি আমি কিছু মিস না করি তবে আপনি কেবল xদুজনের কাছে nm
জুলিয়ান ওল্ফ

ঠিক তাই আপনি জানেন যে, আপনার উত্তরটি সম্পাদনা করার সময় সম্প্রদায় ব্যবহারকারী দ্বারা ডাউনভোটটি স্বয়ংক্রিয়ভাবে কাস্ট হয়েছিল। আমি এই একটি বাগ বিবেচনা । (সিসি @ জোনাথন অ্যালান)
ডেনিস

আহ, এটি তাদের মধ্যে একটি ছিল।
জোনাথন অ্যালান

9

পাইথন 2 , 66 62 বাইট

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

কোনও সমাধান না হলে রানটাইমআরারের সাথে প্রস্থান করুন (সর্বাধিক পুনরাবৃত্তির গভীরতা ছাড়িয়ে গেছে)।

এটি অনলাইন চেষ্টা করুন!


1
যদি ইনপুট মানগুলি যথেষ্ট পরিমাণে উচ্চ হয় তবে সমাধান পাওয়া যায় তবে এটি রানটাইমআরারের ফলস্বরূপ ?
Okx

যদি পুনরাবৃত্তির সীমা যথেষ্ট পরিমাণে না হয় এবং / অথবা স্ট্যাকটি যথেষ্ট পরিমাণে বড় না হয় তবে হ্যাঁ। তবে শারীরিক সীমাবদ্ধতা (যেমন, একটি সি উত্তর কেবল 32-বিট ইন্টের জন্য কাজ করতে পারে) উপেক্ষা করা সাধারণ, এবং ওপি স্পষ্টভাবে বলেছে যে কোনও সমাধান না হলে চিরতরে চালানো গ্রহণযোগ্য।
ডেনিস

9

জেলি ,  11  10 বাইট

-1 ডেনিস করার বাইট ধন্যবাদ (এর অন্তর্নিহিত পরিসীমা ভবন ব্যবহার - প্রতিস্থাপন Rm2Ẇসঙ্গে ẆḤ’)

ẆḤ’S_¥Ðḟ⁸Ṫ

একটি মোনাডিক লিঙ্কটি যদি সম্ভব হয় তবে সামঞ্জস্যগুলির একটি তালিকা ফিরিয়ে দেয় 0

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

ẆḤ’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)

1
ẆḤ’একটি বাইট সংরক্ষণ করে।
ডেনিস

8

জাভাস্ক্রিপ্ট (ES7), 87 86 85 81 বাইট

পূর্ণসংখ্যার কমা-বিস্মৃত তালিকা ফেরত দেয়, বা 0যদি কোনও সমাধান না থাকে।

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)

কিভাবে?

আমরা প্রথম চেহারা ক্ষুদ্রতম নিখুঁত বর্গক্ষেত্র গুলি যেমন যে এক্স = ঢ + S অন্য নিখুঁত বর্গক্ষেত্র হয়।

যদি s বিদ্যমান থাকে তবে n হ'ল 2 নিখুঁত বর্গক্ষেত্রের x - s , যা পরপর বিজোড় সংখ্যার 2 অনুক্রমের পার্থক্য হিসাবে রচনা করা যেতে পারে। তারপরে আমরা ফলাফলটি তৈরি করি।

উদাহরণ:

জন্য এন = 104 :

আমরা স = 11² = 121 খুঁজে পাই যা x = n + s = 225 = 15² কে সন্তুষ্ট করে ²

তারপর:

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


3
অপেক্ষা করুন আপনি কি আমাকে বলছেন যে n^2সর্বদা প্রথম nবিজোড় সংখ্যার যোগফলের সমান ? হু, আকর্ষণীয়
স্কিডেদেব

2
@ মায়ুব আসলেই !
আর্নল্ড


7

05 এ বি 1 ই , 9 8 বাইট

-1 বাইট ধন্যবাদ Emigna

ÅÉŒʒOQ}н

ব্যাখ্যা:

ÅÉ           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

অবৈধ ইনপুটে, কিছুই আউটপুট দেয়।

এটি অনলাইন চেষ্টা করুন!


ʒOQ}পরিবর্তে DO¹QÏএকটি বাইট সংরক্ষণ করুন।
এমিগিনা


1
@ জোনাথান অ্যালান সংশোধন করা হয়েছে।
Okx

6

হাস্কেল , 61 60 বাইট

1 মাইট ছাঁটাই করার জন্য @ ম্যাপেল_শ্যাফ্টকে ধন্যবাদ জানাই

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

এটি অনলাইন চেষ্টা করুন!

দীর্ঘতম রান সর্বদা সর্বনিম্ন সংখ্যার সাথে শুরু হওয়া রান হবে তা ব্যবহার করে।

আমি জাল-জোর করে স্থির করে পাটিগণিতের সাথে কিছু করতে চেয়েছিলাম k, তবে fromIntegerমনে হচ্ছে এটি মেরে ফেলবে।


আপনি পরিবর্তন করে নিজেকে এক বাইট সংরক্ষণ করতে পারবেন [1,3..n]করার[1,3..]
maple_shaft

1
আপনি একটি সহায়ক ফাংশন দিয়ে 7 বাইট সংরক্ষণ করতে পারেন r?n=[r,r+2..n]এটি অনলাইন চেষ্টা করুন!
janrjan জোহানসেন

4

পাইথন , 67 বাইট

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

এটি অনলাইন চেষ্টা করুন!

আমি কপি পূর্ববর্তী পরপর সমষ্টি চ্যালেঞ্জ থেকে আমার উত্তর এবং পরিবর্তন +1করার +2। কে জানত যে গল্ফড কোডটি এত বেশি মডুলার হতে পারে?

অদ্ভুতভাবে সোজাসাপ্ট কৌশল: Rপছন্দসই যোগফলের সাথে অন্তর সন্ধান করুন ।

  • যদি যোগফল খুব অল্প হয়, তার উপরে পরবর্তী নম্বর 2 যুক্ত করে ব্যবধানের ডান প্রান্তটি 2 এ স্থানান্তর করুন।
  • যদি যোগফলটি খুব বড় হয় তবে ক্ষুদ্রতম এলিমেন্টটি সরিয়ে বাম প্রান্তটি স্থানান্তর করুন
  • যোগফল যদি সঠিক হয় তবে আউটপুট R

যেহেতু বিরতিটির নীচের প্রান্তটি কেবল বৃদ্ধি পায়, তাই দীর্ঘতর ব্যবধানগুলি ছোট হওয়ার আগে পাওয়া যায়। যদি কোনও সম্ভাব্য অন্তর খুঁজে না পাওয়া যায় তবে সূচিপত্র দিয়ে শেষ হয়।


4

জাভাস্ক্রিপ্ট (ES6), 65 64 বাইট

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

সমাধান না থাকলে একটি অ্যারে বা 0 সমাধান না করে প্রদান করে।

এটি একটি অত্যন্ত অদক্ষ তবু গোলাপী সমাধান।

এটি প্রথম সমাধানটি ব্যবহার করে a-iএবং i=1এটি পুনরাবৃত্তাকার স্ট্যাকটি কার্যকর না করলেও অনুসন্ধান করে । যদি সেই সমাধানটি শুরু না হয় i+2, তবে আমরা পুনরাবৃত্তভাবে প্রথম সমাধানটি ব্যবহার করে aএবং এর জন্য অনুসন্ধান করি i+2

Ungolfed

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

পরীক্ষার কেস:

এটি কতটা অক্ষম তা ধারণা করার f(104)জন্য, সমাধানটির জন্য 69,535 পুনরাবৃত্ত কলগুলি প্রয়োজন। স্ট্যাকটি কখনও 51 টিরও বেশি গভীর নয়, তাই স্ট্যাকের ওভারফ্লোতে কোনও সমস্যা নেই।

সমাধান f(200) জন্য 8.6 মিলিয়ন পুনরাবৃত্তি কলগুলির প্রয়োজন, স্ট্যাকের 99 স্তরের গভীর। (এর সমাধানটি হ'ল [11,13,15,17,19,21,23,25,27,29])

এখানে চলমান প্রোগ্রামটির একটি ভিজ্যুয়াল উপস্থাপনা:


3

পাইথন 2.7, 109 108 97 বাইট

11 বাইট নিচে, এরিক দ্য আউটগোল্ফারকে ধন্যবাদ।

এটি আমার প্রথম কোড গল্ফ!

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))]

কিভাবে এটা কাজ করে

আমি যে পরিচিত পরিচয় ব্যবহার করেছি 1 + 3 + 5 + ... + (2n - 1) = n²

কেস নিন 15

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

সাধারণভাবে, যদি এখানে X পদগুলি শুরু হয় 2n + 1, যেমন

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


এটি সমান 2nx + x²

যদি Nইনপুট পূর্ণসংখ্যা, সমস্যা সর্বাধিক খোঁজার জন্য হ্রাস xযেমন যে

x² + 2nx - N = 0

এটি সমাধানের সাথে একটি চতুর্ভুজ সমীকরণ

x = sqrt(n² + N) - n

দীর্ঘতম ক্রমটি বৃহত্তম সহ একটি x। প্রোগ্রাম iterates nথেকে 0থেকে Nএবং যখন যে xএকটি পূর্ণসংখ্যা, এটা একটি তালিকা তৈরি করে (2n + 1) + (2n + 3) + (2n + 5) ... (2n + (2x-1))তা রিটার্ন করে।



@ এরিকথ আউটগলফার, ধন্যবাদ, আমি ট্যাবগুলি ব্যবহার করতে ভুলে গেছি (=
অন্ধকার 32

3

পাইথন 3, 190 81 বাইট

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

@Ovs এবং @ musicman523 কে ধন্যবাদ


4
আপনি কিছু ইনডেন্টেশন সরিয়ে 122 বাইটে নামাতে পারেন । আপনি যদি নিজের কোডটি আরও ছোট করতে চান তবে পাইথনে গল্ফ করার টিপস দেখুন ।
ovs

3
এটি পাইথন 3 তে চলবে না, কারণ কলটি printবন্ধনী অনুপস্থিত
musicman523

2
আপনি l.append(i)কেবল l+[i]পুনরাবৃত্তি কল ব্যবহার করে মুছে ফেলতে পারেন । পুনরাবৃত্তি কল l.pop(0)ব্যবহার করে l[1:]আপনি মুছে ফেলতে পারেন । cপরিবর্তে কীওয়ার্ড আর্গুমেন্ট ব্যবহার করে আপনি কলটি খুব নীচে সরিয়ে ফেলতে পারেন । আপনি >0লাইন ২-এ সরিয়ে ফেলতে পারেন শেষ অবধি, আপনি আপনার ifএবং elseবক্তব্যগুলিকে এক্সপ্রেশন হিসাবে পরিবর্তন করতে পারেন , টের্নারি ফর্মটি ব্যবহার করে যা আপনাকে ল্যাম্বডা এক্সপ্রেশন হিসাবে 92 বাইটে নামিয়ে আনবে। এটি অনলাইন চেষ্টা করুন!
musicman523

1
@ সঙ্গীতানুষ্ঠান 523 এর পরামর্শের ভিত্তিতে আমরা এখনও শর্তগুলি সংক্ষিপ্ত করে iমোট 81 বাইটে নামতে পারি ।
ovs

আমি মনে করি আপনি 1 বাইট সংরক্ষণ করতে পরিবর্তন sum(l)>q elseকরতে q<sum(l)elseপারেন।
জাকারিয়া

2

কিউবিআইসি , 47 বাইট

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

এটি একের থেকে এর সমষ্টি না হওয়া অবধি সমস্ত বিজোড় সংখ্যা গণনা করার চেষ্টা করে n। যদি এটি পাস হয়ে যায় n, লুপটি পুনরায় সেট করুন, 1 থেকে 3 বাড়িয়ে আবার চেষ্টা করুন। প্রস্থান করুন, 0 মুদ্রণ, লুপ শুরুতে যদি আমাদের নম্বর > n

ব্যাখ্যা

{       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)

1

আর , 90 বাইট

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)))

এটি অনলাইন চেষ্টা করুন!

একটি পুনরাবৃত্ত ফাংশন ব্যবহার করে যা পরীক্ষার সিকোয়েন্সের যোগফলের যোগফল y: x একটি বিজোড় সংখ্যা ক্রমে রূপান্তরিত করে। x এর অতিক্রম না করা পর্যন্ত প্রতিটি পুনরাবৃত্তিতে y বৃদ্ধি করা হয়। লক্ষ্যটির যোগফলের প্রথম ক্রমটি ফিরে আসবে।


1

পাইথন 2 , 89 বাইট

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]

একটি নামবিহীন ফাংশন একটি ইতিবাচক পূর্ণসংখ্যা গ্রহণ করে nএবং ফলাফল উপস্থিত থাকলে তা ফিরিয়ে দেওয়া এবং IndexErrorঅন্যথায় উত্থাপন ।

এটি অনলাইন চেষ্টা করুন!

এর সাথে সম্পর্কিত সমস্ত বিজোড় সংখ্যাগুলির একটি তালিকা তৈরি করে r(1,n+1,2) যা range(start=1, stop=n+1, step=2); যে থেকে সমস্ত প্রাসঙ্গিক উপ-টুকরা (প্লাস কিছু খালি বেশী) slicing দ্বারা সৃষ্টি iকরতে সমেত jসঙ্গে একচেটিয়া [i:j]জুড়ে iমধ্যে [0, এন) ব্যবহার r(n)এবং j0 [, এন] ব্যবহার r(n+1)(খালি বেশী যখন i>=jবা iসীমানার বাইরে গেছে); যাদের সাথে সঠিক যোগফল রয়েছে তাদের জন্য ফিল্টারগুলি if sum(v)==n; ব্যবহার করে এই জাতীয় স্লাইসটি প্রথম (এবং তাই দীর্ঘতম) প্রদান করে [0]




1

পিএইচপি , 73 বাইট

কোন সমাধান একটি অসীম লুপ হয়

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

এটি অনলাইন চেষ্টা করুন!

পিএইচপি , 83 বাইট

কোন সমাধান জন্য কিছুই মুদ্রণ

প্রতিটি ইনপুট মোড 4 == 2 এর কোনও সমাধান নেই

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

এটি অনলাইন চেষ্টা করুন!


অবিশ্বাস্য ইনপুট সনাক্ত করতে ব্যর্থ
টাইটাস

@ টাইটাস স্থির ...
জার্গ হালসারম্যান

0

পাইথন 2 , 122 121 119 115 বাইট

-1 বাইট সংগীতকারকে ধন্যবাদ 23 -4 বাইট ধাপ হেন ধন্যবাদ। হা হা

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]

এটি অনলাইন চেষ্টা করুন!


1
এটি একটি ফাংশন হিসাবে একটি বাইট সংক্ষিপ্ত। এটি অনলাইন চেষ্টা করুন!
musicman523

যদি আপনি পুনরায় সংজ্ঞায়িত সংরক্ষণ বাইট range, এটি অনলাইন ব্যবহার করে দেখুন!
স্টিফেন

এটি 1 এর জন্য ব্যর্থ হয় ।
ডেনিস

0

পাইথন ঘ , 93 বাইট

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]

এটি অনলাইন চেষ্টা করুন!

আমি কেবল বিশেষ জিনিসটিই লক্ষ্য করেছিলাম যে (s+e)*(2+e-s)==4*nএটি সমান sum(range(s,e+1,2))==nএবং যদিও এটি একই আকারের হয় যখন r=range, প্রাক্তনটিকে ifবিবৃতিটির আরও কাছে রাখা যায় ।


0

পাইথন 3 , 185 বাইট

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))

এটি অনলাইন চেষ্টা করুন!


এটি কীভাবে কাজ করে তা হিসাবে, আমি একটি সাধারণ উদ্দীপনা অনুসন্ধানের চেয়ে কিছুটা মার্জিত সমাধানের চেষ্টা করার চেষ্টা করেছি। আমি একটি গাণিতিক ক্রমের যোগফলের সূত্রটি পুনরায় সাজিয়েছি এবং এক্সপ্রেশনটি পেতে চতুর্ভুজ সূত্র প্রয়োগ করেছি(1-a+((a-1)**2+4*s)**(.5))/2 উপস্থিত । অঙ্কটি গণনা কী করে তা sগণিত ক্রমের জন্য একটি পছন্দসই যোগফল এবং প্রথম শব্দ দেওয়া হয়a , দৈর্ঘ্যের । এই দৈর্ঘ্যগুলি অভিধান হিসাবে প্রথম পদগুলিতে কী হিসাবে মান হিসাবে সংরক্ষণ করা হয়।

এরপরে, অভিধান থেকে সমস্ত অ-পূর্ণসংখ্যার মানগুলি মুছে ফেলা হবে, কারণ এগুলি অবৈধ ক্রমগুলি উপস্থাপন করে। সেখান থেকে সর্বাধিক মানটি সনাক্ত করা যায় max(d.keys(), key=(lambda k: d[k]))এবং সেই অবস্থান এবং সেই দৈর্ঘ্যে বিজোড় সংখ্যাগুলির ক্রমটি তৈরি করা হয় list(range(int(m),int(m+2*d[m]),2))


আপনি যদি কিছু দেখেন তবে আমি এইটিকে গল্ফ করতে সাহায্যের সন্ধান করছি। আমি অপ্রয়োজনীয় অ্যালগরিদমের সাথে কতটা ভাল করতে পারি তা দেখার আগ্রহ ছিল; আমার উত্তরটি সেরা পাইথনের সমাধান হিসাবে প্রায় দ্বিগুণ।


এই কাজ করবে? repl.it/JTt7 (177 বাইট)
জাকারিয়া

0

গণিত, 56 বাইট

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

Functionপ্রথম যুক্তি দিয়ে #Table[n,{n,1,#,2}]এর চেয়ে কম বা সমান ধনাত্মক বিজোড় সংখ্যাগুলির তালিকা গণনা করে #Subsequencesদৈর্ঘ্য বাড়িয়ে অর্ডার করা তালিকার সমস্ত অনুচ্ছেদগুলি প্রদান করে। তারপরে আমরা Casesকোনটি মিলটি x_/;Tr@x==#, অর্থাৎ ক্রমগুলি গ্রহণ করি যা xতাদের যোগফলের Tr@xসমান #। আমরা তারপর Lastযেমন ক্রম গ্রহণ।


0

জাভাস্ক্রিপ্ট (ES6), 72 বাইট

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)

বিজোড় সংখ্যাগুলির একটি স্পেস-বিভাজনযুক্ত স্ট্রিংটি দেয় বা অবৈধ ইনপুটটিতে নিক্ষেপ করে। 84 বাইট সংস্করণ যা একটি (উপযুক্ত হলে খালি) অ্যারে দেয়:

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):[]

ব্যাখ্যা: ঢিলেঢালাভাবে উপর @ করতে Cabbie407 এর awk সমাধান ভিত্তিক ধারাবাহিক পূর্ণসংখ্যার সমষ্টির ছাড়া আমি recursion ব্যবহার করে কিছু বাইট সংরক্ষণ করতে সক্ষম হন।


0

পিএইচপি, 78 বাইট

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

কোনও সমাধান না হলে অসীম লুপ। ?$b>$argn+2?$n=[]:1:0পরে sert োকান$s-$argn পরিবর্তে খালি অ্যারে প্রিন্ট করতে।

এটি দিয়ে চালান -nRবা অনলাইনে চেষ্টা করুন


0

সি # (.নেট কোর) , 129 বাইট

(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"";}};

একটি স্ট্রিংয়ের আউটপুট সংখ্যা, স্থানকে সীমিত করা (অন্য কোনও চরিত্রের জন্য কেবল পরিবর্তনটি প্রয়োজন " ")। কোনও সমাধান ছাড়াই ইনপুট খালি স্ট্রিং দেয় (যদিও ত্রুটি ছাড়াই চিরকালের জন্য চালানো যদি কোনও সমাধান নির্দেশ না করার বৈধ উপায় হয় তবে 17 বাইট অপসারণের মাধ্যমে সংরক্ষণ করা যায়if(b==e)return""; )।

অ্যালগরিদম হ'ল:

  1. [1] দিয়ে শুরু করুন
  2. যদি লক্ষ্যটি সমান হয় তবে তালিকাটি ফিরে আসুন
  3. যদি লক্ষ্যটির চেয়ে যোগফল কম হয় তবে পরবর্তী বিজোড় সংখ্যা যুক্ত করুন
  4. যোগফল যদি লক্ষ্যের চেয়ে বেশি হয় তবে প্রথম আইটেমটি সরিয়ে ফেলুন
  5. তালিকাটি ফাঁকা থাকলে তা ফেরত দিন
  6. 2 থেকে পুনরাবৃত্তি

আপনি (i)=>যেমন লিখতে পারেনi=>
এলয়েসডজি বলেছেন মিনিকা

0

সি ++, 157 -> 147 বাইট


-10 বাইটস ধন্যবাদ ডিজেএমসিএমহেমকে

অন্যথায় 1 উত্তর না থাকলে 0 আসবে

শেষ প্রান্তটি এটি মুদ্রণ করে উত্তর

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";
    }
}

এটি আমার প্রথম কোড গল্ফ ^^


আপনি কিছুটা বাইট সংরক্ষণ করতে পারেন যদি আপনি এটি কোনও ইনট ফাংশন তৈরি করেন এবং 0 বা 1 ফিরে এসেছিলেন তবে আপনি এর int v=0;পরিবর্তে এটি করতে পারেন int v;....v=0;এবং যদি আপনার আউটপুট নিউলাইনটি সীমিত করে দেওয়া হয় তবে আপনি std::cout<<k<<"\n";দ্বিতীয় নিউলাইন পুরোপুরি সরিয়ে ফেলতে পারেন
ডিজেএমসিএমহেম

যদি আমি শেষ রিকোমেন্ডেশনটি করি তবে এটি প্রতিটি সংখ্যায় একটি নতুন লাইন প্রিন্ট করবে তবে আমি সংখ্যা গ্রুপগুলি পৃথক করতে চাই, তবে যাইহোক -10 বাইটের জন্য ধন্যবাদ
দেখুন

0

কোটলিন, 152 বাইট

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}}}}

এটি অনলাইনে ব্যবহার করে দেখুন (4-5 সেকেন্ড অপেক্ষা করুন, সংকলকটি ধীর)

Ungolfed

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;
            }

        }
    }
}

0

এক্সেল ভিবিএ, 139 বাইট

Subরুটিন যা nপ্রত্যাশিত ধরণের পূর্ণসংখ্যার ইনপুট নেয় এবং একটানা বিজোড় সংখ্যার সর্বাধিক দীর্ঘক্রমের ক্রমটি প্রতিবেদন করে reports[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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.