ওঠানামা রেঞ্জ


19

সংখ্যার সাথে একটি তালিকা দেওয়া হয়েছে, এই জাতীয় রেঞ্জগুলি আউটপুট করুন:

ইনপুট: [0, 5, 0]হয়ে যাবে [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]

এটি অ্যারের মাধ্যমে একটি পরিসীমা ম্যাপ করছে, সুতরাং আমাদের প্রথমে ব্যাপ্তি তৈরি করতে হবে [0, 5], যা [0, 1, 2, 3, 4, 5]। এর পরে, আমরা 5ব্যাপ্তি তৈরি করতে ব্যবহার করি [5, 0]। আমাদের পূর্ববর্তী পরিসরে সংযুক্ত, এটি আমাদের দেয়:

[0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]

আসুন একে অপরের পাশে দুটি একই অঙ্ক সহ একটি পরীক্ষার কেস পর্যবেক্ষণ করি:

[3, 5, 5, 3], ranges:

[3, 5] = 3, 4, 5
[5, 5] = 5 (actually [5, 5] due to overlapping)
[5, 3] = 5, 4, 3

সুতরাং এই আমাদের দিতে হবে [3, 4, 5, 5, 4, 3]

কিছু অন্যান্য পরীক্ষার মামলা:

[1, 9] > [1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, -10] > [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
[3, 0, 0, -3] > [3, 2, 1, 0, 0, -1, -2, -3]
[1, 3, 5, 7, 5, 3, 1, -1, -3] > [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3]

ইনপুটটিতে সর্বদা কমপক্ষে 2 টি পূর্ণসংখ্যা থাকবে।

সবচেয়ে কম উত্তর জয়!



1
কীভাবে ইনপুট এবং আউটপুট সম্পর্কিত? একটি বৈধ ইনপুট গঠন কি?
flawr

উত্তর:


21

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

Ÿ

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

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

এটি একটি অন্তর্নির্মিত।


18
আপনার মাথায় সমস্ত ইওসল্যাংগুলিতে সমস্ত বিল্ট-ইনগুলির একটি অভিধান রয়েছে বা কী? ;)
ইটিএইচ প্রোডাকশনস

2
ওয়েল, ওসাবী ব্যবহারের জন্য আপনাকে ধন্যবাদ: পি
আদনান

7
এটি কেন এটির জন্য একটি অন্তর্নির্মিত আছে?
নীল

স্টাফগুলি সম্পন্ন সমস্ত 0 বেট এবং 1 বাইট (এমনকি 2 বাইট) এমনকি একটি সংকলন থাকা উচিত।
ক্যালকুলেটরফলাইন

2
@ নীল এটি মূলত একটি অন্তর্ভুক্ত পরিসীমা ফাংশন, এটি সত্যিই দর্শনীয় নয়।
আদনান

5

জাভাস্ক্রিপ্ট, 99 95 93 বাইট

4 6 বাইট বন্ধ ধন্যবাদ @ নিল

a=>a.reduce((x,y)=>x.concat(b.map?b=y:[...Array(y<b?b-y:y-b||1)].map(_=>b+=y<b?-1:y>b)),b=[])

f=
a=>a.reduce(
    (x,y)=>
        x.concat(
            b.map?b=y
            :[...Array(y<b?b-y:y-b||1)]
                .map(_=>b+=y<b?-1:y>b)
        )
    ,b=[])


G.addEventListener('click',_=>O.innerHTML=f(JSON.parse(I.value)));
<input id=I value="[3,5,5,3]"><button id=G>Go</button><pre id=O>


1
ব্যবহার করে 3 বাইট সংরক্ষণ করুন y<b?b-y:y-b||1। ব্যবহার করে অন্য একটি বাইট সংরক্ষণ করুন y>b||y-b&&-1
নীল

@Neil। ভাল !! ধন্যবাদ :)
সরানো হয়েছে

1
আসলে y<b?-1:y>bএখনও ভাল।
নীল

5

জাভাস্ক্রিপ্ট (স্পাইডারমনকি 30+), 81 76 বাইট

([n,...a])=>[n,...[for(i of a)for(j of Array(i<n?n-i:i-n||1))n+=i<n?-1:i>n]]

ফায়ারফক্স ৪৪-তে পরীক্ষা করা হয়েছে E


কাজ করে না [3, 0, 0, -3]। আমি রেঞ্জেরর স্থির করেছিলাম এবং 10 টি বাইট সংরক্ষণ করেছি তবে এটি এখনও কার্যকর হয় না:([n,...a],z=[n])=>z.concat([for(i of a)for(j of[...Array((r=n<i)?i-n-1:n-i-1),0])i=r?++n:--n])
নীল

দুঃখিত, আমি ([n,...a])=>[n].concat([for(i of a)for(j of[...Array((r=n<i)?i-n:n-i)])i=r?++n:--n])অবশ্যই বলতে চাইছিলাম।
নীল

প্রক্রিয়াটিতে আরও একগুচ্ছ ঝাঁকুনি সহ নিল ফিক্সড
ইটিএইচ প্রডাকশনগুলি 6'16

4

জাভাস্ক্রিপ্ট (ES6) 66 72

একটি পুনরাবৃত্তি ফাংশন যা বারবার অ্যারের অভ্যন্তরে মান সংখ্যার মধ্যে শূন্যস্থান পূরণ করে adds

f=l=>l.some((x,i)=>(z=l[i-1]-x)*z>1&&l.splice(i,0,x+z/2|0))?f(l):l

পরীক্ষা

f=l=>l.some((x,i)=>(z=l[i-1]-x)*z>1&&l.splice(i,0,x+z/2|0))?f(l):l

console.log=x=>O.textContent+=x+'\n'

;[[1,9],[10,-10],[3,0,0,-3],[1, 3, 5, 7, 5, 3, 1, -1, -3]]
.forEach(t=>console.log(t+' -> ' +f(t)))
<pre id=O></pre>


3

সি, 120 + 12 = 132 বাইট

i,j,k;f(a,n)int*a;{a[0]--;for(i=0;i<n-1;i++)for(k=0,j=a[i]-a[i+1]?a[i]:a[i]-1;j-a[i+1];)printf("%i ",j+=a[i+1]>j?1:-1);}

উদাহরণ কল:

f(a,sizeof(a)/4);        // I've added 12 bytes because of ",sizeof(a)/4"

টেস্ট এ লাইভ ideone


3

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

lambda n:n[0:1]+sum([range(x,y,2*(y>x)-1)[1:]+[y]for(x,y)in zip(n,n[1:])],[])

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

নীল, ডেনকারএফি এবং এরওয়ানকে আমি যে উন্নতিগুলি মিস করেছি তা ধন্যবাদ জানায়


নিশ্চয়ই +1কি অপ্রয়োজনীয়?
নিল

সাথে যেতে হবে না কেন lambda n:n[0:1]+sum([range(x,y,[1,-1][y+1<x])[1:]+[y]for(x,y)in zip(n,n[1:])],[])? কিছু বাইট সংরক্ষণ করে
ডেনকার

আমি এই লেখার সময় খুব ক্লান্ত ছিলাম :) প্রথমে উত্তর দিন, পরে উন্নতি করুন।
মেগো

আমি মনে করি আপনি প্রতিস্থাপন করতে পারেন [1,-1][y+1<x]দ্বারা 2*(y>x)-1(এছাড়াও আমি কেন আপনি ব্যবহার বুঝতে পারছি না y<=x কেবল এবং y<x)
Erwan

n[0:1]সমতূল্য n[:1]
জোনাথন ফ্রেচ

3

পার্ল, 47 বাইট

এর জন্য +3 অন্তর্ভুক্ত -pরয়েছে ( কোডটিতে এতগুলি $'স্থান রয়েছে এবং এটি -গণনাও করে)

STDIN- তে সংখ্যার তালিকা দিন:

fluctuating.pl <<< "3 5 5 3"

fluctuating.pl:

#!/usr/bin/perl -p
($n=$&+($'<=>$&))-$'&&s/\G/$n / while/\S+ /g

অস্থায়ী পরিবর্তনশীল এবং এই সমস্ত প্রথম বন্ধনীগুলি সাবঅপটিমাল অনুভব করে ...


দেখে মনে হচ্ছে আপনি ভুল উত্তর পোস্ট করেছেন: এটি কাজ করছে বলে মনে হচ্ছে না এবং $' আপনি উল্লেখ করেছেন যে
দাদা

@ দাদা: হ্যাঁ, আবার নির্দিষ্টের পরিবর্তে কোডটির একটি পুরানো অনির্ধারিত সংস্করণ আটকানো হয়েছে। ধন্যবাদ এবং স্থির
টন হসপেল

2

হাস্কেল, 63 55 বাইট

g(a:b:r)=[a|a==b]++[a..b-1]++[a,a-1..b+1]++g(b:r)
g x=x

ব্যবহারের উদাহরণ: g [3,5,5,3]-> [3,4,5,5,4,3]

এটা একটি পরিবর্তন এর আমার উত্তর একটি থেকে সংশ্লিষ্ট চ্যালেঞ্জ । আবার মূল কাজটি তালিকার aউপরের b-1থেকে aনীচে থেকে নীচে b+1(যেখানে একটি তালিকা খালি হবে) এবং একটি পুনরাবৃত্তির কলকে তালিকাবদ্ধ করে তৈরি করা হয়। হ্যান্ডেল করতে a==bক্ষেত্রে যেখানে উভয় তালিকা খালি রয়েছে, আমরা শুরুতে যোগ [a|a==b]যা মূল্যায়ণ [a]যদি a==bএবং []অন্যথায়।


2

আর, 86 82 75 বাইট

function(x)rep((y<-rle(unlist(Map(seq,head(x,-1),x[-1]))))$v,pmax(1,y$l-1))

rep.int ব্যবহার করে 4 বাইট সংরক্ষণ করা হয়েছে (কোড গল্ফ পারফরম্যান্স নয়!) ব্যবহার করার সময় অন্তর্নির্মিত আংশিক মিল ব্যবহার করে $(এবং ফাংশন সংজ্ঞাটি 1 লাইনে ভেঙে দিয়ে ) আরও 7 বাইট সংরক্ষণ করেছে


আমি মনে করি (y=...)পরিবর্তে (y<-...)এটিও বৈধ এবং এক বাইট কম less
জিউসেপ

2

রুবি, 116 82 বাইট

->n{o,*m=n;o=[o];m.zip(n).map{|t,u|o+=[[u],[*u+1..t],[*t..u-1].reverse][t<=>u]};o}

আমার প্রথম গল্ফ

সম্পাদনা করুন: দুর্দান্ত পরামর্শগুলির জন্য ধন্যবাদ মানাটওয়ার্ক।


ভেরিয়েবলকে বরাদ্দ দেওয়ার দরকার নেই, বেনামে প্রোক যথেষ্ট; আনুষ্ঠানিক প্যারামিটারের আশেপাশে প্রথম বন্ধন স্থাপন করার দরকার নেই; অ্যারের প্রথম উপাদানটি বের করা সমান্তরাল কার্যনির্বাহী এবং স্প্ল্যাটের সাথে সংক্ষিপ্ত; mapএর কোড ব্লক একাধিক প্যারামিটার হিসেবে অ্যারে নিতে পারেন: ->n{o,*m=n;o=[o];m.zip(n).map{|t,u|o+=u==t ?[u]:(u<t ?[*u+1..t]:[*t..u-1].reverse)};o}। অন্যথায় চমৎকার প্রথম গল্ফ।
manatwork

মহাকাশযান অপারেটর দ্বারা একটি 3 উপাদান অ্যারে থেকে অবচয় খাটো চেয়ে 2 তিন অপারেটর হল: [[u],[*u+1..t],[*t..u-1].reverse][t<=>u]
manatwork


1

পার্ল 6, 94 বাইট

আমি এই মুহূর্তে খুব খুশি না, আমি সম্ভবত পরে অন্য শট নেব

{reduce {|@^a[0..*-2],|@^b},map {@_[0]!= @_[1]??(@_[0]...@_[1])!!(@_[0],@_[1])},.rotor(2=>-1)}

1

পিএইচপি 5.4, 86 বাইট

এটি একটি অন্তর্ভুক্ত ফাইল হিসাবে ব্যবহার করতে বোঝায়, যা ফলাফলটি দেয়।

কমান্ডলাইন প্যারামিটার হিসাবে মানগুলি পাস করা হয়।

<?for($i=1;$i<$argc-1;$R=array_merge($R?:[],range($argv[$i++],$argv[$i++])));return$R;

ঠিক সুন্দর বা কিছুই না, তবে কাজটি করে does


1

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

পাইথনের উত্তরের প্রথম চেষ্টা। মূল ধারণাটি বারে বারে ক্রমগুলিতে জোড় চিহ্নিত করা যেখানে পার্থক্যটি একটি ধাপের চেয়ে বড় এবং সঠিক দিকটিতে ক্রমটি সম্পূর্ণ করার জন্য একটি (এবং শুধুমাত্র একটি) অতিরিক্ত উপাদান সন্নিবেশ করানো। ধারাবাহিক উপাদানগুলির মধ্যে সমস্ত পার্থক্য +1 এবং -1 এর মধ্যে না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।

d=diff
while any(d(x)**2>1):i=argmax(d(x)**2);x[:i+1]+=[x[i]+sign(d(x)[i])]

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


0

লুয়া, 156 বাইট

একটি ফাংশন যা প্যারামিটারে একটি অ্যারে নেয় এবং বর্ধিত অ্যারেটি ফেরত দেয়।

function f(t)r={}for i=2,#t
do x,y=t[i-1],t[i]r[#r+1]=x==y and x or nil
z=x>y and-1or 1
x=x==r[#r]and x+z or x
for j=x,y,z
do r[#r+1]=j end end
return r end

অবহেলিত এবং ব্যাখ্যা

function f(t)
  r={}                        -- Initialise an empty array
  for i=2,#t                  -- Iterate over the parameter array
  do
    x,y=t[i-1],t[i]           -- x and y are shorter names than t[i-1]
    r[#r+1]=                  -- when there's a range like [5,5]
      x==y and x or nil       -- put this number once in the array
    z=x>y and-1or 1         -- determine the step value
    x= x==r[#r]               -- prevent repeating the last value of r
          and x+z or x        -- by incrementing/decrementing x
    for j=x,y,z               -- iterate from t[i-1] to t[i] by step z (-1 or 1)
    do
      r[#r+1]=j               -- put j into the array r
    end
  end
  return r                    -- return the extended array
end

ব্যবহারের স্বাচ্ছন্দ্যের জন্য, আপনি ফিরে আসা অ্যারেটি মুদ্রণ করতে নীচের ফাংশনটি ব্যবহার করতে পারেন f()

function printArray(t)
  print("["..table.concat(t,",").."]")
end

এই জমা দেওয়ার পরীক্ষা করার সময়, আপনি এটিকে কল করতে পারেন:

printArray(f( {0,5,0,3,4,4,7,3,-3} ))
> [0,1,2,3,4,5,4,3,2,1,0,1,2,3,4,4,5,6,7,6,5,4,3,2,1,0,-1,-2,-3]

0

ম্যাথক্যাড, 62 "বাইট"

এখানে চিত্র বর্ণনা লিখুন

যেমন ম্যাথক্যাডে একটি 2 ডি "হোয়াইটবোর্ড" এবং বিশেষ অপারেটর (যেমন, সামিহান অপারেটর, ইন্টিগ্রাল অপারেটর) ব্যবহার করে এবং এক্সএমএল ফর্ম্যাটে সংরক্ষণ করে, প্রকৃত কার্যপত্রকটিতে বেশ কয়েকটি শতাধিক (বা আরও) অক্ষর থাকতে পারে। কোড গল্ফের উদ্দেশ্যে, আমি ওয়ার্কশিট তৈরি করতে ব্যবহারকারীর যে অক্ষর বা অপারেটরকে প্রবেশ করতে হবে তার সংখ্যা হতে একটি ম্যাথক্যাড "বাইট কাউন্ট" নিয়েছি।

ফাংশন সংজ্ঞাটিকে একটি সোজা প্রোগ্রামে রূপান্তর করা এবং ভেরিয়েবলের lst এর পরিবর্তে একক অক্ষরের নাম দিয়ে মোট 62 "বাইট" দেয়। পুরো নামের পরিবর্তে একক অক্ষর ব্যবহার করে ফাংশনটি সহ, এটি সংজ্ঞায়নের জন্য 65 "বাইটস" এবং প্রতিটি কলের জন্য আরও 4 "বাইটস" হয়ে যায় (ধরে নিচ্ছেন যে তালিকার তৈরিটি নিজেই সামগ্রিক বাইটের অন্তর্ভুক্ত নয়) গণনা (ম্যাথক্যাডের অন্তর্নির্মিত টেবিলগুলি ব্যবহার করা তালিকার ইনপুট দেওয়ার অন্য একটি উপায়)।


0

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

function f($r){$m=[];for($i=0;++$i<count($r);){$d=array_pop($m);$n=$r[$i];$p=$r[$i-1];$m=array_merge($m,$p==$n?[$p,$n]:range($p,$n));}return$m;}
বিস্তারিত দেখুন
function f($r) {
  $m = [];
  for ($i=0; ++$i < count($r); ) {
    $d = array_pop($m);
    $n = $r[$i];
    $p = $r[$i-1];
    $m = array_merge($m, $p==$n ? [$p,$n]
                                : range($p,$n));
  }
  return $m;
}
ইনপুট / ফাংশন কল
f([ bound1, bound2, bound3, ... ]);
আউটপুট
[int, int, int, int, ...]

এটি অগোছালো এবং জঘন্য এবং আমি এটি পরে আরও অনুকূল করার চেষ্টা করব। এটি range()প্রতিটি জোড় সংলগ্ন মান জোড়া থেকে একটি তৈরি করে , তারপরে সেগুলি একসাথে সেলাই করে ( popপূর্ববর্তী সংযোজকের শেষে বন্ধ করে দেওয়ার পরে Array)।


0

পার্ল 6, 21

.জয়েন $ _। যোগদানের জন্য সংক্ষিপ্ত

say EVAL .join: "..."

পরীক্ষা (রাকুডো)

perl6 -MMONKEY-SEE-NO-EVAL -e'say EVAL @*ARGS.join: "..."' 1 3 5 7 5 3 1 -1 -3

আউটপুট

(1 2 3 4 5 6 7 6 5 4 3 2 1 0 -1 -2 -3)


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