Definicja
Biorąc pod uwagę macierz nieujemnych liczb całkowitych i nieujemną liczbę całkowitą , definiujemy jako funkcję „odcinania”, która usuwa wszystkie wiersze i wszystkie kolumny w które zawierają .
Przykład:
Twoje zadanie
Biorąc pod uwagę, i suma cel , twoim zadaniem jest znaleźć wszystkie możliwe wartości takie, że suma pozostałych elementów jest równa .
Przykład:
Biorąc pod uwagę powyższą macierz i :
- jest rozwiązaniem, ponieważ oraz
- to jedyne inne możliwe rozwiązanie: i
Oczekiwany wynik to .
Wyjaśnienia i zasady
- Wejście gwarantuje, że przyjmie się co najmniej jedno rozwiązanie.
- Suma pierwiastków w oryginalnej matrycy zagwarantowane jest większa niż .
- Możesz założyć . Oznacza to, że pusta matryca nigdy nie doprowadzi do rozwiązania.
- Wartości mogą być drukowane lub zwracane w dowolnej kolejności i w dowolnym rozsądnym, jednoznacznym formacie.
- Możesz nie deduplikować danych wyjściowych (np. lub są uważane za prawidłowe odpowiedzi dla powyższego przykładu).[ 1 , 5 , 1 , 5 ]
- To jest golf golfowy .
Przypadki testowe
M = [[6,1,5],[1,2,8],[9,8,5],[6,0,4]]
S = 9
Solution = {1,5}
M = [[7,2],[1,4]]
S = 7
Solution = {4}
M = [[12,5,2,3],[17,11,18,8]]
S = 43
Solution = {5}
M = [[7,12],[10,5],[0,13]]
S = 17
Solution = {0,13}
M = [[1,1,0,1],[2,0,0,2],[2,0,1,0]]
S = 1
Solution = {2}
M = [[57,8,33,84],[84,78,19,14],[43,14,81,30]]
S = 236
Solution = {19,43,57}
M = [[2,5,8],[3,5,8],[10,8,5],[10,6,7],[10,6,4]]
S = 49
Solution = {2,3,4,7}
M = [[5,4,0],[3,0,4],[8,2,2]]
S = 8
Solution = {0,2,3,4,5,8}
code-golf
array-manipulation
matrix
Arnauld
źródło
źródło
[[1,5],[1],[5],[]]
Dla pierwszego przypadku testowego) byłoby prawidłowym sposobem uzyskania danych wyjściowych?Odpowiedzi:
K (ngn / k) , 39 bajtów
Wypróbuj online!
dzięki @ Adám za to wyjaśnienie :
{
...}
funkcjax
jest K iy
jest S,/x
spłaszcz M (są to k kandydaci)a:
Przypisać doa
x{
…}/:
Zastosuj następującą funkcję do każdej z nich, używając M jako stałego lewego argumentu (x
):x=y
Macierz boolowska wskazująca, gdzie elementy M są równe bieżącemu kandydatowi k~
zaneguj tob:
przypisz to dob
&/
ORAZ redukcja (wyszukuje kolumny bez tego k )(
…)&\:
I to z każdym z poniższych:&/'b
ORAZ zmniejszenie każdego (wyszukuje wiersze bez tego k )x*
pomnóż M przez to+//
wielka sumay=
lista booleanów wskazująca gdzie S równa się tym sumom&
wskaźniki Truesa@
użyj tego, aby zindeksować elementy ( k kandydatów)źródło
APL (Dyalog Unicode) ,
353328 bajtów SBCS-7 dzięki ngn.
Anonimowy przyrostek lambda. Traktuje S jako lewy argument, a M jako prawy argument.
Wypróbuj online!
{
…}
„Dfn”⍺
i⍵
są odpowiednio lewym i prawym argumentem ( S i M ):⍵[
…]
Indeks M z następującymi współrzędnymi:⊂⍵
dołącz M, aby traktować go jako pojedynczy element⍵=
porównaj każdy element (tj. k kandydata) M z całym M(
…)¨
Zastosuj następującą funkcję ukrytą dla każdego:∧⌿
redukcja pionowa AND (wyszukuje kolumny bez tego k kandydata)…
∘.∧
Kartezjański boolowski produkt o:∧/
redukcja pozioma ORAZ (wyszukuje wiersze bez tego k kandydata)⍵×
pomnóż M przez tę maskę+/∘,
zsumuj spłaszczoną macierz⍺=
Wartość logiczna wskazująca, gdzie S równa się tym sumom⍸
wskaźniki tam, gdzie to prawdaźródło
{M[⍸⍺={+/,(∧⌿d)/M⌿⍨∧/d←M≠⍵}¨M←⍵]}
M
gdy nie została jeszcze utworzona?⍵
jak⍺
w wewnętrznej dfn jest dla mnie równie mylące{⍵[⍸⍺=+/¨(,⍵×∧/∘.∧∧⌿)¨⍵≠⊂⍵]}
R ,
7873 bajtówWypróbuj online!
Nie sortuje ani nie deduplikuje danych wyjściowych.
Kredyt dla J.Doe & Giuseppe za -5 bajtów.
źródło
Galaretka ,
2019171514 bajtówTo łącze monadyczne, które przyjmuje M jako argument i odczytuje S ze STDIN.
Wypróbuj online!
Jak to działa
źródło
Haskell ,
88868477 bajtówSprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Pyth ,
27 23 22 2120 bajtówZestaw testowy!
Nie deduplikuje.
Jak to działa?
źródło
Python 2 ,
114108 bajtówWypróbuj online!
źródło
Perl 6 ,
8074 bajtówWypróbuj online!
Wyjaśnienie
źródło
05AB1E , 21 bajtów
Wypróbuj online!
Dopiero po napisaniu tej odpowiedzi zobaczyłem Kevina . Uważam, że jest to zasadniczo inna kwestia, więc publikuję to osobno. Moja intuicja mówi, że optymalna liczba bajtów wynosi około 18, więc będę musiał to sprawdzić i zobaczyć, co jeszcze mogę zrobić. Przy obecnym kodzie nie można napisać zestawu testów, ale sam zweryfikowałem wszystkie przypadki testowe i wyniki są poprawne.
Algorytm kadrowania
~
+
Po czym obliczana jest suma wynikowej macierzy.
źródło
[[1,1,0,1],[2,0,0,2],[2,0,1,0]]
która przekręciła mnie na numer1
(co usuwa każdą kolumnę ..) Rzeczywiście miałem nieco poniżej 20 w głowie, jak również możliwość. Szkoda, że nie ma prawie żadnych wbudowanych macierzy, pomimo dodanych ostatnio produktów. Jeśli chodzi o1|2
(1 2~
w syntezatorze 05AB1E) wynikającą z 3, to dlatego, żelogical OR
zachowuje się jakbinary OR
wtedy, gdy w grę wchodzą liczby inne niż0
/1
(myślę / zakładam).+
Myślę, że można go zastąpić , więc mam nadzieję, że nie będzie z tym żadnych problemów :)05AB1E (starsza wersja) ,
2726 bajtówNie sortuje ani nie jednoczy wyniku.
Działa tylko w starszej wersji (na razie), ponieważ suma-każda wydaje się robić dziwne rzeczy, gdy część wewnętrznych list jest liczbami całkowitymi, a inne są listami.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Galaretka , 22 bajty
Wypróbuj online!
-6 bajtów przy użyciu ogólnego podejścia z odpowiedzi 05AB1E pana Xcodera.
źródło
Węgiel drzewny , 33 bajty
Wypróbuj online! Link jest do pełnej wersji kodu i zawiera deduplikację. Wyjaśnienie:
Spłaszcz pierwszą tablicę wejściową
q
na predefiniowanej liścieu
.Dla każdego elementu listy zsumuj tablicę, ale jeśli wiersz zawiera element, użyj
0
zamiast jego sumy, a podczas sumowania wierszy, które nie zawierają elementu, jeśli kolumna zawiera element, użyj0
zamiast wartości kolumny . Jest to nieco bardziej golfistyczne niż filtrowanie elementów, ponieważ węgiel drzewny nie może zsumować pustej listy.źródło
Czysty , 92 bajty
Wypróbuj online!
Wyjaśnił:
źródło
MATLAB - 80 bajtów
( Poprawione i ) Kompaktowane:
I w pełni rozwiniętej wersji:
Dzięki komentarzom podkreślam mój początkowy błąd. Pamiętaj, że ta wersja nie duplikuje danych wyjściowych.
Możliwe jest deduplikowanie danych wyjściowych za pomocą 5 dodatkowych bajtów:
źródło