Biorąc pod uwagę macierz całkowitą a
i nieujemną liczbę całkowitą i
, wyprowadzaj odwzorowanie, b
które odwzorowuje różne wartości w i
kolumnie th a
na wiersze, a
które mają tę wartość w i
kolumnie th.
Możesz założyć, że i
jest w zakresie półotwartym [0, num_cols(a))
(lub [1, num_cols(a)]
jeśli zdecydujesz się na użycie indeksów 1) i że wszystkie liczby całkowite mieszczą się w reprezentatywnym zakresie dla twojego języka. Dane wejściowe i wyjściowe można wykonać w dowolny rozsądny sposób, o ile spełnia on podstawowe wymagania wyzwania (tablica 2D -> odwzorowanie z int na tablice 2D ints). Dopóki mapowanie jest jasne i spójne, klucze nie muszą być dołączane do wyniku.
Przykłady
[[1]], 0 -> {1: [[1]]}
[[3, 4, 5], [1, 4, 2], [5, 5, 5], [7, 7, 7], [1, 5, 9]], 1 -> {4: [[3, 4, 5], [1, 4, 2]], 5: [[5, 5, 5], [1, 5, 9]], 7: [[7, 7, 7]]}
[[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [2, 3, 4, 5, 6], [8, 9, 100, 0, 2]], 4 -> {5: [[1, 2, 3, 4, 5]], 1: [[5, 4, 3, 2, 1]], 6: [[2, 3, 4, 5, 6]], 2: [[8, 9, 100, 0, 2]]}
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Odpowiedzi:
Oktawa , 24 bajty
Wypróbuj online!
Tworzy to anonimową funkcję, która zwraca macierz, której wiersze są zgodne z kryteriami. Tablice indeksów oktawowych o wartości 1, a nie zero, a wiersze macierzy są oddzielone znakiem a
;
.Matryce są tym, co Octave robi najlepiej - tak dobrze, że wyzwanie to można rozwiązać za pomocą czystej składni, bez wbudowanych funkcji.
Wyjaśnienie
źródło
Rubinowy , 26 bajtów
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 21 bajtów
1-indeksowany. Zwraca
Association
mapowanie.Wypróbuj online!
Jest to rzadki przypadek, w którym dłuższa funkcja (
Extract
) zmniejsza liczbę bajtów (krótsza toPart
lub[[ ... ]]
), ponieważExtract
może curry. Rezultatem jest to niezwykle zwięzłe, dwufunkcyjne rozwiązanie.Wyjaśnienie
Funkcja, która wyodrębnia
<second input>
element th.Pogrupuj
<first input>
w listy powiązane z odrębnymi kluczami<above function>[element]
.źródło
Haskell ,
6460 bajtówWypróbuj online!
źródło
Czysty , 40 bajtów
Wypróbuj online!
Funkcja lambda (
:: Int [[Int]] Int -> [[Int]]
), w której częściowe zastosowanie tylko dwóch pierwszych argumentów daje odwzorowanie trzeciego argumentu.źródło
J , 16 bajtów
-3 bajty dzięki FrownyFrog!
Wypróbuj online!
Wyjaśnienie:
Czasownik dynastyczny,
i
jako lewy argument ia
prawy argument .]
jest właściwym argumentem,a
{"1
znajduje liczby wi
kolumnie w każdym rzędzie</.
grupuje grupy z prawego argumentu, wybranego przez klucze, dostarczonego przez lewy~.@[
znajduje unikalne klucze;"0
łączy klucze z wybranymi grupamiźródło
;"0
zamiast,:
ratuje 3jq, 100 bajtów
używa obiektu jako danych wyjściowych, pobiera argument wiersza poleceń
$f
plus tablicę na standardowym wejściuodszyfrowane:
źródło
R ,
7955 bajtówWypróbuj online!
24 bajty wygolone przez @JayCe
źródło
cat(z)
przed wydrukiem, aby wydrukować również klucz (nie jestem pewien, czy jest to wymagane).Python 3 , 45 bajtów
Wypróbuj online!
Zwraca mapowanie reprezentowane jako anonimowa lambda.
źródło
Proton , 29 bajtów
Wypróbuj online!
-3 bajty dzięki Panu Xcoderowi korzystającemu z curry i
filter
(TBH jestem trochę zaskoczony, żefilter
tak naprawdę działał)źródło
filter
oszczędzają trzy bajty.JavaScript (Node.js) , 29 bajtów
Wypróbuj online!
Zaktualizowano teraz, gdy zdaję sobie sprawę z luźnych wymagań dotyczących wydajności. Wykorzystuje curry jako technikę gry w golfa, a także zwraca funkcję, która pobiera dane wejściowe
n
i mapuje je do odpowiednich tablic.źródło
Galaretka , 5 bajtów
Wypróbuj online!
Pomija klucze, ale powinno być jasne.
Argument 1: i + 1
Argument 2: a
źródło
Java 10,
13564 bajtówZwraca wartość
Function<Integer, List<int[]>>
akceptującą liczbę całkowitąn
, która zwraca Listę tablic (macierzy-wierszy), w którychi
wartości są równe podanejn
.Wypróbuj online.
Wyjaśnienie:
źródło