Celem tego wyzwania jest napisanie programu do konwersji wprowadzonego ciągu znaków, który może zawierać tylko litery i cyfry z jak największej liczby baz między 2 a 36, i znaleźć sumę 10 wyników podstawowych.
Łańcuch wejściowe zostaną zamienione na wszystkich bazach, w których liczba będzie określone zgodnie z normą alfabetu dla baz do 36: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Na przykład dane wejściowe 2T
byłyby ważne tylko w bazach 30 i wyższych. Program konwertuje 2T z baz od 30 do 36 na dziesiętne i sumuje wyniki.
Możesz założyć, że ciąg wejściowy zawiera tylko litery i cyfry. Twój program może używać wielkich lub małych liter; może, ale nie musi, obsługiwać oba te elementy.
Przypadki testowe
Przykładowe dane wejściowe: 2T
Tabela możliwych zasad
Base Value
30 89
31 91
32 93
33 95
34 97
35 99
36 101
Wyjście: 665
Przykładowe dane wejściowe: 1012
Tabela możliwych zasad:
Base Value
3 32
4 70
5 132
6 224
7 352
8 522
9 740
10 1012
11 1344
12 1742
13 2212
14 2760
15 3392
16 4114
17 4932
18 5852
19 6880
20 8022
21 9284
22 10672
23 12192
24 13850
25 15652
26 17604
27 19712
28 21982
29 24420
30 27032
31 29824
32 32802
33 35972
34 39340
35 42912
36 46694
Wynik: 444278
Przykładowe dane wejściowe: HELLOworld
Tabela możliwych zasad
Base Value
33 809608041709942
34 1058326557132355
35 1372783151310948
36 1767707668033969
Wynik: 5008425418187214
Dane wejściowe 0
będą odczytywane jak 0
we wszystkich bazach od 2 do 36 włącznie. Nie ma czegoś takiego jak baza 1.
To jest kod golfowy. Obowiązują standardowe zasady. Najkrótszy kod w bajtach wygrywa.
źródło
0
0
to ważny przypadek testowy?0
jest0
w każdej bazie i nie ma czegoś takiego jak baza 1.Odpowiedzi:
Python 3,
727169 bajtówDzięki FryAmTheEggman za uratowanie bajtu!
Dzięki DSM za oszczędność 2 bajtów!
źródło
try
except
Pozwoli Ci zrobićrange(37)
. Dwa bajty!Pyth,
201911 bajtówRażąco ukradł pomysł Adnana z jego odpowiedzi w Pythonie.
Wypróbuj tutaj
źródło
S
znak1012
.Pure Bash (bez narzędzi), 38
Zakładając, że dozwolone są wbudowane konwersje podstawowe:
Spowoduje to wyświetlenie błędu do STDERR. Zakładam, że tak jest zgodnie z tą meta odpowiedzią .
Wyjście testowe:
źródło
Mathematica, 57 bajtów
źródło
FromDigits
.Poważnie, 65 bajtów
Zawiera materiały niedrukowalne, zrzut heksowy:
Niestety nie mam dobrego sposobu na filtrowanie listy na podstawie typów. Uwaga do siebie: dodaj to.
Przyjmuje dane wejściowe jak
"2T"
Wypróbuj online (konieczne będzie ręczne wprowadzenie danych wejściowych)
Wyjaśnienie:
źródło
Matlab, 98 bajtów
źródło
Oktawa,
7573 bajtówWyjaśnienie:
polyval
ma tę przewagębase2dec
, że jest wektoryzowany, więc niefor
jest wymagana pętla.Jako dane wejściowe obsługiwane są tylko „0” .. „9” i wielkie litery „A” .. „Z”.
źródło
polyval
wektoryzacji!Japt , 26 bajtów
Wypróbuj online!
Bez golfa i wyjaśnienia
źródło
Pyth, 16 bajtów
Wypróbuj online
Wyjaśnienie:
źródło
CJam,
2827 bajtówDzięki Reto Koradi za uratowanie 1 bajtu.
To trochę okropne ...
Wymaga wielkich liter.
Sprawdź to tutaj.
CJam nie ma wbudowanej konwersji bazowej 36 z ciągów, więc sami musimy napisać litery. Próbowałem różnego rodzaju shenaniganów divmod, ale wydaje się, że najkrótszym jest zbudowanie ciągu wszystkich 36 cyfr i po prostu znalezienie indeksu każdego znaku w tym ciągu.
źródło
q{'0-_9>7*-}%
jest równie krótki.Funkcja C, 93 (tylko 32-bitowe wyjście całkowite)
Zakładając, że jest OK, aby dane wyjściowe przechodziły tylko do INT_MAX, możemy to zrobić:
Ostatni test testowy sugeruje, że prawdopodobnie nie jest to wystarczające. Jeśli tak, to przy 64-bitowych liczbach całkowitych mamy:
Funkcja C, 122
Niestety
#include <stdlib.h>
jest wymagany, więc typ zwrotustrtoll()
jest prawidłowy. Musimy użyćlong long
do obsługiHELLOworld
skrzynki testowej. W przeciwnym razie może to być nieco krótsze.Kierowca testowy:
Wyjście testowe:
źródło
#include <stdlib.h>
tak jak w C ++?Python 3, 142 bajty
Adnan mocno mnie pobił swoim rozwiązaniem, ale chciałem dodać własną próbę.
Ta funkcja obsługuje tylko duże litery. Dodaj
.upper()
dofor i in s
, a obsłuży zarówno wielkie, jak i małe litery.źródło
Scala 2.11, 93 bajty
Jest to uruchamiane na konsoli Scala.
źródło
Haskell, 97 bajtów
Obsługuje tylko małe litery. Przykład użycia:
Jest tak ogromny, ponieważ sam muszę zaimplementować konwersję char-to-ASCII i konwersję bazy. Odpowiednie predefiniowane funkcje znajdują się w modułach, które wymagają jeszcze droższego importu.
Jak to działa:
i
konwertuje znakc
na jego wartość cyfrową (np.i 't'
->29
).f
oblicza wartość ciągu wejściowego dla każdej możliwej podstawy i sumuje ją. Wersja bez pętli wewnętrznej pętli jestmap (\base -> foldl1 (\value digit -> value*base + digit) (map i s)) [ ...bases... ]
.źródło
JavaScript (ES6), 86 bajtów
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
&&b=v
oszczędza 1 bajt?b=v:0
.Perl 6 , 35 bajtów
stosowanie:
źródło
Ceylon,
10096 bajtówNajpierw miałem tę prostszą wersję, zajmującą zaledwie 69 bajtów:
Ale nie udaje się to w przypadku pierwszego przypadku testowego, który powraca
2000000000665
zamiast665
. ( Powodem jest to, żeT
in2T
jest analizowane jako Tera, tzn. Mnoży 2 przez 10 ^ 12, gdy podstawa wynosi 10. ) Dlatego musimy złapać ten przypadek osobno. Podziękowania dla Neila za zasugerowanie innego sposobu zrobienia tego, co pozwoliło zaoszczędzić 4 bajty.Sformatowany:
źródło