বিপরীত বিজয়ী রান


17

অনুপ্রেরণা

কার্য

2 থেকে 2 15 অ-নেতিবাচক পূর্ণসংখ্যার একটি প্রদত্ত তালিকায় বিজোড় সংখ্যার বিপরীত রান ।

উদাহরণ

0 1 →  0 1
1 3 →  3 1
1 2 3 →  1 2 3
1 3 2 →  3 1 2
10 7 9 6 8 9 →  10 9 7 6 8 9
23 12 32 23 25 27 →  23 12 32 27 25 23
123 123 345 0 1 9 → 345 123 123 0 9 1


4
1. আমি উদাহরণগুলি দেখার পরে কেবল চ্যালেঞ্জটি বুঝতে পারি। আমি মনে করি বিজোড় পূর্ণসংখ্যার রান সিক্যুয়েন্সের চেয়ে পরিষ্কার হবে । ২) আমি মনে করি না যে একটি সুস্পষ্ট উপরের সীমা নির্ধারণ করা ভাল জিনিস। যদি কোনও ভাষাতে কেবল 8-বিট পূর্ণসংখ্যা থাকে, তবে অংশ নেওয়া আরও শক্ত হয়ে উঠবে।
ডেনিস

এছাড়াও, আমি নিশ্চিত নই যে আরও সংখ্যার গণনা কী বোঝায়। এর অর্থ কি এই যে আমি কোনও পরিবর্তনযোগ্য টুপল ফিরিয়ে দিতে বা কেবল সংখ্যা মুদ্রণ করতে পারি না?
ডেনিস

আপনার পরামর্শ অনুসারে @ ডেনিস আপডেট হয়েছে। এটি স্ট্রিং হিসাবে ইনপুট / আউটপুট প্রতিরোধ করা হয়। ভাল শব্দটির জন্য কোনও পরামর্শ?
অ্যাডম

4
আপনি স্ট্রিং আউটপুট প্রতিরোধ করতে চান কেন?
ডেনিস

2
হ্যাঁ, অন্যান্য চ্যালেঞ্জের দিকে তাকিয়ে, বেশিরভাগ উত্তরগুলি জিরোগুলির বিভক্তির উপর নির্ভর করে, যদিও এখানে আপনাকে এমন একটি শর্তে বিভক্ত করতে হবে, যার বেশিরভাগ ভাষার অন্তর্নির্মিত ব্যবস্থা নেই।
xnor

উত্তর:


8

পাইথন 2, 75 68 63 বাইট

ডেনিসকে 5 বাইট ধন্যবাদ

এবং আমি ডেনিসকে ছাড়িয়ে গিয়েছি

অ্যালগরিদমের মূল জন্য বায়ংগন লি-তে ক্রেডিট ।

o=t=[]
for i in input():o+=~i%2*(t+[i]);t=i%2*([i]+t)
print o+t

আইডিয়ন!

পুরানো সংস্করণ: 75 বাইট


বাঁধা, সত্যই। এছাড়াও, আমি ৮১ গণনা করছি, 75 নয় I'm
ডিজেএমসিএমহেম

@ ডিগ্রিগ্রিনইগস্যান্ড আইরনম্যান আপনার অনুমানটি সঠিক। পাঠযোগ্যতার জন্য ট্যাব। হয় উত্সটি গণনা করুন বা আদর্শটিকে গণনা করুন।
ফুটো নুন

1
printপেরেন দরকার নেই। এছাড়াও, আপনি কেবল aএকবার ব্যবহার করেন , সুতরাং ভেরিয়েবলের প্রয়োজন নেই।
ডেনিস

5

পাইথন 2, 79 75 73 বাইট

def f(x):
 i=j=0
 for n in x+[0]:
    if~n%2:x[i:j]=x[i:j][::-1];i=j+1
    j+=1

এটি এমন একটি ফাংশন যা এর যুক্তিটি জায়গায় রাখে। দ্বিতীয় ইন্ডেন্টেশন স্তরটি একটি ট্যাবুলেটর।

আইডিয়নে এটি পরীক্ষা করুন


এর জন্য মেটা কোথায়?
ফাঁস নুন


5

এপিএল, 21 20 বাইট

{∊⌽¨⍵⊂⍨e⍲¯1↓0,e←2|⍵}

চেষ্টা করে দেখুন || সমস্ত পরীক্ষার কেস

ব্যাখ্যা:

                  2|⍵ Select all the odd numbers
                e←    Save that to e
              0,      Append a 0
           ¯1↓        Delete the last element
         e⍲           NAND it with the original list of odd numbers
     ⍵⊂⍨             Partition the list: (even)(even)(odd odd odd)(even)
  ⌽¨                 Reverse each partition
 ∊                    Flatten the list

সম্পাদনা: ~ডি মরগানের আইনগুলির জন্য একটি ধন্যবাদ সংরক্ষণ করা


1
হ্যালো, এবং পিপিসিজিতে আপনাকে স্বাগতম! এটি একটি ভাল পোস্ট।
NoOneIsHere

5

হাস্কেল, 46 44 বাইট

h%p|(l,r)<-span(odd.(h*))p=l++h:r
foldr(%)[]

একটি ভাঁজ সনাক্তকরণ এবং দুটি বাইট সংরক্ষণ করার জন্য @ এক্সনোরকে ধন্যবাদ


দুর্দান্ত পদ্ধতি, বিশেষত (h*)! f x=xখালি তালিকার সাথে মিলের জন্য দ্বিতীয়টি লিখে আপনি বেস foldrh%p|(l,r)<-span(odd.(h*))p=l++h:r;foldr(%)[]
কেসটিতে

আমি জানতাম এটা ঠিক foldrপরে ছিল ! ধন্যবাদ.
লিন

4

জেলি , 10 বাইট

Ḃ¬ðœpUżx@F

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

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

Ḃ¬ðœpUżx@F  Main link. Argument: A (array)

Ḃ           Bit; return the parity bit of each integer in A.
 ¬          Logical NOT; turn even integers into 1's, odds into 0's.
  ð         Begin a new, dyadic link.
            Left argument: B (array of Booleans). Right argument: A
   œp       Partition; split A at 1's in B.
     U      Upend; reverse each resulting chunk of odd numbers.
       x@   Repeat (swapped); keep only numbers in A that correspond to a 1 in B.
      ż     Zipwith; interleave the reversed runs of odd integers (result to the
            left) and the flat array of even integers (result to the right).
         F  Flatten the resulting array of pairs.

4

পাইথন 2, 78 75 বাইট

def r(l):
 def k(n):o=~n%2<<99;k.i+=o*2-1;return k.i-o
 k.i=0;l.sort(key=k)

সুপার হ্যাকি :)


কি k.i?
ফাঁস নুন

@ লাইকনুন k.i=0শেষ লাইনে এটি কেবল একটি পরিবর্তনশীল।
orlp

আমি পাই না। হয় kএবং k.iএর সাথে সম্পর্কিত?
ফাঁস নুন

@ লিক্যুন নং এর k.iকলগুলির মধ্যে একটি ধ্রুবক পরিবর্তনশীল kglobalকীওয়ার্ডটি ব্যবহার না করে এটিকে একটি অস্থায়ী গ্লোবাল হিসাবে দেখুন ।
orlp

4

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

লিকি নুনকে ধন্যবাদ প্রচুর বাইট সংরক্ষণ করেছেন!

o=l=[]
for c in input().split():
 if int(c)%2:l=[c]+l
 else:o+=l+[c];l=[]
print(" ".join(o+l))

3

সি, 107 বাইট

i;b[65536];f(){for(;i;)printf("%d ",b[--i]);}main(n){for(;~scanf("%d",&n);)n%2||f(),b[i++]=n,n%2||f();f();}

3

এমএটিএল , 20 বাইট

TiodgvYsG8XQ!"@gto?P

ইনপুট ;বিভাজক হিসাবে ব্যবহার করে একটি কলাম অ্যারে ।

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

ব্যাখ্যা

ইনপুট অ্যারে উদাহরণ হিসাবে বিবেচনা করুন [1;2;3;5;7;4;6;7;9]। কোডের প্রথম অংশ Tiodgv, এই অ্যারেটিকে রূপান্তর করে [1;1;1;0;0;1;0;1;0], যেখানে সমতা পরিবর্তনের1 ইঙ্গিত দেয় । (বিশেষতঃ কোডটি ইনপুট অ্যারের প্রতিটি প্রবেশের সমতা অর্জন করে, একটানা পার্থক্যের গণনা করে, ননজারো মানগুলিকে রূপান্তর করে এবং এটিকে সংশোধন করে ))11

তারপরে প্রদান Ysকরে মোটের যোগফলকে গণনা করে [1;2;3;3;3;4;4;5;5]। এই সংখ্যা প্রত্যেকটি একটি হিসেবে ব্যবহার করা হবে ট্যাগ , ভিত্তি যার উপর ইনপুট উপাদান হবে দলবদ্ধ । এটি দ্বারা সম্পন্ন হয় G8XQ!, যা গ্রুপগুলি সমন্বিত একটি সেল অ্যারেতে ইনপুট অ্যারে বিভক্ত করে। এই ক্ষেত্রে এটি দেয় {[1] [2] [3;5;7] [4;6] [7;9]}

বাকী কোডটি সেল অ্যারেতে পুনরাবৃত্তি করে ( ")। প্রতিটি উপাদান সংখ্যার অ্যারে দিয়ে ধাক্কা দেওয়া হয় @gtoএকটি অনুলিপি তৈরি করে এবং এর সমতা গণনা করে । ( ?) যদি ফলাফলটি সত্যবাদী হয়, তবে অ্যারের সামগ্রীগুলি বিজোড় হয়, অ্যারেটি উল্টানো হয় ( P)।

স্ট্যাকটি সুস্পষ্টভাবে শেষে প্রদর্শিত হবে। প্রতিটি লম্বিকাল উল্লম্ব অ্যারে প্রদর্শিত হয়, নতুন লাইনের দ্বারা পৃথক সংখ্যার একটি তালিকা দেয়।



2

জে , 33 31 30 বাইট

[:;]<@(A.~2-@|{.);.1~1,2|2-/\]

ব্যবহার

   f =: [:;]<@(A.~2-@|{.);.1~1,2|2-/\]
   f 0 1
0 1
   f 1 3
3 1
   f 1 2 3
1 2 3
   f 1 3 2
3 1 2
   f 10 7 9 6 8 9
10 9 7 6 8 9
   f 23 12 32 23 25 27
23 12 32 27 25 23
   f 123 123 345 0 1 9
345 123 123 0 9 1

2

সি #, 179 178 177 বাইট

s=>{var o=new List<int>();var l=new Stack<int>();foreach(var n in s.Split(' ').Select(int.Parse)){if(n%2>0)l.Push(n);else{o.AddRange(l);o.Add(n);l.Clear();}}return o.Concat(l);}

আমি একটি সি # ল্যাম্বডা ব্যবহার করি। আপনি এটি নেটফিডেলে চেষ্টা করতে পারেন ।

কোডটি কম হ্রাস করুন:

s => {
    var o=new List<int>();var l=new Stack<int>();
    foreach (var n in s.Split(' ').Select(int.Parse)) {
        if (n%2>0)
            l.Push(n);
        else {
            o.AddRange(l);
            o.Add(n);
            l.Clear();
        }
    }
    return o.Concat(l);
};

যশ Byeonggon লি মূল অ্যালগরিদম জন্য।


1
আপনি স্থানটি ড্রপ করে 2 বাইট সংরক্ষণ করতে foreach(varপরিবর্তন if(n%2==1)করতে if(n%2>0)পারেন (বা আসলে 1, কারণ আপনার বর্তমান উত্তর 178 এর পরিবর্তে 179 বাইট)।
কেভিন ক্রুইজসেন

@ কেভিনিক্রুজসেন এটি কম মিনিফাইড বিভাগে পরিবর্তন করা হয়েছিল তবে মাইনফাইডের অংশে নয়। এছাড়াও foreach স্থান জন্য আপনাকে ধন্যবাদ!
অ্যালোআইএসডিজি


1

টিএসকিউএল 118 বাইট

DECLARE @ TABLE(i int identity, v int)
INSERT @ values(123),(123),(345),(0),(1),(9)

SELECT v FROM(SELECT sum((v+1)%2)over(order by i)x,*FROM @)z
ORDER BY x,IIF(v%2=1,max(i)over(partition by x),i),i desc

বেহালা


1

ক্লোজার, 86 বাইট

#(flatten(reduce(fn[a b](if(odd? b)(conj(pop a)(conj[b](last a)))(conj a b[])))[[]]%))

এখানে বর্ণহীন সংস্করণ দেওয়া আছে

#(flatten ; removes all empty vectors and flattens odd sequences
    (reduce 
        (fn[a b]
            (if(odd? b) ; if we encounter odd number in the seq
                (conj(pop a)(conj[b](last a))) ; return all elements but last and the element we encountered plus the last element of current result
                (conj a b[])) ; else just add the even number and the empty vector
            )
        [[]] ; starting vector, we need to have vector inside of vector if the sequence starts with odd number
        %    ; anonymous function arg
    )   
)

মূলত এটি ইনপুট অনুক্রমের মধ্য দিয়ে যায় এবং যদি এটি এমনকি সংখ্যার মুখোমুখি হয় তবে এটি সংখ্যা এবং খালি ভেক্টর যুক্ত করে অন্যথায় যদি এটি একটি বিজোড় সংখ্যা হয় তবে এটি শেষ সংখ্যাকে এই সংখ্যার সাথে শেষ উপাদানটি প্রতিস্থাপন করে যা শেষ উপাদানটিতে ছিল।

উদাহরণস্বরূপ এই সিক এর জন্য 2 4 6 1 3 7 2এটি যায়:

  • []<=2
  • [2 []]<=4
  • [2 [] 4 []]<=6
  • [2 [] 4 [] 6 []]<=1
  • [2 [] 4 [] 6 [1 []]]<=3
  • [2 [] 4 [] 6 [3 [1 []]]]<=7
  • [2 [] 4 [] 6 [7 [3 [1 []]]]]<=2
  • [2 [] 4 [] 6 [7 [3 [1 []]]] 2 []]

এবং তারপরে এই ভেক্টরকে সমতল করে সঠিক আউটপুট দেয়। আপনি এটি অনলাইনে এখানে দেখতে পাবেন: https://ideone.com/d2LLEC


1

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

4 বাইট সম্পাদনা করুন thx @ নীল

a=>[...a,[]].map(x=>x&1?o=[x,...o]:r=r.concat(o,x,o=[]),r=o=[])&&r

:r=r.concat(o,x,o=[]),আপনাকে কয়েকটা বাইট সাশ্রয় করে। আমার মনে হয় আপনি তাহলে এই মত অন্য দুই সংরক্ষণ করতে যেতে পারেন: a=>[...a,[]].map(x=>x&1?o=[x,...o]:r=r.concat(o,x,o=[]),r=o=[])&&r
নীল

এর অর্থ কী ...o?
codidact.com


যোগ করা উপাদান হিসাবে ব্যবহৃত খালি অ্যারেটি নিল একটি মাস্টার স্ট্রোক
edc65

1

স্ট্যাক্স , 15 10 বাইট সিপি 437

Çⁿ╜"}☻≥º╚(

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

বাঁধা জেলি! এত দুঃখজনক যে প্যাকিং কেবল একটি বাইট সংরক্ষণ করেছিল saved

11 টি বাইট সহ আনপ্যাক করা সংস্করণ:

{|e_^*}/Frm

ব্যাখ্যা

{|e_^*}একটি ব্লক যে সব এমনকি সংখ্যার মানচিত্র হয় nথেকে n+1, এবং সমস্ত বিজোড় সংখ্যা nথেকে 0

{|e_^*}/Frm
{     }/       Group array by same value from block
 |e            1 if the element is even, 0 if odd.
   _^          Get another copy of the current element and increment by 1
     *         Multiply them
        F      For each group execute the rest of the program
         r     Reverse the group
          m    Print elements from the group, one element per line.



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