Biorąc pod uwagę binarną liczbę całkowitą włącznie 0
i 1111111111111111
(tj. 16-bitową liczbę całkowitą bez znaku) jako dane wejściowe, wypisz tę samą liczbę całkowitą w negabinary .
Dane wejściowe mogą być w dowolnym formacie najbardziej dogodnym dla twojego języka; na przykład, jeśli programowi łatwiej jest przetwarzać dane wejściowe za pomocą 16 cyfr, na przykład 0000000000000101
, zamiast 101
pisać, możesz napisać program, który akceptuje tylko dane wejściowe w ten sposób.
Próbki we / wy
> 1
1
> 10
110
> 1010
11110
> 110111001111000
11011001110001000
> 1001001
1011001
Oto przykładowy program, który napisałem, który wykonuje konwersje bazowe, w tym zasady ujemne i niecałkowite. Możesz go użyć do sprawdzenia swojej pracy.
code-golf
binary
base-conversion
Peter Olson
źródło
źródło
0
s i1
s. Wydaje mi się jasne, ale odpowiedź sprawia, że wątpię lekko ...Odpowiedzi:
APL, 21 znaków
Użyłem do tego Dyalog APL z
⎕IO
ustawioną na 0, co pozwala nam indeksować tablice zaczynając od 0 zamiast 1.Objaśnienie, od prawej do lewej:
⍞
daje nam wkład użytkownika jako wektor znaków.⍎¨
stosuje funkcję wykonania (⍎
) do każdego (¨
) wyżej wymienionych znaków, w wyniku czego powstaje wektor liczb całkowitych 1 i 0.2⊥
dekoduje wektor z podstawy 2 na dziesiętną.-
neguje wynikową liczbę całkowitą dziesiętną.(16/¯2)⊤
koduje liczbę całkowitą dziesiętną w bazie¯2
(ujemna 2). (16/¯2
powtarza się¯2
,16
razy, dając 16 cyfr w naszym numerze negabinarnym).-
neguje każdy element naszego nowo zakodowanego numeru (wcześniej składa się z -1 i 0), dzięki czemu możemy go użyć do indeksowania naszego wektora znaków.'01'[ ... ]
indeksuje tablicę znaków ('01'
) za pomocą zer i jedynek negowanego wektora negabinarnego. Dzięki temu otrzymujemy ładniejszy wynik.Przykład:
źródło
Ruby,
3231 znakówUżywa skrótu do obliczania negabinary .
źródło
gets
słowa kluczowego, które jest pobierane ze STDIN.GolfScript,
342927 znakówProste podejście naprzód. Interesujące jest to, że najkrótsza wersja to ta, która najpierw konwertuje na liczbę, a następnie z powrotem na bazę -2 (przynajmniej najkrótszą wersję, jaką do tej pory mogłem znaleźć). Zaletą tego jest to, że zawiera prawie 15%
%
.Edycja 1: Dla bazy 2 możemy zapisać jedną operację modulo, a także połączyć obie pętle.
Edycja 2: Znalazłem jeszcze krótszy kod do konwersji ciągu binarnego na liczbę całkowitą.
źródło
Haskell,
8683 bajtówWywołaj używając c, a następnie tablicę liczb całkowitych dla cyfr, np
PS: Jestem nowy, czy przesłałem to poprawnie?
EDYCJA: Zapisałem kilka bajtów dzięki Laikoni, a także poprawiłem kilka literówek
EDIT2: Alternatywnie, c :: String -> String:
Za 114 bajtów (ale wywołujesz go ciągiem znaków: c „11”)
źródło
undigits 2 n
, ponieważ aplikacja funkcji wiąże się silniej niż+m
. Można również zapisać kilka bajtów przez wiązaniem
się w gwardii:c n|m<-0xAAAAAAAA= ...
.Python (2.x), 77 znaków
(nie tak krótkie jak inne rozwiązania ze względu na konieczność ręcznego przełączania bazy ...) Powinien spełniać wymagania.
Sugestie dotyczące dalszych ulepszeń są mile widziane!
Wprowadź wartości początkowe takie jak to:
0b1001001
źródło
JavaScript, 68 bajtów
W ES6 byłoby 52 bajtów, ale po tym wyzwaniu:
źródło
Galaretka , 4 bajty, wyzwanie dla postdate języka
Wypróbuj online!
Pobiera dane wejściowe i generuje dane wyjściowe jako listę cyfr.
Wyjaśnienie
Jest to właściwie tylko bezpośrednie tłumaczenie specyfikacji.
źródło
k, 17 bajtów niekonkurujących
Niektóre z użytych funkcji prawdopodobnie zostały dodane po wyzwaniu.
Dane wejściowe to lista zer i jedynek, a dane wyjściowe to także lista zer i jedynek.
źródło
PHP, 69 bajtów
Wersja online
źródło
ES8, 54B
źródło
05AB1E , 4 bajty
Wypróbuj online!
źródło
Japt , 4 bajty
Dane wejściowe jako ciąg binarny, dane wyjściowe jako ujemna tablica cyfr.
Spróbuj
Lub przyjmując dane wejściowe jako tablicę cyfr binarnych:
Spróbuj
źródło