Входные данные:
Непустой список / вектор, где каждый элемент содержит значение / символ, указывающий, будете ли вы считать вверх или вниз . Я буду использовать 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
спасти два байта.