หลายที่พบมากที่สุด


28

เพื่อไม่ให้สับสนกับตัวคูณร่วมน้อย

รับรายการของจำนวนเต็มบวกที่มีมากกว่าหนึ่งองค์ประกอบส่งคืนผลิตภัณฑ์ที่พบมากที่สุดของสององค์ประกอบในอาร์เรย์

ตัวอย่างเช่น MCM ของรายการ[2,3,4,5,6]คือ12ตามตารางผลิตภัณฑ์คือ:

    2  3  4  5  6
  ---------------
2 | #  6  8  10 12
3 | #  #  12 15 18
4 | #  #  #  20 24
5 | #  #  #  #  30
6 | #  #  #  #  #

ขอบคุณ DJMcMayhem สำหรับโต๊ะ

ตามที่12ปรากฏครั้งมากที่สุด (สองครั้งเป็น2*6และ3*4) โปรดทราบว่าเราไม่ได้รวมผลิตภัณฑ์ขององค์ประกอบและตัวเองดังนั้น2*2หรือ4*4ไม่ปรากฏในรายการนี้ อย่างไรก็ตามองค์ประกอบที่เหมือนกันจะยังคงถูกคูณดังนั้นตารางที่[2,3,3]มีลักษณะดังนี้:

    2  3  3
  ----------
2 | #  6  6 
3 | #  #  9
3 | #  #  #

6ด้วยความเป็น MCM

ในกรณีที่เสมอกันคุณสามารถคืนองค์ประกอบใด ๆ ที่ผูกหรือรายการทั้งหมด

  • นี่คือดังนั้นจำนวนไบต์ที่สั้นที่สุดสำหรับแต่ละภาษาจะชนะ!

การทดสอบกรณี:

[2,3,4,5,6] -> 12
[7,2] -> 14
[2,3,3] -> 6
[3,3,3] -> 9
[1,1,1,1,2,2] -> 2
[6,200,10,120] -> 1200
[2,3,4,5,6,7,8,8] -> 24
[5,2,9,10,3,4,4,4,7] -> 20
[9,7,10,9,7,8,5,10,1] -> 63, 70, 90 or [63,70,90]


5
กรณีทดสอบที่แนะนำ: กรณีที่องค์ประกอบทั้งหมดเหมือนกัน (เช่น[3,3,3] -> 9) ด้วยกรณีทดสอบปัจจุบันของคุณกรองคู่ใด ๆ ที่องค์ประกอบเหมือนกัน (แม้สำหรับกรณีทดสอบเช่น[2,3,3]ที่มีค่าเดียวกัน) จะยังคงผลการทดสอบที่ถูกต้อง แต่จะล้มเหลวสำหรับกรณีทดสอบนี้เพราะไม่มีจะเหลืออยู่หลังจากการกรอง
Kevin Cruijssen

@Kevin ข้อเสนอแนะที่ดีเพิ่ม
Jo King

คำตอบ:


11

Brachylogขนาด 11 ไบต์

{⊇Ċ×}ᶠọtᵒth

ลองออนไลน์!

คำอธิบาย

{   }ᶠ          Find all:
 ⊇Ċ×              Product of a subset of 2 elements
      ọtᵒ       Order by occurrences
         th     Take the last element and discard the number of occurrences

ฉันไม่ทราบวิธีการทำงานของรหัสกอล์ฟ แต่ตัวละครเหล่านี้บางตัวไม่อยู่นอกรหัสคะแนน 256 มาตรฐานดังนั้นแต่ละไบต์จึงมีหลายไบต์
Holloway


11

R , 54 50 41 ไบต์

order(-tabulate(combn(scan(),2,prod)))[1]

ลองออนไลน์!

อีกทางเลือกหนึ่งสำหรับ54 53 44 ไบต์:

names(sort(-table(combn(scan(),2,prod))))[1]

ลองออนไลน์!

โดยหลักการแล้วรุ่นหลังจะแสดงผลลัพธ์ที่เกี่ยวข้องแม้ไม่มีnamesฟังก์ชั่น แต่ตามด้วยการนับผลิตภัณฑ์ที่พบบ่อยที่สุดซึ่งไม่ได้ขอ ...

ขอบคุณ CriminallyVulgar สำหรับ -4 และ -1 และ Giuseppe สำหรับ -9 ทั้งคู่


1
ในวินาทีที่คุณสามารถใช้ -table () แทนจากมากไปหาน้อย = TRUE สำหรับ -1 ฉันชอบความฉลาดของคนแรกจริงๆ แก้ไข: เพิ่งรู้ว่าคุณยังสามารถใช้สิ่งนั้นกับคนแรกสำหรับ -4 ดังนั้นจึงมี ลองออนไลน์!
อาชญากร

1
combn(scan(),2,prod)ทำงานแทนการใช้apply
จูเซปเป้

8

เยลลี่ 6 ไบต์

ŒcP€Æṃ

ลองออนไลน์! หรือตรวจสอบชุดทดสอบ

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

ŒcP€Æṃ - โปรแกรมเต็มรูปแบบ / ลิงค์ Monadic
Œc - คู่ที่ไม่เรียงลำดับโดยไม่มีการเปลี่ยน
  P € - ผลิตภัณฑ์ของแต่ละคน
    Æṃ - โหมด (องค์ประกอบที่พบบ่อยที่สุด)

ทางเลือก: ŒcZPÆṃ

7

Pyth, 12 ไบต์

eo/QN=*M.cQ2

ชุดทดสอบ

อันดับแรกเราจะรวมองค์ประกอบทั้งสองเข้าด้วยกันโดยไม่มีการแทนที่ ( .cQ2) จากนั้นเราจับคู่แต่ละคู่เหล่านี้กับผลิตภัณฑ์ของพวกเขา ( *M) ต่อไปเราจะเขียนทับตัวแปรอินพุตด้วยรายการผลิตภัณฑ์ ( =) ต่อไปเราจะเรียงลำดับรายการผลิตภัณฑ์ตามจำนวนครั้งที่เกิดขึ้นในรายการผลิตภัณฑ์ ( o/QN) ในที่สุดใช้องค์ประกอบสุดท้ายของรายการเรียงลำดับ ( e)


7

MATL , 8 7 ไบต์

2XN!pXM

ลองออนไลน์!

(-1 ไบต์โดยใช้วิธีจาก @Mr. Xcoder ของคำตอบ Jelly )

2XN     % nchoosek - get all combinations of 2 elements from input
!p      % get the product of each combination
XM      % 'mode': get the most common value from that

คำตอบที่เก่ากว่า:

8 ไบต์

&*XRXzXM

ลองออนไลน์!

&*    % multiply input by its transpose,
      %  getting all elementwise products
XR    % take the upper-triangular portion of that,
      %  zeroing out repetitions and mainly self-multiplications
Xz    % remove the zeroed out parts
XM    % 'mode' calculation - get the most common value from that

6

05AB1E , 8 6 ไบต์

æ2ùP.M

-2 ไบต์ขอบคุณที่@Kaldo

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

คำอธิบาย:

æ         # Take the powerset of the input-list
          #  i.e. [2,3,3] → [[],[2],[3],[3],[2,3],[2,3],[3,3],[2,3,3]]
 2ù       # Leave only the inner lists of size 2:
          #  i.e. [[],[2],[3],[3],[2,3],[2,3],[3,3],[2,3,3]] → [[2,3],[2,3],[3,3]]
   P      # Take the product of each remaining pair
          #  i.e. [[2,3],[2,3],[3,3]] → [6,6,9]
    .M    # Only leave the most frequent value(s) in the list
          #  i.e. [6,6,9] → [6]

1
æ2ùP.Mสำหรับ 6 bytes
Kaldo

@Kaldo ขอบคุณ! ùสมบูรณ์ลืมเกี่ยวกับ
Kevin Cruijssen

6

Mathematica ขนาด 32 ไบต์

-17 ไบต์ (และแก้ไข) ขอบคุณที่จองฮวานมิน

Commonest[1##&@@@#~Subsets~{2}]&

ฟังก์ชั่นบริสุทธิ์ รับรายการตัวเลขเป็นอินพุตและส่งคืนรายการ MCMs เป็นเอาต์พุต


ที่จริงแล้วดูเหมือนว่าเราทั้งสองคนอ่านคำถามผิด {3, 3, 3}นี้ล้มเหลวสำหรับการป้อนข้อมูล คงที่:Commonest[1##&@@@#~Subsets~{2}]&
JungHwan Min

@JungHwanMin Huh ฉันคิดว่าSubsetsไม่นับการทำซ้ำเป็นองค์ประกอบแยกต่างหาก ดูเหมือนว่าจะเป็นเช่นนั้นขอบคุณมาก!
LegionMammal978

5

MATLAB, 43 ไบต์

I=input('');i=I'*I*1-eye(nnz(I));mode(i(:))

นอกจากนี้ยังเป็น twister ลิ้น!

คำอธิบาย

I=input('');           % Takes an input like "[2,3,4,5,6]"
i=I'*I                 % Multiplies the input by its own transverse
      *1-eye(nnz(I));  % Multiplies by 1-identity matrix to remove diagonal
mode(i(:))             % Calculates most common value and prints it

1
ฉันไม่แน่ใจว่าคุณต้องทำI'*I*1-eyeทำไมไม่เพียงแค่I'*I-eye?
aaaaa กล่าวว่าคืนสถานะโมนิก้า

5

Perl 6 , 41 38 ไบต์

{key max bag(@_ X*@_)∖@_»²: *{*}:}

ลองออนไลน์!


คุณช่วยอธิบายให้ฉันฟังหน่อยได้ไหม (หรือชี้ให้ฉันไปที่เอกสาร) สิ่งที่ลำไส้ใหญ่ทำอยู่ที่นั่น? ฉันไม่สามารถทำให้มันออกมาได้ ... ฉันเห็นได้ว่ามีบางอย่างเกี่ยวกับการผ่านการโต้แย้ง แต่ไม่มีอะไรเพิ่มเติม
Ramillies

1
@Ramillies นั่นคือตัวดำเนินการมัด :
nwellnhof

อ่าฉันเข้าใจแล้ว ขอขอบคุณ.
Ramillies



4

ทูต 59 ไบต์

Last##~SortBy#`&&:`~##{Flat[UpperTriangle&1!Table&_!`*]^^0}

ลองออนไลน์!

ยังคงทำงานเกี่ยวกับการเล่นกอล์ฟลงเล็กน้อย แต่ฉันคิดว่านี่ใกล้เคียงที่สุดสำหรับวิธีการที่ฉันเลือก

คำอธิบาย

นี่คือองค์ประกอบของสามฟังก์ชัน:

  1. {Flat[UpperTriangle&1!Table&_!`*]^^0}
  2. SortBy#`&&:`~
  3. Last

ฟังก์ชันแรกทำการคำนวณเป็นกลุ่ม:

{Flat[UpperTriangle&1!Table&_!`*]^^0}
{                                   }    anonymous lambda; input: _ (e.g.: [2,3,4,5,6])
                      Table&_!`*         shorthand for Table[`*, _]
                                         this creates a multiplication table using the input
                                         e.g.:
                                           4  6  8 10 12
                                           6  9 12 15 18
                                           8 12 16 20 24
                                          10 15 20 25 30
                                          12 18 24 30 36

      UpperTriangle&1!                   takes the strict upper triangle of this matrix
                                         e.g.:
                                          0 6  8 10 12
                                          0 0 12 15 18
                                          0 0  0 20 24
                                          0 0  0  0 30
                                          0 0  0  0  0
Flat[                           ]^^0     flattens this list and removes all 0s
                                         e.g.: [6, 8, 10, 12, 12, 15, 18, 20, 24, 30]

อย่างที่สองนั้นค่อนข้างซับซ้อน แต่ทำอะไรที่ค่อนข้างง่าย ครั้งแรกก็จะเป็นประโยชน์ที่จะรู้ว่าf&nเป็นหน้าที่ซึ่งเมื่อเรียกว่ามีข้อโต้แย้งผลตอบแทน...x จะคล้ายกันกลับ ตอนนี้เรามาสลายสิ่งนี้:f[...x, n]f&:nf[n, ...x]

( ~SortBy ) # (`& &: `~)

ขั้นแรกให้f#gสร้างส้อม ด้วยการป้อนข้อมูลก็จะส่งกลับn f[n, g[n]]อย่างไรก็ตามในกรณีนี้เป็นฟังก์ชั่นf ย้อนกลับอาร์กิวเมนต์ของฟังก์ชัน ซึ่งหมายความว่าจะเทียบเท่ากับหรือนี่~SortBy~f~f#gf[g[n], n]SortBy[(`& &: `~)[n], n]

`& &: `~f&:nต่อไปนี้รูปแบบ แต่อะไร`&และ`~? พวกมันคือ "เครื่องหมายคำพูดของโอเปอเรเตอร์" และส่งคืนฟังก์ชันที่เทียบเท่ากับโอเปอเรเตอร์ที่ยกมา ดังนั้นในกรณีนี้เป็นสิ่งเดียวกับ`& ${ x & y }โดยที่ในใจนิพจน์นี้เทียบเท่ากับตัวดำเนินการไบนารีต่อไปนี้:

f&:n   <=>   ${ f[n, x] }
       <=>   ${ (`&)[`~, x] }
       <=>   ${ `~ & x }

ฟังก์ชันนี้ให้ผลลัพธ์`~&xโดยที่xผลลัพธ์จากฟังก์ชันแรก n ~ aนับการเกิดขึ้นของในn aดังนั้นนี่จะส่งคืนฟังก์ชันที่นับการเกิดขึ้นของอาร์กิวเมนต์ในอาเรย์ที่คำนวณจากฟังก์ชัน 1

กลับไปที่SortByองค์ประกอบแต่ละอย่างในอาร์เรย์ตามจำนวนครั้งที่ปรากฏในนั้น

ในที่สุดLastใช้องค์ประกอบที่เกิดขึ้นมากที่สุด ความสัมพันธ์ถูกทำลายโดยอัลกอริทึมการเรียงลำดับ


จำเป็นต้องใช้ท่อนบนหรือไม่? คุณสามารถเรียบตารางและเรียงลำดับได้หรือไม่
savavil

@svavil ใช่จำเป็นต้องใช้ [5, 2, 9, 10, 3, 4, 4, 4, 7] -> 16แทนที่จะ20ไม่มีมัน
Conor O'Brien


3

ถ่าน 24 ไบต์

WθF×⊟θθ⊞υκI⊟Φυ⁼№υι⌈Eυ№υλ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

Wθ

ในขณะที่อาร์เรย์อินพุตไม่ว่าง ...

×⊟θθ

... ปรากฏองค์ประกอบสุดท้ายและคูณอาร์เรย์ที่เหลือด้วยองค์ประกอบนั้น ...

F...⊞υκ

... และผลักผลลัพธ์ไปยังรายการว่างที่กำหนดไว้ล่วงหน้า

⌈Eυ№υλ

นับจำนวนครั้งที่แต่ละผลิตภัณฑ์ปรากฏในรายการและใช้เวลาสูงสุด ...

Φυ⁼№υι...

... จากนั้นกรองผลิตภัณฑ์ที่มีจำนวนเท่ากับสูงสุด ...

I⊟

... จากนั้นเปิดองค์ประกอบสุดท้ายและส่งไปที่สตริงเพื่อพิมพ์โดยนัย



3

APL (Dyalog Unicode) , 29 27 19 ไบต์

{⌈/⊢/⊣¨⌸∊⍵}⍳∘≢↓¨⊢×⊂

ลองออนไลน์!

Tacit fn

ขอบคุณAdámสำหรับรุ่น tacit และ 2 ไบต์

ขอบคุณ ngn สำหรับ 8 ไบต์!

วิธี:

{⌈/⊢/⊣¨⌸∊⍵}⍳∘≢↓¨⊢×⊂
                ⊢×⊂    Multiply each element with the entire argument, then
           ⍳∘≢↓¨       Remove 1 from the first, two from the next etc. (removes repeated multiplications);
                       The result is then fed into the function:
{       ∊⍵}            Flatten the result;
     ⊣¨⌸               Key; creates a matrix in which each row corresponds to a unique product;
   ⊢/                  Get the rightmost column of the matrix;
 ⌈/                    Get the highest value.

1
นี้เป็นเพียง27
อดัม


3

CJam , 70 68 ไบต์

q',/S*~_,(:L{LX-,0a\+[{X1++}*](;{_X=\_Y=@*\}fY}fX]~;]_{\_@e=}$\;_,(=

ลองออนไลน์!

คำอธิบาย

q',/S*~                                                                  Turn input string into a valid CJam array
       _,(                                                               Find the length of the array and subtract 1
          :L                                                             Assign the result to L
            {                                 }fX                        Outer for loop
             LX-,0a\+[{X1++}*](;                                         Create an array with all the array indexes bigger than X
                                {          }fY                           Inner for loop
                                 _X=\_Y=@*\                              Create a multiple of array[X] and array[Y] (Guaranteed to be from a unique combination of factors)
                                                 ~;]                     Casts away all stack items except for an array of the multiples
                                                    _{\_@e=}$\;          Sorts array by number of occurrences (largest number of occurences at the end)
                                                               _,(=      Gets the last element of the array

คุณจะต้องเลื่อนไปทางขวาเพื่อดูคำอธิบายเนื่องจากรหัสนั้นค่อนข้างยาวรวมทั้งคำอธิบาย


นี่เป็นฝันร้ายที่ต้องเขียน CJam ไม่มีฟังก์ชั่น powerset (ซึ่งแตกต่างจากภาษาอื่น ๆ ของการเล่นกอล์ฟ - ทางเลือกที่ดีในส่วนของฉัน) ซึ่งหมายความว่าฉันต้องค้นหา powerset ด้วยตนเอง อย่างไรก็ตามนี่ทำให้ฉันมีโอกาสที่จะเพิกเฉยต่อจำนวนปัจจัยที่ไม่ถูกต้องซึ่งแตกต่างจากคำตอบอื่น ๆ ที่มีฟังก์ชั่น powerset

นี่ควรเป็นสิ่งที่เล่นกอล์ฟได้เพราะ CJam นั้นแย่มาก


การเปลี่ยนแปลง:

เฮเลนตัด 2 ไบต์!

เก่า: q',/S*~_,1-:L{LX-,0a\+[{X1++}*](;{_X=\_Y=@*\}fY}fX]~;]_{\_@e=}$\;_,1-=
ใหม่:q',/S*~_,(:L{LX-,0a\+[{X1++}*](;{_X=\_Y=@*\}fY}fX]~;]_{\_@e=}$\;_,(=

โดยการเปลี่ยน1-s เป็นเพียง(เราได้รับผลเดียวกัน แต่มีจำนวนไบต์ที่ต่ำกว่า




2

MATLAB 39 ไบต์

a=input('');
b=triu(a'*a,1);
mode(b(b~=0))

ตรวจสอบคำตอบโดย Jacob Watson


1
การมีบรรทัดที่สองจะสามารถb=triu(a'*a,1);บันทึกได้ 4 ไบต์
sundar - Reinstate Monica

@ sundar โอ้ snap คุณพูดถูก :) ฉันtriuตั้งใจอย่างแรง แต่ล่องลอยไปอย่างใด
aaaaa พูดว่าคืนสถานะโมนิก้า

วิธีแก้ปัญหาที่ดีฉันไม่ทราบว่าฟังก์ชั่นรูปสามเหลี่ยมบนนั้นสั้นมาก
Jacob Watson

2

SQL Server, 93 ไบต์

SELECT TOP 1a.a*b.a
FROM @ a
JOIN @ b ON a.i<b.i
GROUP BY a.a*b.a
ORDER BY COUNT(a.a*b.a)DESC

อินพุตถูกสันนิษฐานว่ามาจากตารางของฟอร์ม

DECLARE @ TABLE (A int, i int identity);

ตัวอย่างตารางประชากร:

INSERT INTO @ VALUES (9), (7), (10), (9), (7), (8), (5), (10), (1);

คำอธิบาย:

ผมถือว่า "รายการของจำนวนเต็ม" iจะมีดัชนีที่เกี่ยวข้องกับพวกเขาซึ่งในกรณีของฉันเป็นคอลัมน์ คอลัมน์aมีค่าของรายการ

ฉันสร้างผลิตภัณฑ์ของทุกคู่ที่คู่ซ้ายมาอยู่ในรายการก่อนหน้าคู่ที่เหมาะสม ฉันจัดกลุ่มผลิตภัณฑ์แล้วจัดเรียงตามจำนวนที่มีประชากรมากที่สุด

ฉันเศร้านิดหน่อยที่ฉันไม่ได้ใช้ cte หรือ clauses clauses ใด ๆ แต่มันยาวเกินไป SELECTเป็นคำหลักที่มีราคาแพงมาก

ทางเลือก 183 ไบต์

WITH c
AS(SELECT a,ROW_NUMBER()OVER(ORDER BY a)r
FROM @),d AS(SELECT a.a*b.a p,COUNT(a.a*b.a)m
FROM c a
JOIN c b ON a.r<b.r GROUP BY a.a*b.a)SELECT TOP 1p
FROM d
ORDER BY m DESC

หาก SQL ไม่ได้รับคอลัมน์ดัชนีแยกกันนี่คือวิธีแก้ปัญหาที่ฉันสร้างดัชนีโดยใช้ROW_NUMBERฟังก์ชัน โดยส่วนตัวฉันไม่สนใจเกี่ยวกับคำสั่งซื้อ แต่จำเป็นต้องมีคำสั่งซื้อและการใช้aคอลัมน์นั้นสั้นที่สุด




2

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

x=>x.SelectMany(y=>(x=x.Skip(1)).Select(z=>y*z)).GroupBy(y=>y).OrderBy(y=>y.Count()).Last().Key

ลองออนไลน์!

รหัส golfed น้อยกว่า:

// x is a list of integers
x=>
  // iterate over each integer and
  // return a list per element.
  // flatten the list of lists to 1 list
  x.SelectMany(y=>
    // skip the current value and save
    // newly offset list to x so that it
    // can be incrementally offset
    // again next pass
    (x=x.Skip(1))
      // compute the product
      .Select(z=>y*z))
    // get the unique products
    .GroupBy(y=>y)
    // sort the products by number
    // of occurrences
    .OrderBy(y=>y.Count())
    // pick the product with the
    // greatest number of occurrences
    .Last().Key

1

PHP, 91 ไบต์

while($c=$argv[++$i])for($k=$i;--$k;)$r[$c*$argv[$k]]++;asort($r);echo end(array_flip($r));

รับอินพุตจากอาร์กิวเมนต์บรรทัดรับคำสั่ง ทำงานด้วย-nrหรือลองออนไลน์

ใช้ PHP 7 เพื่อหลีกเลี่ยงคำเตือน STRICT MODE


1

J, 29 25 24 23 ไบต์

(0{~.\:1#.=)@(</#&,*/)~

ลองออนไลน์!

อย่างไร

(~. {.@\: 1 #. =)@(</ #&, */)~
                  (</ #&, */)~  NB. all products, dups removed:
                          */    NB. create the times table
                   </           NB. lower triangular ones matrix
                       &,       NB. flatten each and
                      #         NB. filter based on lower triangle
                 @              NB. pass that result to
(~. {.@\: 1 #. =)               NB. get the most frequent list item:
       \:                       NB. sort down
 ~.                             NB. the uniq elements
          1 #. =                NB. by their count
    {.@                         NB. and take the first element


0

APL (NARS), 53 ตัวอักษร, 106 ไบต์

{0=l←↑⍴⍵:⍵⋄t⊃⍨q⍳⌈/q←{+/t=⍵}¨t←×/¨(∊(⍳l)∘.<⍳l)/,⍵∘.,⍵}

ทดสอบ:

  p←{0=l←↑⍴⍵:⍵⋄t⊃⍨q⍳⌈/q←{+/t=⍵}¨t←×/¨(∊(⍳l)∘.<⍳l)/,⍵∘.,⍵}
  p 9
9
  p 1 3
3
  p 2 3 4 5 6
12
  p 7 2
14
  p 2 3 3
6
  p 3 3 3
9
  p 1 1 1 1 2 2
2
  p 6 200 10 120
1200
  p 2 3 4 5 6 7 8 8
24
  p 5 2 9 10 3 4 4 4 7
20
  p 9 7 10 9 7 8 5 10 1
63
  p 3 3
9
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.