Napisz funkcję lub program, który wyprowadza czwartoimienną bazę wyświetlaną jako cyfry binarne. Podstawa liczbowa to 2 i , gdzie i jest pierwiastkiem kwadratowym z -1. Zobacz liczby zespolonej więcej szczegółów dotyczących I . Każda pozycja cyfr może wynosić od 0 do 3 (czwartorzędowa), ponieważ każda część rzeczywista i urojona jest -4 razy większa niż poprzednia część rzeczywista i urojona. Liczby czwartorzędowe w postaci binarnej są następujące:0: 00
, 1: 01
, 2: 10
i 3: 11
.
Podział pozycji cyfr:
re im 16 -8i -4 2i 1 -0.5i, etc.
4 0 1 0 3 0 0 (quaternary representation)
01 00 11 00 00 (binary representation)
Numer 100110000
to 1x16 + 3x-4 = 16 + -12 = 4.
re im 16 -8i -4 2i 1 -0.5i, etc.
0 5 0 0 0 3 0 2 (quaternary representation)
00 00 00 11 00 .10 (binary representation)
Liczba 1100.1
to 3x2 i + 2x-0,5 i = 6 i + - i = 5 i .
Twój kod pobierze parę liczb, które mogą być liczbami całkowitymi lub zmiennoprzecinkowymi, i wyświetli liczbę zespoloną jako ciąg cyfr binarnych. Pierwsza liczba będzie prawdziwa, druga liczba wejściowa będzie wartością urojoną. Punkt binarny musi być wydrukowany tylko wtedy, gdy liczba pozycji niezerowych jest mniejsza niż 1 (tj. Jeśli dowolna z pozycji dla -0,5 i , -0,25, 0,125 i itd. Ma niezerową cyfrę). Zera wiodące i końcowe są niedozwolone, z wyjątkiem pojedynczej cyfry zero bezpośrednio przed punktem binarnym, jeśli nie ma innych cyfr. Dane wyjściowe nie mogą zaczynać się od punktu binarnego (* 00.1
- źle, 0.1
- dobrze, * .1
- źle, * 0.10
- źle). Możesz założyć, że wszystkie liczby wejściowe będą miały skończone reprezentacje binarne.
Numery testowe:
re im output
0 0 0
1 0 1
2 0 10
3 0 11
4 0 100110000
-1 0 10011
-2 0 10010
-3 0 10001
0 1 100.1
0 2 100
0 3 1000.1
0 4 1000
0 -1 0.1
0 -2 1001100
0 -3 1001100.1
3 4 1011
4 3 100111000.1
6 -9 101110010.1
-6 9 10011100110.1
-9 -6 1110111
0.5 14.125 10011001101.001001
Uwaga: Dane wyjściowe wszystkich wartości całkowitych zakończą się, .1
jeśli część urojona jest nieparzysta.
Standardowy golf.
źródło
0 → 00, 1 → 01, 2 → 10, 3 → 11
.Odpowiedzi:
JavaScript (ES6), 340 bajtów
f
konwertuje liczbę na podstawową-4
(ze znakiem końcowym,.
jeśli liczba jest liczbą całkowitą).g
bierze dwie-4
liczby podstawowe , wstawia je na obu końcach do tej samej długości i.
pozycji, tasuje cyfry razem, konwertuje wszystko z bazy4
do podstawy2
, a następnie w końcu usuwa początkowe i końcowe zera.Objaśnienie: Aby przedstawić podaną liczbę zespoloną w zmodyfikowanej bazie
2i
, musimy przedstawić rzeczywistą część i połowę części złożonej (tj. Dzieląc część urojoną2i
) w bazie2i²
(tj.-4
), Przetasować cyfry razem, a następnie przekonwertować je z bazy4
oprzeć2
. Aby przedstawić rzeczywistą liczbę w bazie-4
, zaczynamy od4
konwersji bazy . Cyfry alternatywne mają poprawny znak (w przypadku liczby dodatniej są to cyfry w pozycjach parzystych; w przypadku liczby ujemnej są to cyfry w pozycjach nieparzystych), ale pozostałe cyfry mają niewłaściwy znak i należy zastosować korektę. Przykłady:Jak widać, korekta jest
8
pomniejszona o pierwotną cyfrę, mod8
. Jednak nieco wygodniejszym obliczeniem jest pierwotna cyfra plus 3, xor 3 (w 32-bitowej arytmetyki liczb całkowitych moglibyśmy po prostu napisać,+0xCCCCCCCC^0xCCCCCCCC
aby przekonwertować całą liczbę za jednym razem). Wreszcie, ponieważ poprawka dotyczy cyfr alternatywnych, łatwiej jest dokonać wstępnej konwersji na bazę,16
która automatycznie pobiera pary4
cyfr podstawowych , a następnie poprawia ją za pomocą współczynnika jednego3
lub0xC
odpowiednio. Pozostaje tylko zignorować-
znak.źródło
Perl - 313 bajtów
Ponieważ nikt jeszcze nie opublikował odpowiedzi, pomyślałem, że sam ją wykopię.
Jestem pewien, że jest wiele okazji do gry w golfa.
źródło