Я проверил описание stackExchange, а вопросы алгоритма - одна из разрешенных тем. Так вот.
Для ввода диапазона, где начальные и конечные числа имеют одинаковое количество цифр (например, 2, 3 или 4), я хочу написать код для создания набора регулярных выражений, который, номер в свою очередь, скажите, находится ли это число в исходном диапазоне.
Например: если диапазон равен 145-387, то 146, 200 и 280 будут соответствовать одному из выраженных регулярных выражений и 144, 390 (используется 290) и 445 (обычно говорят 345) не будет.
Я думал, что результатом будет список регулярных выражений типа:
14[5-9] // match 145-149
1[5-9]0-9] // 150-199
2[0-9][0-9] // 200-299
3[0-7][0-9] // 300-379
38[0-7] // 380-387
а затем программное обеспечение, проверяющее число, проверит, проверяет ли тестируемый трехзначный код любой из них.
Итак, каков наилучший способ генерации набора выражений?
Последний (в серии), который я придумал, заключается в следующем:
- определить первую цифру, в которой отличаются два номера диапазона (1145-1158, первая цифра - третья).
- для разных цифр, определите, отличаются ли их первые цифры более чем одним - если это так, диапазон для этого получает свое собственное регулярное выражение (200-299 в нашем примере).
- чтобы получить нижние диапазоны: для каждой другой цифры: префикс первой цифрой (-ами) от начала диапазона, увеличивайте цифру на единицу, площадку с 0s до той же длины и пару с числом, которое имеет 9 в цифровом месте и во всех мягких местах. В нашем примере с шагом от 4 до 5, чтобы получить 150, сгенерируйте регулярное выражение для обработки 150-199.
- чтобы получить более высокие диапазоны: для каждой другой цифры: префикс с первой цифрой (-ами) от конца диапазона, декремент цифрой на единицу, прокладка с 0 с, пара с числом с 9 с во всех заполненных 0 местах и декрементом цифра. В нашем примере регулярное выражение обрабатывает 300-379.
Я что-то упустил? Есть подробности даже в том, что я замалчиваю, это похоже на что-то, что выиграет от алгоритмического меча, прорезающего детали. Но другие вещи, которые я придумал, даже более беспорядочны, чем это.