ผลรวมของเมทริกซ์ที่จำลองแบบแล้ว


11

รับรายการตัวเลข[ a 1 a 2 ... a n ]คำนวณผลรวมของเมทริกซ์ทั้งหมดAᵢโดยที่Aᵢถูกนิยามดังนี้ ( mคือค่าสูงสุดของaᵢทั้งหมด):

       1  2  ⋯ (i-1) i (i+1) ⋯  n
     +----------------------------
 1   | 0  0  ⋯   0   aᵢ  aᵢ  ⋯  aᵢ
 2   | 0  0  ⋯   0   aᵢ  aᵢ  ⋯  aᵢ
 .   . .  .      .   .   .      .
 .   . .  .      .   .   .      .
aᵢ   | 0  0  ⋯   0   aᵢ  aᵢ  ⋯  aᵢ
aᵢ₊₁ | 0  0  ⋯   0   0   0   ⋯  0
 .   . .  .      .   .   .      .
 .   . .  .      .   .   .      .
 m   | 0  0  ⋯   0   0   0   ⋯  0

ตัวอย่าง

รับข้อมูลที่[2,1,3,1]เราสร้างเมทริกซ์ต่อไปนี้:

[2 2 2 2]   [0 1 1 1]   [0 0 3 3]   [0 0 0 1]   [2 3 6 7]
[2 2 2 2] + [0 0 0 0] + [0 0 3 3] + [0 0 0 0] = [2 2 5 5]
[0 0 0 0]   [0 0 0 0]   [0 0 3 3]   [0 0 0 0]   [0 0 3 3]

กฎและ I / O

  • คุณอาจจะถือว่าอินพุตไม่ว่างเปล่า
  • คุณอาจจะสมมติว่าอินพุตทั้งหมดนั้นไม่เป็นลบ (0≤)
  • อินพุตอาจเป็นเมทริกซ์ขนาด 1 × n (หรือ n × 1) รายการอาร์เรย์เป็นต้น
  • ในทำนองเดียวกันการส่งออกสามารถเมทริกซ์รายชื่อของรายการอาร์เรย์ ฯลฯ
  • คุณสามารถรับและส่งคืนอินพุตผ่านรูปแบบ I / O เริ่มต้นใด ๆ
  • การส่งของคุณอาจเป็นโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ

กรณีทดสอบ

[0] -> [] or [[]]
[1] -> [[1]]
[3] -> [[3],[3],[3]]
[2,2] -> [[2,4],[2,4]]
[3,0,0] -> [[3,3,3],[3,3,3],[3,3,3]]
[1,2,3,4,5] -> [[1,3,6,10,15],[0,2,5,9,14],[0,0,3,7,12],[0,0,0,4,9],[0,0,0,0,5]]
[10,1,0,3,7,8] -> [[10,11,11,14,21,29],[10,10,10,13,20,28],[10,10,10,13,20,28],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,10,18],[10,10,10,10,10,10],[10,10,10,10,10,10]]

ฉันเดาว่ามีความแตกต่างแบบอักษรหรืออะไรบางอย่าง ฉันเห็นคุณย้อนกลับแก้ไขของฉัน นี่คือลักษณะที่ปรากฏแก่ฉันในขณะ นี้imgur.com/a06RH9rนี่คือ Chrome ใน Windows 10 จุดไข่ปลาแนวตั้งไม่ได้ถูกแสดงในอวกาศด้วยเหตุผลบางอย่างและไม่สอดคล้องกับคอลัมน์ นั่นเป็นเหตุผลที่ฉันเปลี่ยนมัน แต่ฉันคิดว่ามันต้องดูแตกต่างในสภาพแวดล้อมที่แตกต่างกัน
เรียกซ้ำ

1
ปัญหาตัวอักษรแน่นอน การแก้ไขทั้งสองแนวไม่ตรงกับหน้าจอของฉัน
เดนนิส

เราจะส่งคืนผลลัพธ์ที่ได้รับการเปลี่ยนหรือไม่
Adám


1
@ Adám: ฉันจะบอกว่าไม่ได้ที่ แต่รวมถึงการแก้ปัญหาในการโพสต์ของคุณที่ทำเช่นนั้น
ბიმო

คำตอบ:


9

เจลลี่ , 10ไบต์ 5

ẋ"z0Ä

ลองออนไลน์!

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

ẋ"z0Ä  Main link. Argument: A (array)


       e.g. [2, 1, 3, 1]

ẋ"     Repeat each n in A n times.

       e.g. [[2, 2   ]
             [1      ]
             [3, 3, 3]
             [1      ]]

  z0   Zipfill 0; read the result by columns, filling missing elements with 0's.

        e.g. [[2, 1, 3, 1]
              [2, 0, 3, 0]
              [0, 0, 3, 0]]

    Ä  Take the cumulative sum of each row vector.

       e.g. [[2, 3, 6, 7]
             [2, 2, 5, 5]
             [0, 0, 3, 3]]

4

R , 80 ไบต์

n=sum((a=scan())|1);for(i in 1:n)F=F+`[<-`(matrix(0,max(a),n),0:a[i],i:n,a[i]);F

ลองออนไลน์!

รับอินพุตจาก stdin; พิมพ์0x1เมทริกซ์สำหรับอินพุต0ซึ่งพิมพ์ออกมาเหมือน

	[,1]


3
สำหรับผู้ที่สงสัยว่าเป็นในตัวตัวแปรทั่วโลกที่มีค่าเริ่มต้นเป็นF FALSEที่นี่มันถูกบังคับเป็น 0 และใช้เป็นค่าเริ่มต้นของผลรวมสะสม คำตอบนี้แสดงให้เห็นถึงเหตุผลที่จะไม่ใช้FและTยกเว้นในรหัสที่ออกแบบมาโดยเฉพาะเพื่อไม่ให้ใช้จริง!
ngm



3

APL (Dyalog Unicode) 8 ไบต์SBCS

โปรแกรมเต็มรูปแบบ แจ้งให้ stdin สำหรับรายการพิมพ์เมทริกซ์เพื่อ stdout

ใช้วิธีเดนนิส

+\⍉↑⍴⍨¨⎕

ลองออนไลน์!

 stdin

⍴⍨¨r eshape-selfie ของแต่ละคน

 รายการผสมของรายการลงในเมทริกซ์เติมด้วย 0s

 transpose

+\ ผลรวมแถวฉลาดสะสม

สิ่งนี้ไม่ได้สร้างความแตกต่างในการคำนวณดังนั้นจึงอาจถูกทิ้งไว้และ\เปลี่ยนเป็นผลรวมของคอลัมน์แทนที่จะเป็นแถวที่ฉลาด



2

อ็อกเทฟ 64 ไบต์

@(x,k=a=0*(x+(1:max(x))'))eval"for i=x;a(1:i,++k:end)+=i;end,a";

ลองออนไลน์!

คำอธิบาย:

อีกครั้ง: ใช้นิพจน์ในรายการอาร์กิวเมนต์และ eval ในฟังก์ชั่นเดียว :)

นี้จะใช้เวลาxเป็น input k=a=zeros(length(x),max(x))และสร้างเมทริกซ์สองเหมือนกันเต็มไปด้วยศูนย์ที่มีมิติ สิ่งนี้สามารถทำได้โดยการเพิ่มเวกเตอร์แนวนอนxด้วยเวกเตอร์แนวตั้งด้วย1:max(x)การขยายขนาดไปยังอาร์เรย์สองมิติโดยปริยายแล้วคูณด้วยศูนย์ ~(x+...)ไม่ได้ทำงานเนื่องจากมีการบังคับaให้เป็นอาร์เรย์แบบลอจิคัลตลอดฟังก์ชันที่เหลือ

for i=xเป็นห่วงว่าสำหรับแต่ละซ้ำทำให้i=x(1)แล้วi=x(2)และอื่น ๆ a(1:i,k++:end)เป็นส่วนหนึ่งของเมทริกซ์ที่ควรได้รับการอัพเดตสำหรับการวนซ้ำแต่ละครั้ง 1:iเป็นเวกเตอร์ที่บอกว่าควรปรับปรุงแถวไหน ถ้าi=0นี่จะเป็นเวกเตอร์ที่ว่างเปล่าดังนั้นจะไม่มีการอัปเดต1, 2 ...ใด ๆ ++k:endเพิ่มkเมทริกซ์ทีละหนึ่งและสร้างช่วงจากค่าแรกของเมทริกซ์นี้ ( 1,2,3...) และจนถึงคอลัมน์สุดท้ายของaเมทริกซ์ เพิ่มมูลค่าปัจจุบัน+=i จบลงห่วงและเอาท์พุทaend,aa




1

Java 10, 142 ไบต์

a->{int l=a.length,i=0,j,s,m=0;for(int q:a)m=q>m?q:m;int[][]r=new int[m][l];for(;i<m;i++)for(j=s=0;j<l;j++)r[i][j]=s+=i<a[j]?a[j]:0;return r;}

ลองออนไลน์

a->{               // Method with integer-array parameter and integer-matrix return-type
  int l=a.length,  //  Length of the input-array
      i,j,         //  Index integers
      s,           //  Sum integer
  m=0;for(int q:a)m=q>m?q:m;
                   //  Determine the maximum of the input-array
  int[][]r=new int[m][l];
                   //  Result-matrix of size `m` by `l`
  for(;i<m;i++)    //  Loop `i` over the rows
    for(j=s=0;     //   Reset the sum to 0
        j<l;j++)   //   Inner loop `j` over the columns
      r[i][j]=s+=  //    Add the following to the sum `s`, add set it as current cell:
        i<a[j]?    //     If the row-index is smaller than the `j`'th value in the input:
         a[j]      //      Add the current item to the sum
        :          //     Else:
         0;        //      Leave the sum the same by adding 0
  return r;}       //  Return the result-matrix


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