Definicja
Wektor zawierający n elementów mówi się majorize lub dominują wektor b z n elementów IFF dla wszystkich wartości k , tak że 1 ≤ k ≤ n suma pierwszego elementu w ↓ przez k ty element o ↓ jest większa lub równa sumie elementów od b do ↓ od pierwszego do k , gdzie v ↓ reprezentuje wektor v posortowany w porządku malejącym.
To jest,
a_1 >= b_1
a_1 + a_2 >= b_1 + b_2
a_1 + a_2 + a_3 >= b_1 + b_2 + b_3
...
a_1 + a_2 + ... + a_n-1 >= b_1 + b_2 + ... + b_n-1
a_1 + a_2 + ... + a_n-1 + a_n >= b_1 + b_2 + ... + b_n-1 + b_n
gdzie i b są sortowane w kolejności malejącej.
Dla celów tego wyzwania, będziemy używać niewielki uogólnienie majorization: powiemy lista jest nieposortowane majorization innego jeśli wszystkie powyższe nierówności są prawdziwe bez sortowania i b . (Jest to oczywiście matematycznie bezużyteczne, ale sprawia, że wyzwanie jest ciekawsze.)
Wyzwanie
Biorąc pod uwagę wprowadzenie dwóch odrębnych list a i b liczb całkowitych z zakresu od 0 do 255 (włącznie), obie listy o długości n ≥ 1, określają, czy pierwsza lista nieposortowana - główna druga ( a > b ), druga nieposortowana - majorizes pierwszy ( b > a ) lub żaden.
Opcjonalnie możesz wymagać podania długości dwóch list jako danych wejściowych. Dane wyjściowe zawsze muszą mieć jedną z trzech odrębnych wartości, ale same wartości mogą być dowolne (proszę określić, które wartości reprezentują a > b , b > a , i żadne z nich w odpowiedzi).
Przypadki testowe dla a > b :
[255] [254]
[3,2,1] [3,1,2]
[6,1,5,2,7] [2,5,4,3,7]
Przypadki testowe dla b > a :
[9,1] [10,0]
[6,5,4] [7,6,5]
[0,1,1,2,1,2] [0,1,2,1,2,1]
Przypadki testowe bez specjalizacji:
[200,100] [150,250]
[3,1,4] [2,3,3]
[9,9,9,9,9,0] [8,8,8,8,8,9]
źródło
Odpowiedzi:
Galaretka ,
1086 bajtów2 bajty dzięki @orlp.
2 bajty dzięki @Dennis.
Wypróbuj online!
1
dlaa>b
,-1
dlaa<b
,0
bez specjalizacji.Gdyby oba były obecne
1
i-1
obecne (niektóre skumulowane kwoty są większe, niektóre mniejsze), to przyniosłoby to ostatni krok0
.źródło
ngn / apl, 11 bajtów
Na podstawie metody zawartej w odpowiedzi @Leaky Nun .
Biorąc pod uwagę dwie listy A i B , znajdź różnicę pomiędzy każdym elementwise wartości, albo niech C = A - B . Następnie znajdź skumulowane sumy C i weź znak każdego z nich. Wynik będzie sumą unikalnych wartości znakowych. Jeśli A > B , wynik wynosi 1, jeśli A < B wynik wynosi -1, a jeśli nie ma większości, wynik wynosi 0.
Wypróbuj online.
źródło
Julia, 30 bajtów
Zaoszczędź 4 bajty dzięki @Dennis!
źródło
a^b=sum(sign(cumsum(a-b))∪0)
oszczędza kilka bajtów.Python 3.5, 85 bajtów:
Anonimowa funkcja lambda. Zwraca
[True,False]
jeślia>b
,[False,True]
jeślib>a
lub[False,False]
żadne z nich nie jest prawdziwe. Mam nadzieję, że to w porządku.Wypróbuj online! (Ideone)
źródło
Cheddar ,
118114 bajtówZasadniczo port mojej odpowiedzi Jelly .
Fakt, że funkcja wewnątrz zakresu jest zepsuta, powodując niemożność zdefiniowania zmiennej wewnątrz funkcji, oznacza, że musiałbym to zrobić
[xxx].map(i->yyy)[0]
zamiastvar a=xxx;yyy
.Pobiera transponowaną tablicę jako dane wejściowe.
źródło
Python 2, 73 bajty
Przetestuj na Ideone .
źródło
Rubin,
7259 bajtówZwraca
1
zaa>b
,-1
zaa<b
,0
za żadne.-13 bajtów od przekreślenia sumy sztuczki @Dennis w odpowiedzi na Python
Wypróbuj online!
źródło
Python 2, 59 bajtów
Wyjścia:
1
dlaa>b
2
dlab>a
3
za żadneIteruje po liście, śledząc bieżącą sumę
t
różnic. Liczbas
śledzi znaki, które były postrzegane jako liczba dwubitowar
: dodatnie w prawym bicie i ujemne w lewym bicie. Dzieje się tak przezcmp(t,0)%3
, co dajet>0
→+1
→ 1t==0
→0
→ 0t<0
→-1
→ 2Biorąc
or
to i bieżącą wartośćr
aktualizacji, aktualizujemy 2 bityor
, przy czym wartości zerowe nie mają wpływu.źródło
JavaScript (przy użyciu zewnętrznej biblioteki-Enumerable) (123 bajty)
Link do lib: https://github.com/mvegh1/Enumerable
Objaśnienie kodu: Przekaż wektor aib, utwórz funkcję globalną z. z rozpocznie się od utworzenia tablicy liczb całkowitych od 1, dla zliczenia długości a. Wszystkie sprawdzą, czy predykat jest prawdziwy dla każdego członka należącego do. Ten predykat mówi, aby załadować jako wyliczalny, policzyć ten wyliczalny ekwiwalent bieżącej wartości iteracji tego zakresu, który stworzyliśmy, i zsumować. Sprawdź, czy> = ta sama logika z tablicy „b”. Tak więc, wywołujemy z w kolejności (a, b) i porównujemy to z kolejnością (b, a) ... jeśli równa się, zwracamy 0, aby oznaczać, że nie ma znacznika. W przeciwnym razie zwracamy 1, jeśli (a, b) jest prawdą, w przeciwnym razie -1
źródło