Składane macierze

18

Tagi: projektowanie Miejmy cyfrą mozaika , Print / Output L-Phabet . Wstaw tutaj piaskownicę

Biorąc pod uwagę 2 dane C = columns and rows, S = starting pointwyjściowe, macierz wygląda następująco:

Input 4, 3

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

Wyjaśnienie

Dany C = 4, S = 3

1) Utwórz C x Cmacierz wypełnioną0

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

2) Uzupełnij Swartości w wierszu i kolumnie S, a następnie odejmij 1 od Si powtarzaj do S = 0. Ta sprawaS = 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

Zasady

  • Założyć C >= S >= 0
  • Wyjściem może być macierz, lista list, tablica (1-wymiarowa lub 2-wymiarowa) itp.
  • Możesz przyjmować dane wejściowe za pomocą dowolnego domyślnego formatu we / wy
  • Twój program, funkcja itp. Może być indeksowany 1 lub 0. Podaj, który z nich jest.

Uwaga Wyjaśnienie to indeksowanie 1


Kryteria

Luis Felipe De Jesus Munoz
źródło

Odpowiedzi:

6

Galaretka , 8 bajtów

»>⁴¬×»µþ

Wypróbuj online!

Jak to działa

Atom produktu zewnętrznego Jelly ( þ)

Możesz myśleć o zewnętrznym atomie produktu Jelly þ, jako o szybkim (operator), który, biorąc pod uwagę liczby całkowite i Y (w tym przypadku X = Y = pierwszy argument  ), tworzy następującą macierz krotek:XYX=Y=first argument 

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

Stosuje również link tuż przed nim do wszystkich par, nazwijmy go , który zachowuje się jak funkcja, która przyjmuje dwa argumenty, tworząc coś takiego: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)]

Jak to ma znaczenie dla danego zadania?

Działa to poprzez zauważenie, że każda wartość w oczekiwanym wyniku jest tylko tabelą maksymalnych wskaźników lub jeśli to maksimum przekracza nasz drugi argument. Dlatego możemy utworzyć następujący link, aby wykonać to mapowanie: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.
Pan Xcoder
źródło
6

R , 47 41 bajtów

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

Wypróbuj online!

1-indeksowany. Generuje dane wyjściowe dla S==C(bez zer), a następnie zeruje komórki, które mają wartość >Sprzy użyciu mnożenia macierzy (dzięki Giuseppe za 4 bajty!).

JayCe
źródło
Schludny! pomnożenie zapewni ci dobry przebieg: 43 bajty
Giuseppe
@Giuseppe tx! Udało mi się uratować jeszcze dwa :)
JayCe
5

Oktawa , 31 bajtów

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

Anonimowa funkcja zwracająca macierz. Wykorzystuje indeksowanie 1.

Wypróbuj online!

Luis Mendo
źródło
5

Haskell , 47 lat 45 bajtów

-2 bajty poprzez zmianę formatu wyjściowego na listę jednowymiarową.

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

Wypróbuj online!

Wyjaśnienie

Termin x >>= (<$> x) . maxten jest wersją gry w golfa

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

co ocenia na [1,2,3,4..c, 2,2,3,4..c, 3,3,3,4..c, ..., c,c,c,c..c]. Teraz musimy wymusić wartości 0tylko wtedy, gdy przekroczą to, sco osiągniemy sum [ j | j <= s].

ბიმო
źródło
5

APL (Dyalog Classic), 12 bajtów

{⍺ ⍺↑∘.⌈⍨⍳⍵}

Wypróbuj online!

Wszelkie wskazówki dotyczące przekształcania tego w pociąg są mile widziane.

jslip
źródło
Mój pociąg jest dłuższy o 2
FrownyFrog,
13 bajtów
FrownyFrog,
3

APL (Dyalog) , 12 bajtów

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

Wypróbuj online!

Uriel
źródło
Czy coś takiego o×⎕≥o←∘.⌈⍨⍳byłoby dozwolone, czy też musiałbyś przypisać to do funkcji, aby to się liczyło?
Zacharý
@ Zacharý zgaduję, że należałoby umieścić go w tradfn z argumentem lub dfns
Uriel
3

JavaScript (ES6), 61 bajtów

Pobiera dane wejściowe w składni curry (c)(s), gdzie s jest indeksowane 1. Zwraca tablicę jednowymiarową.

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

Wypróbuj online!

Arnauld
źródło
3

Galaretka , 6 bajtów

⁴Ri»µþ

Pełny program * przyjmujący liczby całkowite CiS które drukuje reprezentacji Jelly wykazu list liczb całkowitych, jak określono (1 indeksowane).

Wypróbuj online!(formatuje wynik diady jako siatkę liczb dla łatwiejszego czytania)

W jaki sposób?

⁴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

* Powodem jest to pełny program jest do korzystania z dostępu do argumentów programu . Jako diadadowy link ten kod polegałby na tym, jak wywoływany jest program, który go używa.
Wielokrotnego użytku ogniwo dynastyczne w 8 bajtach (biorąc S po lewej stronie i C po prawej): Wielokrotnego użytku ogniwo dynastyczne w 8 bajtach (biorąc C po lewej i S po prawej):RiⱮⱮ»þ`}
RiⱮⱮ⁹»þ¤

Jonathan Allan
źródło
2

Java 10, 88 bajtów

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;}

Wypróbuj online.

Wyjaśnienie:

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
źródło
2

PHP , 92 bajty

To jest „indeksowanie 1”.

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

Aby uruchomić:

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

Przykład:

php -n collapsing_matrice.php 8 6

Lub wypróbuj online!

Noc 2
źródło
2

Stax , 10 bajtów

▓╜.→,cΘ○╤æ

Uruchom i debuguj

Jak to działa:

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

pustkowie
źródło
2

Excel VBA, 65 bajtów

Funkcja bezpośredniego okna, która pobiera dane wejściowe [A1:B1]i wyjściowe z tego zakresu [C1].Resize([A1],[A1]).

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

Wejście wyjście

Dane wejściowe mieszczą się w zakresie [A1:B1]

I/O

Taylor Scott
źródło
2

MATLAB, 58 bajtów (dzięki anonimowemu użytkownikowi)

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

Wystarczy wypełnić elementy macierzy odpowiednią liczbą, uruchomić pętlę. Być może można być mądrzejszymarrayfun

aaaaa mówi o przywróceniu Moniki
źródło
Nie musisz nazywać funkcji i możesz użyć, zeros(c)która skrywa niektóre bajty. Również widziałaś ten Octave odpowiedź, myślę, że to działa w Matlab też?
ბიმო
@ OMᗺ Octave nie można nazywać zmiennych wewnątrz anonimowych funkcji w Matlabie. Ponadto max()trzeba wziąć argumenty sam kształt
aaaaa mówi dozbrojenie Monica
1
Sugerowany anonimowy użytkownik function o=f(c,s);o=zeros(c);for j=s:-1:1;o(1:s,1:s)=j;end.
Jonathan Frech,
@JathanathanFrech o mój, o wiele prostszy :-( po prostu trzeba byćo(1:j,1:j)=j
aaaaa mówi przywrócić Monikę
1

Python 2 , 58 bajtów

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

Wypróbuj online!

Wysyła listę 1D długości C*C.

Chas Brown
źródło
1

Węgiel drzewny , 19 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. 3 bajty używane do konwersji danych wyjściowych na dziesiętne i ładnego sformatowania. Wyjaśnienie:

 θ                  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
źródło
1

Czysty , 67 bajtów

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

Wypróbuj online!

Definiuje $ :: Int Int -> [[Int]]udzielanie odpowiedzi za pomocą indeksowania 1.

Obrzydliwe
źródło
0

Matematyka 44 bajty

Table[If[i <= s && j <= s, Max[i, j], 0], {i, c}, {j, c}]
David G. Stork
źródło
Czy jesteś pewien, że białe znaki są konieczne? Nie mogę przetestować Mathematiki, ale wydaje mi się, że tak nie jest.
Wheat Wizard