Matriks runtuh

18

Terkait: Mari kita merancang mosaik digit , Cetak / Keluarkan L-phabet . Posting kotak pasir di sini

Diberikan 2 input C = columns and rows, S = starting pointoutput matriks sebagai berikut:

Input 4, 3

1   2   3   0
2   2   3   0
3   3   3   0
0   0   0   0

Penjelasan

Diberikan C = 4, S = 3

1) Buat C x Cmatriks diisi dengan0

         4 columns
4     _____|____
     |          |
r  --0  0   0   0
o |  0  0   0   0
w |  0  0   0   0
s  --0  0   0   0

2) Isi dengan Snilai di dalam baris dan kolom S, lalu kurangi 1 dari Sdan ulangi sampai S = 0. Kasus iniS = 3

             Column 3 
S = 3           |
                v
        0   0   3   0
        0   0   3   0
Row 3-->3   3   3   0
        0   0   0   0


         Column 2
S = 2       |
            v
        0   2   3   0
Row 2-->2   2   3   0
        3   3   3   0
        0   0   0   0


     Column 1
S=1     |
        v
Row 1-->1   2   3   0
        2   2   3   0
        3   3   3   0
        0   0   0   0



Final Result

1   2   3   0
2   2   3   0
3   3   3   0
0   0   0   0

Aturan

  • Menganggap C >= S >= 0
  • Outputnya bisa berupa matriks, daftar daftar, array (1-dimensi atau 2-dimensi) dll.
  • Anda dapat mengambil input melalui format I / O standar apa pun
  • Program, fungsi, dll ... Anda mungkin 1-indexing atau 0-indexing. Silakan tentukan yang mana.

Catatan Penjelasan adalah pengindeksan 1


kriteria menang

Luis felipe De jesus Munoz
sumber

Jawaban:

6

Jelly , 8 byte

»>⁴¬×»µþ

Cobalah online!

Bagaimana itu bekerja

Atom Produk Luar Jelly ( þ)

Anda dapat menganggap atom produk luar Jelly þ, sebagai (operator) cepat, yang diberi argumen integer dan (dalam hal ini ), menghasilkan matriks tuple berikut:Y X = Y = argumen pertama XYX=Y=argumen pertama 

[(1,1)(2,1)(3,1)(X,1)(1,2)(2,2)(3,2)(X,2)(1,Y)(2,Y)(3,Y)(X,Y)]

Itu juga menerapkan tautan tepat sebelum ke semua pasangan, sebut saja , yang berperilaku seperti fungsi yang mengambil dua argumen, menghasilkan sesuatu seperti ini:f

[f(1,1)f(2,1)f(3,1)f(X,1)f(1,2)f(2,2)f(3,2)f(X,2)f(1,Y)f(2,Y)f(3,Y)f(X,Y)]

Bagaimana hal itu relevan dengan tugas yang dihadapi?

Ini berfungsi dengan memperhatikan bahwa setiap nilai dalam output yang diharapkan hanyalah tabel indeks maksimal, atau jika maksimum ini melebihi argumen kedua kami. Karena itu, kita dapat membuat tautan berikut untuk melakukan pemetaan ini:0

»>⁴¬×» – Dyadic (2-argument) link.
»      – Maximum of the X, Y coordinates.
 >⁴    – Check if this exceeds the second argument of the program.
   ¬   – Negate this boolean.
    ×» – And multiply by the maximum, computed again.
Tuan Xcoder
sumber
6

R , 47 41 byte

function(C,S,m=outer(1:C,1:C,pmax))m*!m>S

Cobalah online!

1-diindeks. Hasilkan output untuk S==C(tanpa nol) kemudian nol sel yang memiliki nilai >Smenggunakan perkalian matriks (terima kasih Giuseppe untuk 4 byte!).

JayCe
sumber
Rapi! multiplikasi akan memberi Anda jarak tempuh yang baik: 43 byte
Giuseppe
@Giuseppe tx! Saya dapat menyimpan dua lagi :)
JayCe
5

Oktaf , 31 byte

@(C,S)(u=max(t=1:C,t')).*(u<=S)

Fungsi anonim yang mengembalikan matriks. Menggunakan pengindeksan berbasis 1.

Cobalah online!

Luis Mendo
sumber
5

Haskell , 47 45 byte

-2 byte dengan mengubah format output ke daftar satu dimensi.

c&s|x<-[1..c]=[sum[j|j<=s]|j<-x>>=(<$>x).max]

Cobalah online!

Penjelasan

Istilah x >>= (<$> x) . maxini adalah versi golf dari

concat [ max i <$> x | i <- x ]

yang dievaluasi menjadi [1,2,3,4..c, 2,2,3,4..c, 3,3,3,4..c, ..., c,c,c,c..c]. Sekarang kita hanya perlu memaksakan nilai-nilai itu 0begitu mereka melebihi syang kita capai sum [ j | j <= s].

ბიმო
sumber
5

APL (Dyalog Classic), 12 byte

{⍺ ⍺↑∘.⌈⍨⍳⍵}

Cobalah online!

Setiap tips untuk mengubah ini menjadi kereta api adalah welocome.

jslip
sumber
Kereta saya lebih lama 2
FrownyFrog
13 byte
FrownyFrog
3

APL (Dyalog) , 12 byte

o×⎕≥o←∘.⌈⍨⍳⎕

Cobalah online!

Uriel
sumber
Apakah sesuatu seperti o×⎕≥o←∘.⌈⍨⍳diizinkan, atau apakah Anda harus menugaskannya ke suatu fungsi agar dapat dihitung?
Zacharý
@ Zacharý tebakan saya adalah bahwa seseorang harus memasukkannya ke dalam tradfn dengan argumen atau dfns
Uriel
3

JavaScript (ES6), 61 byte

Mengambil input dalam sintaks currying (c)(s), di mana s adalah 1-diindeks. Mengembalikan array 1 dimensi.

c=>s=>[...Array(c*c)].map((_,k)=>(k=k%c>k/c?k%c:k/c)<s?-~k:0)

Cobalah online!

Arnauld
sumber
3

Jelly , 6 byte

⁴Ri»µþ

Program penuh * mengambil bilangan bulat Cdan Syang mencetak representasi Jelly dari daftar daftar bilangan bulat seperti yang ditentukan (1-diindeks).

Cobalah online! (memformat hasil angka dua sebagai kisi angka untuk membaca lebih mudah)

Bagaimana?

⁴Ri»µþ - Main Link: C, S
     þ - outer product with:
    µ  -   the monadic function (i.e. f(x,y) for x in [1..C] for y in [1..C]):
   »   -     maximum (of x and y)
⁴      -     program's 4th argument = 2nd input = S
 R     -     range = [1,2,3,...S]
  i    -     first index of (the maximum) in (the range) or 0 if not found
       - as a full program: implicit print

* Alasan mengapa ini adalah program lengkap adalah karena penggunaan akses argumen program ,. Sebagai tautan diadik, kode ini akan bergantung pada bagaimana program yang menggunakannya disebut.
Link dyadic dapat digunakan kembali dalam 8 byte (mengambil S di sebelah kiri dan C di sebelah kanan): Link diad dapat digunakan kembali dalam 8 byte (mengambil C di sebelah kiri dan S di sebelah kanan):RiⱮⱮ»þ`}
RiⱮⱮ⁹»þ¤

Jonathan Allan
sumber
2

Java 10, 88 byte

C->S->{var r=new int[C][C];for(;S>0;)for(int s=S--;s-->0;)r[S][s]=r[s][S]=S+1;return r;}

Cobalah online.

Penjelasan:

C->S->{                     // Method with two int parameters and int-matrix return-type
  var r=new int[C][C];      //  Result-matrix of size `C` by `C`
  for(;S>0;)                //  Loop as long as `S` is not 0 yet:
    for(int s=S--;s-->0;)   //   Inner loop `s` in the range (`S`, 0]
                            //   (and decrease `S` by 1 in the process with `S--`)
      r[S][s]=r[s][S]=S+1;  //    Set the values at both {`S`,`s`} and {`s`,`S`} to `S+1`
  return r;}                //  Return the result
Kevin Cruijssen
sumber
2

PHP , 92 byte

Ini adalah "1-pengindeksan".

<?list(,$c,$s)=$argv;for(;$i++<$c;print"\n")for($j=0;$j++<$c;)echo$s<$i||$s<$j?0:max($i,$j);

Untuk menjalankannya:

php -n <filename> <c> <s>

Contoh:

php -n collapsing_matrice.php 8 6

Atau Coba online!

Night2
sumber
2

Stax , 10 byte

▓╜.→,cΘ○╤æ

Jalankan dan debug itu

Bagaimana itu bekerja:

R(Xm]i*xit+J Full program, implicit input.
R            1-based range of S
 (           Right-pad with zeroes to length C
  X          Save to X register
   m         Map (same as here):
    ]          Wrap in list
     i*        repeat by iteration index
       xit     Remove first  elements from X register
          +    Append
           J   Stringify each element, and join by space

wastl
sumber
2

Excel VBA, 65 byte

Fungsi jendela langsung yang mengambil input dari [A1:B1]dan output ke jangkauan [C1].Resize([A1],[A1]).

[C1].Resize([A1],[A1])=0:For s=-[B1]To-1:[C1].Resize(-s,-s)=-s:Next

Input output

Input dalam jangkauan [A1:B1]

I / O

Taylor Scott
sumber
2

MATLAB, 58 byte (Berkat pengguna anonim)

function o=f(c,s);o=zeros(c);for j=s:-1:1;o(1:j,1:j)=j;end

Cukup mengisi elemen-elemen matriks dengan angka yang sesuai, menjalankan satu lingkaran. Mungkin memungkinkan untuk menjadi lebih pintararrayfun

kata aaaaa mengembalikan Monica
sumber
Anda tidak perlu menyebutkan nama fungsinya dan Anda dapat menggunakan zeros(c)brankas yang beberapa byte. Juga apakah Anda melihat jawaban Oktaf ini , saya kira itu akan berhasil di Matlab juga?
ბიმო
@ OMᗺ Oktaf Anda tidak dapat memberi nama variabel di dalam fungsi anonim di matlab. Juga, max()harus mengambil argumen dengan bentuk yang sama
aaaaa mengatakan mengembalikan Monica
1
Disarankan pengguna anonim function o=f(c,s);o=zeros(c);for j=s:-1:1;o(1:s,1:s)=j;end.
Jonathan Frech
@ JonathanFrech oh my jauh lebih sederhana :-( hanya perluo(1:j,1:j)=j
aaaaa mengatakan mengembalikan Monica
1

Python 2 , 58 byte

lambda C,S:[-~max(i%C,i/C)*(i%C<S>i/C)for i in range(C*C)]

Cobalah online!

Menghasilkan daftar panjang 1D C*C.

Chas Brown
sumber
1

Arang , 19 byte

Eθ⪫IEEθ⌈⟦ιλ⟧∧‹λη⊕λ 

Cobalah online! Tautan adalah untuk mengucapkan versi kode. 3 byte digunakan untuk mengonversi output menjadi desimal dan memformatnya dengan baik. Penjelasan:

 θ                  Input `C`
E                   Map over implicit range
      θ             Input `C`
     E              Map over implicit range
          λ         Inner index
         ι          Outer index
       ⌈⟦  ⟧        Maximium
    E               Map over results
              λ     Current value
               η    Input `S`
             ‹      Less than
                 λ  Current value
                ⊕   Incremented
            ∧       Logical AND
   I                Cast to string
  ⪫                 Join with spaces
                    Implicitly print on separate lines
Neil
sumber
1

Bersih , 67 byte

import StdEnv
$n s=[[if(i>s||j>s)0(max i j)\\i<-[1..n]]\\j<-[1..n]]

Cobalah online!

Menentukan $ :: Int Int -> [[Int]]memberikan jawaban menggunakan pengindeksan berbasis 1.

Suram
sumber
1

Perl 6 , 37 byte

{((^$^c+1 Xmax^$c+1)Xmin$^s+1)X%$s+1}

Cobalah online!

Mengembalikan matriks sebagai array 1 dimensi.

nwellnhof
sumber
0

Mathematica 44 byte

Table[If[i <= s && j <= s, Max[i, j], 0], {i, c}, {j, c}]
David G. Stork
sumber
Apakah Anda yakin ruang putih diperlukan? Saya tidak dapat menguji Mathematica tapi saya rasa tidak.
Wheat Wizard