@@ -67,8 +67,9 @@ def shitfuck(k, recurrence_counter):
6767 recurrence_counter = \
6868 nifty_collections .FrozenCrateCounter (recurrence_counter )
6969 if k == 1 :
70- assert recurrence_counter # Works because `FrozenCounter` implements
71- # `__bool__`.
70+ assert recurrence_counter
71+ # (Works because `FrozenCrateCounter` has a functioning `__bool__`,
72+ # unlike Python's `Counter`.)
7273 return 1
7374 try :
7475 return _shitfuck_cache [(k , recurrence_counter )]
@@ -80,7 +81,8 @@ def shitfuck(k, recurrence_counter):
8081 while len (levels ) < k and current_reccurence_counters :
8182 k_ = k - len (levels )
8283 levels .append (
83- {recurrence_counter_ : recurrence_counter_ .get_sub_counters_counter ()
84+ {recurrence_counter_ : recurrence_counter_ .
85+ get_sub_counters_for_one_crate_removed ()
8486 for recurrence_counter_ in current_reccurence_counters
8587 if (k_ , recurrence_counter_ ) not in _shitfuck_cache
8688 })
@@ -116,8 +118,9 @@ def catshit(k, recurrence_counter):
116118 recurrence_counter = \
117119 nifty_collections .FrozenCrateCounter (recurrence_counter )
118120 if k == 1 :
119- assert recurrence_counter # Works because `FrozenCounter` implements
120- # `__bool__`.
121+ assert recurrence_counter
122+ # (Works because `FrozenCrateCounter` has a functioning `__bool__`,
123+ # unlike Python's `Counter`.)
121124 return 1
122125 try :
123126 return _catshit_cache [(k , recurrence_counter )]
@@ -129,24 +132,24 @@ def catshit(k, recurrence_counter):
129132 while len (levels ) < k and current_reccurence_counters :
130133 k_ = k - len (levels )
131134 levels .append (
132- {recurrence_counter_ : recurrence_counter_ .get_sub_counters_counter ()
135+ {recurrence_counter_ : recurrence_counter_ .
136+ get_sub_counters_for_one_crate_and_previous_piles_removed ()
133137 for recurrence_counter_ in current_reccurence_counters
134- if (k_ , recurrence_counter_ ) not in _catshit_cache
138+ if (k_ , recurrence_counter_ ) not in _shitfuck_cache
135139 })
136140 current_reccurence_counters = \
137141 set (itertools .chain (* levels [- 1 ].values ()))
138142
139143 # The last level is calculated. Time to make our way up.
140144 for k_ , level in enumerate (reversed (levels ), (k - len (levels ) + 1 )):
141145 if k_ == 1 :
142- for recurrence_counter_ , sub_counters_counter in level .items ():
143- _catshit_cache [(k_ , recurrence_counter_ )] = \
144- recurrence_counter_ .n_elements
146+ for recurrence_counter_ , sub_counters in level .items ():
147+ _catshit_cache [(k_ , recurrence_counter_ )] = len (sub_counters )
145148 else :
146- for recurrence_counter_ , sub_counters_counter in level .items ():
149+ for recurrence_counter_ , sub_counters in level .items ():
147150 _catshit_cache [(k_ , recurrence_counter_ )] = sum (
148151 (_catshit_cache [(k_ - 1 , sub_counter )] * factor for
149- sub_counter , factor in sub_counters_counter .items ())
152+ sub_counter , factor in sub_counters .items ())
150153 )
151154
152155 return _catshit_cache [(k , recurrence_counter )]
0 commit comments