from math import comb
from itertools import product

def gen(s, k):
    if k < 1:
        return
    if k == 1:
        yield [s]
    for i in range(s + 1):
        for g in gen(s - i, k - 1):
            yield [i] + g

distance = lambda x, y: sum(abs(u) - abs(v) for u, v in zip(x, y))

def get_point(word, radius):
    n = len(word)
    center = [ord(x) - 97 for x in word]
    ans = 1
    for r in range(1, radius + 1):
        for dist in gen(r, n):
            for d in product(*[(-x, x) if x > 0 else (x,) for x in dist]):                
                if all(0 <= u + v < 26 for u, v in zip(center, d)):
                    ans += 1
    return ans
r = int(input())
w = input()
# res = get_point(w, r)
# print("res :", res)

def find_num_words(w, r):
    n = len(w)
    dp = [[0] * (r + 1) for _ in range(n + 1)]
    dp[0][0] = 1
    for i in range(n):
        for d in range(r + 1):
            if dp[i][d] > 0:
                for o in range(97, 97 + 26):
                    _d = d + abs(ord(w[i]) - o)
                    if _d <= r:
                        print(i, d, chr(o))
                        dp[i + 1][_d] += dp[i][d]
    print(dp)
    return sum(dp[n][j] for j in range(r + 1))

# Example usage:
print(find_num_words(w, r))  # Output: 8
# [[1, 0, 0], [1, 1, 1], [1, 3, 4]]


Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: