Ввод:
список / массив целых чисел, для которого каждый элемент находится в диапазоне 2-36
.
Выходные данные:
сумма целых чисел (как основание 10), где каждое следующее целое находится в базе предыдущего значения (начиная с обычного основания 10).
Пример:
допустим, у нас есть входные данные, подобные этим: [4, 12, 34, 20, 14, 6, 25, 13, 33]
Тогда у нас есть такая сумма:
4 (4 in base-10) +
6 (12 in base-4 ) +
40 (34 in base-12) +
68 (20 in base-34) +
24 (14 in base-20) +
6 (6 in base-14) +
17 (25 in base-6 ) +
28 (13 in base-26) +
42 (33 in base-13)
= 235
Математическая база объяснила:
я подумала, что все знают, как работает база, но я приведу краткий пример того, как она работает в любом случае, на всякий случай. Давайте возьмем34 in base-12
для примера, как мы получили40
?
1-34 in regular base-10:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
So, from 1 to 34 is 34 steps in base-10
1-34 in base-12:
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 2B, 30, 31, 32, 33, 34
So, from 1 to 34 is 40 steps in base-12
Вот, пожалуй, полезный калькулятор.
Правила соревнований:
- Размер массива будет в разумных пределах (как
1-100
/ см. Контрольные примеры). - Тестовые случаи никогда не будут содержать целых чисел, текущее значение которых недопустимо для его предыдущей базы (т. Е. У вас никогда не будет ничего подобного
19 in base-6
или6 in base-6
, поскольку в base-6 содержатся только цифры0-5
). - Вы можете принять входные данные любым удобным для вас способом. Может быть как массив int, как строка, разделенная запятыми / пробелами, и т. Д. Ваш вызов. (Вы также можете использовать int-массив в обратном порядке, что может быть полезно для стековых языков программирования.)
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к гольфу. Постарайтесь найти максимально короткий ответ для любого языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
[4, 12, 34, 20, 14, 6, 25, 13, 33] -> 235
4+ 6+ 40+ 68+ 24+ 6+ 17+ 28+ 42
[5, 14, 2, 11, 30, 18] -> 90
5+ 9+ 2+ 3+ 33+ 38
[12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 12, 2, 11, 3, 10, 2, 10] -> 98
12+ 13+ 11+ 9+ 8+ 7+ 6+ 5+ 4+ 3+ 5+ 2+ 3+ 3+ 3+ 2+ 2
[36, 36] -> 150
36+ 114
code-golf
math
base-conversion
Кевин Круйссен
источник
источник
Ответы:
05AB1E ,
765 байтИспользует кодировку 05AB1E .
Сохранено 1 байт с использованием нового встроенного в
š
соответствии с предложением Кевина Круйссенаобъяснение
Входной список принимается в обратном порядке, что допускается в спецификации вызова.
Попробуйте онлайн!
Модифицированный тестовый набор
источник
š
вместо¸ì
. Кроме того, ваше объяснение гласит « добавление » вместо « prepend ». :)Python 3, 40 байт
Тесты в идеоне
map(str, a)
создает генератор,G
который вызываетstr
каждое значение вa
, преобразование в строкиmap(int, G, [10]+a)
создает генератор, который вызываетint(g, v)
пары по парамG
и[10]+a
int(g, v)
преобразует строкуg
из целочисленной базыv
(еслиv
она в[2,36]
иg
действительна)sum
делает то, что говорит на жестеисточник
Python 2, 48 байт
Тесты в идеоне
zip(a,[10]+a)
траверсы пары значений вa
, а предыдущее значение или10
для первого в обращенного вызова на строку, преобразует строку из целого базы (если в и действует) то , что он говорит на оловоbackticks
int
x
s
int(s, y)
s
y
y
[2,36]
s
sum
источник
Perl,
353433 байтаВключает +2 для
-ap
Запустите со списком номеров на STDIN:
basemix.pl
:Я целую вечность ждал возможности использовать это злоупотребление ...
объяснение
Входные номера могут содержать не более 2 цифр. Число
xy
в базеb
простоb*x+y
. Я собираюсь использовать регулярное выражение,/.$/
поэтому первая цифра заканчивается,$`
а последняя цифра$&
, поэтому вклад в сумму$&+$b*$`
.Я злоупотребляю тем фактом, что
for
неправильно локализует переменные регулярного выражения (как, например,map
иwhile
делать), поэтому результаты совпадения в предыдущем цикле все еще доступны в текущем цикле. Поэтому, если я осторожен с порядком, в котором я выполняю операции, база доступна как"$`$&"
, за исключением самого первого цикла, где мне нужно, чтобы база была 10. Поэтому я использую"$`$& 10"
вместоПервый способ также
$&
является злоупотреблением, поскольку он фактически изменяется,/.$/
пока он уже находится в стеке, ожидая добавления.Последнее злоупотребление
}{
в конце меняет цикл, подразумеваемый-p
отв
Что означает,
$_
будет неопределенным в печати, но это все равно добавляет,$\
в котором я накопил сумму. Это также стандартная игра в гольф, чтобы получить пост-петлевую обработкуисточник
PHP,
5351 байтИтерирует по входу, преобразовывая каждый вход в строковый вариант. Затем принимает целочисленное значение, используя предыдущее число в качестве базы. Для первого числа база не будет установлена, PHP будет начинаться с 10 (выведено из числового формата).
Запустите так (
-d
добавлено только для эстетики):Tweaks
источник
Желе , 7 байт
Попробуйте онлайн!
источник
ṖḌ
наF
Java, 86 байт
Тестирование и разгул
источник
JavaScript ES6,
454241 байтConventiently
parseInt(x,0) === parseInt(x,10)
.редактирование : 1 байт сохранен благодаря @ETHproductions
источник
&&s
на|s
.const g
простоg
Чистая Баш, 38
Список ввода дается в командной строке.
for i;
автоматически перебирает входные параметры (эквивалентноfor i in $@;
).Ideone.
источник
Java 7,
1098986 байтГольф 20 байтов благодаря @cliffroot (из которых 12 из-за глупой ошибки я сделал сам).
Ungolfed & тестовый код:
Попробуй это здесь.
Выход:
источник
p
? Сумма может быть вычислена следующим образом, не так лиr+=r.valueOf(""+a[i],a[i-1])
?+""
вместоvalueOf
и удалил ненужные переменные -int c(int[]a){for(Integer i=1;i<a.length;a[0]+=i.valueOf(a[i]+"",a[++i-2]));return a[0];}
10
иp
изменил. Я понял ошибку и исправил ее, но так как строковая часть теперь является обычной базой-10, я действительно могу удалитьtoString
и просто использовать+""
.. Спасибо, а также спасибо за игру в гольф -20 других байтов. Я действительно должен ответить, что ты больше не можешь играть в гольф (не то, чтобы я не ценил это! Чем короче, тем лучше - в код-гольфе, то есть; P)На самом деле, 12 байтов
Попробуйте онлайн!
Объяснение:
источник
CJam , 15 байтов
Попробуйте онлайн!
объяснение
источник
Haskell,
6559 байтПроверьте это на Ideone .
источник
Matlab, 68 байт
Не очень креативное решение, но вот оно:
тесты:
источник
function s=r(x);...
JavaScript (ES6),
544840 байтЯ использовал рекурсивный подход.
Сохранено 6 байт, благодаря Lmis!
Спасено еще 8 байтов, благодаря Нейлу!
источник
parseInt(a,b)
вместо,parseInt(a[0],b)
посколькуparseInt
преобразует первый аргумент в строку и игнорирует все, начиная с первого недопустимого символа (то есть ',').a[0]?stuff():0
вместоa.length&&stuff()
f=([b,...a],c)=>b?parseInt(b,c)+f(a,b):0
slice
функциюPerl 6 ,
5250 байтОбъяснение:
источник
Python 2, 52 байта
Проверьте это на Ideone .
источник
Юлия, 63 байта
Разбирает каждое число (кроме первого), принимая предыдущий элемент в качестве базы и суммы. Добавляет первый элемент в конце
источник
Рубин, 52 байта
ungolfed
использование
источник
Скала, 67 байт
Объяснение:
источник
Mathematica, 59 байт
Я хотел бы, чтобы имена функций Mathematica были короче. Но в остальном я счастлив.
Например,
доходность
235
.{##,0}
список входных аргументов с добавленным 0 (представляющий цифры);{10,##}
список входных аргументов с 10 префиксами (представляющими базы). Эта пара списковTranspose
d, чтобы связать каждый с цифрой с ее основанием, иFromDigits
(ууу!) Преобразует каждую пару цифра-основание в целое число-10, результаты которого суммируютсяTr
.источник
Common Lisp, 83
Детали
loop
Конструкция принимает «V» , то ш итерации конструкций, где V представляет собой выражение, вычисляемыми в первый раз переменная итерации вычисляются, и ж это выражение будет оценено для последовательных итераций. Объявления оцениваются один за другим, поэтомуbase
сначала отображается «10», затем повторяется предыдущий элементstring
спискаlist
.sum
Ключевое слово вычисляет сумму: целое число считывается изstring
с основанием Ь , где Ь является целым числом разобрано изbase
строки, в базе 10#1=
и#1#
является обозначением , чтобы определить и использовать переменные чтения: первое влияет на s-выражение переменной, другое заменяет ссылку тем же объектом. Это сохраняет некоторые символы для длинных имен.пример
источник
Japt
-x
, 7 байтПопытайся
источник