从数字范围创建数字掩码

时间:2018-01-30 14:16:14

标签: python algorithm

我有这样的范围:

1323000-1555999

有必要创建涵盖整个范围的“面具”。因此,上面范围的“掩码”列表应如下所示:

1323***
1324***
1325***
...
14*****
...
153****
154****
1550***
1551*** 

等等。

任何人都有关于如何使用Python解决此问题的想法?

这个想法是使用最少量的面具覆盖所有范围。所以在1000-1999的情况下,算法应该输出1 ***而不是101 *,102 * ......或10 **,11 ** ......

1 个答案:

答案 0 :(得分:3)

稍微循环:

代码:

def wild_card_range(start, end):
    while start <= end:
        shift = 0
        multiple = 1
        done = False
        over = False
        still_fits = True
        while not (done or over) and still_fits:
            multiple *= 10
            shift += 1
            next_value = int(start / multiple) * multiple + multiple
            done = next_value == end + 1
            over = next_value > end + 1
            still_fits = int(start / multiple) == \
                         int((start + multiple - 1) / multiple)

        if over or not still_fits:
            multiple = int(multiple / 10)
            shift -= 1
        yield str(int(start / multiple)) + '*' * shift
        start += multiple

for mask in wild_card_range(1323000, 1555999):
    print(mask)

结果:

1323***
1324***
1325***
1326***
1327***
1328***
1329***
133****
134****
135****
136****
137****
138****
139****
14*****
150****
151****
152****
153****
154****
1550***
1551***
1552***
1553***
1554***
1555***