tło
Bijective podstawy b numeracji , w którym b jest liczbą całkowitą dodatnią, jest bijective oznaczenie położenia, wykorzystujący b symboli ze przypisane wartości 1 do b .
W przeciwieństwie do swojego nietrafiającego odpowiednika, żaden symbol nie ma wartości 0 . W ten sposób każda nieujemna liczba całkowita n ma unikalną reprezentację w bazie bijective b .
Popularne numeracje bijective obejmują unary, bijective base 2 (używane w kodowaniu długości bzip2 ) i bijective base 26 (używane do numerowania kolumn w arkuszach kalkulacyjnych).
Definicja
W tym wyzwaniu definiujemy zestaw M symboli jako
123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<=>
oraz funkcja i od M do liczby naturalnej, tak że i ('1') = 1,…, i ('>') = 64 .
Biorąc pod uwagę zasadę b między 1 a 64 (obie włącznie), definiujemy, że każda nieujemna liczba całkowita n odpowiada ciągowi a k … a 0 , składając się z symboli M , tak że n = b k i (a k ) + … + B 0 i (a 0 ) .
Ta korespondencja jest dobrze zdefiniowana i biotywna. Ponieważ pusta suma jest zdefiniowana jako 0 , liczba całkowita 0 może być zakodowana jako pusty ciąg.
Zadanie
Zaakceptuj trzy ciągi jako dane wejściowe:
Podstawa wejściowa b pomiędzy 1 a 64 , zakodowana jako ciąg bijective base 64 .
Nieujemna liczba całkowita n , zakodowana jako ciąg bijective base b .
Wyjściowa baza B między 1 a 64 , zakodowana jako ciąg bijective base 64 .
Biorąc pod uwagę te trzy dane wejściowe, koduj n jako dwuskładnikowy ciąg bazy B.
Przypadki testowe
Wszystkie przypadki testowe określić wkład w kolejności , b , n , B .
Input: "4" "" "8"
Output: ""
Input: "A" "16" "2"
Output: "1112"
Input: "2" "122" "A"
Output: "A"
Input: "3" "31" "1"
Output: "1111111111"
Input: ">" "Fe" "a"
Output: "RS"
Zasady
Możesz odczytać trzy ciągi znaków w dowolnej dogodnej kolejności, jako takie, tablicę ciągów, ich ciąg reprezentujący, połączony lub oddzielony ogranicznikami jednoznakowymi według własnego wyboru.
Jeśli zdecydujesz się wydrukować wyjście do STDOUT, możesz wydrukować tylko symbole i (opcjonalnie) końcowy znak nowej linii.
Dozwolone są wszelkiego rodzaju wbudowane konwersje podstawowe.
Obowiązują standardowe zasady gry w golfa .
źródło
Pip,
848078 bajtówRepozytorium GitHub dla Pip
Algorytmy zaadaptowane z artykułu z Wikipedii. Oto wyjaśnienie nieco niegościnnej wcześniejszej wersji:
Przykładowy przebieg:
źródło
Oktawa, 166 bajtów
Wersja wieloliniowa:
Zamiast tworzyć mapę do konwersji znaku na wartość indeksu, właśnie utworzyłem odwrotną tabelę odnośników
N
dla wartości ascii1..'z'
i wypełniłem ją wskaźnikami o odpowiednich wartościach.polyval
ocenia równanieużywając wartości wejściowej przeliczonej na dziesiętne jako wektora współczynników
c
i oryginalnej podstawy jakox
. (Niestety, Octavebase2dec()
odrzuca symbole poza normalnym zakresem.)Gdy mamy już wartość wejściową w bazie 10, obliczenie wartości w nowej bazie jest proste.
Kierowca testowy:
Wyniki:
źródło
Perl,
261248229 bajtówmulti-line, podczas gdy pętle nie są golfowane:
t
jest funkcją parsowania liczby z ciągu bijective-base ciągu danej podstawy.r
jest funkcją do generowania ciągu bijective-base danej zasady z liczby. 3 parametry oddzielone przecinkami są analizowane ze standardowego wejścia, a funkcje są wywoływane w razie potrzeby.Konwersja liczby dodatniej na bijective string string jest podobna do normalnej podstawy. Jednak gdzie zrobiłbyś coś takiego dla normalnej bazy:
dostosowujesz mod, aby dać zakres od 1 do podstawy zamiast 0 do podstawy - 1:
źródło
Python 2, ...
317307298311 bajtówZdecydowanie do gry w golfa. Naprawdę nienawidzę tego, że ciągi nie mają przypisania elementów, a listy nie
find
. Spojrzę na lepszy sposób niż moja szybka poprawka, którą mam teraz.Moją metodą jest przekonwertowanie danych wejściowych na liczbę dziesiętną, a następnie na bazę wyjściową, a następnie konwersję na bazę dwuskładnikową.
Edycja : Odkryłem, że mój program nie działał podczas konwersji na Unary. Naprawa za pomocą 13 bajtów
e=F(o)<2
itp.Wypróbuj tutaj
źródło
.index()
metodę. Dlaczego nie użyć tego zamiast znaleźć? Ponadto zamiast zapisywaniaF(b)
iF(o)
do zmiennych, używasz ich tylko raz, więc po prostu wprowadź je w razie potrzeby. Wreszcie'n'[2::5]
jest krótszy niż''.join(n)
(zastąp apostrofy backticks).Python 2, 167 bajtów
Naprawdę nie ma tu żadnych specjalnych sztuczek, z wyjątkiem
[2::5]
krojenia w celu uzyskania zestawu znaków o niższej liczbie bajtów.Testy:
źródło
CJam,
737069555148 bajtówNajnowsza wersja używa podstawowego operatora konwersji CJam do konwersji ze źródła źródłowego, o czym nie myślałem, dopóki nie zobaczyłem rozwiązania @ aditsu. Stosuje także ostatnią wskazówkę @Dennis dotyczącą konstruowania ciągu „cyfrowego” ( /codegolf//a/54348/32852 ), a także kilka innych pomysłów udostępnianych na czacie.
Format wejściowy to wartość, po której następuje podstawa źródłowa i docelowa, przy czym każda z nich znajduje się w osobnej linii. W przypadku pustego ciągu pozostaw pierwszy wiersz pusty. Przykładowe dane wejściowe:
Wypróbuj online
Wyjaśnienie:
źródło
Galaretka , 22 bajty
Wypróbuj online!
źródło