Получить следующее число из диапазона в лексикографическом порядке (без контейнера всех строк) ⇐ C++
-
Anonymous
Получить следующее число из диапазона в лексикографическом порядке (без контейнера всех строк)
Как бы вы спроектировали функцию, которая при каждом вызове возвращает следующее значение в заданном числовом диапазоне в лексикографическом порядке строкового представления... ?
Пример: диапазон 8..203 --> 10, 100..109, 11, 110..119, 12, 120..129, 13, 130..139, ..., 19, 190..199, 20, 200..203, 30..79, 8, 80..89, 9 , 90..99.
Ограничения: индексы 0..~INT_MAX, фиксированное пространство, производительность O (длина диапазона), желательно «ленивая», поэтому, если вы прекратите итерацию на полпути, вы не потратите зря усилия по обработке. Пожалуйста, не публикуйте «решения» методом грубой силы, выполняющие числовые итерации при создании строк, которые затем сортируются.
Полезность: если вы повторно генерируя данные, которые в конечном итоге необходимо лексикографически представить или обработать, лексикографический ряд обещает ленивую генерацию по мере необходимости, снижает требования к памяти и устраняет сортировку.
Предпосылка: когда отвечаешь на это вопрос сегодня, мое решение дало вывод в числовом порядке (т. е. 8, 9, 10, 11, 12), а не в лексикографическом порядке (10, 11, 12, 8, 8), как показано в вопросе. Я думал, что будет легко написать или найти решение, но мой Google-foo меня подвел, и это оказалось сложнее, чем я ожидал, поэтому я решил собрать/поделиться здесь....
(Отмечен C++ как мой основной язык, и лично меня особенно интересуют решения на C++, но все приветствуется)
Кто-то проголосовал за закрытие этого раздела, потому что я либо не продемонстрировал минимальное понимание решаемой проблемы (хммм!?! ;-P), или попытка решения. Мое решение опубликовано как ответ, так как я рад, что его прокомментировали и порадовали жестоким ветром мудрости Stack Overflow.... О_о
Подробнее здесь: https://stackoverflow.com/questions/207 ... -of-all-st
Как бы вы спроектировали функцию, которая при каждом вызове возвращает следующее значение в заданном числовом диапазоне в лексикографическом порядке строкового представления... ?
Пример: диапазон 8..203 --> 10, 100..109, 11, 110..119, 12, 120..129, 13, 130..139, ..., 19, 190..199, 20, 200..203, 30..79, 8, 80..89, 9 , 90..99.
Ограничения: индексы 0..~INT_MAX, фиксированное пространство, производительность O (длина диапазона), желательно «ленивая», поэтому, если вы прекратите итерацию на полпути, вы не потратите зря усилия по обработке. Пожалуйста, не публикуйте «решения» методом грубой силы, выполняющие числовые итерации при создании строк, которые затем сортируются.
Полезность: если вы повторно генерируя данные, которые в конечном итоге необходимо лексикографически представить или обработать, лексикографический ряд обещает ленивую генерацию по мере необходимости, снижает требования к памяти и устраняет сортировку.
Предпосылка: когда отвечаешь на это вопрос сегодня, мое решение дало вывод в числовом порядке (т. е. 8, 9, 10, 11, 12), а не в лексикографическом порядке (10, 11, 12, 8, 8), как показано в вопросе. Я думал, что будет легко написать или найти решение, но мой Google-foo меня подвел, и это оказалось сложнее, чем я ожидал, поэтому я решил собрать/поделиться здесь....
(Отмечен C++ как мой основной язык, и лично меня особенно интересуют решения на C++, но все приветствуется)
Кто-то проголосовал за закрытие этого раздела, потому что я либо не продемонстрировал минимальное понимание решаемой проблемы (хммм!?! ;-P), или попытка решения. Мое решение опубликовано как ответ, так как я рад, что его прокомментировали и порадовали жестоким ветром мудрости Stack Overflow.... О_о
Подробнее здесь: https://stackoverflow.com/questions/207 ... -of-all-st
Мобильная версия