Целью этой задачи является написание программы для преобразования введенной строки, которая может быть принята как содержащая только буквы и цифры из максимально возможного числа оснований от 2 до 36, и поиска суммы результатов по основанию 10.
Входная строка будет преобразована для всех оснований , в которых число будет определяться в соответствии со стандартом алфавита для баз до 36: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Например, ввод 2T
будет действительным только в базах 30 и выше. Программа преобразует 2T из оснований с 30 по 36 в десятичное и суммирует результаты.
Вы можете предположить, что входная строка содержит только буквы и цифры. Ваша программа может использовать прописные или строчные буквы; он может, но не должен, поддерживать оба.
Контрольные примеры
Пример ввода: 2T
Схема возможных баз
Base Value
30 89
31 91
32 93
33 95
34 97
35 99
36 101
Выход: 665
Пример ввода: 1012
Схема возможных оснований:
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
Выход: 444278
Пример ввода: HELLOworld
Схема возможных баз
Base Value
33 809608041709942
34 1058326557132355
35 1372783151310948
36 1767707668033969
Выход: 5008425418187214
Ввод 0
будет читаться как 0
во всех базах от 2 до 36 включительно. Там нет такого понятия, как база 1.
Это код гольф. Стандартные правила применяются. Самый короткий код в байтах побеждает.
источник
0
0
важен контрольный пример?0
есть0
в каждой базе, и нет такой вещи, как база 1.Ответы:
Python 3,
727169 байтСпасибо FryAmTheEggman за сохранение байта!
Спасибо DSM за сохранение 2 байта!
источник
try
except
позволит вам сделатьrange(37)
. Два байта!Pyth,
201911 байтОткровенно украл идею Аднана из своего ответа на Python.
Попробуй здесь
источник
S
символ1012
.Чистый Баш (без коммунальных услуг), 38
Предполагая, что встроенные базовые преобразования разрешены:
Это выведет ошибку в STDERR. Я предполагаю, что это нормально в соответствии с этим мета-ответом .
Тестовый вывод:
источник
Mathematica, 57 байт
источник
FromDigits
.Серьезно, 65 байтов
Содержит непечатные, hexdump:
К сожалению, у меня нет хорошего способа фильтрации из списка по типам. Примечание для себя: добавьте это.
Принимает вход как
"2T"
Попробуйте онлайн (вам нужно будет вручную ввести ввод)
Объяснение:
источник
Matlab, 98 байт
источник
Октава,
7573 байтаОбъяснение:
polyval
имеет преимущество передbase2dec
тем, что оно векторизовано, поэтомуfor
цикл не требуется.Только '0' .. '9' и прописные буквы 'A' .. 'Z' поддерживаются в качестве входных данных.
источник
polyval
для векторизации!Japt , 26 байт
Попробуйте онлайн!
Неуправляемый и объяснение
источник
Pyth, 16 байт
Попробуйте онлайн
Explaination:
источник
CJam,
2827 байтовСпасибо Reto Koradi за сохранение 1 байта.
Это немного ужасно ...
Требуются заглавные буквы.
Проверьте это здесь.
CJam не имеет встроенного преобразования base-36 из строк, поэтому мы должны сами выводить строки. Я пробовал все виды divmod shenanigans, но, кажется, самое короткое, чтобы построить строку из всех 36 цифр и просто найти индекс каждого символа в этой строке.
источник
q{'0-_9>7*-}%
это так же коротко.Функция C, 93 (только 32-разрядное целое число)
Предполагая, что все в порядке, если выходные данные доходят только до INT_MAX, тогда мы можем сделать это:
Последний тестовый пример подразумевает, что этого, вероятно, недостаточно. Если так, то с 64-битными целыми числами мы имеем:
Функция С, 122
К сожалению,
#include <stdlib.h>
требуется, поэтому тип возвращаемого значенияstrtoll()
правильный. Нам нужно использоватьlong long
для обработкиHELLOworld
теста. В противном случае это может быть немного короче.Тестовый водитель:
Тестовый вывод:
источник
#include <stdlib.h>
как вы можете в C ++?Python 3, 142 байта
Аднан добился от меня удачного решения, но я хотел добавить свою попытку.
Эта функция обрабатывает только заглавные буквы. Добавьте
.upper()
кfor i in s
, и он будет обрабатывать как прописные, так и строчные буквы.источник
Scala 2.11, 93 байта
Это запускается на консоли Scala.
источник
Haskell, 97 байт
Поддерживает только строчные буквы. Пример использования:
Это так масштабно, потому что я должен сам реализовать как преобразование символов в ASCII, так и базовое преобразование. Соответствующие предопределенные функции находятся в модулях, которые требуют еще более дорогого импорта.
Как это работает:
i
преобразовывает символc
в его цифровое значение (например,i 't'
->29
).f
вычисляет значение входной строки для каждой возможной базы и суммирует ее. Вариант без pointfree внутренней петлиmap (\base -> foldl1 (\value digit -> value*base + digit) (map i s)) [ ...bases... ]
.источник
JavaScript (ES6), 86 байт
объяснение
Тестовое задание
Показать фрагмент кода
источник
&&b=v
сохраняет 1 байт над?b=v:0
.Perl 6 , 35 байт
использование:
источник
Цейлон,
10096 байтСначала у меня была эта более простая версия, занимающая всего 69 байт:
Но это терпит неудачу с первым контрольным примером, возвращая
2000000000665
вместо665
. ( Причина в том, чтоT
in2T
анализируется как Tera, то есть умножает 2 на 10 ^ 12, когда основание равно 10. ) Поэтому нам нужно уловить этот случай отдельно. Спасибо Нейлу за то, что он предложил другой способ сделать это, сохранив 4 байта.отформатирован:
источник