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