Wyzwanie
Dostałeś:
- niepusta, nieposortowana lista h dodatnich liczb całkowitych (stóg siana)
- dodatnia liczba całkowita n (igła)
Twoim zadaniem jest zwrócenie listy wszystkich unikatowych konkatenacji dziesiętnych permutacji h, których reprezentacja binarna zawiera reprezentację binarną n .
Przykłady
h = [1, 2, 3]
n = 65Jest tylko jedna pasująca konkatenacja, więc oczekiwany wynik to
[321]
.h = [1, 2, 3]
n = 7Tym razem istnieją trzy konkatenacje, które zawierają wzorzec binarny 111 . Oczekiwany wynik to
[123, 231, 312]
.h = [12, 3]
n = 7Dostępne są tylko dwie kombinacje i obie są zgodne. Oczekiwany wynik to
[123, 312]
.h = [1, 2, 2]
n = 15Jedyną zgodną konkatenacją jest 122 ( 1111010 w formacie binarnym, która zawiera 1111 ), więc oczekiwany wynik to
[122]
. Należy zauważyć, że dwie permutacje faktycznie prowadzić do 122 , ale są nie pozwolił na wyjście[122, 122]
.
Wyjaśnienia i zasady
- Możesz wziąć igłę jako liczbę całkowitą (
65
), ciąg reprezentujący wartość dziesiętną ("65"
) lub ciąg reprezentujący wartość binarną ("1000001"
). - Możesz wziąć stóg siana jako natywną tablicę / obiekt / zestaw liczb całkowitych (
[11,12,13]
), natywną tablicę / obiekt / zestaw ciągów reprezentujących wartości dziesiętne (["11","12","13"]
) lub rozdzielany ciąg wartości dziesiętnych ("11 12 13"
lub"11,12,13"
). Możesz również wybrać wariant, korzystając z tablic cyfr (np[[1,1],[1,2],[1,3]]
.). - Dane wyjściowe muszą być zgodne z jednym z formatów opisanych powyżej dla stogu siana, ale niekoniecznie tym samym.
- Nie powinieneś obsługiwać stogów siana, których najwyższa konkatenacja dziesiętna jest większa niż najwyższa reprezentowana liczba całkowita bez znaku w twoim języku.
- Poza tym twój kod powinien teoretycznie obsługiwać wszelkie dane wejściowe - zakładając, że ma wystarczająco dużo czasu i pamięci.
- To jest
SPARTA!code-golf , więc wygrywa najkrótsza odpowiedź w bajtach!
Przypadki testowe
Haystack | Needle | Output
---------------------+----------+-----------------------------------
[ 1, 2, 3 ] | 65 | [ 321 ]
[ 1, 2, 3 ] | 7 | [ 123, 231, 312 ]
[ 12, 3 ] | 7 | [ 123, 312 ]
[ 1, 2, 2 ] | 15 | [ 122 ]
[ 1, 2 ] | 7 | []
[ 12, 34, 56 ] | 21 | [ 125634, 341256, 345612, 563412 ]
[ 1, 2, 3, 4, 5 ] | 511 | [ 53241 ]
[ 1, 3, 5, 7, 9 ] | 593 | [ 37519, 51793, 75913, 75931 ]
[ 11, 12, 13, 14 ] | 12141311 | [ 12141311 ]
[ 1, 2, 1, 2, 1, 2 ] | 1015 | [ 221112 ]
code-golf
binary
permutations
Arnauld
źródło
źródło
set([(1, 2, 2)])
. Czy jest ważny, czy powinienem się go pozbyćset
?["12","3"]
i["1","23"]
są dwa różne stogi.Odpowiedzi:
05AB1E ,
108 bajtówBierze igłę w systemie binarnym, aby zaoszczędzić 1 bajt.
-2 bajty dzięki Emignie
Wypróbuj online!
źródło
Python 2, 90 bajtów
-3 bajty dzięki @ Gábor Fekete
Wypróbuj online
Pobiera jako tablicę wejściową ciągów, reprezentujących ints z siana i łańcucha, reprezentujących igłę w systemie binarnym
źródło
{...}
zamiastset(...)
oszczędza 3 bajty.H=['1'], N='0'
.Java 10,
320312305297292 bajtówDane wejściowe jako lista i ciąg binarny, dane wyjściowe jako ciągi w nowych wierszach.
Wyjaśnienie:
Wypróbuj tutaj.
źródło
l->n->{...
po,void p(...
ponieważ lambda jest odpowiedzią na monit, a funkcja wymaga konfiguracji, aby lambda działała. Konsensus w sprawie „wyrażeń funkcyjnych” jest czymś w rodzaju „ostatniego” wyrażenia przesłanego przez użytkownika może być „wyrażeniem funkcyjnym”, jeśli po zapisaniu w zmiennej spełnia wymagania odpowiedzi funkcji „IIRC. Ale to tylko kwestia formatowania i subiektywna.void
ponieważ była krótsza niż druga lambda i wielokrotność.apply
. Nie sprawdziłem tej odpowiedzi (tj.void p(List l,int k)
& 2xp(l,0)
versus(l,k)->
& 2xp.apply(l,0)
). Hmm .. drugi wydaje się w tym przypadku o 1 bajt krótszy. Ale mówisz, że zasady mówią, że możesz mieć tylko jedną metodę lambda? Wciąż trochę zdezorientowany, dlaczego to musi być ostatni. Osobiście zawsze zakładać moje odpowiedzi w następującej kolejności:imports; class-fields; main-method/lambda; other methods
.imports;helper methods;lambda
void p(List l,int k)
i 2xf(l,0);
porównaniuf=(l,p)->
ze 2xp.apply(l,0);
zamiast (co oznacza, że bieżąca wersja 1 bajt krótszy). Jeśli chodzi o kolejność, pozostanę przy tym, ponieważ zrobiłem to ze wszystkimi moimi odpowiedziami, a dla mnie osobiście sensowne jest rozpoczęcie od głównej metody w wyjaśnieniu, a następnie metody pomocniczej, jeśli są jakieś.f=(lambda)
w Javie, tojava.util.function.BiConsumer<List,Integer>f=(l,p)->{...}
Japt ,
1514131210 bajtówPobiera stóg siana jako tablicę liczb całkowitych, a igłę jako ciąg binarny. Zwraca tablicę ciągów liczb całkowitych.
Spróbuj
Wyjaśnienie
źródło
®¬nÃ
zapisuje bajt na mapowaniu. (Chciałbym również przejśćâ
do środka programu, aby pozbyć się drugiegoÃ
; nie zapisuje żadnych bajtów, ale jest nieco bardziej wydajny i wygląda nieco lepiej)â
Było szybkie ustalenie dołączona na końcu, kiedy Arnauld wskazał, że zapomniałem usunąć duplikaty z ostatecznej tablicy, ale masz rację, usuwanie duplikatów przed uruchomieniem filtr będzie bardziej efektywny.Rubin ,
6159 bajtówWypróbuj online!
Fajna funkcja dnia: nie wiedziałam, że mogę wyprowadzić binarną reprezentację ciągu zawierającego liczbę.
Przykład:
źródło
JavaScript (ES6), 140 bajtów
Bierze igłę jako ciąg binarny.
Pokaż fragment kodu
źródło
Brachylog , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica,
170156 bajtówWejście
wydajność
źródło
v[#2, 2]
.CJam,
23222119 bajtówJest to blok, który pobiera dane wejściowe
n h
ze stosu i pozostawia dane wyjściowe jako tablicę na stosie.Wyjaśnienie:
źródło
R, 114 bajtów
Korzysta z wielu pakietów.
pryr::f()
automatycznie tworzy funkcję, pobierającp
ciąg wzorca binarnego do wyszukania orazx
wektor z innymi danymi wejściowymi jako danymi wejściowymi.combinat::permn
tworzy wszystkie permutacjex
.R.utils::intToBin
to przyjemna i niewygodna wersja do konwersji liczb (lub reprezentacji znakowej liczby) na liczbę binarną, już wygodnie przechowywaną jako znak. Więc zastosuj to do wszystkich permutacji i wyślij je, jeśli ciąg binarnyp
jest zawarty w binarnej wersji konkatenacji. Wypisywany jest wyraźny znak nowej linii, ponieważ w przeciwnym razie wynik byłby12 56 3456 34 1234 56 1234 12 56
.plyr
'sl_ply
jest używane do zignorowania wypisywania listy zerowej, oprócz zwykłego wyjścia. Jeśli takie wyjście jest dozwolone:Następnie możemy zapisać kilka bajtów, używając
lapply
zamiast tego:108 bajtów:
Jeśli takie wyjście jest dozwolone:Następnie możemy to zrobić jeszcze krócej:
101 bajtów:
Nie dozwolony.źródło
Perl 6 , 69 bajtów
źródło