Вызов с разрешения моего конкурса на участие в университетском коде
После окончания учебы пару месяцев назад Мари открыла банковский счет, чтобы начать получать оплату за свою первую работу в городе. С тех пор она провела несколько транзакций с ним. Ее первый платеж составил 1000 долларов. На эти деньги она заплатила за ужин, на который пригласила своих родителей (ужин стоил 150 долларов), затем она сделала покупку в известном супермаркете (80 долларов) и зарезервировала гостиницу для отпуска (200 долларов). В конце месяца она снова получила свой платеж (1040 долларов, чуть больше, чем в предыдущем месяце), а на следующий день она потратила еще 70 долларов в супермаркете.
Сегодня она поняла, что если после оплаты первых 80 долларов в супермаркете будет создан второй счет, а первый заморожен, то оба счета будут иметь одинаковый баланс:
Это событие было настолько редким для нее, что она хочет продолжать выяснять, есть ли у этой функции и ее друзей движения в этой учетной записи или нет.
Вызов
Учитывая список транзакций, выведите количество моментов времени, в течение которых владелец банковского счета мог создать вторую учетную запись, чтобы у обоих был один и тот же конечный баланс.
Пример: [1000, -150, -80, -200, 1040, -70]
Прецедент
- Вход:
1000 -150 -80 -200 1040 -70
Выход:1
- Вход:
100 -100
Выход:2
- Вход:
1 2 3
Выход:1
- Вход:
10 -20 15
Выход:0
- Вход:
15 -15 15 -15
Выход:3
- Вход:
1
Выход:0
Ноты
- Вы можете предположить, что не будет никакой транзакции в $ 0 долларов
- Вы можете принять участие любым разумным способом
Ответы:
C # (интерактивный компилятор Visual C #) , 63 байта
Сохранено 6 байтов благодаря Дана
Попробуйте онлайн!
источник
Perl 6 , 25 байт
Попробуйте онлайн!
объяснение
Мы просто добавляем ноль к данному списку (
0,|$_
), создаем последовательность частичных сумм с[\+]
(то есть последовательность, образованную первым элементом, сумму первых двух, сумму первых трех и т. Д.), И ищем (grep
) для любого элементы, которые точно равны половине конечного состояния счета (сумма данного списка). Наконец, мы посчитаем их с+
.источник
05AB1E , 11 байт
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Желе ,
116 байтПопробуйте онлайн!
источник
JavaScript (Node.js) , 45 байт
Попробуйте онлайн!
Сохранить 4 байта с помощью
-~o[s]
. Спасибо Шегги.источник
+
изменен на!
, чтобы он мог работать для ввода[100]
.Perl 5
-p
,4241 байт@NahuelFouilleul сохраняет байт
Попробуйте онлайн!
источник
y/ /+/;
сохраняет 1 байтJavaScript (ES6), 52 байта
Попробуйте онлайн!
комментарии
Рекурсивная версия,
5453 байтаПопробуйте онлайн!
источник
APL (Dyalog Unicode) , 21 байт SBCS
Функция анонимного молчаливого префикса
Попробуйте онлайн!
⍳
ɩ ndices∘
о≢
подсчете сделок0,
предварять ноль⊂(
…)¨⍨
Применить следующую молчаливую функцию с каждым из них в качестве левого аргумента, а весь список транзакций - в качестве правого аргумента (⍨
аргумент swaps⊂
весь список транзакций(
... в)
качестве левого аргумента для функции ниже,¨
применяемой к каждому из индексов⍨
с замененными аргументами (т.е. список справа, индексы слева:↓
отбросьте так много слева1⊥
сумма (лит. оценка в базе-1)(
...)=
это (0/1) равно ...↑
взять столько транзакций слева+/
суммировать их+/
суммируйте этот логический список, чтобы получить количество истинисточник
Пакетная, 84 байта
Принимает ввод в качестве аргументов командной строки. Объяснение:
Соедините аргументы с пробелами.
Замените пробелы на
+
s и оцените результат. Также очистите счет.Для каждой суммы вычтите двойную сумму из суммы. Если результат равен нулю, то это правильное совпадение, поэтому увеличьте счетчик. Дополнительный ноль в начале учитывает совпадение до любых сумм.
Распечатайте результат.
источник
Древесный уголь , 15 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
К сожалению, в Charcoal
Sum([])
это не0
так, я должен убедиться, что всегда есть хотя бы один элемент для суммирования.источник
Python 3 ,
6758 байтПопробуйте онлайн!
-9 байт благодаря @ Не будь х-тройной точкой
источник
lambda l:sum(sum(l[:x])==sum(l[x:])for x in range(len(l)+1))
.sum(l[:x])*2==sum(l)
экономит вам еще 2 байта.R ,
5037 байтПопробуйте онлайн!
источник
MATL , 9 байт
Попробуйте онлайн!
Такой же подход, как и у некоторых других ответов: добавьте ноль и проверьте, как часто половина накопленной суммы равна общей сумме.
источник
Japt
-x
,1411 байтПопробуй это
источник
PowerShell ,
8882 байта-6 байт благодаря маззи
Попробуйте онлайн!
Это выглядит как очень неуклюжий метод, но он сделал свою работу. Я постараюсь обновить его в будущем.
источник
$i+=<predicate>
вместо этогоif(<predicate>){$i++}
PowerShell ,
494536 байтПопробуйте онлайн!
источник
Брахилог , 9 байт
Не так хорошо, как день 1. Этот проигрывает Желе
объяснение
Набор тестов: попробуйте онлайн!
источник
Баш, 52 байта
TIO
Трюк: установка
IFS=+
,"$*"
расширяется до строки, где аргументы разделены+
, в арифметическом выражении, эквивалентном суммеисточник
Haskell,
4635 байтПопробуйте онлайн!
источник
J , 19 байт
Попробуйте онлайн!
объяснение
источник