এটি একটি অনুশীলন সেট?


16

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

চ্যালেঞ্জ

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

একটি অনুশীলন সেট শূন্য বা আরও ব্যায়াম অংশ একই নেতৃস্থানীয় একসাথে একত্রিত সঙ্গে।

ইনপুট হিসাবে শূন্য-শূন্য পূর্ণসংখ্যার একটি তালিকা দেওয়া, এটি কোনও অনুশীলন সেট কিনা তা নির্ধারণ করুন। পূর্ণসংখ্যাগুলি অনন্য নয়। তালিকার দৈর্ঘ্য অগত্যা এমনকি নয়।

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

উদাহরণ

[-5, -1, -7, -6, -5, 5, 1, 7, 6, 5]ব্যায়াম অংশের একটি উদাহরণ। প্রথম অর্ধেকটি [-5, -1, -7, -6, -5], এবং শেষ অর্ধেকটি [5, 1, 7, 6, 5], যা প্রথম অর্ধেককে উপেক্ষিত করে প্রতিটি পূর্ণসংখ্যা হয়। অতিরিক্তভাবে, প্রথমার্ধের পূর্ণসংখ্যাগুলি একই চিহ্ন of এই অনুশীলনের অংশের শীর্ষস্থানীয় দিকটি -1

[3, 6, 5, -3, -6, -5, 1, 6, 4, 3, -1, -6, -4, -3]একটি অনুশীলন সেট উদাহরণ। এর স্বতন্ত্র অনুশীলনের অংশগুলি [3, 6, 5, -3, -6, -5]এবং [1, 6, 4, 3, -1, -6, -4, -3]এবং তাদের উভয়ই অগ্রণী দিক রয়েছে 1

[4, -4, -5, 5]বৈধ ব্যায়াম অংশ শুধুমাত্র গঠিত সত্ত্বেও, না একটি ব্যায়াম সেট, প্রথম অংশ থেকে, হয় [4, -4], পাশের নেতৃস্থানীয় করেছে 1দ্বিতীয় অংশ, [-5, 5], পাশের নেতৃস্থানীয় করেছে -1

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

বৈধ পরীক্ষার কেস:

[]
[1, -1]
[1, -1, 1, -1]
[-6, 6, -5, -4, -3, 5, 4, 3]
[-1, -5, -8, 1, 5, 8, -7, -6, -5, -3, 7, 6, 5, 3]
[-1, -5, -8, 1, 5, 8, -1, 1]

অবৈধ পরীক্ষার কেস:

[1]
[1, -2]
[1, 2, -3, -1, -2, 3]
[1, 2, 3, -3, -1, -2]
[-1, -5, -8, 1, 5, 8, 7, 6, 5, 3, -7, -6, -5, -3]
[1, 2, 3, 5, 1, 2, 3, 5]
[1, 2, -5, 4, -6, 5, 5, -6]
[1, 2, -1, 3, -2, -3]
[1, -2, 1]
[-1, -1, 1]
[1, -1, 1]

3
খালি কেস একটি বিরক্তি। এবং চ্যালেঞ্জের শব্দগুলির ব্যাখ্যা করার জন্য আমি নিশ্চিত নই যে "একদম অনুশীলন না করা" একদিকে বা অন্যদিকে "ব্যায়াম সেট" করার কোনও কার্যকর উপায় আছে কিনা? তবে সত্যি কথা বলতে আমি শুধু হাহাকার করছি।
এনজিএম

@ngm এই সম্পর্কে মন্তব্য করতে চলেছেন .. খালি তালিকা একটি বিরক্তিকর প্রান্তের বিষয় .. ব্যক্তিগতভাবে আমি ইনপুটটিতে কমপক্ষে একটি আইটেম অন্তর্ভুক্ত করব। যদিও সেই দুর্দান্ত চ্যালেঞ্জ ছাড়াও!
কেভিন ক্রুইজসেন

1
@ngm এটি শূন্য সত্যের শর্ত দ্বারা সত্য। এটিকে যথাযথ শিথিলতা হিসাবে বিবেচনা করুন। ;)
এরিক দি আউটগল্ফার

2
আমি একই সাথে গল্ফ করতে এবং অনুশীলন করতে পারি তা জেনে আনন্দিত।
এনজিএম

@ngm " আমি একই সাথে গল্ফ এবং অনুশীলন করতে পারি তা জেনে ভাল লাগল " এই ধরণের চ্যালেঞ্জ আমরা আরও পেয়েছি । ;)
কেভিন ক্রুইজসেন 24'18

উত্তর:




3

জাভা 8, 186 183 185 বাইট

a->{int i=a.length-1,t,j;boolean r=i%2>0,f;if(i<0)return!r;for(f=a[i]<0;i>0;){for(r&=f==(t=a[j=i])<0;j>0&&t>>>31==a[--j]>>>31;);for(t=i-j,i-=2*t;j>=0&j>i;)r&=a[j+t]==-a[j--];}return r;}

3 মাপের পরীক্ষার কেসগুলির জন্য বাগ-ফিক্সের কারণে +2 বাইট (প্রায় সমস্ত ক্রমশক্তি 1 এবং এর-1 আমার টিআইও-লিঙ্কের শেষে)।

অবশ্যই গল্ফ করা যেতে পারে .. চ্যালেঞ্জটি পয়েন্ট অব দ্য পয়েন্টে দেখায় তবে এটি বাস্তবায়ন করা বেশ কঠিন। বিশেষত টেস্ট কেস[4,-4,-5,5] ঠিক করা বিরক্তিকর ছিল .. তবে এটি এখন কাজ করে। এখান থেকে গল্ফ নেমে যাবে

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

ব্যাখ্যা:

a->{                   // Method with integer-array parameter and boolean return-type
  int i=a.length-1,j,  //  Index integers (`i` starting at the last index)
      t;               //  Temp integer
  boolean r=i%2>0,     //  Result-boolean, starting at true if the input-list is even
          f;           //  Flag-integer
  if(i<0)              //  If the input was empty (edge case)
    return!r;          //   Return true
  for(f=a[i]<0;        //  Set the flag-boolean to "Is the current item negative?"
      i>0;){           //  Loop down over the array
    for(r&=f==(t=a[j=i])<0;
                       //   Set `s` to the current number
                       //   And verify if the initial flag and `s` have the same sign
        j>0            //   Loop `j` from `i` down as long as `j` is larger than 0,
        &&t>>>31==a[--j]>>>31;);
                       //   and both `s` and the current item have the same sign
                       //    Decreasing `j` by 1 every iteration
    for(t=i-j,         //   Set `t` to `i-j` (amount of same signed adjacent values)
        i-=2*t;        //   Decrease `i` by two times `t`
        j>=0           //   Loop as long as `j` is larger than or equal to 0,
        &j>i;)         //   and also larger than `i`
      r&=a[j+t]==-a[j--];}
                       //    Verify if the pairs at index `j+t` and `j`
                       //    are negatives of each other
  return r;}           //  Return if `r` is still true (if all verifications succeeded)

3

আর , 91 বাইট

সংখ্যার একটি সাদা স্থান-পৃথক ভেক্টর ইনপুট করে। FALSEবৈধ এবং TRUEঅবৈধ জন্য আউটপুট ।

x=scan()
y=x<0
z=rle(y)
"if"(sum(x|1),any(x[y]+x[!y],z$v==rev(z$v),z$l[!0:1]-z$l[!1:0]),F)

rle ইতিবাচক এবং নেতিবাচক মানগুলির ক্রমের ক্ষেত্রে রানের দৈর্ঘ্য এনকোডিং দেয়।

সম্পূর্ণরূপে এবং সম্পূর্ণ অন্যায্য খালি প্রান্ত কেস;) একটি খুব বড় 15 বাইট যোগ করা হয়েছে।

অনেকগুলি বাইট @ জিউজ্পে দ্বারা শেভ করা হয়েছে।

এখানে একটি ফাংশন হিসাবে প্রকাশিত একটি 92 বাইট সংস্করণ রয়েছে যা পরীক্ষার জন্য ভাল:

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


3

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

ডেনিসের পাইথন উত্তর দ্বারা অনুপ্রাণিত অনুকূলিত সংস্করণ ।

ফেরত পাঠায় 0 বা 1

a=>a.map(b=p=x=>b[+(x<0)]+=[x*x,p*(p=x)>0])|b[1]==b[0]

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


আসল সংস্করণ, by৪ বাইট

a=>a.map(x=>b[i^=p*(p=x)<0&&-~(b[i]+=0)]+=[,x*x],b=[p=0,i=0])|b[1]+0==b[0]

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

কিভাবে?

আমরা সমস্ত অনুশীলনের অংশের প্রথম ভাগটি খ [0] এবং দ্বিতীয় অংশটি খ [1] এ সংরক্ষণ করি , প্রতিবার চিহ্নটি পরিবর্তিত হওয়ার সাথে খ [0] এবং খ [1] এর মধ্যে স্যুইচ করে । চিহ্নটি থেকে মুক্তি পেতে এন্ট্রিগুলি স্কোয়ার করা হয়। আমরা প্রতিটি এন্ট্রি কমা দিয়ে প্রিফিক্স করি এবং প্রতিটি অংশকে 0 দিয়ে প্রত্যয় দিয়ে থাকি ।

মূলত কোনও ব্যয় ছাড়াই 'খালি ইনপুট' প্রান্তের কেসটি হ্যান্ডেল করার জন্য অতিরিক্ত কিছু যুক্তি রয়েছে (উত্স কোডের শেষের দিকে মন্তব্যটি দেখুন)।

a =>                    // given the input array a[]
  a.map(x =>            // for each x in a[]:
    b[i ^=              //   access b[i]:
      p * (p = x)       //     we keep track of the previous entry in p
      < 0 &&            //     if p and x have opposite signs:
      -~(b[i] += 0)     //       append a '0' to b[i] and update i: 0 -> 1, 1 -> 0
    ] += [, x * x],     //   append a comma followed by x² to b[i]
    b = [p = 0, i = 0]  //   start with p = 0, i = 0 and b = [0, 0]
  ) |                   // end of map()
  b[1] + 0              // this will append a '0' to b[1] if it was turned into a string
                        // or let it unchanged if it's still equal to zero (integer),
                        // which handles the 'empty input' edge case
  == b[0]               // compare the result with b[0]

2

পাইথন 2 , 147 130 113 112 106 বাইট

from itertools import*
def f(s):l=[map(abs,g)for v,g in groupby(s+[0],0 .__cmp__)];print l[1::2]==l[:-1:2]

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


সংরক্ষিত:

  • -27 বাইট, ডেনিসকে ধন্যবাদ

2
lambda n:cmp(n,0)হয়ে যেতে পারে 0 .__cmp__all(a==b for a,b in zip(l[::2],l[1::2]))হয়ে যেতে পারে l[:-1:2]==l[1::2]
ডেনিস

2

রেটিনা 0.8.2 , 57 বাইট

^\b|,\b
$&=
(.)(\d+),(?=\1)
$2_
-|=

.$
$&,
^((\w+,)\2)*$

এটি অনলাইন চেষ্টা করুন! কমা-বিচ্ছিন্ন ইনপুট নেয়, তবে লিঙ্কটিতে শিরোনাম অন্তর্ভুক্ত যা পরীক্ষার কেসগুলি প্রক্রিয়া করে। ব্যাখ্যা:

^\b|,\b
$&=

প্রতিটি ধনাত্মক পূর্ণসংখ্যার আগে একটি চিহ্নিতকারী sertোকান।

(.)(\d+),(?=\1)
$2_

একই চিহ্নের পূর্ণসংখ্যার মধ্যে কমাগুলি আন্ডারস্কোরগুলিতে পরিবর্তন করুন।

-|=

বাকি লক্ষণগুলি মুছুন।

.$
$&,

ইনপুটটি খালি না হলে কমা যুক্ত করুন end

^((\w+,)\2)*$

স্ট্রিংটিতে একই পূর্ণসংখ্যার জোড় জোড় রয়েছে।



1

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

b=>eval('i=b.length-1;r=i%2;0>i&&!r;for(f=0>b[i];0<i;){for(r&=f==(s=0>b[j=i]);0<j&&s&0>b[--j]|!s&0<b[j];);t=i-j;for(i-=2*t;0<=j&j>i;)r&=b[j+t]==-b[j--]}r')

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


অনুপ্রেরণা ছিল @ কেভিন ক্রুজসেনের উত্তর

এছাড়াও আমার 2 টি পরীক্ষার কেস সংশোধন করার জন্য তাকে ধন্যবাদ জানাই


যেহেতু পুলিশের আমার জাভা উত্তর থেকে অনুপ্রাণিত হয়, আপনি পরিবর্তন করা উচিত r=0<iকাছে r=i%2, পরীক্ষার বিষয় যেহেতু [1,-1,1]এবং [-1,1,-1]মুহূর্তে ব্যর্থ হচ্ছে। যদিও জেএসের জন্য বাইট-কাউন্টটি একই রয়েছে।
কেভিন ক্রুইজসেন 24'18

@ কেভিন ক্রুজসেন: ধন্যবাদ, সম্পন্ন
মুহাম্মদ সালমান


1

ব্র্যাচল্যাগ , 18 14 বাইট

~c{ḍz{ṅᵈ¹ṡ}ᵛ}ᵛ

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

সংরক্ষিত 4 বাইট @ ইরিকআউটগলফারকে ধন্যবাদ

ব্যাখ্যা

                    Succeed if and only if:
~c                  You can deconcatenate the input list…
  {         }ᵛ      …and verify that for each of the sublists:
   ḍ                  Split it in half
    z                 Zip the elements of each half together
     {    }ᵛ          Verify that for each couple:
      ṅᵈ¹               The first integer is the negation of the second one
         ṡ              Take the sign of the first one
                      All signs should be equal in a sublist
                    All leading signs of the sublists should be equal

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