Gray Code to ciąg liczb binarnych o szerokości bitowej, w n
którym kolejne liczby różnią się tylko jednym bitem (patrz przykładowe dane wyjściowe).
Przykładowe dane wejściowe:
3
Przykładowe dane wyjściowe:
000
001
011
010
110
111
101
100
Uwagi:
- To pytanie wydaje się mieć duplikatem ale to nie jest, na to pytanie nie jest code-golf, i wymaga innego wyjścia. Pomoże to jednak sprawdzić odpowiedzi.
- Możesz założyć zmienną,
n
która zawiera dane wejściowe.
Odpowiedzi:
JavaScript (77)
Bardziej przyjazna dla przeglądarki wersja (console.log i prompt ()):
źródło
for(i=0;i<(l=1<<n);i++)console.log((i^(i>>1)|l).toString(2).slice(1));
Python 2 (47)
Wyrażenie
i/2^i
dlai
„th szarym numer kodu jest z tej odpowiedzi . Aby dodać zera wiodące, które padają na długośćn
, dodaję2**n
przed konwersją na ciąg binarny, tworząc ciąg długościn+1
. Następnie obcinam1
prefiks wiodący i typ numeru za0b
pomocą[3:]
.źródło
K (ngn / k) , 10 bajtów
Wypróbuj online!
źródło
!
zaskoczyło mnie. bardzo fajny !APL (Dyalog Classic) , 11 bajtów
Wypróbuj online!
n⍴2
jest2 2...2
- wektorn
dwójki⍳
to indeksyn
-wymiarowej tablicy o kształcie2 2...2
- to znaczy tablicy 2 × 2 × ... × 2 zagnieżdżonych wektorów. Ponieważ używamy 0-indexing (⎕IO←0
), wszystkie są wektorami binarnymi o długościn
.,
spłaszcz kształt 2 × 2 × ... × 2, więc otrzymujemy wektor 2 n zagnieżdżonych wektorów binarnych↑
„mix” - konwersja wektora wektorów na stałą macierz 2 n × n. To wygląda tak:0,
wstawia zera po lewej stronie matrycy2≠/
oblicza parą (2
) xor (≠
) wzdłuż ostatniego wymiaru (/
w przeciwieństwie do⌿
); innymi słowy, każdy element zostaje przekreślony z prawym sąsiadem, a ostatnia kolumna znikaźródło
Japt ,
1412 bajtówOgolono dwa bajty dzięki produktom ETH .
Wypróbuj online!
źródło
ù
zastosowania. PonieważN.z(n)
jest to dzielenie liczb całkowitych z domyślnym arg = 2, możesz zapisać dwa bajty za pomocą2pU Ç^z)¤ùTU
: Wypróbuj online!Python - 54
Na podstawie algorytmu z referencji podanej w wyzwaniu:
Nie golfowany:
źródło
PowerShell (168)
Amator PowerShell'r powrócił z kolejną próbą zdobycia golF! Mam nadzieję, że nie masz nic przeciwko! Przynajmniej te pytania są zabawne i umożliwiają naukę. Zakładając, że wprowadzono n, mamy:
Ponieważ PowerShell, z którym pracuję, ma tylko 2.0, nie mogę używać żadnych nieco zmieniających się poleceń cmdlet, które mogłyby skrócić kod. Więc skorzystałem z innej metody opisanej w źródle pytania , odwracając tablicę i dodając ją do siebie, dodając 0 z przodu górnej połowy i 1 do dolnej połowy.
źródło
F #
(86)(84)(80)Prawdopodobnie można to jeszcze poprawić.
Pamiętaj też, że jeśli działasz w FSI, musisz
open System;;
najpierw. Jeśli chcesz tego uniknąć (i nie zależy Ci na kolejności drukowania wartości), możesz użyć tej 82-znakowej wersji:źródło
Rubin -
4239Ten sam algorytm, inny język:
Przełączenie z
#map
na#times
@ sugeruje unikanie gołębi, aby zapisać 3 znaki.źródło
[*0...2**n].map
ciebie możesz użyć(2**n).times
.J, 24 bajty
Wypróbuj online!
Prosta implementacja algorytmu „XOR z własnym zmiennoprzecinkową połówką”. Zauważ, że
22 b.
to XOR.źródło
MATL , 10 bajtów
Wypróbuj online!
Dobra stara metoda „XOR nz n >> 2”.
W
- oblicz 2 ^ (dane wejściowe) (pobiera dane niejawnie):q
- utwórz zakres liczb od 0 do 2 ^ n - 1 - zduplikuj tent
zakres2/k
- MATL nie ma przesunięcia bitowego, więc podziel (każdą liczbę) przez 2 i podłogęZ~
- elementarnie XOR które wynikają z oryginalną tablicą 0 do 2 ^ n - 1B
- konwertuj każdą liczbę w wyniku do postaci binarnej(domyślnie wyświetlaj dane wyjściowe).
źródło
K (ngn / k) , 25 bajtów
Wypróbuj online!
|:\x
to „skanowanie wsteczne x”. stosuje odwrotność do x, dopóki wyjście nie zrówna się z wejściem i pokazuje każdą iterację. zwraca (0 1; 1 0) przy pierwszym przejściu.0 1,''
to „0 1 dołącz do każdego”. łączy 0 z każdą wartością pierwszego elementu i 1 z każdą wartością drugiego elementu, dając ((0 0; 0 1); (1 1; 1 0)) przy pierwszym przejściu,/
jest „dołącz do” i spłaszcza się do listy.(x-1){...}/0 1
to „zastosuj {func} ponad0 1
x-1 razy”. przyjmuje dane wejściowe ostatniej iteracji jako dane wejścioweźródło
APL (22)
Daje to macierz n-na-2 ^ n zawierającą bity jako wiersze:
Wyjaśnienie:
{
...}⍣(n-1)⍪0 1
: uruchomn-1
czasy funkcji z początkowym wejściem macierzy(0 1)T
(który jest 1-bitowym szarym kodem)(0,⍵)
: każdy wiersz⍵
z0
prefiksem,⍪
: na górze,1,⊖⍵
: każdy wiersz⍵
z1
prefiksem, w odwrotnej kolejnościźródło
Jq 1,5 ,
105100 bajtówZakłada, że N zapewnia dane wejściowe. na przykład
Rozszerzony
Wypróbuj online!
źródło
Japt , 10 bajtów
Wypróbuj online!
źródło
T-SQL 134
To wyzwanie wymaga zwrotu siły kartezjańskiej z {(0), (1)}. Ten fragment kodu buduje kod, który wykonałby iloczyn kartezjański {{0), (1)} n razy.
źródło