Zrzeczenie się
To pytanie nie jest duplikatem tego pytania . Nie liczę konkretnych cyfr, ponieważ mamy już ustawione w parametrach początkowych. To pytanie koncentruje się na liczbach dziesiętnych, które można zbudować z ciągów binarnych na podstawie podanych cyfr.
Wyzwanie
Biorąc pod uwagę dwie liczby całkowite X
i Y
, odpowiednio, reprezentujące liczbę zer ( 0
) i jedynek ( 1
), oblicz wszystkie możliwe ekwiwalenty dziesiętne, które można określić na podstawie tworzenia ciągów binarnych przy użyciu tylko podanych zer i jedynek, i wyświetl je jako dane wyjściowe.
Przykład 1:
Wejście: 0 1
Wynik: 1
Objaśnienie: Tylko jeden 1
do rozliczenia, który można przekształcić tylko w jeden sposób.
Przykład 2:
Wejście: 1 1
Wynik: 1,2
Objaśnienie: 01
konwertuje na 1, 10
konwertuje na 2.
Przykład 3:
Wejście: 3 2
Wynik: 3,5,6,9,10,12,17,18,20,24
Objaśnienie: Trzy 0
i dwa 1
s tworzą 00011
(3), 00101
(5), 00110
(6), 01001
(9), 01010
(10), 01100
(12), 10001
(17), 10010
(18), 10100
(20), 11000
(24)
Ograniczenia i zasady
- Spodziewam się, że twój kod będzie działał tylko tam
0 < X + Y <= 16
, gdzie maksymalna liczba w danych wyjściowych może wystąpić tylko z 161
s, tj. Parametrów0
i16
. - W wyniku powyższego ograniczenia zakres liczb, których oczekujemy na wyjściu, pochodzi z
0
i65535
. - Akceptuję funkcje lub kod, tak długo, jak Wynikiem jest, czy to będzie lista oddzielonych przecinkami, tablica, lista wyprowadzane do STDOUT, itd. Jedynym kryterium Muszę podkreślić o wyjście jest to, że musi być sortowane.
- To jest kod golfowy, minimalne bajty otrzymają maksymalną sławę.
- Nie będziemy tolerować głupich luk
0 0
?0 <= X + Y <= 16
tak, ponieważ0 0
byłoby uważane za prawidłowe dane wejściowe, które spełniają tę zasadę.0 0
? Liczba 0 może być reprezentowana przez zero, jeden lub więcej zer.Odpowiedzi:
Galaretka , 8 bajtów
Wypróbuj online!
Jak to działa
źródło
Python, 60 bajtów
Przetestuj na Ideone .
Jak to działa
Wszystkie liczby dodatnie, które mogą być reprezentowane binarnie za pomocą x zer i y , są wyraźnie mniejsze niż 2 x + y , ponieważ kanoniczna reprezentacja binarna tych ostatnich ma x + y + 1 cyfr.
Lambda po prostu iteruje po liczbach całkowitych w [0, 2 x + y ) i utrzymuje wszystkie liczby całkowite n w tym zakresie, które mają y . Ponieważ n <2 x + y można przedstawić za pomocą x (lub mniej) zer.
źródło
Mathematica,
5957 bajtówZwykły wynik w przypadku Mathematica: funkcje wysokiego poziomu = dobre, długie nazwy funkcji = złe.
Join[0&~Array~#,1&~Array~#2]
tworzy listę z poprawną liczbą0
s i1
s.Permutations
generuje wszystkie permutacje z tej listy, bez powtórzeń (jak się dowiedziałem) i posortowane.#+##&~Fold~#
(wersja z golfową wersją#~FromDigits~2
) konwertuje listę cyfr o podstawie 2 na liczbę całkowitą, którą reprezentują.Poprzednia wersja, przed komentarzem Martina Endera:
źródło
FromDigits
zwykle można skrócić:#+##&~Fold~#&/@Permutations...
Select[Range[2^+##]-1,x=#;DigitCount[#,2,1]==x&]&
CJam (
1514 bajtów)Jest to anonimowy blok (funkcja), który pobiera dane wejściowe jako tablicę
[number-of-ones number-of-zeros]
i zwraca dane wyjściowe jako tablicę.Demo online
Daleko od znaku, ale bardziej interesujące : jest to bez wbudowanych permutacji lub konwersji podstawowej:
Działałoby to ładnie, gdy rozwija się GolfScript.
źródło
ee{)*}/
czymś użyciu.*
i wymyślił tego rozwiązania 14-bajtowy: wygląda trochę nieefektywne teraz chociaż.{As.*s:~e!2fb}
s:~
.*
i zdecydowałem, żeee
to ładniejsze niż np2,:a.*e_
. Nie zdawałem sobie jednak sprawy, żee!
da to ten sam wynik niezależnie od kolejności argumentów.Japt , 16 bajtów
Przetestuj online!
Jak to działa
Alternatywna wersja, 17 bajtów
Próbowałem dalej grać w golfa w obu wersjach, ale po prostu nie mogę znaleźć luzu ...
źródło
("0".p(U)+"1".p(V)).á().m("n",2)
; każda z.x()
funkcji jest zdefiniowana w pliku źródłowym .Rubinowy, 63 bajty
Prosta implementacja. Sugestie dotyczące gry w golfa mile widziane.
Ungolfing
źródło
Pyth - 11 bajtów
Pakiet testowy .
źródło
Python 2 -
10599 bajtów+8 bajtów, ponieważ nasze dane wyjściowe muszą zostać posortowane
źródło
Mathematica, 47 bajtów
Funkcja bez nazwy, która przyjmuje dwa argumenty: liczbę
1
s, liczbę0
s.Zasadniczo port rozwiązania Dennisa w Pythonie . Tworzymy zakres od
0
do, a następnie zachowujemy tylko te liczby, których liczba bitów jest równa pierwszej wartości wejściowej. Najciekawszym bitem jest prawdopodobnie ten, który używa magii sekwencji, aby uniknąć nawiasów wokół dodania dwóch argumentów.2x+y-1
1
2^+##
źródło
MATLAB 57 + 6
uruchom za pomocą
bez golfa
źródło
MATL , 9 bajtów
Wypróbuj online!
Wyjaśnienie
Podejście jest podobne do tego w odpowiedzi Dennisa „Galaretka” .
źródło
Właściwie 21 bajtów
Port mojej odpowiedzi Ruby . Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Jak to działa
źródło
Groovy 74 bajty, 93 bajty lub 123 bajty
Nie wiem, który z nich uważasz za pełniejszy, odpowiada na pytanie, ale ...
74 bajtowe rozwiązanie
Za wkład 1,2 otrzymujesz:
93 bajtowe rozwiązanie
Za wkład 1,2 otrzymujesz:
123 bajtowe rozwiązanie
Za wkład 1,2 otrzymujesz:
Wypróbuj tutaj:
https://groovyconsole.appspot.com/edit/5143619413475328
źródło
JavaScript (Firefox 48),
8576747170 bajtówZaoszczędź 3 bajty dzięki @Neil.
Rozumienia tablic są niesamowite. Szkoda, że nie dostali się jeszcze do oficjalnej specyfikacji ECMAScript.
JavaScript (ES6),
1098779787170 bajtówPowinien działać teraz we wszystkich przeglądarkach zgodnych z ES6. Zapisano 7 bajtów na tym, również dzięki @Neil.
źródło
undefined
teraz z każdym uruchomieniem testowym ...?f=(m,n)=>...
Następnie nazywaj ją jakf(3,2)
. Jeśli tak robisz, jakiej przeglądarki używasz?eval
wersję bez ((robi dokładnie to samo, ale 3 bajty dłużej):(m,n)=>{a="";for(i=0;i<1<<m+n;i++)if(i.toString(2).split(1).length==n+1)a+=i+" ";return a}
Groovy 80 Bytes
na podstawie odpowiedzi @carusocomputing
jego 123 bajtowe rozwiązanie można skompresować do 80 bajtów:
80-bajtowe rozwiązanie
Za wkład 1,2 otrzymujesz:
źródło
C (gcc) ,
7268 bajtówWypróbuj online!
Niestety nie ma popcount () w standardowej bibliotece, ale jest ona udostępniana przez GCC jako „funkcja wbudowana”. Dane wyjściowe są sortowane, ale w odwrotnej kolejności.
Dzięki @ceilingcat za golenie 4 bajtów!
źródło
PHP, 80 lub 63 bajty
w zależności od pogody muszę użyć
$argv
lub mogę użyć$x
i$y
zamiast tego.drukuje wszystkie pasujące liczby w malejącej kolejności, rozdzielone znakami podkreślenia.
nazwa pliku nie może zaczynać się cyfrą.
brak wbudowanych, 88 lub 71 bajtów
dodaj jeden bajt dla każdego znaku podkreślenia po każdej liczbie.
@WallyWest: Miałeś rację. Zapisuje dla mnie 3 bajty
for($i=-1;++$i<...;)
źródło
Perl 6 ,
64 6249 bajtówWyjaśnienie:
źródło