ট্রিপল-ভারসাম্যযুক্ত সংখ্যা


13

বিবরণ

আমরা কমপক্ষে তিনটি অঙ্কের ট্রিপল-ভারসাম্য সহ একটি পূর্ণসংখ্যার বিবেচনা করি, যদি তিন ভাগে বিভক্ত হয়, প্রতিটি অংশের অঙ্কগুলি একই সংখ্যা পর্যন্ত যোগ করে। আমরা নিম্নলিখিত হিসাবে সংখ্যা বিভক্ত:

abcdefghi - Standard case: the number of digits is divisable through 3:
abc def ghi

abcdefgh - Number % 3 == 2: The outer groups are both assigned another digit
abc de fgh (the inner group will have one digit less than both outer groups)

abcdefghij - Number % 3 == 1: The inner group is assigned the extra digit
abc defg hij (the inner group will have one digit more than the outer groups)

চ্যালেঞ্জ

আপনার টাস্কটি একটি প্রোগ্রাম লিখতে হয়, যা কমপক্ষে 3 টি সংখ্যার পূর্ণসংখ্যার দ্বারা প্রদত্ত সংখ্যাটি ট্রিপল-ভারসাম্যযুক্ত কিনা এবং ফলাফলের ভিত্তিতে সত্যবাদী বা মিথ্যা মানকে আউটপুট দেয় কিনা তা নির্ধারণ করে।

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

333 -> True
343 -> False
3123 -> True
34725 -> True
456456 -> False
123222321 -> True

এটি , সুতরাং স্ট্যান্ডার্ড লুফোলগুলি প্রয়োগ হয় এবং বাইটের মধ্যে সংক্ষিপ্ত উত্তরটি জিততে পারে!


1
আমি যেমন এটি বুঝতে পারি, আপনি যদি এটি সমানভাবে বিভক্ত করতে পারেন তবে আপনার উচিত।
সম্পূর্ণমানবিক

@ মিঃ এক্সকোডার আপনি এটিকে তিন ভাগে বিভক্ত করেছেন (এটি এখনও @ ম্যাজিকঅ্যাক্টোপাস ইউনারের মন্তব্য অনুসারে কাজ করে না:when split in three parts,
স্টিফেন

4
ভবিষ্যতে এ জাতীয় পরিস্থিতি এড়াতে স্যান্ডবক্স ব্যবহার করার বিষয়টি বিবেচনা করুন ।
মিঃ এক্সকোডার

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

5
ডিফল্টরূপে, ইনপুটটিকে স্ট্রিং হিসাবে গ্রহণের অনুমতি দেওয়া হয়। এটি কি অঙ্কের অ্যারে হিসাবে নেওয়া যেতে পারে?
লুইস মেন্ডো

উত্তর:



3

জেলি , 23 বাইট

DµL‘:3‘Ṭ©œṗ⁸U®œṗЀS€€FE

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

আপনার মাথার উপরে কোনওভাবেই উড়ে যেতে হবে ...


এটি সোজা-এগিয়ে দেখায় তবে এটি সত্যিই টিবিএইচ নয় ... অ-ডিফল্ট বিভাজনের কারণে 05AB1E এ এমনকি কঠিন।
ম্যাজিক অক্টোপাস উরন 21

3

রেটিনা , 89 বাইট

^|$
¶
{`¶(.)(.*)(.)¶
$1¶$2¶$3
}`^((.)*.)(.)¶((?<-2>.)*)¶(.)
$1¶$3$4$5¶
\d
$*
^(1+)¶\1¶\1$

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


2

গণিত, 142 বাইট

(s=IntegerDigits@#;c=Floor;If[Mod[t=Length@s,3]==2,a=-1;c=Ceiling,a=Mod[t,3]];Length@Union[Tr/@FoldPairList[TakeDrop,s,{z=c[t/3],z+a,z}]]==1)&

2

জেলি , 20 বাইট

DµL‘:3x2jSạ¥¥LRṁ@ḅ1E

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

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

DµL‘:3x2jSạ¥¥LRṁ@ḅ1E  Main link. Argument: n

D                     Decimal; convert n to base 10, yielding a digits array A.
 µ                    Begin a new chain with argument A.
  L                   Compute the length of A.
   ‘                  Increment; add 1 to the length.
    :3                Divide the result by 3.
                      This yields the lengths of the outer chunks.
      x2              Repeat the result twice, creating an array C.
             L        Compute l, the length of A.
            ¥         Combine the two links to the left into a dyadic chain.
                      This chain will be called with arguments C and l. 
           ¥              Combine the two links to the left into a dyadic chain.
         S                    Take the sum of C.
          ạ                   Compute the absolute difference of the sum and l.
        j                 Join C, using the result to the right as separator.
                      We now have an array of the lengths of all three chunks the
                      digits of n have to be split in.
              R       Range; map each chunk length k to [1, ..., k].
               ṁ@     Mold swapped; takes the elements of A and give them the shape
                      of the array to the right, splitting A into chunks of the
                      computed lengths.
                 ḅ1   Convert each chunk from unary to integer, computing the sum
                      of its elements.
                   E  Test if the resulting sums are all equal.

1
আমি একটি ব্যাখ্যা পড়তে পছন্দ করব
ফেলিক্স ডমবাক

@ ফেলিক্স ডমবাক আমি একটি ব্যাখ্যা যুক্ত করেছি।
ডেনিস


0

জাভাস্ক্রিপ্ট, 178 বাইট

(a)=>{b=a.split(/(\d)/).filter((v)=>v);s=Math.round(b.length/3);f=(m,v)=>m+parseInt(v);y=b.slice(s,-s).reduce(f,0);return b.slice(0,s).reduce(f,0)==y&&y==b.slice(-s).reduce(f,0)}

পিপিসিজিতে আপনাকে স্বাগতম! আপনি কি টিপস পৃষ্ঠা পড়েছেন ? আপনার উত্তর নিচে গল্ফ করার অনেক সুযোগ আছে।
নিল

আপনি যদি এখনও আগ্রহী হন তবে আমি আপনার উত্তরটি 106 বাইটে ট্রিম করতে সক্ষম হয়েছি: ([...b],s=~b.length/3|0,f=(m,v)=>+m+ +v,y=b.splice(s).reduce(f))=>b.splice(-s).reduce(f)==y&y==b.reduce(f)(স্ট্যাক এক্সচেঞ্জ অদৃশ্য চরিত্রগুলি সন্নিবেশ করায় মন্তব্য থেকে অনুলিপি করার সময় যত্ন নিন)।
নীল

Beautyful! আমার সেখানে অনেক কিছু শিখতে হবে।
সিডিএম

0

জাভা 8, 149 বাইট

q->{int l=q.length,s=(l+1)/3,a=0,b=0,c=0,i=0;for(;i<s;a+=q[i++]);for(i=s,s=l/3*2+(l%3<1?0:1);i<s;b+=q[i++]);for(i=s;i<l;c+=q[i++]);return a==b&b==c;}

একটি হিসাবে ইনপুট লাগে int[]

ব্যাখ্যা:

এখানে চেষ্টা করুন।

q->{                 // Method with int-array parameter and boolean return-type
  int l=q.length,    //  Length of the input-array
      s=(l+1)/3,     //  (Length + 1) divided by 3
      a=0,b=0,c=0,   //  Three sums starting at 0
      i=0;           //  Index-integer
  for(;i<s;          //  Loop (1) from 0 to `s1` (exclusive)
    a+=q[i++]        //   And increase `a` with the next digit
  );                 //  End of loop (1)
  for(i=s,s=l/3*2+(l%3<1?0:1);i<s;
                     //  Loop (2) from `s1` to `s2` (exclusive)
    b+=q[i++]        //   And increase `b` with the next digit
  );                 //  End of loop (2)
  for(i=s;i<l;       //  Loop (3) from `s2` to `l` (exclusive)
    c+=q[i++]        //   And increase `c` with the next digit
  );                 //  End of loop (3)
  return a==b&b==c;  //  Return if `a`, `b` and `c` are equal
}                    // End of method

এখানে প্রতিটি দৈর্ঘ্যের জন্য 0-সূচকযুক্ত (একচেটিয়া) অংশগুলির একটি সংক্ষিপ্তসার রয়েছে:

Length:  Parts:    0-indexed (exclusive) parts:

 3       1,1,1     0,1 & 1,2 & 2,3
 4       1,2,1     0,1 & 1,3 & 3,4
 5       2,1,2     0,2 & 2,3 & 3,5
 6       2,2,2     0,2 & 2,4 & 4,6
 7       2,3,2     0,2 & 2,5 & 5,7
 8       3,2,3     0,3 & 3,5 & 5,8
 9       3,3,3     0,3 & 3,6 & 6,9
10       3,4,3     0,3 & 3,7 & 7,10
...
  • জন্য aথেকে আমরা লুপ 0থেকে (length + 1) / 3)(এই মান এখন মধ্যে সংরক্ষিত হয় s);
  • জন্য bথেকে আমরা লুপ sথেকে length / 3 * 2 +( 0যদি দৈর্ঘ্য মডিউল -3 0; 1যদি দৈর্ঘ্য মডিউল -3 1 বা 2 হয়) (এই মান এখন দোকানে নেই s);
  • জন্য cথেকে আমরা লুপ sথেকে length

(তিনটি লুপ 0-সূচকযুক্ত একচেটিয়া)


0

রাদা , 82 বাইট

f s{n=((#s+1)//3)[s[:n],s[n:#s-n],s[#s-n:]]|[chars(_)|[ord(_)-48]|sum]|[_=_,_=_1]}

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

ব্যাখ্যা:

f s{ /* function declaration */
    n=((#s+1)//3)
    [s[:n],s[n:#s-n],s[#s-n:]]| /* split the string */
    [ /* for each of the three strings: */
        chars(_)|    /* push characters to the stream */
        [ord(_)-48]| /* convert characters to integers */
        sum          /* sum the integers, push the result to the stream */
    ]|
    [_=_,_=_1] /* take three values from the stream and compare equality */
}

0

জাভাস্ক্রিপ্ট, 129 , 104 বাইট

([...n],l=n.length/3+.5|0,r=(b,e=b*-4,z=0)=>n.slice(b,e).map(x=>z-=x)&&z)=>r(0,l)==r(-l)&&r(l,-l)==r(-l)

ফাংশন r প্যারামিটার বি এবং ই এর উপর ভিত্তি করে স্ট্রিংকে টুকরো টুকরো করে এবং তারপরে অঙ্কগুলি যোগ করে এবং মানটি দেয়।

সঠিক আকারে টুকরো টুকরো করার জন্য, আমরা দৈর্ঘ্যটি 3 দ্বারা বিভক্ত করি এবং ফলাফলটি বৃত্তাকার করি। স্লাইস কল (0, ফলাফল) আমাদের প্রথম ব্লক দেয়, স্লাইস (ফলাফল, ফলাফল) আমাদের দ্বিতীয়টি দেয় এবং স্লাইস (ফলাফল) আমাদের শেষ দেয়। যেভাবে আমি স্লাইস কল করছি, আমি শেষের পরিবর্তে স্লাইস (ফলাফল, 4 * ফলাফল) ব্যবহার করেছি তবে এটি একই ফলাফল দেয়।

পরিশেষে, আমি ফলাফলগুলি তুলনা করে দেখি মানগুলি সমান।

সম্পাদনা করুন: একই নীতি, আরও ভাল গল্ফিং


জাভাস্ক্রিপ্টে পরিবর্তন &&করা কি সম্ভব &? উভয় সেকেন্ড-হ্যান্ড চেক ( &&zএবং &&y[1]==y[2]) মানগুলিকে সংশোধন করে না বলে মনে হয়, তাই যদি এটি সম্ভব হয় তবে আমি যা দেখতে পাচ্ছি তার ফলাফলটিকে প্রভাবিত করা উচিত নয়।
কেভিন ক্রুইজসেন

আমি একবার দেখবো. & একটি সামান্য ক্রিয়াকলাপ বনাম && একটি যৌক্তিক হওয়া, সুতরাং এটি আউটপুটটিকে সত্য বা মিথ্যা পরিবর্তে 1 বা 0 এ পরিবর্তিত করবে, তবে এটি ক্ষেত্রে দুর্দান্ত কাজ করে।
Grax32
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.