Входные данные:
Непустой список / вектор, где каждый элемент содержит значение / символ, указывающий, будете ли вы считать вверх или вниз . Я буду использовать 1
и -1
, но вы можете выбрать все, что вам нравится. Вы можете использовать только два значения, вы не можете использовать 1,2,3...
и -1,-2,-3...
для вверх и вниз соответственно.
Вызов:
Вы будете использовать эти цифры в геометрической прогрессии 1, 2, 4, 8, 16, 32 ... . Каждый раз, когда вы начинаете считать вверх или вниз, вы будете считать с шагом 1 , затем 2 , затем 4 и так далее. Если вы измените и начнете считать иначе, то вычтете 1 , затем 2 , затем 4 и так далее. Выводом будет число, которое вы получите в конце.
Примеры:
В приведенном ниже примере первая строка - это ввод, вторая строка - это числа, которые вы считаете вверх / вниз, третья строка - накопленная сумма, а последняя строка - выход.
Пример 1:
1 1 1 1 1 1 1 1 1 1
1 2 4 8 16 32 64 128 256 512
1 3 7 15 31 63 127 255 511 1023
1023
Пример 2:
1 1 1 1 1 1 -1 -1 -1 -1 1 1 1
1 2 4 8 16 32 -1 -2 -4 -8 1 2 4
1 3 7 15 31 63 62 60 56 48 49 51 55
55
Как вы можете видеть, первое 1
или -1
«сбрасывает» значение, которое мы рассчитываем, и последовательные последовательности 1
или-1
означают удвоение значения.
Пример 3:
-1 -1 1 1 -1 -1 -1
-1 -2 1 2 -1 -2 -4
-1 -3 -2 0 -1 -3 -7
-7
Некоторые дополнительные тестовые случаи для учета некоторых потенциальных угловых случаев.
Ввод на первой строке. Выход на второй.
1
1
-------
-1
-1
-------
-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
0
Это код-гольф, поэтому выигрывает самая короткая подача на каждом языке.
®ì2Ãx
чтобыxì2
спасти два байта.Cubix , 65 байт
Попробуйте онлайн!
Смотреть это беги
Как краткое объяснение этого:
источник
JavaScript (ES6), 38 байт
источник
R , 32 байта
Попробуйте онлайн!
Это тот же метод, что и несколько других здесь.
С вводом
-1 -1 1 1 -1 -1 -1
2, 2, 3
и значениями-1, 1, -1
3, 3, 7
-3, 3, -7
-7
источник
Python 3 ,
5756 байт-1 байт благодаря @notjagan
Попробуйте онлайн!
источник
s>()
заняло у меня секунду. Это действительно умно.Желе , 4 байта
Попробуйте онлайн!
источник
C ++ 14, 58 байт
Принимает ввод через
v
аргумент (std::vector
или любой итеративный контейнер), выводитs
аргумент (посредством ссылки). Каждый элементv
должен быть или1
или-1
.Пример использования и тестовые случаи.
источник
Брахилог , 13 байт
Попробуйте онлайн!
Брахилог использует
_
вместо-
.Объяснение:
источник
Python,
7672 байтаПопробуйте онлайн!
источник
Pyth , 12 байт
Попробуйте онлайн!
источник
PHP, 51 байт
Запустите
-n
или попробуйте онлайн .источник
CJam (13 байт)
Набор онлайн-тестов . Это анонимный блок (функция), который принимает массив стеков в стеке и оставляет int в стеке. Последний тест показывает, что он правильно обрабатывает пустой массив, давая 0.
Подход заключается в простом кодировании по длинам серий, за которым следует ручное декодирование по длинам серий каждого преобразования и базового преобразования. Используя встроенное декодирование по длине прогона, я получаю еще один байт с помощью
{e`1/:e~2fb1b}
или{e`{ae~2b}%1b}
.источник
05AB1E , 6 байтов
Попробуйте онлайн!
источник
γε¬sƶÄ<o*}OO
Haskell,
5453 байтаПопробуйте онлайн!
Простая рекурсия, которая удваивает аккумулятор
k
или сбрасывает его в1
/-1
и добавляет значения каждого шага.источник
Mathematica, 60 байт
источник
Mathematica, 25 байт
источник
Java, 91 байт
источник
Pyth, 11 байт
Попробуйте онлайн
Как это устроено
источник