quintopia opublikowała tutaj wyzwanie obliczenia współczynników wielomianowych (stamtąd tekst tutaj jest kopiowany). Istnieje zabawny algorytm do obliczania współczynników wielomianowych mod 2.
Biorąc pod uwagę listę liczb, k 1 , k 2 , ..., k m , wyprowadzamy pozostałość współczynnika wielomianowego:
ograniczonej mod 2. Poniższy algorytm robi to skutecznie: dla każdego k I , obliczyć binarny ekspansję k ja , to znaczy znaleźć się ij tak, że każda ij jest albo 1 albo 0 i
Jeżeli istnieje j, tak że RJ = a sj = 1 dla R ≠ s, asocjowany mod 2 wielomianu współczynnik wynosi 0, inaczej mod 2 wielomianu współczynnik wynosi 1.
Zadanie
Napisz program lub funkcję, która pobierze m liczb, k 1 , k 2 , ..., k m , i wyświetli lub zwróci odpowiedni współczynnik wielomianowy. W razie potrzeby twój program może opcjonalnie potraktować m jako dodatkowy argument.
Liczby te mogą być wprowadzane w dowolnym formacie, który nam się podoba, na przykład pogrupowane w listy lub zakodowane jako jednoargumentowe lub cokolwiek innego, o ile kod oblicza rzeczywiste obliczenie współczynnika wielomianowego, a nie proces kodowania.
Wyjściem może być dowolna prawdziwa wartość, jeśli współczynnik wielomianowy jest nieparzysty, i dowolna wartość falsey, jeśli współczynnik wielomianowy jest parzysty.
Wbudowane funkcje obliczania współczynnika wielomianowego są niedozwolone.
Obowiązują standardowe luki.
Punktacja
Oto kod golfowy: wygrywa najkrótsze rozwiązanie w bajtach.
Przykłady:
Aby znaleźć wielomianowy współczynnik 7, 16 i 1000, binarnie rozwijamy każdy z nich:
Ponieważ żadna kolumna nie ma więcej niż jednego 1, współczynnik wielomianowy jest nieparzysty i dlatego powinniśmy otrzymać coś prawdziwego.
Aby znaleźć wielomianowy współczynnik 7, 16 i 76, binarnie rozwijamy każdy z nich:
Ponieważ zarówno 76, jak i 7 mają binarną ekspansję 4, współczynnik wielomianowy jest parzysty, więc otrzymujemy wartość falsey.
Przypadki testowe:
Input: [2, 0, 1]
Output: Truthy
Input: [5,4,3,2,1]
Output: Falsey
Input: [1,2,4,8,16]
Output: Truthy
Input: [7,16,76]
Output: Falsey
Input: [7,16,1000]
Output: Truthy
Input: [545, 1044, 266, 2240]
Output: Truthy
Input: [1282, 2068, 137, 584]
Output: Falsey
Input: [274728976, 546308480, 67272744, 135004166, 16790592, 33636865]
Output: Truthy
Input: [134285315, 33849872, 553780288, 544928, 4202764, 345243648]
Output: Falsey
źródło
==
dla równości mogłoby uratować bajt, gdyby prawda i Falsey mogły zostać odrzucone.Odpowiedzi:
Galaretka , 4 bajty
Wypróbuj online!
Sprawdź, czy suma jest równa bit-suma (tj
a+b+c == a|b|c
.).źródło
Python
32,554342 bajtów-12 bajtów od pana Xcodera
-1 bajt z Rod
Wypróbuj online!
Objaśnienie: Sprawdza, czy suma liczb jest równa bitowej lub liczb.
źródło
lambda l:sum(l)==eval("|".join(map(str,l)))
Python 2 , 37 bajtów
Wypróbuj online!
Kolejny port algorytmu pizzapants184 ...
źródło
Czysty , 38 bajtów
Wypróbuj online!
Jeszcze inny port.
źródło
Japt, 6 bajtów
Kolejny port rozwiązań pizzapants184 i Leaky Nun.
Sprawdź to
źródło
JavaScript (ES6),
373534 bajtówZapisano 2 bajty dzięki @ Mr.Xcoder
Zapisano 1 bajt dzięki @ETHproductions
Porównanie sumy z bitowym OR (jak zrobili to pizzapants184 i Leaky Nun ) jest o
134 bajty krótsze niż moje początkowe podejście:Przypadki testowe
Pokaż fragment kodu
Alt. wersja, 38 bajtów
Przypadki testowe
Pokaż fragment kodu
źródło
a=>(q=c=>eval(a.join(c)))`|`==q`+`;
Haskell , 38 bajtów
(==).sum<*>foldl1 xor
jest anonimową funkcją zwracającąBool
. Użyj jako((==).sum<*>foldl1 xor) [2,0,1]
.Wypróbuj online!
Prawie ta sama sztuczka pizzapants184 i Leaky Nun, której wszyscy używają, z wyjątkiem tego, że przy nazwach operatorów Haskell oszczędza jeden bajt do użycia (bitowy)
xor
zamiast(.|.)
(bitowy lub).(==).sum<*>foldl1 xor
jest pozbawioną punktów wersją\l->sum l==foldl1 xor l
.źródło
Java 8, 53 bajty
Port odpowiedzi galaretki @LeakyNun .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
Pyth , 6 bajtów
Pakiet testowy.
źródło
Łuska , 5 bajtów
Wypróbuj online!
źródło
Perl 6 , 15 bajtów
Sprawdź to
Rozszerzony:
źródło
Czerwony , 78 bajtów
Jak to działa:
Nie golfowany:
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 15 bajtów
Wypróbuj online!
źródło
Partia, 73 bajty
Wyjścia
1
dla prawdy, nic dla fałszu. Kolejny oczywisty port pizzapantów184 / algorytm Dziurawej Zakonnicy.źródło
J , 10 bajtów
Jeszcze jeden port rozwiązań pizzapantów184 i Dziurawej Zakonnicy.
Jak to działa?
+/.&.#:
- zamień liczby na binarne, zastosuj bitowe lub potęgi dwóch i przekonwertuj z powrotem z binarnego na dziesiętny+/
- zmniejszyć wkład przez dodanie=
- czy powyższe są równe?Wypróbuj online!
Prosta alternatywa
J , 12 bajtów
Jak to działa?
+/@#:
- zamień każdą liczbę na binarną i znajdź sumę każdej potęgi 2>./
- znajdź maksimum2>
- czy to mniej niż 2? -> prawdaWypróbuj online!
źródło
Trójkątność , 31 bajtów
Wypróbuj online!
Alternatywne rozwiązanie, 31 bajtów
Wypróbuj online!
źródło