Wprowadzenie
XOR to cyfrowa brama logiczna, która implementuje wyłączne lub. W większości przypadków jest to pokazane jako ^
. Cztery możliwe wyniki w systemie binarnym:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
Można to również uznać za dodatek modulo 2 w wersji binarnej. W systemie dziesiętnym musimy przekonwertować liczbę dziesiętną na binarną, 35 = 100011
a. 25 = 11001
Aby obliczyć wartość XOR, umieszczamy je jedna na drugiej:
100011
11001 ^
--------
111010 = 58 in decimal
Zadanie : jeśli zostanie podana liczba całkowita N większa niż 1, wypisz tabelę XOR o rozmiarze N + 1. Na przykład N = 5:
0 1 2 3 4 5
1 0 3 2 5 4
2 3 0 1 6 7
3 2 1 0 7 6
4 5 6 7 0 1
5 4 7 6 1 0
Widać, że przed każdą liczbą jest jedna spacja, ponieważ najwyższa ilość w tabeli ma długość 1. Jednak jeśli weźmiemy N = 9, otrzymamy następującą siatkę:
0 1 2 3 4 5 6 7 8 9
1 0 3 2 5 4 7 6 9 8
2 3 0 1 6 7 4 5 10 11
3 2 1 0 7 6 5 4 11 10
4 5 6 7 0 1 2 3 12 13
5 4 7 6 1 0 3 2 13 12
6 7 4 5 2 3 0 1 14 15
7 6 5 4 3 2 1 0 15 14
8 9 10 11 12 13 14 15 0 1
9 8 11 10 13 12 15 14 1 0
Najwyższa wartość ma długość 2, więc wartość jest wyrównana do długości 3 (najwyższa długość + 1).
Zasady:
- Wiodące białe znaki nie są obowiązkowe, tylko jeśli są konsekwentnie używane (lub nie)
- Musisz wydrukować tabelę w powyższym formularzu.
- Wypełnienie między kolumnami powinno być jak najmniejsze
- To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
output an XOR table with the size N+1
Odpowiedzi:
MATL , 10 bajtów
Wydaje się, że kompilator (a zwłaszcza ten program) działa teraz w Octave, choć nadal wymaga dopracowania. Możesz tymczasowo użyć tego zatwierdzenia GitHub .
Edytuj (30 marca 2016) : Wypróbuj online!
Przykład
Wyjaśnienie
źródło
Narzędzia Bash + BSD, 45
Długo czekałem, aby znaleźć zastosowanie
rs
. To wydaje się być dobre.rs
może być konieczne zainstalowanie w systemach Linux. Ale działa w systemie OS X od razu po wyjęciu z pudełka.$1
rozwija się do N, a tym samymecho \$[{0..$1}^{0..$1}]
rozwija się doecho $[{0..N}^{0..N}]
eval
ed:$[0^0] $[0^1] $[0^2] ... $[0^N] ... $[N^N]
rs
(przekształć) przekształca tę linię w N + 1 wierszy.-j
prawo uzasadnia i-g1
podaje szerokość rynny równą 1. To zapewnia, że końcowa tabela wyjściowa ma minimalną szerokość między kolumnami.Testowałem do N = 1000, co zajęło 3,8 sekundy. Duże N jest teoretycznie możliwe, chociaż w pewnym momencie bashowi zabraknie pamięci przy użyciu pamięci (N + 1) ² rozszerzenia nawiasów klamrowych.
źródło
C, 114
128 152Edytuj Uproszczone liczenie przestrzeni, zainspirowane dziełem Khaleda A Khunaifer
Funkcja AC zgodna ze specyfikacją.
Spróbuj wstawić n jako wejście, domyślnie 9
Mniej golfa
źródło
JavaScript (ES6) 120
122Edytuj 2 bajty zapisane dzięki produkcji ETH
Anonimowa funkcja. Uwaga: liczba w tabeli jest ograniczona do 7 cyfr, co jest więcej niż rozsądne, biorąc pod uwagę ogólny rozmiar tabeli pozwalający na większe liczby
Teraz powinienem znaleźć krótszy sposób na uzyskanie maksymalnego rozmiaru kolumn, unikając logarytmów
Test
źródło
~m
do uchwycenia dodatkowej przestrzeni. Użycie ciągu szablonu pozwala zaoszczędzić dwa bajty:(z,j)=>`(7 spaces)${i^j}`.slice(~m)
(ignore this padding) ``abc`def`` (ignore this too)
Pokazuje się tak:abc`def
C, 149 bajtów
Szczegółowe
źródło
11..1
do znaczącej w wartości wejściowejn
, można to zrobić, najpierw znajdując najbliższą potęgę 2, a następnie xor z poprzednią liczbą,0001 xor 1110 = 1111
for(k=1;k<=n;)k*=2;k--;
. Teraz widzę, że jest to znacznie krótsza niż moja próba C tego samego (moje jest lepsze pod względem wydajności, ale wydajność nie ma znaczenia w tym wyzwaniu)2^k xor 2^k -1
dlamax{2^k<=n}
lub2^k -1
dlamin{2^k>=n}
. dostać wszystko11..1
tamC, 103 bajty
źródło
Galaretka, niekonkurująca
7 bajtów Ta odpowiedź jest niekonkurencyjna, ponieważ wykorzystuje funkcje, które datują wyzwanie.
Wypróbuj online!
Jak to działa
źródło
R, 38 bajtów
Zwykle R wymaga wielu bajtów tylko do sformatowania danych wyjściowych. W tym przypadku jest zupełnie odwrotnie.
outer
co zwykle odnosi się do iloczynu zewnętrznego dwóch tablic, może, gdy jest podana, wykonać tę funkcję na marginesach wektorów. W takim przypadku stosujemy bitową funkcję XORbitwXor
.źródło
CJam,
2927 bajtówSprawdź to tutaj.
Wyjaśnienie
źródło
MathCAD, 187 bajtów
MathCAD z łatwością obsługuje wbudowane tabele - ale absolutnie nie ma bitowego Xora ani konwerterów dziesiętnych na dwójkowe lub dwójkowych na dziesiętne. Funkcje for iterują po możliwych wartościach. Miejsca trzymania i, a2, Xa i Xb. Pętla while aktywnie konwertuje na binarną, a podczas konwersji do binarnej pełni również funkcję xor (mały krzyżyk z okręgiem wokół niej). Przechowuje liczbę binarną w liczbie dziesiętnej składającej się z zer i jedynek. Jest to następnie konwertowane przed zapisaniem w macierzy M za pomocą funkcji sumowania.
Można to łatwo zagrać w golfa (choćby poprzez zamianę symboli zastępczych na krótsze), ale pomyślałem, że opublikuję to i zobaczę, czy ktoś może pograć w golfa konwerter binarny na dziesiętny bardziej niż cokolwiek innego.
źródło
k4, 50 bajtów
Na przykład:
źródło
Python 3,
133131 bajtówźródło
Mathematica, 108 bajtów
Zignoruj błąd, po prostu
Thread
nie wie, co robi.źródło
Emacs Lisp, 193 bajtów
Nie golfowany:
Wyjście jest wysyłane do
*Message*
bufora, co byłobystdout
gdybyx
miały być stosowane wewnątrz skryptu.źródło
Python 2, 114 bajtów
Trochę czasu zajęło znalezienie sposobu na wypełnienie o zmiennej szerokości
.format()
(trochę, niewiele) i dostosowanie go, ale myślę, że mam teraz wszystko do sprecyzowania. Przydałoby się więcej golfa w obliczeniach szerokości.źródło
Caché ObjectScript , 127 bajtów
Szczegółowe:
źródło
Pyke, 8 bajtów (niekonkurujące)
Wyjaśnienie:
Wypróbuj tutaj
źródło
Python 2, 77 bajtów
źródło
J , 10 bajtów
Wypróbuj online!
źródło
Excel VBA, 95 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe z zakresu
[A1]
i dane wyjściowe do konsoli.źródło
Mały podstawowy , 499 bajtów
Skrypt, który pobiera dane wejściowe z
TextWindow
obiektu i dane wyjściowe do tego samegoWypróbuj na SmallBasic.com Używa Silverlight, a zatem musi być uruchomiony w IE lub Edge
Wybierz czarną konsolę, następnie wpisz całkowitą liczbę wejściową i naciśnij Enter.
źródło
Perl 5
-n
, 62 bajtyWypróbuj online!
źródło