একটি ক্রম করুন


12

পূর্ণসংখ্যার একটি ক্রম হ'ল এক-সিকোয়েন্স যদি এই অনুক্রমের দুটি ধারাবাহিক সংখ্যার মধ্যে পার্থক্য -1 বা 1 হয় এবং এর প্রথম উপাদানটি 0 হয়।

আরও স্পষ্টভাবে: a1, a2, ..., an হ'ল এক-সিকোয়েন্স যদি:

For any k (1 ≤  k < n): |a[k] - a[k+1]|=1, 
a[1]=0

ইনপুট

  • n - অনুক্রমের উপাদানগুলির সংখ্যা
  • s - অনুক্রমের উপাদানগুলির যোগফল

আউটপুট

  • যদি সম্ভব হয় তবে nউপাদানের যোগফল সহ দৈর্ঘ্যের এক-সিকোয়েন্স সেট / তালিকা / অ্যারে / ইত্যাদিs
  • সম্ভব না হলে একটি খালি সেট / তালিকা / অ্যারে / ইত্যাদি

উদাহরণ

ইনপুট জন্য 8 4, আউটপুট হতে পারে [0 1 2 1 0 -1 0 1]বা [0 -1 0 1 0 1 2 1]। অন্য সম্ভাব্য থাকতে পারে।

ইনপুট জন্য 3 5, আউটপুট খালি [], যেহেতু এটি করা যায় না।

বিধি

এটি একটি কোড গল্ফ, বাইট জেতে সংক্ষিপ্ত উত্তর। জমা দেওয়া কোনও প্রোগ্রাম বা ফাংশন হওয়া উচিত। ইনপুট / আউটপুট মানক যে কোনও উপায়ে দেওয়া যেতে পারে ।


যাইহোক, আমার কাছে একটি প্রমাণ আছে যে দৈর্ঘ্যের এক ক্রম হিসাবে প্রতিনিধিত্বযোগ্য সমস্ত সংখ্যা l এর মধ্যে সমস্ত সংখ্যা (l-1)*l/2এবং -(l-1)*l/2যার সমান সমতা রয়েছে (l-1)*l/2
গর্বিত হাস্কেলর

এটি পছন্দসই এক সিকোয়েন্স তৈরি করতে একটি দক্ষ অ্যালগরিদম (ও (এন)) তৈরি করতে ব্যবহার করা যেতে পারে
গর্বিত হাসেলেলার

উত্তর:


7

সিজেম, 56 47 44 34 বাইট

উন্নতির জন্য এখানে অনেক সুযোগ রয়েছে তবে এখানে প্রথম প্রচেষ্টাটি এখানে রয়েছে:

L0aa{{[~_(]_)2++}%}l~:N;(*{:+N=}=p

{ ... }%অংশটি করার দক্ষতার জন্য ডেনিসকে ক্রেডিট ।

অন্যথায়, যদি সম্ভব হয় অ্যারে উপস্থাপনা মুদ্রণ ""

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


আমি বিভ্রান্ত: {}%আপনার কোডের অংশটি আমার মতো কিছুই দেখায় না (যা কেবলমাত্র @ পিটারটেলারের কোড, আন্ডারস্কোর দিয়ে ডটগুলি প্রতিস্থাপন করে)। আমি যদি আপনার কোডটিতে কিছু অবদান রাখি তবে এটি {}=অপারেটর ...
ডেনিস 18

আমার শুরুতে ছিল _{_W=)+}%\{_W=(+}%+যা প্রথম দুটি অনুলিপি তৈরি করছিল, প্রথমটিতে 1 টি যুক্ত কর, অন্য থেকে 1 টি বিয়োগ করে। আপনার উদাহরণ আমাকে বুঝতে পেরেছিল যে এটি একটি { ... }%ব্লকে কীভাবে করা যায় । সম্পর্কিত { ... }=, আমি ইতিমধ্যে আমার পরীক্ষায় এটি অনেক কমিয়েছি, যদিও এখনও পোস্ট করা হয়নি।
অপ্টিমাইজার

আমি যে প্রশ্নটি দিয়েছি ইনপুটটি 3 5আউটপুটটি হওয়া উচিত []এবং না হওয়া থেকে আমি বুঝতে পেরেছি""
পিটার টেলর

1
@ পিটারটেলর "একটি শূন্য সেট / তালিকা / অ্যারে / সম্ভব না হলে ইত্যাদি" - সুতরাং আমি মনে করি যে আমাকে কেবল এটি পরিষ্কার করে দিতে হবে ...
অপ্টিমাইজার

প্লাস, []pসিজেমে কেবল আউটপুট হয় ""। সুতরাং ভাষা কীভাবে খালি অ্যারে উপস্থাপন করে।
অপ্টিমাইজার 19

6

জাভাস্ক্রিপ্ট (E6) 79 82

F=(n,t,
  d=n+n*~-n/4-t/2,
  l=1,
  q=[for(x of Array(n))d<n--?++l:(d+=~n,--l)]
)=>d?[]:q

সমস্ত টিউপসগুলিকে নিষ্ঠুর বল বা গণনার প্রয়োজন নেই।

N -1 পদক্ষেপ হিসাবে দৈর্ঘ্যের n এর ক্রম দেখুন , প্রতিটি পদক্ষেপ বৃদ্ধি বা হ্রাস। দ্রষ্টব্য, আপনি কেবল হ্রাসের জন্য একটি ইনক্রিমেন্টকে অদলবদল করতে পারেন, যোগফল 2 দ্বারা পরিবর্তিত হয়, সুতরাং যে কোনও নির্দিষ্ট দৈর্ঘ্যের জন্য যোগফল সর্বদা সমান বা সর্বদা বিজোড়। সমস্ত ইনক্রিমেন্ট থাকার পরে, ক্রম 0, 1, 2, 3, ..., এন -1 হয় এবং আমরা জানি যে যোগফলটি (এন -1) * এন / 2 সর্বশেষ পদক্ষেপ পরিবর্তন করে, যোগফল 2 দ্বারা পরিবর্তিত হয়, সুতরাং শেষ পদক্ষেপের ওজন ২. শেষ পদক্ষেপের পরবর্তী পরিবর্তন করাতে, যোগফলটি 4 দ্বারা পরিবর্তিত হয়, সুতরাং শেষ ধাপটির ওজন ৪ হয় That's কারণ ক্রমাগত পদক্ষেপটি আংশিক যোগফলকে এখনও পর্যন্ত গড়ে তোলে। পূর্ববর্তী পদক্ষেপটি পরিবর্তন করে, যোগফলটি 6 দ্বারা পরিবর্তিত হয়, তাই শেষ ধাপটির ওজন 6 হয় (8 নয়, এটি বাইনারি সংখ্যা নয়)। ... প্রথম ধাপটি পরিবর্তন করে ওজন (এন -1) * 2






অ্যালগরিদম

Find the max sum (all increments)  
Find the difference with the target sum (if it's not even, no solution)  
Seq[0] is 0  
For each step  
  Compare current difference with the step weight
  if is less 
     we have an increment here, seq[i] = seq[i-1]+1 
  else 
     we have a decrement here, seq[i] = seq[i-1]-1.  
     Subtract we current weight from the current diff.
If remaining diff == 0, solution is Seq[]. Else no solution

অবহেলিত কোড

F=(len,target)=>{
  max=(len-1)*len/2
  delta = max-target
  seq = [last=0]
  sum = 0
  weight=(len-1)*2
  while (--len > 0)
  {
    if (delta >= weight)
    {
      --last
      delta -= weight;
    }
    else
    {
      ++last
    }  
    sum += last
    seq.push(last);
    weight -= 2;
  }  
  if (delta) return [];
  console.log(sum) // to verify

  return seq
}

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

F(8,4)

আউটপুট

[0, -1, 0, -1, 0, 1, 2, 3]

5

গল্ফস্ক্রিপ্ট ( 41 39 বাইট)

[][1,]@~:^;({{.-1=(+.)))+}%}*{{+}*^=}?`

অনলাইন ডেমো

41-> 39 এর জন্য ডেনিসকে ধন্যবাদ ।


আপনি সংক্ষিপ্ত ,0=করতে পারেন ?। সিজেমে যাওয়ার একটি সরল বন্দরটি 5 বাইট সংক্ষিপ্ত হবে:L1,al~:S;({{_W=(+_)))+}%}*{:+S=}=p
ডেনিস

@ ডেনিস ওহো, এটি দুটি {}% ব্লকের যাত্রা করার সহজ উপায়। মনে মনে যদি আমি এটি ব্যবহার করি?
অপ্টিমাইজার 18

@ অপ্টিমাইজার: আমি করি না, তবে এটি আসলে আমার কাজ নয়।
ডেনিস

আমি { ... }%ব্লক সম্পর্কে বলছিলাম । আমার কোডে আমার দু'জন ছিল, এটি হ্রাস করার চেষ্টা করছিল 1 টি হিসাবে real
অপ্টিমাইজার 18

3

গণিত, 73 বাইট

f=FirstCase[{0}~Join~Accumulate@#&/@Tuples[{-1,1},#-1],l_/;Tr@l==#2,{}]&;

সহজ ব্রুট ফোর্স সমাধান।

আমি সব ধাপে পদক্ষেপ জেনারেট করছি। তারপরে আমি এক-সিকোয়েন্সগুলি পাওয়ার জন্য সেগুলি সঞ্চিত তালিকায় পরিণত করি। এবং তারপরে আমি প্রথমটির সন্ধান করছি যার সমষ্টি দ্বিতীয় প্যারামিটারের সমান। যদি না থাকে তবে ডিফল্ট মান হয় {}


গণিত / সংমিশ্রণ সম্পর্কিত সমস্যাগুলি নিয়ে ম্যাথমেটিকা ​​কেবল তার পথ দেখায়, তাই না? ;)
অপ্টিমাইজার 16

@ অপ্টিমাইজার আমি নিশ্চিত সিজেএম তবুও এটি পরাজিত করবে। ;) আসলে এই একই অ্যালগরিদম সিজেমে করা কঠিন হওয়া উচিত নয়।
মার্টিন ইন্ডার

1
এটি অবশ্যই এটিকে পরাভূত করবে, তবে কেবল স্বল্প পদ্ধতির নামগুলির কারণে। অ্যালগরিদম সোজা সামনের দিকে হবে না।
অপ্টিমাইজার 16

@ অপ্টিমাইজার, হাহ? আমি মনে করি এটি এই ফাংশন রচনার চেয়ে একটি সাধারণ লুপ এবং ফিল্টার সহ আরও সোজা।
পিটার টেলর 17

3

হাস্কেল, 56 বাইট

n%s=[x|x<-scanl(+)0`map`mapM(\_->[1,-1])[2..n],s==sum x]

ব্যাখ্যা:

  • 1,-1N-1 এর দৈর্ঘ্য এবং দৈর্ঘ্যের সাথে একটি তালিকা তৈরি করুন : replicateM n-1[-1,1]
    উদাহরণ: replicateM 2 [-1,1]==[[-1,-1],[-1,1],[1,-1],[1,1]]
  • এটির বাইরে এক-ক্রম তৈরি করুন Build scanlখারাপ অভিনয় রয়েছে, তবে এটি এখানে সঠিক কাজ করে right
  • nযোগফলের দৈর্ঘ্যের সাথে সমস্ত সম্ভাব্য ওয়ান সিক্যুয়েন্সগুলি ফিল্টার করুনs

1
একটি সাধারণ উন্নতি হ'ল একটি ইনফিক্স ফাংশনে পরিবর্তন করা। এখানে আরও একটি অনিচ্ছাকৃত উন্নতির ইঙ্গিত রয়েছে: ইতিমধ্যে খুব দীর্ঘ যা Control.Monadব্যবহার করার জন্য আমদানি করা replicateM। অনুকরণের জন্য আপনি আর কোন মনডাফিক ফাংশন ব্যবহার করতে পারেন replicateM?
গর্বিত হাসেলেলার

যাইহোক, আপনার কেবলমাত্র একটি সমাধান ফিরে আসা উচিত, যাতে head$আপনার সমাধানটি যুক্ত করা উচিত ।
গর্বিত হাসেলেলার

headএর []জন্য ফিরে আসে না [] :: [[a]]- এবং আমি ত্রুটিগুলি ঘৃণা করি।
জোহানেস কুহন

1
কারণ কিছু সময় কেটে গেছে, আমি আপনাকে কী বলতে চাইছি তা বলব। আপনি এর mapM(\x->[1,-1])[2..n]পরিবর্তে sequenceএবং ব্যবহার করতে পারেন replicate
গর্বিত হাসেল্লার

মজাদার. এটি আরও খাটো: পি
জোহানেস কুহন

2

পাইথন, 138

from itertools import*
def f(n,s):
 for i in[list(accumulate(x))for x in product([-1,1],repeat=n-1)]:
  if sum(i)==s:return[0]+i
 return[]

0

সিজেম, 65 58 54 বাইট

আমার গাণিতিক সমাধানের তুলনায় খুব কম, তবে সিজেএমকে সঠিকভাবে ব্যবহার না করার জন্য এটি আমার বেশিরভাগ দোষ:

0]]l~:S;({{_1+\W+}%}*{0\{+_}%);}%_{:+S=}#_@\i=\0>\[]?p

এটি আক্ষরিকভাবে একই অ্যালগরিদম: সমস্ত- n-1টিপলস পান {1, -1}। প্রথমটির সন্ধান করুন যার জমার সমান s, প্রিপেন্ড এ 0। যদি কিছু না পাওয়া যায় তবে খালি অ্যারেটি মুদ্রণ করুন।


0

সিজেম, 40

সিজেমে আরেকটি পন্থা।

ri,W%)\_:+ri-\{2*:T1$>1{T-W}?2$+\}/])!*p

0

রুবি (136)

def one_sequences(n)
  n.to_s.chars.map(&:to_i).each_cons(2).to_a.select{|x|x[0] == 0 && (x[1] == 1 || x[1]
  == -1)}.count
end

0

জে, 47 অক্ষর

অন্যান্য উত্তরগুলির মতো প্রতিটি ক্রম চেক করে। একটি সংক্ষিপ্ত ও (এন) সমাধান করার চেষ্টা করবে।

   f=.4 :'(<:@#}.])(|:#~y=+/)+/\0,|:<:2*#:i.2^<:x'

   8 f 4
0 1 2 1 0 1 0 _1

   3 f 5
[nothing]

0

এপিএল 38

{⊃(↓a⌿⍨⍺=+/a←+\0,⍉1↓¯1*(⍵⍴2)⊤⍳2*⍵),⊂⍬}

উদাহরণ:

     4 {⊃(↓a⌿⍨⍺=+/a←+\0,⍉1↓¯1*(⍵⍴2)⊤⍳2*⍵),⊂⍬}8
0 1 2 1 0 1 0 ¯1

এই হিসাবে আরও অনেকেই প্রতিটি সংমিশ্রণের মাধ্যমে মিলে যায় এমন সন্ধানের জন্য জোর করে জোর করে, যদি কিছু না পাওয়া যায় তবে কিছু পাওয়া যায় না। আসলে কোডটি খাটো করার জন্য এটি একাধিকবার কয়েকটি সংমিশ্রণ চেষ্টা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.