@@ -60,16 +60,27 @@ def abs_stirling(n, k):
6060
6161_shitfuck_cache = {}
6262
63- def shitfuck (k , recurrences ):
63+ def get_sub_counters (counter ):
64+ assert isinstance (counter , nifty_collections .FrozenCounter )
65+ return {
66+ nifty_collections .FrozenCounter (
67+ {key : (value - (key == key_to_reduce )) for key , value in self .items ()}
68+ ) for key_to_reduce in self
69+ }
70+
71+
72+ def shitfuck (k , recurrence_counter ):
6473 from python_toolbox import nifty_collections
65- assert isinstance (recurrences , nifty_collections .FrozenCounter )
66- levels = [collections .Counter ({recurrences : 1 })]
67- while len (levels ) < k and any (((k - len (levels ) + 1 ), recurrences )
74+ assert isinstance (recurrence_counter , nifty_collections .FrozenCounter )
75+ levels = []
76+ current_reccurence_counters = {recurrence_counter }
77+ while len (levels ) < k and any (((k - len (levels ) + 1 ), recurrence_counter )
6878 not in _shitfuck_cache for x in levels [- 1 ]):
69- new_level = collections .Counter ()
70- for recurrences_ , factor in levels [- 1 ].items ():
71- for smaller_recurrences in recurrences_ .counters_with_one_removed :
72- new_level [(k - len (levels ), smaller_recurrences )] += factor
79+ new_level = {}
80+ for recurrence_counter_ in current_reccurence_counters :
81+ new_level [recurrence_counter_ ] =
82+ for smaller_recurrence_counter in recurrence_counter_ .counters_with_one_removed :
83+ new_level [(k - len (levels ), smaller_recurrence_counter )] += factor
7384 levels .append (new_level )
7485 # The last level is calculated. Time to make our way up.
7586 if len (levels ) == k :
0 commit comments