উপ-অ্যারেতে সমান সংখ্যা


16

length >=3এবং এর সাথে সংখ্যার একটি অ্যারে দেওয়া হয়েছেlength % 3 == 0

[1, 2, 3, 4, ...]

আপনি এটি দৈর্ঘ্যের 3 টি উপ-অ্যারেগুলিতে বিভক্ত করবেন

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

এবং সাথে একটি অ্যারে ফেরত দিন

  • [0] => সাব-অ্যারেতে যতগুলি সংখ্যার সংখ্যা সমান হয় তার পরিমাণ
  • [1] => সাব-অ্যারেতে সমস্ত সংখ্যা সমান না হলে সাব-অ্যারেতে কেবলমাত্র 2 টি সংখ্যার ক্ষেত্রে মামলার পরিমাণ

উদাহরণ এবং পরীক্ষার কেস:

  • ইনপুট: [2, 4, 2, 5, 5, 5, 4, 2, 1, 3, 3, 1]আউটপুট[1, 2]

এই কারণ

[[2, 4, 2], [5, 5, 5], [4, 2, 1], [3, 3, 1]]
  ^     ^    ^  ^  ^               ^  ^ 
   equal    all equal              equal   

সুতরাং 2 equalএবং 1all equal

  • [3,5,6,5,5,7,6,6,8,7,7,7,3,4,2,4,4,3] => [1, 3]
  • [3,3,3,4,4,4,5,5,5,6,6,6,5,4,3] => [4, 0]
  • [3,4,5,6,7,8,9,8,7,6,5,4,3,2,1] => [0, 0]

এটি , তাই বাইটসের মধ্যে সংক্ষিপ্ত উত্তর win


পিডি: আমার ইংরাজির জন্য ক্ষমা চাই।


পরীক্ষার ক্ষেত্রে নম্বরগুলি সব ইতিবাচক। সবসময় কি তাই হয়?
ডেনিস

@ ডেনিস নং ইতিবাচক এবং নেতিবাচক সংখ্যা হতে পারে।
লুইস ফেলিপ দে জেসুস মুনোজ

উত্তর:


5

অক্টাভ , 60 52 50 বাইট

@(x)sum(sum(~diff(sort(reshape(x,3,[]))))'==[2 1])

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

লুইসের জন্য 8 টি বাইট সংরক্ষণ করা হয়েছে!

ব্যাখ্যা:

3 টি সারি এবং উপযুক্ত পরিমাণে কলাম সহ একটি ইনপুটটিকে ম্যাট্রিক্সে পুনরায় আকার দেয়। এরপরে এটি প্রতিটি কলামকে বাছাই করে এবং বিভিন্ন সারিতে থাকা উপাদানগুলির মধ্যে পার্থক্য গণনা করে। এটি দুটি সারি সহ একটি ম্যাট্রিক্স দেয়, যেখানে অভিন্ন সংখ্যার শূন্য থাকবে এবং বিভিন্ন সংখ্যার ইতিবাচক সংখ্যা থাকবে have এটি উপেক্ষিত, যাতে সমস্ত সমান উপাদান 1এবং সমস্ত অসম হয় 0। আমরা তখন সেই কলামের প্রতিটি যোগফল, আমাদের তিন বিকল্প এক দান: 0 = All elements are unequal, 1 = Two elements are equalএবং 2 = All elements are equal। আমরা তখন পরীক্ষা কতজন >1, আর কত ঠিক হয় ==1


4

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

f=([a,b,c,...d],t=p=0)=>1/a?f(d,t+!(a-b&&a-c?b-c||++p:b-c&&++p)):[t,p]

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

কিভাবে?

আমরা ইনপুট অ্যারে থেকে প্রতিটি ট্রিপলেট [ক, খ, সি] পুনরাবৃত্তভাবে নিষ্কাশন করি এবং নিম্নলিখিত সূত্রটি ব্যবহার করে দুটি কাউন্টার টি (থ্রি-অফ-এ-টাইপ) এবং পি (জুড়ি) আপডেট করি :

t =
t + !(a - b && a - c ? b - c || ++p : b - c && ++p)

5 টি সম্ভাব্য কেস রয়েছে যা নীচে 'সমস্ত সমান' থেকে 'সমস্ত স্বতন্ত্র' থেকে বিশদে বর্ণিত।

a b c | a-b && a-c | b-c | b-c || ++p | b-c && ++p | t +=
------+------------+-----+------------+------------+------------
4 4 4 | false      | 0   | n/a        | 0          | !0    --> 1
4 4 5 | false      | ≠0  | n/a        | ++p        | !++p  --> 0
4 5 4 | false      | ≠0  | n/a        | ++p        | !++p  --> 0
5 4 4 | true       | 0   | ++p        | n/a        | !++p  --> 0
4 5 6 | true       | ≠0  | ≠0         | n/a        | !(≠0) --> 0

আউটপুট শুধুমাত্র বেশী করতে পারেন [0]এবং [1]ইনডেক্স "নোট: আয় সঙ্গে একটি 3-উপাদানের অ্যারের [0]এবং [1]ম উপযুক্ত মান ফিরে, এবং [2]। একটি ডামি মান (সাধারণ যে কোন উপাদানের ছাড়া 3-তালিকার সংখ্যা) ফিরে এই সম্পূর্ণই বৈধ অনুযায়ী বর্তমান বিধি। " কোডগল্ফ.স্ট্যাক্কেঞ্জাওন.এই / 166082/31257 62 বাইটa=>a.map(_=>++r[--new Set(a.slice(i,i+=3)).size],r=[i=0,i])&&r
অতিথি 271314

3

পাইথ, 13 14 12 11 বাইট

/Lml{kcQ3S2

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

ব্যাখ্যা

/Lml{kcQ3S2
      cQ3        Split the input into groups of 3.
  ml{k           Deduplicate and get the length of each.
/L               Count the number...
         S2      ... of 1s and 2s.

তৃতীয় পরীক্ষায় ব্যর্থ (কিছুটা সমান এবং কিছু দ্বি-সমান ত্রিভুজ দরকার)
জোনাথন অ্যালান


3

ওকে , 17 16 বাইট

+/(1 2=#=:)'0N3#

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

            0N3# /reshape into groups of 3 (see ngn's comment)
  (       )'     /for each group:
        =:       /    make a map from number -> indices
       #         /    count number of keys/values
   1 2=          /    check if the count is equal to 1 or 2 
+/               /sum together the columns

জন্য , 17 বাইট সংস্করণ: +/(1 2=#=:)'0N 3#


0N 3-> 0N3(OK একটি পার্সিং ছিট ধন্যবাদ)
ngn

3

আর , 70 বাইট

function(v,x=lengths(by(v,seq(0,a=v)%/%3,table)))c(sum(x<2),sum(x==2))

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

পূর্বের সংস্করণসমূহ :

আর , 82 বাইট

function(v,a=!1:2){for(i in lengths(by(v,seq(0,a=v)%/%3,table)))a[i]=a[i]+1;a[-3]}

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


আর , 93 বাইট

function(v,a=table(lengths(by(v,0:(length(v)-1)%/%3,unique)))[c('1','2')])`[<-`(a,is.na(a),0)

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


1
সম্ভবত অষ্টাভ উত্তরটি পোর্ট করা আরও দক্ষ হবে তবে এটি আরও a=!1:2খাটো।
জিউসেপ

@ জিউসেপ: ধন্যবাদ, এবং এর seq(0,a=v)পরিবর্তে অন্যান্য 5 বাইট ব্যবহার করে সংরক্ষণ করেছেন 0:(length(v)-1);) দুর্ভাগ্যক্রমে আমি
অষ্টাভকে

@ জিউসেপ: পদ্ধতির পরিবর্তন হয়েছে এবং প্রচুর বাইট সংরক্ষণ করেছে :)
ডিগএমআল

দুর্দান্ত পন্থা! applyআইএন দিয়ে আমার আরও কিছু ছোট ছিল uniqueতবে এটি তৃতীয় পরীক্ষার ক্ষেত্রে ব্যর্থ। আপনার byপন্থাটি নিরাপদ
জয়সি

@ জায়েসি: ভাগ্যক্রমে আর 3.2.0 দৈর্ঘ্যের ফাংশন চালু করেছে যা প্রচুর বাইট সংরক্ষণ করে ... তবে কোড
গল্ফটিতে

3

জাভা (জেডিকে 10) , 116 বাইট

l->{int r[]={0,0,0},i=0,a,b,c;for(;i<l.length;b=l[i++],c=l[i++],r[a==b?b==c?0:1:b==c|a==c?1:2]++)a=l[i++];return r;}

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

দ্রষ্টব্য: উপযুক্ত মান সহ একটি 3-উপাদান অ্যারে প্রদান করে [0]এবং [1]ফিরিয়ে দেয় এবং [2]একটি ডামি মান (সাধারণ কোনও উপাদান ছাড়াই 3-তালিকার সংখ্যা) প্রদান করে। এটি বর্তমান বিধি অনুসারে সম্পূর্ণ বৈধ।


2

পাওয়ারশেল , 106 বাইট

param($a)for(;$a){$x,$y,$z,$a=$a;if($x-eq$y-and$y-eq$z){$i++}else{$j+=$x-eq$y-or$y-eq$z-or$z-eq$x}}+$i,+$j

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

ঠিক টিনে এটি কী বলে। ইনপুট উপর লুপ $a। প্রতিটি পুনরাবৃত্তি, $x,$y,$zপরবর্তী তিনটি উপাদান হিসাবে খোসা ছাড়ায় । পরীক্ষাগুলি ifসেগুলি সমস্ত সমান এবং যদি তাই হয়, বৃদ্ধি $iElse, $jকমপক্ষে একটি জোড়া সমান হলে ইনক্রিমেন্ট । লুপটি সম্পূর্ণ হয়ে গেলে আউটপুট $iএবং $jপূর্ণসংখ্যা হিসাবে।

সুতরাং ... অনেক ... ডলার ...


2

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

(.+)¶(.+)¶(.+)
;$1;$2;$3;$1;
%M`(;\d+)(?=\1;)
s`((1)|(3)|.)+
$#3 $#2

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

(.+)¶(.+)¶(.+)
;$1;$2;$3;$1;

বিভাজক সহ প্রতিটি লাইনে তিনটি মান সংগ্রহ করুন এবং শেষে প্রথমটির সদৃশ করুন।

%M`(;\d+)(?=\1;)

নকলের জোড় সংখ্যা গণনা করুন।

s`((1)|(3)|.)+
$#3 $#2

3S এবং 1s এর সংখ্যা গণনা করুন ।




2

কমন লিস্প, 113 বাইট

(lambda(l &aux(a 0)(b 0))(loop for(x y z)on l by #'cdddr do(if(= x y z)(incf a)(if(/= x y z)()(incf b))))`(,a,b))

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

(= x y z)তিনটি উপাদান সমান হলে কমন লিস্পে সত্যটি প্রয়োগ করে এবং (/= x y z)সংখ্যার কোনও জোড়া সমান না হলে সত্য দেয় Used


2

জাপট, 14 13 বাইট

2õ@ò3 x_â ʶX

চেষ্টা করে দেখুন


ব্যাখ্যা

2õ                :Range [1,2]
  @               :Pass each X through a function
   ò3             :  Split input to arrays of length 3
       _          :  Pass each through a function
        â         :    Remove duplicates
          Ê       :    Get length
           ¶X     :    Test for equality with X
      x           :  Reduce by addition

2

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

lambda a:map([len(set(t))for t in zip(*[iter(a)]*3)].count,(1,2))

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

এক্সনর থেকে একটি চতুর কৌশল দ্বারা 7 বাইট সংরক্ষণ করা হয়েছে


আপনি ট্রিপল্টের সংক্ষিপ্ত তালিকা তৈরি করতে পারেন zip(*[iter(a)]*3)
xnor

@ এক্সনর: খুব সুন্দর; আমি ভাবলাম যদি এর থেকে আরও ছোট উপায় থাকে ...
চ্যাস ব্রাউন

2

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

S2,3,` 
%Cq`\S+
*\C`1
2

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

ব্যাখ্যা

S2,3,` 

(0-ভিত্তিক) 2 য় থেকে শুরু করে প্রতি তৃতীয় স্পেসে ইনপুটটি বিভক্ত করুন, অর্থাৎ ইনপুটটিকে তিনটি গ্রুপে বিভক্ত করুন।

%Cq`\S+

প্রতিটি লাইনে ( %) Cঅনন্য ( q) মান ( \S+) এর সংখ্যা ( ) গণনা করুন ।

*\C`1

এর সংখ্যা গণনা করুন 1এবং এগুলি একটি অনুসরণীয় লাইনফিড ( \) দিয়ে মুদ্রণ করুন তবে শুকনো রান ( *) তে করুন যাতে আমরা আগের ফলাফলটি হারাতে পারি না।

2

এর সংখ্যা গণনা করুন 2(এবং সেগুলি স্বয়ংক্রিয়ভাবে মুদ্রণ করুন)।


2

জে , 16 15 বাইট

-1 বাইট ধন্যবাদ কোলে!

1#.1 2=/_3#@=\]

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

বেশিরভাগ সমাধানের সংখ্যাগরিষ্ঠ হিসাবে একই পদ্ধতি।

ব্যাখ্যা:

        _3    \]  - split the input into sublists of lenght 3
          #@~.    - for each triplet remove duplicates and take the length 
   1 2=/          - compare with 1 and 2
1#.               - add up

#@~.->#@=
কোলে


1

[3,5,6,5,5,7,6,6,8,7,7,7,3,4,2,4,4,3][2,3]পরিবর্তে আউটপুট[1,3]
লুইস ফিলিপ দে জেসুস মুনোজ

[3,3,3,4,4,4,5,5,5,6,6,6,5,4,3][1,0]পরিবর্তে আউটপুট[4,0]
লুইস ফিলিপ দে জেসুস মুনোজ

[3,4,5,6,7,8,9,8,7,6,5,4,3,2,1][5,0]পরিবর্তে আউটপুট[0,0]
লুইস ফেলিপ দে জেসুস মুনোজ

@ লুইসেলিপডিজেস মুনোজ স্থির করেছেন
ওয়াটল ছিল

এটি বর্তমানে কোনও আউটপুট প্রদর্শন করে না [1,1,1]। আপনি ব্যবহার করেন তাহলে 2(এর পরিবর্তে 1Tএটা সবসময় ঠিক 2. মাপ ছাঁটা হবে / প্যাড
রিকার্সিভ



1

এলিক্সির , 92 বাইট

fn a->import Enum;c=map chunk(a,3),&(length uniq&1);{count(c,&(&1==1)),count(c,&(&1==2))}end

প্রথমে তালিকাটি আকারের দৈর্ঘ্য 3 এ বিভক্ত করুন chunk(a,3)

দ্বিতীয়ত, এটি রূপান্তর করে প্রতিটি উপাদানটির দৈর্ঘ্য নির্বিঘ্নে; map chunk(a,3),&(length uniq&1)

পরিশেষে, ফলাফল ফলাফলের তালিকার একের সমান count(c,&(&1==1))এবং ফলাফলের তালিকাটি দুইটির সমান হওয়ার সংখ্যার সমন্বয়ে একটি অ্যারে প্রদান করে count(c,&(&1==2))

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



0

টিসিএল , 111 বাইট

proc S {L a\ 0 e\ 0} {lmap {x y z} $L {expr {$x-$y|$y-$z?$x==$y|$y==$z|$x==$z?[incr e]:0:[incr a]}}
list $a $e}

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


Tcl , 112 বাইট

proc S {L a\ 0 e\ 0} {lmap {x y z} $L {expr {$x-$y||$y-$z?$x==$y|$y==$z|$x==$z?[incr e]:0:[incr a]}}
list $a $e}

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


টিসিএল , 114 বাইট

proc S {L a\ 0 e\ 0} {lmap {x y z} $L {expr {$x==$y&&$y==$z?[incr a]:$x==$y|$y==$z|$x==$z?[incr e]:0}}
list $a $e}

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



0

Tcl , 98 বাইট

proc A l {set 1 0;set 2 0
foreach a\ b\ c $l {incr [llength [lsort -u "$a $b $c"]]}
return $1\ $2}

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

কমান্ডের -uniqueবিকল্প ব্যবহার করে lsort। আমি নামকরণ করেছি 1এবং 2সুবিধার জন্য আমার ভেরিয়েবলগুলি, এটিকে কোডের পক্ষে বেশ অস্বাভাবিক বলে মনে হয় set 1 0:)


0

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 108 বাইট

x=>new[]{1,2}.Select(n=>x.Select((v,i)=>(v,g:i/3)).GroupBy(y=>y.g,y=>y.v).Count(y=>y.Distinct().Count()==n))

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

কম গল্ফড ...

// x is the input list of ints
x=>x
  // 1 distinct number means 3/3 are the same
  // 2 distinct number means 2/3 are the same
  new[]{1,2}
  // iterate over the outer array to get an index
  .Select(n=>x
    // iterate over the whole list with an index
    // and break into groups of size 3
    .Select((v,i)=>v,g:i/3))
    .GroupBy(y=>y.g,y=>y.v)
     // count the distinct values in each group
     // and get the result based on outer array value
    .Count(y=>y.Distinct().Count()==n))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.