ค่าเฉลี่ยสองรายการ


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":(

ลองใช้งานออนไลน์: การสาธิต

ขอบคุณเดนนิสที่สังเกตเห็นข้อผิดพลาดและตีหนึ่งไบต์

คำอธิบาย:

?}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-Prolog, 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]))

สิ่งนี้จะสร้างฟังก์ชั่นที่ยอมรับสองอาร์เรย์และส่งกลับสตริงหรือลอยตัวตามลำดับ

คำอธิบาย Ungolfed +:

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$Ṇ?

ลองออนไลน์!

เสร็จสิ้นด้วยความช่วยเหลือจากMr. 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.