ซวนเซสแต็ครวม


15

แรงบันดาลใจจากคำถามนี้กองมากเกิน

ความท้าทาย

อินพุต

อาร์เรย์ของเมทริกซ์จตุรัสที่มีจำนวนเต็มไม่เป็นลบ

เอาท์พุต

เมทริกซ์จตุรัสที่สร้างจากเมทริกซ์อินพุตดังนี้

ให้เป็นขนาดของเมทริกซ์อินพุตแต่ละตัวและคือจำนวนเมทริกซ์อินพุตยังไม่มีข้อความ×ยังไม่มีข้อความP

เพื่อความชัดเจนให้พิจารณาตัวอย่างเมทริกซ์อินพุตต่อไปนี้ ( , P = 3 ):ยังไม่มีข้อความ=2P=3

 3   5
 4  10

 6   8
12  11

 2   0
 9   1
  1. เริ่มต้นด้วยเมทริกซ์อินพุตแรก
  2. เลื่อนอินพุตเมทริกซ์ที่สองN −1 ก้าวลงและN −1 ก้าวไปทางขวาเพื่อให้รายการเข้ามุมบนซ้ายตรงกับรายการล่างขวาของรายการก่อนหน้า
  3. ลองจินตนาการว่าเมทริกซ์ที่สองนั้นเลื่อนเป็นเมทริกซ์ที่ซ้อนอยู่ด้านบนของเมทริกซ์แรก รวมสองค่าในรายการที่เกิดขึ้นพร้อมกัน เขียนค่าอื่น ๆ และเติมรายการที่เหลือด้วย0เพื่อรับเมทริกซ์ด้วยอินพุตตัวอย่างผลลัพธ์ที่ได้คือ(2ยังไม่มีข้อความ-1)×(2ยังไม่มีข้อความ-1)

     3   5   0
     4  16   8
     0  12  11
    
  4. สำหรับเมทริกซ์อินพุทที่เหลือแต่ละตัวให้เดินโซเซเพื่อให้มุมบนซ้ายตรงกับมุมล่างขวาของเมทริกซ์ผลลัพธ์ที่สะสมจนถึงตอนนี้ ในตัวอย่างรวมถึงเมทริกซ์อินพุตที่สามให้

     3   5   0   0
     4  16   8   0
     0  12  13   0
     0   0   9   1
    
  5. ouput คือเมทริกซ์เมทริกซ์ที่ได้รับหลังจากรวมเมทริกซ์อินพุตสุดท้าย((ยังไม่มีข้อความ-1)P+1)×((ยังไม่มีข้อความ-1)P+1)

กฎและคำชี้แจงเพิ่มเติม

  • ยังไม่มีข้อความและเป็นจำนวนเต็มบวกP
  • คุณสามารถเลือกใช้และเป็นอินพุตเพิ่มเติมได้ยังไม่มีข้อความP
  • input และ output สามารถดำเนินการโดยวิธีการที่เหมาะสมใดรูปแบบของพวกเขายืดหยุ่นตามปกติ
  • โปรแกรมหรือฟังก์ชั่นที่ได้รับอนุญาตในการเขียนโปรแกรมภาษา ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

กรณีทดสอบ:

ในแต่ละกรณีเมทริกซ์อินพุตจะแสดงก่อนจากนั้นจึงแสดงผลลัพธ์

  1. ยังไม่มีข้อความ=2 , :P=3

     3   5
     4  10
    
     6   8
    12  11
    
     2   0
     9   1
    
     3   5   0   0
     4  16   8   0
     0  12  13   0
     0   0   9   1
    
  2. ยังไม่มีข้อความ=2 , :P=1

     3   5
     4  10
    
     3   5
     4  10
    
  3. ยังไม่มีข้อความ=1 , :P=4

     4
    
     7
    
    23
    
     5
    
    39
    
  4. ยังไม่มีข้อความ=3 , :P=2

    11  11   8
     6   8  12
    11   0   4
    
     4   1  13
     9  19  11
    13   4   2
    
    11  11   8   0   0
     6   8  12   0   0
    11   0   8   1  13
     0   0   9  19  11
     0   0  13   4   2
    
  5. ยังไม่มีข้อความ=2 , :P=4

    14  13
    10   0
    
    13  20
    21   3
    
     9  22
     0   8
    
    17   3
    19  16
    
    14  13   0   0   0
    10  13  20   0   0
     0  21  12  22   0
     0   0   0  25   3
     0   0   0  19  16
    

MATL เป็นวิธีแก้ปัญหานี้นานแค่ไหน?
Giuseppe

@Giuseppe ฉันไม่ได้ลองใน MATL สำหรับกรณีทดสอบฉันใช้รหัส MATLAB จากคำตอบของฉันในคำถามที่เชื่อมโยง
Luis Mendo

คำตอบ:


4

เยลลี่ , 15 12 ไบต์

⁹ṖŻ€ƒZƲ⁺+µ@/

ลองออนไลน์!

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

⁹ṖŻ€ƒZƲ⁺+µ@/  Main link. Argument: A (array of matrices)

         µ    Begin a monadic chain.
          @/  Reduce A by the previous chain, with swapped arguments.
                Dyadic chain. Arguments: M, N (matrices)
      Ʋ           Combine the links to the left into a monadic chain with arg. M.
⁹                 Set the return value to N.
 Ṗ                Pop; remove its last row.
     Z            Zip; yield M transposed.
    ƒ             Fold popped N, using the link to the left as folding function and
                  transposed M as initial value.
  Ż€                Prepend a zero to each row of the left argument.
                    The right argument is ignored.
       ⁺        Duplicate the chain created by Ʋ.
        +       Add M to the result.

6

R , 88 81 ไบต์

function(A,N,P,o=0*diag(P*(N-1)+1)){for(i in 1:P)o[x,x]=o[x<-1:N+i-1,x]+A[[i]];o}

ลองออนไลน์!

ใช้เวลาlistในการฝึกอบรมA, และNP

สร้างเมทริกซ์ที่จำเป็นของศูนย์oและเพิ่ม elementwise เนื้อหาของAการ submatrices oที่เหมาะสมใน


4

JavaScript (ES6), 102 ไบต์

(n,p,a)จะเข้าเป็น

(n,p,a)=>[...Array(--n*p+1)].map((_,y,r)=>r.map((_,x)=>a.map((a,i)=>s+=(a[y-i*n]||0)[x-i*n]|0,s=0)|s))

ลองออนไลน์!

อย่างไร?

0W

W=(n-1)×พี+1

(x,Y)

sx,Y=Σผม=0พี-1aผม(x-ผม×(n-1),Y-ผม×(n-1))

โดยที่เซลล์ที่ไม่ได้กำหนดจะถูกแทนที่ด้วยศูนย์



3

เยลลี่ 12 ไบต์

Z€Ż€’}¡"Jµ⁺S

ลองออนไลน์!

Z€Ż€’}¡"Jµ⁺S
         µ    Everything before this as a monad.
          ⁺   Do it twice
Z€            Zip €ach of the matrices
        J     1..P
       "      Pair the matrices with their corresponding integer in [1..P] then apply the 
              following dyad:
  Ż€            Prepend 0 to each of the rows
      ¡         Repeat this:
    ’}          (right argument - 1) number of times
              Doing everything before µ twice adds the appropriate number of rows and
              columns to each matrix. Finally:
           S  Sum the matrices.

12 ไบต์

J’0ẋ;Ɱ"Z€µ⁺S

หากอนุญาตให้มีเลขศูนย์เพิ่มเติมZŻ€‘ɼ¡)⁺Sเป็นวิธีแก้ปัญหา 9 ไบต์ที่ยอดเยี่ยม TIO





1

ถ่าน , 52 ไบต์

≦⊖θE⊕×θηE⊕×θηΣEEη×θξ∧¬∨∨‹ιν›ι⁺θν∨‹λν›λ⁺θν§§§ζξ⁻ιν⁻λν

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

≦⊖θ

ยังไม่มีข้อความ

E⊕×θηE⊕×θη

(ยังไม่มีข้อความ-1)P+1

ΣEEη×θξ

Pยังไม่มีข้อความ-1

∧¬∨∨‹ιν›ι⁺θν∨‹λν›λ⁺θν

ตรวจสอบว่าดัชนีไม่อยู่นอกขอบเขต

§§§ζξ⁻ιν⁻λν

Offset เป็นอินพุตดั้งเดิมเพื่อดึงค่าที่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.