Wyzwanie
Biorąc pod uwagę listę dodatnich liczb całkowitych, sprawdź, czy istnieje permutacja, w której biorąc do jednego bitu z każdej liczby całkowitej, można utworzyć liczbę binarną składającą się ze wszystkich 1
s.
Liczba bitów w wynikowej liczbie binarnej jest równa najwyższemu MSB na liście liczb całkowitych.
Wydajność
Twój kod musi generować lub zwracać wartość true / falsey wskazującą, czy istnieje taka permutacja.
Przykłady
Prawda:
Z listą [4, 5, 2]
i jej reprezentacją binarną [100, 101, 10]
możemy użyć odpowiednio trzeciego, pierwszego i drugiego bitu, aby utworzyć 111
:
4 -> 100 -> 100 -> 1
5 -> 101 -> 101 -> 1
2 -> 010 -> 010 -> 1
Result 111
Dzięki tej liście [3, 3, 3]
wszystkie liczby mają ustawiony zarówno pierwszy, jak i drugi bit jako 1
, więc możemy wybrać nasz numer z rezerwowym:
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 ->
Result 11
Falsey:
Na liście [4, 6, 2]
żaden z numerów nie ma ustawionego pierwszego bitu jako 1
, więc nie można utworzyć liczby binarnej:
4 -> 100
6 -> 110
2 -> 010
W przypadku listy [1, 7, 1]
tylko jedna z liczb ma ustawiony drugi i trzeci bit jako 1
, a liczby nie można utworzyć:
1 -> 001
7 -> 111
1 -> 001
Oczywiście, jeśli maksymalna liczba ustawionych bitów przekracza liczbę całkowitą, liczby wynikowej nigdy nie można utworzyć.
Przypadki testowe
Prawda:
[1]
[1, 2]
[3, 3]
[3, 3, 3]
[4, 5, 2]
[1, 1, 1, 1]
[15, 15, 15, 15]
[52, 114, 61, 19, 73, 54, 83, 29]
[231, 92, 39, 210, 187, 101, 78, 39]
Falsey:
[2]
[2, 2]
[4, 6, 2]
[1, 7, 1]
[15, 15, 15]
[1, 15, 3, 1]
[13, 83, 86, 29, 8, 87, 26, 21]
[154, 19, 141, 28, 27, 6, 18, 137]
Zasady
Standardowe luki są zabronione. Ponieważ jest to golf golfowy , wygrywa najkrótszy wpis!
Odpowiedzi:
Galaretka , 11 bajtów
Wypróbuj online!
Jak to działa
źródło
J , 30 bajtów
Wszystkie podziękowania należą się mojemu koledze Marshallowi .
Nienazwana funkcja ukrytego przedrostka.
Wypróbuj online!
(
@
jest kompozycją funkcji)#:
anty-2|:
transponować(
…)^:2
Zastosuj dwukrotnie następującą funkcję:1-
Boolean negate>./
maksymalny@
z$
długości osi{.
weź (wypełnienie zerami) z|:
transponowany argument+./ .*
„szalona determinująca magia” *[:
Don't hook (no-op - służy do skomponowania poprzedniej części z resztą)* Słowami Marshalla.
źródło
JavaScript (ES6),
104...9383 bajtyZwraca
0
lub1
.Przypadki testowe
Pokaż fragment kodu
metoda
Biorąc pod uwagę tablicę wejściową A = [a 0 , a 1 , ..., a N-1 ] , szukamy permutacji [a p [0] , a p [1] , ..., a p [N- 1] ] z a i liczba całkowita x ≤ N taki, że:
Sformatowane i skomentowane
źródło
Łuska , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E ,
232220 bajtów-1 bajt dzięki Mr.Xcoder
Prawda: 1, fałsz: 0
Wypróbuj online!
Objaśnienia:
źródło
Wolfram Language (Mathematica) , 65 bajtów
Wypróbuj online!
Wyjaśnienie
Zaczynamy od konwersji wszystkich danych wejściowych na listy binarne.
Następnie wypełniamy wszystkie te listy zerami po lewej stronie, aby tablica była prostokątna. Wynik zostanie zapisany
n
na później.Tak, brutalna siła, zdobądźmy wszystkie możliwe kombinacje wejścia.
Pobiera to ślad dla każdej permutacji, tj. Sumę elementów ukośnych w permutacji. Innymi słowy, dodajemy MSB od pierwszego numeru, następny do MSB od drugiego numeru i tak dalej. Jeśli permutacja jest poprawny, wszystkie z nich będzie 1 i nie będzie tylu 1 s jak największa liczba wejściowa jest szeroki.
Otrzymujemy maksymalny ślad, ponieważ ślad nigdy nie może być większy niż ślad prawidłowej permutacji.
Prawa strona jest po prostu golfową wersją
Length @ First @ n
, tzn. Dostaje szerokość prostokątnego układu, a zatem szerokość największej liczby wejściowej. Chcemy mieć pewność, że ślad niektórych permutacji jest równy.źródło
PHP,
255243160 bajtów-12 bajtów,
dzięki Tytusowi wyjęto sortowanie -83 bajtów (!)
Wypróbuj online!
Drukuje 1 za prawdę, nic za falsey.
Oryginalna wersja bez golfa:
źródło
function f($a,$v=NULL,$b=[]){($v=$v??(1<<log(max($a),2)+1)-1)||die("1");if($p=array_pop($a))while($p-=$i)($b[$i=1<<log($p,2)]|$v<$i)||f($a,$v-$i,[$i=>1]+$b);}
true
:die("1")
→die(!0)
.Lua 5.2, 85 bajtów
To ustawia x na funkcję, która akceptuje zmienną liczbę danych wejściowych (oczekiwanych 32-bitowych liczb całkowitych) i wypisuje na standardowe wyjście „true” lub „false”.
Stosowanie:
źródło
[1,15,3,1]
wydaje się wracaćtrue
zamiastfalse
na przykład. Oto twój kod internetowy kompilator TIO. Pozostałe dwa przypadki testowe, które zawiodły, to[1,7,1]
i[15,15,15]
. Wszystkie pozostałe przypadki testowe generują prawidłowe wyniki.PHP, 121 bajtów
Wypróbuj online .
awaria
źródło
J , 49 bajtów
Czy muszę liczyć także „g =.”? Jestem gotów to dodać.
Tym razem długi, wyraźny czasownik. Próbowałem milczącego dla tego samego algorytmu, ale okazało się, że jest on jeszcze dłuższy i brzydszy niż ten. Daleko od rozwiązania Adáma.
Objaśnienie: (y jest właściwym argumentem funkcji)
Wypróbuj online!
źródło
Python 3 ,
126120 bajtówZapisano 6 bajtów dzięki Mr. Xcoder
Wypróbuj online!
źródło
[0]+[...]
Czy to nie ma sensu, prawda?any(g(x[:i]+x[i+1:],n-1)for i in range(len(x))if x[i]&2**n)
powinno wystarczyć.Galaretka , 17 bajtów
Monadyczny link pobierający listę liczb i zwracający
1
(prawda) lub0
(falsey).Wypróbuj online!
Limit czasu dla TIO będzie najdłuższy z każdego z przypadków testowych.
W jaki sposób?
źródło
R ,
247 bajtów221 bajtówWypróbuj online!
Wersja bez golfa
Uświadomiłem sobie, że sprawdzenie
drop=F
argumentów nie było konieczne . Usunięto także trochę nieznośnych białych znaków.źródło
PHP, 152 bajty
Nie drukuje nic za fałsz, 1 za prawda.
Nie golfowany:
źródło
Galaretka , 17 bajtów
Zestaw testowy.
źródło
C, 79 bajtów
źródło
try it online
link.[1, 7, 1]
powinien zwrócić wartość false, a[52, 114, 61, 19, 73, 54, 83, 29]
powinien zwrócić true