Biorąc pod uwagę dwie liczby dodatnie N >= 2
i N <= 100
stwórz macierz zgodnie z następującymi zasadami:
- Pierwszy numer zaczyna się od pozycji
[0,0]
- Drugi numer zaczyna się od pozycji
[0,1]
- Trzeci numer znajduje się poniżej pierwszego numeru (pozycji
[1,0]
) - Kolejne liczby idą w kierunku „ukośnika”
- Zakres użytych liczb to
[1, N1 * N2]
. Tak więc liczby zaczynają się od 1 do wyniku pomnożenia obu danych wejściowych.
Wkład
- Dwie liczby
N >= 2
iN <= 100
. Pierwsza liczba to liczba wierszy, druga liczba to liczba kolumn.
Wydajność
- Matryca. (Może być wyprowadzany jako tablica wielowymiarowa lub ciąg znaków z podziałem linii)
Przykład:
Podane liczby 3 and 5
wyjściowe:
1 2 4 7 10
3 5 8 11 13
6 9 12 14 15
Podane liczby 2 and 2
1 2
3 4
Podane liczby 5 and 5
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
Galaretka ,
65 bajtówWypróbuj online!
Jak to działa
źródło
<atom><atom>¥þ
ale nie mogę znaleźć odpowiedniej kombinacji.oþ++þ
jest blisko, ale do końca go nie[1, 2, 3, 4, 5, 6]
.Ụ
sortuje tej tablicy, używając przycisku, że mapy1
do[1, 1]
,2
do[1, 2]
,3
do[2, 1]
, itd. Zasadniczo to znaleziska indeks każdej pary z tablicy sortowane-by-sum w sortowane-leksykograficznie tablicęPython 3 , 91 bajtów
Wypróbuj online!
źródło
R ,
1016054 bajtówWypróbuj online!
Dzięki @nwellnhof za sugestię
rank
Galaretka Portsa Dennisa .
Stara odpowiedź, 101 bajtów:
Wypróbuj online!
split
wykonuje większość pracy tutaj; być może istnieje algorytm golfisty, ale to na pewno działa.Wyjaśnienie:
Wypróbuj online! - możesz użyć zawinięcia
print
wokół dowolnej z prawej strony przypisań,<-
aby zobaczyć wyniki pośrednie bez zmiany wyniku końcowego, ponieważprint
zwraca on swoje dane wejściowe.źródło
rank(x,1,"f")
jest o 2 bajty krótszy niżorder(order(x))
.rank(x,,"l")
się pozbędziet
.Java 10,
121120109105 bajtów-11 bajtów dzięki @ OlivierGrégoire .
-4 bajty dzięki @ceilingcat .
Wypróbuj online.
Wyjaśnienie:
źródło
x,y
/width,height
J , 15 bajtów
-4 dodatkowe bajty dla tego rozwiązania o mile. Dzięki!
Wypróbuj online!
J ,
2219 bajtów-3 bajty dzięki FrownyFrog!
Wypróbuj online!
Wdrożenie fantastycznego rozwiązania Dennis Jelly w J.
Wyjaśnienie:
Czasownik dyadyczny, przyjmuje argument lewy i prawy (MFN)
+/&i.
tworzy listy 0..m-1 i 0..n-1 i tworzy dla nich tabelę dodatków:[:>:@/:@/:@,
spłaszcza tabelę i dwukrotnie ocenia listę i dodaje 1:,$
przekształca listę z powrotem w tabelę mxn:źródło
-@],\
→,$
dla −3 bajtów.$1(+/:@;)</.@i.
z wejściem jako tablicą[r, c]
/.
ale nie udało mi się osiągnąć twojego wyniku :)APL + WIN, 38 lub 22 bajtów
Monity o kolumnę wprowadzania liczb całkowitych, a następnie wiersz:
lub:
na podstawie podwójnego zastosowania oceny Dennisa. Brakowało tego :(
źródło
Wolfram Language (Mathematica) ,
7367 bajtówPolicz elementy w rzędach powyżej:
Min[j+k,#2]~Sum~{k,i-1}
Policz elementy w bieżącym wierszu i poniżej:
Max[j-k+i-1,0]~Sum~{k,i,#}
Umieść w tabeli i dodaj 1. Voila:
Aktualizacja: Zdałem sobie sprawę, że istnieje krótszy sposób na policzenie wszystkich pozycji przed normalnie określoną pozycją w macierzy za pomocą tylko jednej sumy na dwa wymiary:
Wypróbuj online!
Wypróbuj online!
źródło
APL (Dyalog Unicode) ,
1412 bajtówWypróbuj online!
-2 dzięki ngn , ze względu na jego sprytne użycie
↑⍳
.Oparty na 5-bajtowym rozwiązaniu Dennis Jelly.
źródło
∘.+⌿⍳¨⍵
->+/↑⍳⍵
⍳
połączeniu z↑
.05AB1E , 23 bajty
Wypróbuj online!
źródło
Python 3 , 164 bajty
Wypróbuj online!
To zdecydowanie nie jest najkrótsze rozwiązanie, ale pomyślałem, że to było fajne.
źródło
from numpy import*
i upuszczenie obun.
jest nieco krótsze. Możesz także upuścić miejsce na) for
. A przejście na Python 2 pozwala na zmianęreturn a
naprint a
(w Python 3 będzie to ta sama liczba bajtówprint(a)
).import*
. Nigdy nie pokonam odpowiedzi Dennisa, więc pozostanę przy Pythonie 3.Python 2 , 93 bajty
Wypróbuj online!
Wersja częściowo nie golfowa:
źródło
Japt ,
2524 bajtówNiezbyt elegancki, ale spełnia swoje zadanie. Praca z danymi 2D w Japt jest trudna.
Dodałem
-Q
flagę w TIO dla łatwiejszej wizualizacji wyników, nie wpływa to na rozwiązanie.Oderwał jeden bajt dzięki Oliverowi .
Wypróbuj online!
źródło
×
, można zastąpić*V
zN×
.JavaScript (Node.js) , 103 bajty
Wypróbuj online!
źródło
TI-Basic, 76 bajtów
Monituje o dane wprowadzone przez użytkownika i zwraca macierz
Ans
i drukuje ją.TI-Basic to tokenizowany język ; wszystkie użyte tutaj tokeny mają jeden bajt, inny niż
[A]
2 bajty.Uwaga: TI-Basic (przynajmniej w TI-84 Plus CE) obsługuje tylko matryce do 99x99, podobnie jak ten program.
Wyjaśnienie:
źródło
Perl 6 ,
6159 bajtówWypróbuj online!
Kolejny port galaretki Dennisa.
źródło
Java (JDK 10) ,
142131 bajtówWypróbuj online!
Wyjaśnienie:
Ogromne podziękowania dla Kevina Cruijssena, ponieważ nie wiedziałem, jak uruchomić mój kod na tio .
Niektóre kody, takie jak nagłówek i stopka, zostały mu skradzione. -> Jego odpowiedź
źródło
PHP, 115 bajtów
dość leniwe podejście; prawdopodobnie nie najkrótszy możliwy.
funkcja anonimowa, przyjmuje szerokość i wysokość jako parametry, zwraca macierz 2d
spróbuj online
źródło
JavaScript (Node.js) ,
108105101100 bajtówWypróbuj online!
źródło
Attache , 45 bajtów
Wypróbuj online!
Anonimowa lambda, w której przełączane są parametry. Można to naprawić dla bajtu +1, przygotowując
~
się do programu. Zestaw testowy już to robi.Wyjaśnienie
To podejście jest podobne do odpowiedzi J i odpowiedzi Jelly .
Pierwszym pomysłem jest wygenerowanie tabeli wartości:
To generuje tabelę dodatków, wykorzystując zakresy obu parametrów wejściowych. W przypadku danych wejściowych
[5, 3]
daje to:Następnie spłaszczamy to za pomocą
Flat!
:Stosując podejście z odpowiedzi J, możemy dwukrotnie ocenić tablicę (to znaczy zwrócić indeksy posortowanych wartości), przy pomocy
Grade//2
:Następnie musimy poprawnie pokroić wartości, jak w odpowiedzi Jelly. Możemy wyciąć wszystkie
_
elementy, aby to zrobić:Następnie musimy tylko zrekompensować indeksowanie 0 Attache za pomocą
+1
:I tak mamy wynik.
źródło
Python 3 , 259 bajtów
Więc zrobiłem to w dziwny sposób. Zauważyłem, że istnieją dwa wzorce w sposobie tworzenia tablicy.
Pierwszy jest to, jak wzór górnych rzędów ma różnicę między każdym terminem, zwiększając się z 1 -> h, gdzie h jest wysokością, a l jest długością. Więc konstruuję górny rząd na podstawie tego wzorca
Dla matrycy dim (3,4) podającej
max RoC = 3
Widzimy górny wiersz formularzaZałóżmy zamiast tego, że dim (3,9) dający
max RoC = 3
nam zamiast tego zobaczysz górny rządDrugi wzór to zmiana rzędów między sobą. Jeśli weźmiemy pod uwagę macierz:
i odejmujemy każdy wiersz od wiersza poniżej (ignorując dodatkowy wiersz), który otrzymujemy
Po zobaczeniu tej macierzy możemy zauważyć, że ta macierz jest sekwencją, w
2 3 4 5 5 4 3 2
której w każdym rzędzie 5 składników tego wzoru jest przesuniętych o 1 dla każdego rzędu. Zobacz poniżej dla wizualnego.Aby uzyskać ostateczną macierz, bierzemy pierwszy utworzony przez nas wiersz i wyprowadzamy ten wiersz z dodanymi 5 potrzebnymi warunkami tego wzorca.
Ten wzór zawsze będzie miał cechy początku
2-> max value
i końca,max value -> 2
gdziemax value = min(h+1, l)
i ile razy pojawi się maksymalna wartość,appearances of max = h + l -2*c -2
gdziec = min(h+1, l) - 2
Tak więc w całości wygląda moja metoda tworzenia nowych wierszy
Odpowiedni kod poniżej. Nie było to krótkie, ale nadal podoba mi się ta metoda.
Wypróbuj online!
źródło
Japt, 20 bajtów
Spróbuj
źródło