Zainspirowany (z wyjaśnieniem skradzione) to
tło
Załóżmy, że masz dwie listy A = [a_1, a_2, ..., a_n]
i B = [b_1, b_2, ..., b_n]
liczby całkowite. Mówimy, że A
jest potencjalnie podzielna przez, B
jeśli istnieje permutacja, B
która czyni a_i
podzielną przez b_i
wszystkich i
. Problem polega zatem na tym: czy można zmienić kolejność (tj. Permutację), B
aby wszyscy mogli ją a_i
podzielić ? Na przykład jeśli maszb_i
i
A = [6, 12, 8]
B = [3, 4, 6]
Wtedy będzie odpowiedź True
, jak B
można być zreorganizowane B = [3, 6, 4]
i wtedy mamy, że a_1 / b_1 = 2
, a_2 / b_2 = 2
i a_3 / b_3 = 2
, z których wszystkie są liczbami całkowitymi, więc A
jest potencjalnie podzielna przez B
.
Jako przykład, który powinien wypisać False
, możemy mieć:
A = [10, 12, 6, 5, 21, 25]
B = [2, 7, 5, 3, 12, 3]
Powodem jest False
to, że nie możemy zmienić kolejności, B
ponieważ 25 i 5 są w A
środku, ale jedynym dzielnikiem B
będzie 5, więc jeden zostanie pominięty.
Twoje zadanie
Twoim zadaniem jest oczywiście ustalenie, czy dwie listy (podane jako dane wejściowe) są potencjalnie podzielne. Możesz przyjmować dane wejściowe w dowolny zaakceptowany sposób, tak jak w przypadku danych wyjściowych.
Możliwe są duplikaty na listach, a jedynym ograniczeniem wielkości liczb całkowitych jest Twój język. Wszystkie liczby całkowite na obu listach będą większe niż 0, a obie listy będą jednakowego rozmiaru.
Podobnie jak w przypadku wszystkich problemów decyzyjnych, wartości wyjściowe muszą być 2 odrębnymi wartościami, które reprezentują prawda i fałsz.
To jest golf golfowy, więc wygrywa najkrótszy kod!
Przypadki testowe
Input, input => output
[6, 12, 8], [3, 4, 6] => True
[10, 5, 7], [1, 5, 100] => False
[14, 10053, 6, 9] [1,1,1,1] => True
[12] [7] => False
[0, 6, 19, 1, 3] [2, 3, 4, 5, 6] => undefined
źródło
Odpowiedzi:
Galaretka , 5 bajtów
Zwraca 0 dla wartości True , 1 dla wartości False .
Wypróbuj online!
Jak to działa
źródło
Łuska ,
765 bajtówZaoszczędź 2 bajty dzięki @Zgarb
Bierze argenty w odwrotnej kolejności i zwraca
1
zaTrue
i0
zaFalse
.Wypróbuj online!
Wyjaśnienie
źródło
VΠMz¦P
powinien działać przez 6 bajtów.Mz
może być‡
.▼▲
zamiast▲▼
. W każdym razie fajny pomysł!05AB1E , 7 bajtów
Dane wejściowe: pobiera listy B i A (w odwrotnej kolejności) Dane
wyjściowe: 1, gdy jest prawdziwe, 0 w przeciwnym razie
Wypróbuj online!
Objaśnienia:
źródło
MATL ,
876 bajtów1 bajt off przy użyciu pomysłu z odpowiedzi Jelnisa Jelly
Dane wejściowe są
B
zatemA
. Dane wyjściowe są0
podzielne lub1
nie.Wypróbuj online!
Wyjaśnienie
źródło
Mathematica, 52 bajty
dzięki @ngenisis za -5 bajtów
źródło
Cases
jest ogólnie krótszy:Cases[Permutations@#2,p_/;And@@IntegerQ/@(#/p)]!={}&
JavaScript (ES6),
6763 bajtówZwraca wartość logiczną.
Przypadki testowe
Pokaż fragment kodu
źródło
Haskell ,
7974686261 bajtówWypróbuj online!
Zapisano 1 bajt dzięki @nimi
źródło
f a=any((<1).sum.zipWith rem a).permutations
.Kombinacja R + ,
696658 bajtów-3 bajty dzięki Jarko Dubbeldam
kolejne -8 bajtów dzięki Jarko
co dziwne, R nie ma wbudowanego do generowania wszystkich permutacji. Zwraca wartość logiczną.
Dodatkowo, dzięki drugiej poprawce Jarko,
any
przymusza listę do wektoralogical
z ostrzeżeniem.Wypróbuj online! (skrzypce r)
źródło
Mathematica, 42 bajty
źródło
Galaretka , 7 bajtów
Wypróbuj online!
Złożoność czynnikowa długości listy.
źródło
any
wbudowanego? TILPyth - 11 bajtów
Pakiet testowy .
źródło
J, 27 bajtów
Wypróbuj online!
Pobiera pierwszą listę jako lewy argument, a drugą listę jako prawą.
źródło
(|"1~e.~0*[)i.@!@#A.]
CJam,
2017 bajtówWersja testowa
Funkcja, która przyjmuje tablicę B jako pierwszy argument, a tablicę A jako drugi argument. Zauważ, że w wersji testowej zmieniam kolejność na A, a następnie B.
źródło
JavaScript (ES6), 100 bajtów
Nieco nieefektywne; dodatkowy
&
przyspieszyłby to.źródło
PHP,
112 180178 bajtówMyślałem zbyt krótko.
funkcja anonimowa przyjmuje dwie tablice, zwraca
NULL
za fałsz i1
za prawdę.Zgłasza błąd, jeśli druga tablica zawiera
0
.Wypróbuj online .
źródło
$f([6,5],[3,5])
.C (gcc) , 191 bajtów
Wypróbuj online!
Stosowanie:
f(int size, int size, int *a, int *b)
zwraca,
1
jeśli podzielne, w0
przeciwnym razie. Zobacz przykładowe użycie w TIO.(Muszę robić permutacje w sposób trudny w C, więc nie jest to konkurencyjne)
źródło
Perl 6 , 38 bajtów
Właściwie odpowiedź @ nwellnhof wydaje się zbyt czytelna, dlatego postanowiłem podążać za dobrą tradycją Perla polegającą na pisaniu kodu :—).
1 bajt zapisany dzięki @nwellnhof.
Wypróbuj online!
Co robi: Jest to anonimowa funkcja, która pobiera dwa argumenty z listy. Kiedy mówimy
@^a
, mamy na myśli pierwszy, kiedy@^b
to drugi.(@^a,)
to lista zawierająca listę@^a
.@^b.permutations
jest listą wszystkich permutacji@^b
. Operator „XZ %%” tworzy wszystkie możliwe pary tej jednej listy po lewej stronie i wszystkie permutacje po prawej stronie oraz używa operatora „Z %%” na nich, który jest standardową operacją „zip” przy użyciu operatora podzielności %%.max
Operator daje największy element listy (w tym przypadku jest to lista, która ma większośćTrue
w niej jest). Następnie redukujemy go za pomocą logicznego operatora AND, aby sprawdzić, czy wszystkie elementy tej „najbardziej prawdziwej” listy są prawdziwe, i to jest wynik. To prawie dokładna kopia tego, co napisał @nwellnhof, po prostu używając niejasnych operatorów, aby zgolić bajty.źródło
permutations
, że jest zdecydowanie zbyt czytelny;)[&&]
sięmin
zapisać kolejny bajt.XZ%%
{all (@^a,)Z%%@^b.permutations.any}
było możliweBrachylog , 6 bajtów
Wypróbuj online!
Predykat się powiedzie, jeśli dwie listy są potencjalnie podzielne, a jeśli nie, to nie powiedzie się.
źródło
Python 2 , 92 bajty
Wypróbuj online!
Twoja podstawowa implementacja.
źródło
Python 2 , 90 bajtów
Wypróbuj online!
źródło
Rubinowy , 56 bajtów
Wypróbuj online!
Dość proste, wykorzystuje fakt, który
permutation
istnieje.źródło
Scala, 60 bajtów
Gra w golfa:
Nie golfowany:
źródło
Japt ,
1211 bajtówWyjścia
true
lubfalse
.Sprawdź to
Wyjaśnienie
Niejawny wejście matryc
U
iV
(A
iB
, odpowiednio)Wygeneruj tablicę wszystkich permutacji
V
.Sprawdź, czy którykolwiek z elementów (pod-tablic) zwraca wartość true.
Sprawdź, czy każdy element w bieżącej pod-macierzy zwraca wartość true po przejściu przez następującą funkcję,
X
będąc bieżącym elementem iY
bieżącym indeksem.Pobierz element w
U
indeksieY
.Sprawdź, czy można go podzielić
X
.źródło