Войти Регистрация
Data base

159. Кто запустил круг переводов

Сложная

Neo4j · Neo4j 5.26.20

Деньги гоняют по кругу, чтобы «состарить» счета и запутать проверку: счёт A переводит B, B — C, C — обратно A. Антифрод Т‑Банка ищет такие круги.

Граф: (:Account {id})-[:TRANSFER {amount, at}]->(:Account), amount в рублях, at — datetime.

Круг — путь из 2–4 переводов, который возвращается на исходный счёт. Все переводы в нём ≥ 50 000 ₽, каждый следующий позже предыдущего, последний — не позже чем через 24 часа после первого. Верните счета, с которых круг начался (первый перевод), и hops — длину самого короткого такого круга. Порядок — по account.

В работе: Правило антифрода на графе переводов: поиск колец.

Как проверяем Движка Neo4j в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите один вариант. После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
антифродциклыпути переменной длиныall/noneдатыWITH

Источник: на данных банка: переводы между счетами. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.

Какой запрос найдёт счета, запустившие круг?

  • any(amount ≥ 50 000), порядок и сутки проверяются
  • all(amount ≥ 50 000), без проверки времени
  • all по суммам, переводы по возрастанию времени, окно 24 часа, *2..4
  • то же, но *1..4