W przypadku jakichkolwiek wątpliwości: Nan = Non-numeric datatype
na potrzeby tego wyzwania.
Napisz program lub funkcję, która pobiera macierz / tablicę jako dane wejściowe, a także listę indeksów kolumn.
Wyzwanie polega na usunięciu wierszy, w których znajdują się wszystkie elementy w określonych kolumnach Nan
. Nie ma znaczenia, czy inne elementy w wierszu są numeryczne, czy nie. Poniższe przykłady, mam nadzieję, wyjaśnią to (ma jeden indeks):
Input array:
16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1
Input column index: [1 3]
Output array:
16 NaN 3 13
5 11 NaN 8
4 14 -15 1
----
Input array:
16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1
Input column index: 3
Output array =
16 NaN 3 13
4 14 -15 1
----
Input array:
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
Input column index: 1 2 4
Output array:
[]
Zasady i wyjaśnienia:
- Matryca zawsze będzie niepusta
- Wartości liczbowe będą skończone, ale niekoniecznie liczby całkowite lub wartości dodatnie
- Wektor indeksu kolumny może być pusty (w którym to przypadku wiersze nie zostaną usunięte)
- Indeks kolumny nigdy nie będzie miał wartości przekraczających wymiary macierzy
- Możesz założyć, że na liście indeksów kolumn nie będzie duplikatów
- Możesz wybrać, czy chcesz używać wartości zerowych czy indeksowanych (proszę określić)
- Możesz pobrać dane wejściowe w dowolnym dogodnym formacie
- Tablica jako lista list jest OK. Indeksy kolumn mogą być osobnymi argumentami
ans =
i podobne są akceptowane w wyniku- Masz swobodę wyboru, jakiego typu nieliczbowego typu danych chcesz użyć
- Wykonanie operacji arytmetycznych na tym typie danych lub konwersja go na liczbę skończoną przy użyciu funkcji takich jak np
float(x)
. Powinno być niemożliwe .
- Wykonanie operacji arytmetycznych na tym typie danych lub konwersja go na liczbę skończoną przy użyciu funkcji takich jak np
To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach.
źródło
J
zvz
iK
zQ
.z
jest inicjowany do wprowadzania,Q
do oceny danych wejściowych.?KEfnmklKm@TdKQQ
puste listy są fałszywe w Pyth, a instrukcje przypisania zwracają przypisaną wartość, co oszczędza niektóre bajty. Mam nadzieję, że lubisz grać w golfa w Pyth! :)L
->fnks@LTQE
JavaScript (ES6),
4846 bajtówWyjaśnienie
Oczekuje, że tablica wierszy będzie tablicami, a tablica liczb o indeksie 0 będzie sprawdzana dla kolumn. Zwraca tablicę tablic.
Prosto
filter
isome
. Sprawdza zaNaN
pomocąn < Infinity
(true
dla liczb skończonych,false
dlaNaN
s).źródło
CJam, 18 bajtów
Nienazwany blok (funkcja) oczekujący macierzy i liczonych od zera indeksów kolumn na stosie (macierz na górze), który pozostawia filtrowaną macierz na stosie. Używam pustej tablicy
""
jako wartości nienumerycznej.Sprawdź to tutaj.
Wyjaśnienie
źródło
The column index vector can be empty (in which case no rows will be removed)
""
” Czy chodziło Ci o „pusty ciąg”?[]
i""
są identyczne i reprezentacja jest kanoniczna""
(np to, co dostajesz, kiedy stringify pustą tablicę).APL, 19 bajtów
Lewy argument powinien być listą indeksów (i musi być listą, a nie skalarem), prawy argument to macierz. APL ma dwa typy danych, liczby i znaki, więc odfiltrowuje typy znaków.
Testy:
Wyjaśnienie:
⍵[;⍺]
: wybierz dane kolumny z macierzy0↑¨
: weź pierwsze0
elementy od początku każdego elementu⍬∘≡¨
: porównaj z numeryczną pustą listą∨/
: sprawdź, w którym wierszu pasuje co najmniej jeden element⍵⌿⍨
: wybierz te wiersze z matrycyźródło
MATLAB,
3228 bajtówOdpowiem raz na moje własne pytanie. Najlepsze, co mogę zrobić w MATLAB, to 28 bajtów.
Miałem nadzieję, że uniknę ich użyciaall
iisnan
jakoś, ale jeszcze nie znalazłem sposobu.Test:
Jest to anonimowa anonimowa funkcja, która przyjmuje macierz wejściową jako pierwszą zmienną wejściową, a listę indeksów kolumn jako drugą.
W MATLAB,
NaN < Inf
ocenia na false. Można założyć, że wszystkie wartości są skończone, dlatego sprawdzenie, czy wartości są mniejsze niż,inf
jest równoważne sprawdzeniu, czy są one nienumeryczne.any(...,2)
sprawdza, czy istnieją jakieś prawdziwe wartości wzdłuż drugiego wymiaru (wierszy). W takim przypadku wiersze zostaną zwrócone.Stara wersja:
isnan(A(:,c))
zwraca tablicę z wartościami logicznymi dla określonych kolumn.~all(isnan(A(:,c)),2)
sprawdza, czy wszystkie wartości wzdłuż drugiego wymiaru (wierszy) są nienumeryczne, i neguje je. W wyniku tego powstaje wektor boolowski z pozycjami, które chcemy zachować.A(~all(isnan(A(:,c)),2),:)
używa indeksowania logicznego, aby wyodrębnić całe wierszeA
.Poniższe 24-bajtowe rozwiązanie działałoby, gdyby zagwarantowano, że wartości będą niezerowe:
źródło
Rubinowy, 48 bajtów
Dane wejściowe oparte są na indeksach 0 1 .
Właściwie dość oczywiste.
select
elementy z tablicy, gdzieany?
indeksymap
ped nad wierszem sąFixnum
s.Przykładowy przebieg:
1: W końcu poprawnie napisałem to słowo przy pierwszej próbie! \ o /
źródło
K5, 15 bajtów
Wykorzystuje to kolumny z indeksowaniem 0 i naturalną reprezentację macierzy K list:
Indeksuj w macierzy (
x@
) wiersze, w których (&
) nie wszystkie z nich (~&/'
) mają wartość null (^
).W akcji:
źródło
MATL , 15
16bajtówNaN
jest reprezentowany na wejściu jakoN
. Indeksowanie jest oparte na 1. Na przykład w pierwszym przypadku testowym wejściem jestWypróbuj online!
Wyjaśnienie
źródło
R, 49 bajtów
Dane wejściowe są oparte na 1. Funkcja przyjmuje macierz (
m
) i wektor indeksów kolumn (j
), których może brakować.Dwa przypadki testowe:
źródło
Lua, 148 bajtów
Funkcja, która pobiera macierz i tablicę jako dane wejściowe i wyprowadza macierz z odpowiednimi wierszami w
nil
. Ponieważ tablice są dość takie same jak tablice C, nihilowanie jest podobne dofree()
tego, ponieważ śmieciarz nie jest daleko.Tablice są w indeksie 1 indeksowane w Lua i używam łańcucha
"NaN"
jako elementu niebędącego nomerem.Możesz wypróbować Lua online i skopiować / wkleić następujący przykładowy kod, aby wypróbować to zgłoszenie:
źródło
Mathematica,
52514946 bajtówDane wejściowe to [macierz jako lista list, wektor kolumn]
źródło
Haskell, 39 bajtów
Korzysta z indeksów opartych na 0. Przykład użycia (używam
sqrt(-1)
do tworzeniaNaN
s):Jest to po prostu prosty filtr, jak widać w innych odpowiedziach poprzez zrozumienie listy. Szczególny przypadek pustej listy indeksów jest wychwytywany osobno.
źródło