বর্ধমান গ্রাফ


23

একটি নির্দিষ্ট ব্যাপ্তির মধ্যে সংখ্যার এক-মাত্রিক ক্রম বিবেচনা করুন, যেমন

[1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩

চির-বাড়ানো গ্রাফ * ** একটি লাইন যা এই ক্রমের সমস্ত পয়েন্টকে বাম থেকে ডানে সংযুক্ত করে এবং সর্বদা উপরের দিকে যায় বা স্তরে থাকে। প্রয়োজনে লাইনটি উপরের থেকে নীচে পর্যন্ত প্রায় জড়িয়ে যায় এবং পরবর্তী পয়েন্টটি পূরণের জন্য সেখান থেকে উপরে অবিরত অবিরত থাকে।

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

[1, 2, 4, 6, 8, 10]
[-2, 0, 2, 7, 13]
[-3, 3]

এবং সম্পর্কিত গ্রাফটি নীচের মত দেখতে পাবেন: চির বর্ধমান গ্রাফ যা আসলে এভার ননডেক্রেসিং গ্রাফ বলা উচিত called এবং অক্ষরটি আরও ভাল দৃষ্টির জন্য প্রসারিত: এভার-বর্ধমান গ্রাফ যা প্রকৃতপক্ষে প্রসারিত উল্লম্ব অক্ষ সহ এভার ননডেক্রেসিং গ্রাফ বলা উচিত। প্রয়োজনীয় আউটপুটটি হল উপবৃত্তির একটি তালিকা যা চির বর্ধমান গ্রাফের অংশগুলি গঠন করে। প্লট তৈরি করা প্রয়োজন হয় না তবে আপনাকে বোনাস পয়েন্ট উপার্জন করবে;)। আউটপুট অবশ্যই কিছু উপায়ে স্পষ্টভাবে পৃথক করা আবশ্যক।

নোট

  • বাম (অন্তর্ভুক্ত) সীমানা হিসাবে পরিসীমা সর্বদা শূন্য থাকবে এবং ডান সীমানাটি কিছুটা পূর্ণসংখ্যা এন হবে N
  • ক্রমটি এমন মানগুলি কখনই সীমার মধ্যে নেই।
  • প্রথম অনুচ্ছেদে শুরুতে অতিরিক্ত পয়েন্ট নেই।
  • শেষ অনুচ্ছেদে শেষে অতিরিক্ত পয়েন্ট নেই।
  • এটি সূচনা সূচনাগুলি সরবরাহ করার প্রয়োজন নেই যা পরবর্তী অংশগুলি প্লট করার জন্য প্রয়োজন।

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

Input: [0, 2, 4, 6, 1, 3, 5, 0], 7
Output: [0, 2, 4, 6, 8], [-1, 1, 3, 5, 7], [-2, 0]
Input: [1, 1, 2, 3, 5, 8, 3, 1], 10
Output: [1, 1, 2, 3, 5, 8, 13],[-2, 3, 11],[-7, 1]
Input: [5, 4, 3, 2, 1], 10
Output: [5, 14],[-5, 4, 13],[-6, 3, 12],[-7, 2, 11],[-8, 1]
Input: [0, 1, 4, 9, 16, 15, 0], 17
Output: [0, 1, 4, 9, 16, 32], [-1, 15, 17], [-2, 0]

স্কোরিং

এটি কোড-গল্ফ, বাইট জেতে সংক্ষিপ্ততম কোড।

* প্রকৃত জারগন নয় ** @ এন এম এম নির্দেশ করে যেমন আসলে এভার নন-ডিক্রেসিং গ্রাফ বলা উচিত, তবে এটি কম চিত্তাকর্ষক বলে মনে হচ্ছে।


7
পিপিসিজিতে আপনাকে স্বাগতম! প্রথম প্রথম চ্যালেঞ্জ!
অ্যাডমবর্কবার্ক

1
দেখে মনে হচ্ছে আমি চ্যালেঞ্জের কিছু অংশ ভুল বুঝেছি। আমি মনে করি এটি আপনার উদ্দেশ্য অনুসারে হওয়া উচিত।
ব্যবহারকারী 202729

1
চ্যালেঞ্জটি বুঝতে সহজতর করতে আপনি কি 0 এর নীচে এবং 10 এর উপরে নমুনা গ্রাফের y অক্ষটি প্রসারিত করতে পারেন?
জেসি

@ জয়সি হ্যাঁ, ভাল পরামর্শ।
আরভিডিভি

2
দ্বিতীয় পরীক্ষার কেসটি প্রস্তাব দেয় যে ক্রমগুলি ক্রমবর্ধমানের বিপরীতে ক্রমগুলি হ্রাস-হ্রাস করা উচিত? অন্য কথায়, ইনপুটটিতে একটি পুনরাবৃত্ত মান সেই বর্তমান অনুচ্ছেদটি থামায় না, এবং যদি একটি উত্তরোত্তর শেষ দুটি মান "কোণ" এর সমান হয় তবে পরের অনুচ্ছেদটি 0 হয় (সুতরাং এটি পুনরাবৃত্ত মান দিয়ে শুরু হবে) যেমন)?
এনজিএম

উত্তর:



8

আর , 179 158 151 বাইট

function(s,m){p=1;t=c(which(diff(s)<0),length(s));for(i in t){d=c(s[p]-m,s[(p+1):i],s[i+1]+m);if(p==1)d[1]=s[1];if(p==t[-1])d=head(d,-1);print(d);p=i}}

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

সম্পাদনা: কোড এখন একটি ফাংশন এবং ইনপুট নেয়। (জিউস্পেপ, ইউজার ২০২27 ২৯৯ এবং জাইসকে ধন্যবাদ জানানোর জন্য শান্তভাবে নির্দেশ করেছেন)
সম্পাদনা করুন: -১১ বাইটস জিউসেপ্পি পরামর্শ দিয়েছেন।
সম্পাদনা করুন: -7 বাইটগুলি অপসারণ করে d=NULL;


1
পিপিসিজিতে আপনাকে স্বাগতম! এই উত্তরটি বর্তমানে বৈধ নয় কারণ এটি অবশ্যই কিছু উপায়ে ইনপুট নিতে হবে (বর্তমানে তারা পরিবেশে হার্ড-কোডেড রয়েছে)। অতিরিক্তভাবে, আপনি গ সহায়তায় রফ করার জন্য এই টিপসগুলি পেতে পারেন । একবার যথেষ্ট পরিমাণে খ্যাতি পেলে আমাকে এখানে বা আড্ডায় বিনা দ্বিধায় পড়ুন!
জিউসেপ

বৈধ জমা দেওয়ার ক্ষেত্রে কী হবে তা পরিষ্কার করা: এটি হবে । আপনাকে স্বাগতম এবং এখানে আপনার সময় উপভোগ করুন :)
জেসি

আমি মনে করি এটি s[p+1]-((m+s[p+1])-s[p])সহজতর করে s[p]-m, এবং আপনার কেবল d=c(c(...))যেখানে d=c(...)প্রয়োজন হয়। আমি দৃ strongly়ভাবে সন্দেহ করি যে একটি গল্ফিয়ার উপায় আছে তবে এটি এখনও একটি দুর্দান্ত উত্তর।
জিউসেপ

1
@ পিএ dএমনকি শুরু করার প্রয়োজন আছে?
জেসি

1
@ পিএ সাহায্য করতে পেরে খুশি! আমি কেবল একটি আর গল্ফিং চ্যাটরুমটি পুনরায় খোলা করেছি যাতে আপনার নির্দিষ্ট প্রশ্নগুলির জন্য আমার এবং অন্যান্য সমস্ত আর গল্ফারদের সাথে যোগাযোগ করতে নির্দ্বিধায় :-)
জিউস্পে

6

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

ইনপুট হ'ল এন, স্বতন্ত্র যুক্তি হিসাবে সমস্ত পয়েন্ট অনুসরণ করে। আউটপুটে সাবসকোয়েন্সগুলি দ্বারা পৃথক করা হয় 0.5

f=lambda N,k,*l:(k,)+(l and(l[0]+N,.5,k-N)*(l[0]<k)+f(N,*l))

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


পাইথন 2 , 92 77 68 বাইট

সাবসেক্সেন্সগুলি দ্বারা পৃথক করা হয় [...]

l,N=input();r=[];k=0
for a in l:r+=[a+N,r,k-N]*(a<k)+[a];k=a
print r

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


1
চমৎকার আনসার! আমি পছন্দসইভাবে আইটেমগুলি সংযোজনের জন্য ভেরিয়েবল কে ব্যবহার করতে পছন্দ করি, এখানে নতুন কিছু শিখেছি!
আরভিডিভি



4

হাস্কেল, 82 81 80 বাইট

এটি আমার পরিষ্কার উত্তরের একটি বন্দর ।

r!n|let f x(r@(a:_):s)|x>a=[x,n+a]:(x-n:r):s|y<-x:r=y:s=foldr f[[last r]]$init r

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

-1, -1 লাইকোনি ধন্যবাদ


@ লাইকোনি এটি একটি মমত্ববোধ যে আমরা fস্থানীয়ভাবে :প্যাটার্নের আশেপাশে প্রথম বন্ধনী ছাড়াই সংজ্ঞা দিতে পারি না let x<r@(a:_):s|...

3

পরিষ্কার , 92 বাইট

import StdEnv
@r n=foldr(\x[r=:[a:_]:s]|x>a=[[x,n+a]:[x-n:r]:s]=[[x:r]:s])[[last r]](init r)

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

অপারেটরের পক্ষে foldrগার্ড সহ ল্যাম্বদা; এটি পার্স করা হয়েছে:

\x [r=:[a:_]:s]
    | x > a     = [[x,n+a]:[x-n:r]:s]
    | otherwise = [[x:run]:s]

আমি এটি হাস্কেলের কাছে পোর্ট করেছি ।




1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 98 বাইট

a=>m=>(r=[],b=[],a.map((e,i)=>e<a[--i]?(b[p](m+e),r[p](b),b=[a[i]-m,e]):b[p='push'](e)),r[p](b),r)

এটি অনলাইন চেষ্টা করুন! এটি অন্যান্য জেএস উত্তরের তুলনায় বেশ কিছুটা দীর্ঘ, তবে এটি একটি ভিন্ন পদ্ধতির ব্যবহার করে।

অবহেলিত এবং সরলিকৃত ব্যাখ্যা

g=(a,m)=>{
    // r is the final array of arrays to return.
    // b is the current subset of only ascending numbers.
    r=[],b=[];

    a.map((e,i)=>{
        if(e<a[i-1]){
            // if the current value is less than the previous one,
            // then we're descending, so start a new array b.
            // add the proper value to b to match slopes with the next
            b.push(m+e);
            // add r to b, and restart b with the starter value and the current value in a
            r.push(b);
            b=[a[i-1]-m,e];
        } else{
            // otherwise, we're ascending, so just addd to to b.
            b.push(e);
        }
    });
    r.push(b); // add the final b to r, and return r
    return r;
}

1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 48 বাইট, অ্যারে দ্বারা পৃথক করা,,

s=>n=>s.map(r=t=>(t<r?[t+n,,r-n,,]:``)+(r=t))+``

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

জাভাস্ক্রিপ্ট (নোড.জেএস) , 50 বাইট, অ্যারে দ্বারা পৃথক করা|

s=>n=>s.map(r=t=>(t<r?t+n+`|${r-n},`:``)+(r=t))+``

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

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