두 목록 평균


11

두 목록 평균

도전

양의 정수로 된 두 개의 목록이 주어지면, 새로운 목록이 동일한 산술 평균 (평균)을 갖도록 요소를 두 개의 새로운 목록으로 재 배열 할 수 있는지 판별하십시오.

입력

입력은 STDIN을 통해 또는 함수 인수로 취할 수 있습니다. 입력을 목록으로 가져 오거나 언어가 목록 (또는 배열 / 사전과 유사한 항목)을 지원하지 않는 경우 입력을 쉼표 또는 공백으로 구분 된 문자열로 사용할 수 있습니다. 그건,

"1 4 8 2 5,3 1 5 2 5"

와 같다:

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

모든 입력 목록의 길이 는 같습니다 .

산출

평균이 같은 두 개의 새 목록을 만들 수 있으면 프로그램 / 기능이 평균을 인쇄하거나 반환해야합니다. 당신이 할 수 없다면, 프로그램은 슬픈 얼굴을 출력해야합니다 :(.

동일한 방법으로 재정렬 된 목록 (있는 경우)의 길이는 같지 않아도됩니다. 새 목록을 만들기 위해 여러 번 스왑 할 수 있습니다.

1 4 8 2 5,3 1 5 2 5 -> 1 4 8 2 3,5 1 5 2 5 (swapped 3 and 5) -> 3.6
1 3 6 2,16 19 19 14 -> [[1,6,19,14],[3,2,16,19]] -> 10
2 6 2,6 3 5 -> 2 6,2 6 3 5 (moved 2) -> 4
90 80 20 1,40 60 28 18 -> :(

이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다. 항상 그렇듯이 표준 허점 은 허용되지 않습니다.


2
각 목록에서 여러 요소를 바꿀 수 있습니까? 하나의 목록 만 다른 요소를 제공 할 수 있습니까? "유효한 순열이 있습니다"라는 의미를 이해하지 못합니다. 또한 더 많은 테스트 사례가 필요합니다.
xnor

@ xnor 한 요소를 다른 요소로 옮길 수 있습니다. 몇 가지 테스트 사례를 추가하겠습니다
Downgoat

따라서 "단일 목록 (자신의 조합)을 동일한 평균으로 두 개의 비어 있지 않은 목록으로 나눌 수 있습니까?"와 같습니다.
xnor

1
@ vihan1086 그렇다면 하나의 목록을 입력으로 사용하지 않겠습니까? 프레젠테이션이 불필요하게 복잡해 보입니다.
xnor

2
@ vihan1086 샌드 박스 게시물을 살펴보면 이와 같은 설명 요청이 여러 번 이루어졌으며 이러한 점을 많이 설명했지만 수정 내용이 더 명확하지는 않습니다. 텍스트를 추가하는 대신 혼란스러운 텍스트를 바꾸는 것이 좋습니다.
xnor

답변:


12

Pyth, 24 바이트

?}KcsJsQlJmcsdldtPyJK":(

온라인으로 사용해보십시오 : 데모

오류를 감지하고 1 바이트를 골라 낸 데니스에게 감사합니다.

설명:

?}KcsJsQlJmcsdldtPyJK":(   implicit: Q = evaluated input
      sQ                   all numbers of Q
     J                     save them in J
  KcsJ  lJ                 average of J (sum(J) / len(J))
                           store in K
          m     tPyJ       map each nonempty subset d of J to:
           csdld             average of d
?}                         if K in ^:
                    K        print K
                     ":(   else print sad-face

5
잘 했어, +1 그러나 Pyth에는 실제로 평균 계산을위한 기본 제공 기능이 없습니까?
Alex A.

@AlexA. 지금 가지고 하나 (즉 .O)
씨 Xcoder

6

SWI- 프롤로그, 159 바이트

a(A,B):-append([A,B],R),permutation(R,S),append([Y,Z],S),sum_list(Y,I),sum_list(Z,J),length(Y,L),length(Z,M),L\=0,M\=0,I/L=:=J/M,W is J/M,write(W);write(':(').

로 호출 a([1,4,8,2,5],[3,1,5,2,5]).


5

줄리아, 101 바이트

f(a,b)=(m=mean;p=filter(i->m(i[1])==m(i[2]),partitions([a,b],2));isempty(p)?":(":m(collect(p)[1][1]))

두 배열을 받아들이고 그에 따라 문자열이나 부동 소수점을 반환하는 함수를 만듭니다.

언 골프 + 설명 :

function f(a,b)
    # Get the set of all 2-way partitions of the array [a,b]
    l = partitions([a,b], 2)

    # Filter the set of partitions to those where the two
    # contained arrays have equal means
    p = filter(i -> mean(i[1]) == mean(i[2]), l)

    # Return a frown if p is empty, otherwise return a mean
    isempty(p) ? ":(" : mean(collect(p)[1][1])
end

2

R, 94 바이트

기본적으로 Jakubes와 동일합니다. 두리스트의 평균이리스트의 결합 된 길이를 포함하지 않는리스트의 값 조합의 평균과 일치하면, 그렇지 않으면 슬픈 얼굴의 평균을 출력합니다.

if(mean(l<-scan())%in%unlist(sapply(2:length(l)-1,function(x)combn(l,x,mean))))mean(l)else':('

시운전

> if(mean(l<-scan())%in%unlist(sapply(2:length(l)-1,function(x)combn(l,x,mean))))mean(l)else':('
1: 1 4 8 2 5
6: 3 1 5 2 5
11: 
Read 10 items
[1] 3.6
> if(mean(l<-scan())%in%unlist(sapply(2:length(l)-1,function(x)combn(l,x,mean))))mean(l)else':('
1: 90 80 20 1
5: 40 60 28 18
9: 
Read 8 items
[1] ":("

0

젤리 , 22 바이트

FŒ!œs2ÆmE$$Ðf⁾:(ÆmX$Ṇ?

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

의 도움으로 완료 씨 Xcoder 에서 채팅

설명

FŒ!œs2ÆmE$$Ðf⁾:(ÆmX$Ṇ? - Main link, argument a (2D-array)

F                      - Flatten
 Œ!                    - All permutations
           Ðf          - Keep elements which are truthy when
   œs2    $            -   split into 2 parts and...
      Æm $             -   the means of each...
        E              -   are the same
                     ? - Ternary if
                    Ṇ  -   Condition: No lists remain
             ⁾:(       -   If so: Set the return value to ":("
                   $   -   Otherwise: 
                Æm     -     Get the mean of each list
                  X    -     Randomly choose one (all elements are the same)

에 실패합니다 2 6 2,6 3 5 -> 2 6,2 6 3 5 (moved 2) -> 4. 이제는 길이가 같은 두 부분으로 만 나눕니다.
Kevin Cruijssen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.