แถวที่มีส่วนมากที่สุด


17

ให้เมทริกซ์ที่ไม่ว่างเปล่าของจำนวนเต็มแบบไม่ลบคำตอบที่แถวที่ไม่ซ้ำกันส่วนใหญ่รวมกับผลรวมขององค์ประกอบในเมทริกซ์

ตอบโดยการบ่งชี้ที่สมเหตุสมผลเช่นมาสก์ของลำดับแถวที่ไม่ซ้ำกันของการปรากฏตัว (หรือเรียงลำดับ) หรือดัชนี (เป็นศูนย์หรือหนึ่งตาม) ของเหล่านั้นหรือ submatrix ประกอบด้วยแถว (ในลำดับใด ๆ ) หรือบางส่วน ชนิดของพจนานุกรมสร้าง ... - แต่อธิบายเถอะ!

ตัวอย่าง

[[1,2,3],[2,0,4],[6,3,0],[2,0,4],[6,3,0],[2,0,4]]:

แถวที่ไม่ซ้ำกัน[1,2,3], [2,0,4]และ[6,3,0]แต่ละคนตามลำดับที่เอื้อต่อ 6, 6 และ 9 ในแต่ละครั้งที่พวกเขาเกิดขึ้น อย่างไรก็ตามพวกเขาเกิดขึ้นหนึ่งครั้งสามครั้งและสองครั้งตามลำดับดังนั้นสิ่งที่เกิดขึ้นทั้งหมดของพวกเขามีส่วนร่วม 6, 18 และ 18 รวมทั้งหมด (42) ดังนั้นสองแถวหลังเป็นแถวที่มีส่วนมากที่สุด คำตอบที่ถูกต้องคือ:

[false,true,true] มาสก์ในลักษณะ / ลำดับการจัดเรียงหรือ
[1,2]/ [2,3] ศูนย์ / ดัชนีหนึ่งฐานของด้านบนหรือ
[[2,0,4],[6,3,0]] แถวที่แท้จริง


[[1,2],[3,1],[2,3],[1,2],[3,1],[2,3],[1,2]]

[false,false,true](สั่งลักษณะ) / [false,true,false](เรียงลำดับ)
[2]/ [3](สั่งลักษณะ) / [1]/ [2](เรียงลำดับ)
[[2,3]]

คำตอบ:



4

Pyth , 9 ไบต์

-1 ต้องขอบคุณ FryAmTheEggman!

{s.MssZ.g

ลองออนไลน์!


1
สุดท้ายkไม่จำเป็น นอกจากนี้ยัง.M*sZ/QZ{ดูเหมือนว่าจะเป็นทางออกเดียวที่มีความยาวแล้ว
FryAmTheEggman

1
@FryAmTheEggman โอ้ฉันลืมเรื่องการเติมข้อมูลอัตโนมัติได้อย่างไร? ขอบคุณมาก!
Mr. Xcoder

4

R , 64 ไบต์

function(M)max(x<-tapply(rowSums(M),apply(M,1,toString),sum))==x

ลองออนไลน์!

ส่งคืนเวกเตอร์บูลีนที่มี TRUE / FALSE เรียงตามลำดับ (lexicographic)
แถวที่ไม่ซ้ำกันจะแสดงเป็นชื่อเวกเตอร์ดังนั้นจึงง่ายต่อการระบุแถวที่มีประโยชน์มากที่สุด



2

Haskell, 60 ไบต์

import Data.Lists
f x=nub$argmaxes(\e->sum e*countElem e x)x

ส่งคืนรายการของแถว


2

ถ่าน 25 ไบต์

IΦθ∧⁼κ⌕θι⁼×№θιΣι⌈Eθ×№θλΣλ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด รูปแบบผลลัพธ์เริ่มต้นคือองค์ประกอบของแต่ละแถวในบรรทัดและแถวสองแถว คำอธิบาย:

  θ                         Input array
 Φ                          Filtered where
     κ                      Current index
    ⁼                       Equals
      ⌕                     First index of
        ι                   Current row
       θ                    In input array
   ∧                        Logical And
           №                Count of
             ι              Current row
            θ               In input array
          ×                 Multiplied by
              Σ             Sum of
               ι            Current row
         ⁼                  Equals
                ⌈           Maximum of
                  θ         Input array
                 E          Mapped over rows
                    №       Count of
                      λ     Current row
                     θ      In input array
                   ×        Multiplied by
                       Σ    Sum of
                        λ   Current row
I                           Cast to string
                            Implicitly printed

2

Mathematica, 48 ไบต์

Last[SortBy[Gather[m], Total[Flatten[#]] &]][[1]]

หรือ

TakeLargestBy[Gather[m], Total[#, 2] &, 1][[1, 1]]

โดยที่ (ตัวอย่าง)

m = {{1, 2, 3}, {2, 0, 4}, {7, 9, 5}, {6, 3, 0}, {2, 0, 4}, 
     {6, 3, 0}, {2, 0, 4}, {7, 9, 5}};

2
คุณสามารถใช้ชวเลขและลบช่องว่างเพื่อบันทึกไบต์:SortBy[Gather@m,Total@*Flatten][[-1,1]]
Doorknob

1
ลักษณะเช่นนี้จะใช้เวลาในการป้อนข้อมูลจากตัวแปรที่กำหนดไว้ล่วงหน้าซึ่งจะไม่ได้รับอนุญาต ส่งจะต้องเป็นโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบโดยค่าเริ่มต้น
เดนนิส

TakeLargestBy[Gather[m], Total[#, 2] &, 1][[1, 1]] /@ m
David G. Stork

สิ่งนี้ไม่ถูกต้อง มันจะส่งคืนหนึ่งแถวที่มีค่ามากที่สุดแทนที่จะเป็นแถวทั้งหมด
lirtosiast






1

Python 2 , 81 78 ไบต์

lambda a:{u for u in a if a.count(u)*sum(u)==max(a.count(t)*sum(t)for t in a)}

ลองออนไลน์!

3 ไบต์ขอบคุณไปยัง ดำนกฮูกไก่

กำหนดคอลเลกชันของ tuples ผลลัพธ์คือชุดของสิ่งอันดับที่มีคุณสมบัติสูงสุดที่ต้องการ



@ แบล็ก Owl Kai: ขอบคุณ! ฉันพลาดไปว่า ...
Chas Brown


0

C # (Visual C # Interactive Compiler) , 126 ไบต์

n=>{var i=n.OrderBy(a=>a.Sum()*n.Count(a.SequenceEqual));return i.Where((a,b)=>i.Take(b).Count(a.SequenceEqual)<1).Reverse();}

ลองออนไลน์!

ส่วนใหญ่ของรหัสนี้จะถูกใช้เพื่อดึงค่าที่ซ้ำกันทั้งหมดเนื่องจากตัวเปรียบเทียบเริ่มต้นสำหรับรายการจะไม่เปรียบเทียบค่าภายในรายการ นั่นหมายความว่าฉันไม่สามารถใช้Distinct(), GroupBy()หรือContainsการกรองรายการ


0

K (ngn / k) , 17 ไบต์

{&a=|/a:+//'x@=x}

ลองออนไลน์!

{ } ฟังก์ชั่นที่มีข้อโต้แย้ง x

=x กลุ่ม - จัดทำพจนานุกรมที่มีคีย์เป็นแถวและค่าต่าง ๆ เป็นรายการดัชนีในเมทริกซ์

x@จัดทำดัชนีเมทริกซ์ดั้งเดิมด้วย ผลลัพธ์จะเป็นพจนานุกรมอีกครั้งโดยมีแถวเป็นคีย์ ค่าคือสำเนาหลายชุดของคีย์ที่เกี่ยวข้อง

+//' ผลรวมจนกว่าการบรรจบกัน (ทำหน้าที่เฉพาะในค่า; ปุ่มยังคงอยู่ตามที่พวกเขาเป็น)

a: มอบหมายให้ a

|/ สูงสุด (ของค่า)

a=|/a พจนานุกรมแบบ row-to-boolean ซึ่งแถวใดมีส่วนร่วมมากที่สุด

& "ที่ไหน" คือกุญแจที่สอดคล้องกับค่า 1



0

05AB1E , 10 9 ไบต์

ês{γOOZQÏ

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

ê          # Sort and uniquify the (implicit) input list of lists
           #  i.e. [[2,0,4],[1,2,3],[6,3,0],[2,0,4],[6,3,0],[2,0,4]]
           #   → [[1,2,3],[2,0,4],[6,3,0]]
 s         # Swap so the (implicit) input list of lists is at the top again
  {        # Sort it
           #  i.e. [[2,0,4],[1,2,3],[6,3,0],[2,0,4],[6,3,0],[2,0,4]]
           #   → [[1,2,3],[2,0,4],[2,0,4],[2,0,4],[6,3,0],[6,3,0]]
   γ       # Group the sorted list of lists
           #  i.e. [[1,2,3],[2,0,4],[2,0,4],[2,0,4],[6,3,0],[6,3,0]]
           #   → [[[1,2,3]],[[2,0,4],[2,0,4],[2,0,4]],[[6,3,0],[6,3,0]]]
    O      # Take the sum of each inner-most lists
           #  i.e. [[[1,2,3]],[[2,0,4],[2,0,4],[2,0,4]],[[6,3,0],[6,3,0]]]
           #   → [[6],[6,6,6],[9,9]]
     O     # Take the sum of each inner list
           #  i.e. [[6],[6,6,6],[9,9]] → [6,18,18]
      Z    # Get the max (without popping the list of sums)
           #  i.e. [6,18,18] → 18
       Q   # Check for each if this max is equal to the sum
           #  i.e. [6,18,18] and 18 → [0,1,1]
        Ï  # Filter the uniquified list of lists on truthy values (and output implicitly)
           #  i.e. [[1,2,3],[2,0,4],[6,3,0]] and [0,1,1] → [[2,0,4],[6,3,0]]

0

Gaiaขนาด 10 ไบต์

ȯẋ_¦Σ¦:⌉=¦

ลองออนไลน์!

เนื่องจาก Gaia ไม่ยอมรับรายการผ่านอินพุตอย่างง่ายดายนี่คือฟังก์ชันที่รับรายการจากด้านบนจากด้านบนสุดของสแต็กและปล่อยผลลัพธ์ไว้ด้านบน (เป็นมาสก์ของคำสั่งที่เรียงลำดับ)

ȯ           Sort the list
 ẋ          Split it into runs of the same element (in this case, runs of the same row)
  _¦        Flatten each sublist
    Σ¦      Sum each sublist
      :⌉    Find the maximum sum
        =¦  Compare each sum for equality with the maximum

0

J , 16 ไบต์

[:(=>./)+/^:2/.~

ลองออนไลน์!

คำกริยา monadic ที่ให้ผลลัพธ์บูลีนตามลำดับที่ปรากฏ

มันทำงานอย่างไร

[:(=>./)+/^:2/.~
             /.~  Self-classify; collect identical rows in appearance order
                  For each collected rows (= a matrix),
        +/^:2       Sum all the elements into one value
[:(=>./)          Compute the boolean vector:
    >./             Is the max of the array
   =                equal to this element?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.