Вступление
Вы получили работу в качестве министра финансов в своей вымышленной стране на заднем дворе. Вы решили создать свой собственный банк в своей стране для себя и своих менее надежных друзей. Поскольку вы не доверяете своим друзьям, вы решили написать программу для проверки всех транзакций, чтобы предотвратить перерасход ваших друзей за вымышленную валюту и разрушение вашей экономики.
задача
Учитывая начальный баланс и все транзакции, отфильтруйте все транзакции, в которых кто-то пытается перерасходовать, и заблокируйте любого, кто пытается перерасходовать (включая попытку перерасхода на закрытый счет), когда-либо снова использовать ваш банк, отфильтровывая будущие транзакции с его или из него. / ее банковский счет.
Ввод, вывод
Два списка A
и B
как вход и список C
как выход. A
это начальный баланс каждого аккаунта в формате [["Alice", 5], ["Bob", 8], ["Charlie", 2], ...]
. B
список транзакций в формате [["Bob", "Alice", 3], ["Charlie", "Bob", 5], ...]
где ["Bob", "Alice", 3]
означает, что Боб хочет заплатить Алисе 3 единицы валюты. C
должен иметь тот же формат, что и B
. A
, B
И C
может быть в любом подходящем формате.
Тестовые случаи
A: [["Alice", 5], ["Bob", 2]]
B: [["Alice", "Bob", 5], ["Bob", "Alice" 7]]
C: [["Alice", "Bob", 5], ["Bob", "Alice" 7]]
A: [["A", 2], ["B", 3], ["C", 5]]
B: [["C", "A", 2], ["B", "C", 4], ["A", "B", 2]]
C: [["C", "A", 2]]
A: [["A", 2], ["B", 3]]
B: [["A", "B", 2], ["A", "B", 2]]
C: [["A", "B", 2]]
A: [["A", 4], ["B", 0]]
B: [["A", "B", 1], ["A", "B", 5], ["A", "B", 2]]
C: [["A", "B", 1]]
A: [["A", 2], ["B", 3], ["C", 4]]
B: [["A", "B", 3], ["C", "B", 4]]
C: [["C", "B", 4]]
A: [["A", 2], ["B", 3], ["C", 4]]
B: [["A", "B", 3], ["B", "A", 4], ["C", "B" 2]]
C: []
счет
Это код-гольф , выигрывает самый короткий код в байтах на каждом языке.
A
быть также словарь, или список кортежей?["A", 2, "B", 3, "C", 5]
?A: [["A", 2], ["B", 3], ["C", 4]]
,B: [["A", "B", 3], ["C", "B", 4]]
,C: [["C", "B", 4]]
(действительная сделка после недопустимой один).Ответы:
JavaScript (ES6),
918879 байтСохранено 8 байт благодаря @NahuelFouilleul
Принимает ввод в синтаксисе карри
(a)(b)
.Контрольные примеры
Показать фрагмент кода
Украшенный и прокомментированный
источник
a=>b=>b.filter(([x,y,z])=>(a[x]-=z)>0&a[y]>0?a[y]+=z:0,a.map(([x,y])=>a[x]=y+1))
портирования Perl решения на JavaScript?Perl 5, 72 + 2 (-ap) = 74 байта
попробуйте это онлайн
источник
Python 2 , 103 байта
Попробуйте онлайн!
-12 благодаря овс .
Дольше из-за ограничений формата вывода:
В противном случае я мог бы сделать это для 92 байтов:
источник
Рубин , 57 байт
Попробуйте онлайн!
Принимает ввод
A
какHash
в формате{"A"=>2, "B"=>3}
. ВводB
и выводC
в предложенном формате.объяснение
источник
C ++, 193 байта
Введите A как
std::map
, B какstd::list
.Попробуйте онлайн!
источник