refactor: Depth First Search(DFS)

This commit is contained in:
ruthra kumar 2023-09-25 10:35:54 +05:30
parent 4c8a8c3bcd
commit 5a25c80f2e

View File

@ -1,7 +1,7 @@
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
from math import ceil, floor
from math import floor
import frappe
from dateutil.relativedelta import relativedelta
@ -12,11 +12,18 @@ from frappe.utils import getdate
class BisectAccountingStatements(Document):
@frappe.whitelist()
def bisect(self):
cur_frm_date, cur_to_date = getdate(self.from_date), getdate(self.to_date)
while True:
period_list = [(getdate(self.from_date), getdate(self.to_date))]
dates = []
while period_list:
cur_frm_date, cur_to_date = period_list.pop()
delta = cur_to_date - cur_frm_date
if delta.days == 0:
return
if not delta.days > 0:
continue
cur_floor = floor(delta.days / 2)
cur_to_date = cur_frm_date + relativedelta(days=+cur_floor)
print((cur_frm_date, cur_to_date), delta, cur_floor)
next_to_date = cur_frm_date + relativedelta(days=+cur_floor)
left = (cur_frm_date, next_to_date)
period_list.append(left)
next_frm_date = cur_frm_date + relativedelta(days=+(cur_floor + 1))
right = (next_frm_date, cur_to_date)
period_list.append(right)