하위 배열의 등호


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]

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.


PD : 제 영어에 사과드립니다.


테스트 사례의 숫자는 모두 양수입니다. 항상 그런가요?
Dennis

@Dennis No.는 양수와 음수 일 수 있습니다.
Luis felipe De jesus Munoz

답변:


5

옥타브 , 60 52 50 바이트

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

온라인으로 사용해보십시오!

Luis 덕분에 8 바이트가 절약되었습니다!

설명:

입력을 3 행 및 적절한 양의 열이있는 행렬로 재구성합니다. 그런 다음 각 열을 정렬하고 다른 행의 요소 간 차이를 계산합니다. 이것은 두 개의 행을 가진 행렬을 제공하는데, 여기서 동일한 숫자는 0이고 다른 숫자는 양수입니다. 모든 요소가 같고 같지 않도록 1모두 무시됩니다 0. 우리는 우리에게 세 가지 대안 중 하나를주고, 그 컬럼의 각 합계 : 0 = All elements are unequal, 1 = Two elements are equal2 = 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]

온라인으로 사용해보십시오!

어떻게?

입력 배열에서 각 삼중 항 [a, b, c] 를 재귀 적으로 추출 하고 다음 공식을 사용하여 두 개의 카운터 t (세 종류) 및 p (쌍)를 업데이트합니다.

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

'all equal'에서 'all distinct'에 이르기까지 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-리스트의 수)를 반환이 완전히 유효한있어서 행은 "현재의 규칙." codegolf.stackexchange.com/a/166082/31257 62 바이트a=>a.map(_=>++r[--new Set(a.slice(i,i+=3)).size],r=[i=0,i])&&r
guest271314

3

Pyth, 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.

세 번째 테스트 실패 (일부 동등 및 일부 동일 트리플 필요)
Jonathan Allan


3

oK , 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

들면 K , 17 바이트 버전이다 +/(1 2=#=:)'0N 3#.


0N 3-> 0N3(OK에서 파싱 이상한 점 덕분에)
ngn

3

R , 70 바이트

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

온라인으로 사용해보십시오!

이전 버전 :

R , 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]}

온라인으로 사용해보십시오!


R , 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약간 짧습니다.
주세페

@Giuseppe : 고마워 ; seq(0,a=v)대신에 5 바이트를 절약했다 0:(length(v)-1);) 불행히도 나는 옥타브를 모른다. 그래서 나는 그 대답을 쉽게 읽을 수 없다 ...
digEmAll

@Giuseppe : 접근 방식 변경 및 :) 바이트의 많은 저장
digEmAll

훌륭한 접근 방식! 나는 applying으로 더 짧은 것을 가지고 unique있었지만 세 번째 테스트 사례에서는 실패했습니다. 당신의 by접근 방식은 안전합니다
JayCe

@JayCe : 다행히 3.2.0 도입 길이 R은 바이트 많이 절약 기능 ... 그러나 그들은, R에서 단락 람다 함수의 정의를 소개 코드 골프의 경쟁력하기 위해해야합니다 : D
digEmAll

3

자바 (JDK 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

PowerShell , 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그것들이 모두 같은지 테스트 하고, 그렇다면 증가 $i합니다. Else, $j하나 이상의 쌍이 같은 경우 증가 합니다. 루프가 완료 출력되면 $i$j정수로.

그래서 ... 많은 ... 달러 ...


2

레티 나 0.8.2 , 68 바이트

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

온라인으로 사용해보십시오! Link는 헤더 당 한 줄당 하나의 값으로 원하는 형식으로 변환하는 테스트 사례를 포함합니다. 설명:

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

구분 기호를 사용하여 각 줄에 세 개의 값을 수집하고 끝에 첫 번째 값을 복제하십시오.

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

복제 쌍 수를 센다.

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

의 수를 카운트 3s와 1들.




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))

온라인으로 사용해보십시오!

Common Lisp (= x y z)에서 세 요소가 모두 같으면 (/= x y z)true를 제공 하고 숫자 쌍이 같지 않으면 true를 제공합니다.


2

apt, 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

레티 나 , 23 바이트

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

온라인으로 사용해보십시오!

설명

S2,3,` 

(0 기반) 2 일부터 시작하여 3 번째 공간마다 입력을 분할하십시오. 즉, 입력을 3 개의 그룹으로 분할하십시오.

%Cq`\S+

각 줄 ( %) C에서 고유 한 q값 ( \S+)의 수 ( )를 세십시오.

*\C`1

의 개수를 1세고 후행 줄 바꿈 ( \)으로 인쇄 하지만 드라 이런 (* 하면 이전 결과를 잃지 않습니다.

2

의 수를 2세고 자동으로 인쇄합니다.


2

J , 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

#@~.->#@=
cole


1

Stax , 14 바이트

ü┬─*HTÜ╫\Ä╢qm♥

실행 및 디버깅


[3,5,6,5,5,7,6,6,8,7,7,7,3,4,2,4,4,3][2,3]대신 출력[1,3]
Luis felipe De jesus Munoz

[3,3,3,4,4,4,5,5,5,6,6,6,5,4,3][1,0]대신 출력[4,0]
Luis felipe De jesus Munoz

[3,4,5,6,7,8,9,8,7,6,5,4,3,2,1][5,0]대신 출력[0,0]
Luis felipe De jesus Munoz

@LuisfelipeDejesusMunoz fixed
wastl

현재에 대한 출력이 표시되지 않습니다 [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).

마지막으로 결과 목록이 1 count(c,&(&1==1))과 같고 결과 목록이 2와 같은 횟수로 구성된 배열을 반환합니다 count(c,&(&1==2)).

온라인으로 사용해보십시오!



0

Tcl , 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}

온라인으로 사용해보십시오!


Tcl , 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. 나는 이름 12편의를 위해 내 변수는 힘든 그것은 코드를 꽤 이상한 것 같다 set 1 0:)


0

C # (Visual C # 대화 형 컴파일러) , 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.