Генерация числовых строк по порядку с жестко задаными цифрами

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Добрый день форумчане. Приношу извинения за столь глупфй вопрос, просто очень давно не практиковался, не было возможности.
Имеется такая вот задачка - необходимо сгенерировать список строк состоящих из 10 символов. Символами являются три цифры 0,1,2.
Необходимо создать список в котором строки будут выглядеть таким образом
10000000000
10000000001
10000000002
10000000010
10000000011
10000000012
10000000020
10000000021
10000000022
10000000100
И так далее по порядку, никак ума не дам, пробовал в Повершеле, ерунда выходит, решил попробовать на Зенке, но все подзабыл
Спасибо
PS Это троичная система счисления, вдруг у кого нибудь есть решение для Питон, командной строки и.т.д.
 

username666

Client
Регистрация
20.03.2020
Сообщения
211
Благодарностей
89
Баллы
28
Берете число 10000000000 увеличиваете его счетчиком(кубик Обработка переменных) на +1 и записываете в список и так в цикле.
P.S про три символа проглядел)
 

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Берете число 10000000000 увеличиваете его счетчиком(кубик Обработка переменных) на +1 и записываете в список и так в цикле.
и уже на третьей итерации в списке появится строка содержащая цифру три
мне необходима генерация только тремя цифрами 0-1-2
поэтому тут кубик совсем ни при делах

Только код, только хардкор
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Добрый день форумчане. Приношу извинения за столь глупфй вопрос, просто очень давно не практиковался, не было возможности.
Имеется такая вот задачка - необходимо сгенерировать список строк состоящих из 10 символов. Символами являются три цифры 0,1,2.
Необходимо создать список в котором строки будут выглядеть таким образом
10000000000
10000000001
10000000002
10000000010
10000000011
10000000012
10000000020
10000000021
10000000022
10000000100
И так далее по порядку, никак ума не дам, пробовал в Повершеле, ерунда выходит, решил попробовать на Зенке, но все подзабыл
Спасибо
PS Это троичная система счисления, вдруг у кого нибудь есть решение для Питон, командной строки и.т.д.
Например, так:
C#:
long num = 0;
long checkNum = 2;

for (long i = 0; num < 22222222222; i++)
{
    if (num < checkNum)
    {
        project.Lists["nums"].Add(num); // добавить в список "nums"
        project.SendInfoToLog(num.ToString()); // Вывод в лог *можно убрать.
        num++;
        continue;
    }
    
    checkNum = checkNum * 10 + 2;
    num *= 10;
    continue;
}
94653


upd: исправил, чтобы было с нуля.
 
Последнее редактирование:
  • Спасибо
Реакции: DevOps

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
Добрый день форумчане. Приношу извинения за столь глупфй вопрос, просто очень давно не практиковался, не было возможности.
Имеется такая вот задачка - необходимо сгенерировать список строк состоящих из 10 символов. Символами являются три цифры 0,1,2.
Необходимо создать список в котором строки будут выглядеть таким образом
10000000000
10000000001
10000000002
10000000010
10000000011
10000000012
10000000020
10000000021
10000000022
10000000100
И так далее по порядку, никак ума не дам, пробовал в Повершеле, ерунда выходит, решил попробовать на Зенке, но все подзабыл
Спасибо
PS Это троичная система счисления, вдруг у кого нибудь есть решение для Питон, командной строки и.т.д.
C#:
Func<long, int, string> Toconvert = (n,p)=>{
    string line = string.Empty;
    while(true){
        long new_n = n/p;
        if(new_n > 0) {
            n = new_n;
            line = string.Format("{0}{1}", n%p, line);
        }
        else break;
    }
    return line;
};


int min = 177147; // Начальное значение 10000000000
int max = 100; // сколько элементов надо
var list = Enumerable.Range(min, max).Select(x=>Toconvert(x,3)).ToList();
list = list.Distinct().ToList();
list.ForEach(x=>project.SendInfoToLog(x));
94658


Подправил под любой алфавит, вдруг захочется переводить с свою кастомную систему счисления со своими значками.
C#:
string[] alphabet = new[]{
    "0","1","2" // нужный алфавит, пригодится, если символов будет больше 10
};

Func<int, int, string> Toconvert = (n,p)=>{
    string line = string.Empty;
    while(n > 0){
        n = (int) n/p;
        line = string.Format("{0}{1}", alphabet[n%p], line);       
    }
    return line;
};


int min = 177147; // Начальное значение 10000000000
int max = 100; // сколько элементов надо
List<string> list = Enumerable.Range(min, max).Select(x=>Toconvert(x,3)).ToList();
list = list.Distinct().ToList(); // Не понял откуда берутся дубли - пришлось удалять их
list.ForEach(x=>project.SendInfoToLog(x));
 
Последнее редактирование:

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Добрый день форумчане. Приношу извинения за столь глупфй вопрос, просто очень давно не практиковался, не было возможности.
Имеется такая вот задачка - необходимо сгенерировать список строк состоящих из 10 символов. Символами являются три цифры 0,1,2.
Необходимо создать список в котором строки будут выглядеть таким образом
10000000000
10000000001
10000000002
10000000010
10000000011
10000000012
10000000020
10000000021
10000000022
10000000100
И так далее по порядку, никак ума не дам, пробовал в Повершеле, ерунда выходит, решил попробовать на Зенке, но все подзабыл
Спасибо
PS Это троичная система счисления, вдруг у кого нибудь есть решение для Питон, командной строки и.т.д.
Совершенно не правильно понял задачу в прошлом моём сообщении.

Исправляюсь.
Генерация в список числа от 10000000000 , до 12222222222:
// 59049 = 10000000000 начало
// 118097 = 12222222222 конец

for (int i = 59049; i < 118097; i++)
{
    int temp = i;
    List<int> s = new List<int>();
    while(temp > 0)
    {
        int item = temp % 3;
        temp /= 3;
        s.Add(item);
    }
    s.Reverse();
    string str = string.Join<int>("", s);
  
    project.SendInfoToLog(str); // вывод в лог
    project.Lists["nums"].Add(str); // добавить в локальный список "nums"
}
Результат в списке (кликабельно):
94666


upd: Эх, не успел. Ответ уже дали верный, но я сделал немного по своему (9 строчек) и не подглядывая. Так что возможно он будет вам тоже полезен и заслужит "Спасибо".)
 

Вложения

Последнее редактирование:

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Всем огромное спасибо за подсказки. Удачного всемдня, хорошего настроения и большого профита
 

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
C#:
Func<long, int, string> Toconvert = (n,p)=>{
    string line = string.Empty;
    while(true){
        long new_n = n/p;
        if(new_n > 0) {
            n = new_n;
            line = string.Format("{0}{1}", n%p, line);
        }
        else break;
    }
    return line;
};


int min = 177147; // Начальное значение 10000000000
int max = 100; // сколько элементов надо
var list = Enumerable.Range(min, max).Select(x=>Toconvert(x,3)).ToList();
list = list.Distinct().ToList();
list.ForEach(x=>project.SendInfoToLog(x));
Посмотреть вложение 94658

Подправил под любой алфавит, вдруг захочется переводить с свою кастомную систему счисления со своими значками.
C#:
string[] alphabet = new[]{
    "0","1","2" // нужный алфавит, пригодится, если символов будет больше 10
};

Func<int, int, string> Toconvert = (n,p)=>{
    string line = string.Empty;
    while(n > 0){
        n = (int) n/p;
        line = string.Format("{0}{1}", alphabet[n%p], line);     
    }
    return line;
};


int min = 177147; // Начальное значение 10000000000
int max = 100; // сколько элементов надо
List<string> list = Enumerable.Range(min, max).Select(x=>Toconvert(x,3)).ToList();
list = list.Distinct().ToList(); // Не понял откуда берутся дубли - пришлось удалять их
list.ForEach(x=>project.SendInfoToLog(x));
Добрый день
Вопрос по данной строке
---- "0","1","2" // нужный алфавит, пригодится, если символов будет больше 10 --------
Я попробовал применить кастомизацию по выдаче в шестнадцатирной системе, вот так
---- "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"// нужный алфавит, пригодится, если символов будет больше 10----
Но кастом не сработал, выдача ,при тесте, в лог выдает все те же значения в троичной системе
ткните меня что я не так делаю, спасибо
UPD Это видимо связано с интовыми значениями и чарами, ладно, думаю в этом случае лучше написать конвертер
 
Последнее редактирование:
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
Добрый день
Вопрос по данной строке
---- "0","1","2" // нужный алфавит, пригодится, если символов будет больше 10 --------
Я попробовал применить кастомизацию по выдаче в шестнадцатирной системе, вот так
---- "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"// нужный алфавит, пригодится, если символов будет больше 10----
Но кастом не сработал, выдача ,при тесте, в лог выдает все те же значения в троичной системе
ткните меня что я не так делаю, спасибо
UPD Это видимо связано с интовыми значениями и чарами, ладно, думаю в этом случае лучше написать конвертер
Вариант как раз и подкорректировал, чтобы можно было любые символы свои впихнуть, и кодировать например в 77-значной системе счисления :-)
Но, простите, это я накосячил - нужно было указать длину алфавита с переменной, а я указал там жестко 3.
Хотя, в целом, вариант вполне рабочий...
94686


C#:
string[] alphabet = new[]{
    "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"
};
Func<int, int, string> Toconvert = (n,p)=>{
    string line = string.Empty;
    while(n > 0){
        n = (int) n/p;
        line = string.Format("{0}{1}", alphabet[n%p], line);       
    }
    return line;
};


int min = 100000000; // Начальное значение
int max = 100; // Количество строчек
List<string> list = Enumerable.Range(min, max * alphabet.Length).Select(x=>Toconvert(x, alphabet.Length )).ToList();
list = list.Distinct().ToList(); // Не понял откуда берутся дубли - пришлось удалять их
list.ForEach(x=>project.SendInfoToLog(x));

return list.Count;
 
Последнее редактирование:
  • Спасибо
Реакции: DevOps

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Совершенно не правильно понял задачу в прошлом моём сообщении.

Исправляюсь.
Генерация в список числа от 10000000000 , до 12222222222:
// 59049 = 10000000000 начало
// 118097 = 12222222222 конец

for (int i = 59049; i < 118097; i++)
{
    int temp = i;
    List<int> s = new List<int>();
    while(temp > 0)
    {
        int item = temp % 3;
        temp /= 3;
        s.Add(item);
    }
    s.Reverse();
    string str = string.Join<int>("", s);

    project.SendInfoToLog(str); // вывод в лог
    project.Lists["nums"].Add(str); // добавить в локальный список "nums"
}
Результат в списке (кликабельно):
Посмотреть вложение 94666

upd: Эх, не успел. Ответ уже дали верный, но я сделал немного по своему (9 строчек) и не подглядывая. Так что возможно он будет вам тоже полезен и заслужит "Спасибо".)
Спа
Вариант как раз и подкорректировал, чтобы можно было любые символы свои впихнуть, и кодировать например в 77-значной системе счисления :-)
Но, простите, это я накосячил - нужно было указать длину алфавита с переменной, а я указал там жестко 3.
Хотя, в целом, вариант вполне рабочий...
Посмотреть вложение 94686

C#:
string[] alphabet = new[]{
    "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"
};
Func<int, int, string> Toconvert = (n,p)=>{
    string line = string.Empty;
    while(n > 0){
        n = (int) n/p;
        line = string.Format("{0}{1}", alphabet[n%p], line);      
    }
    return line;
};


int min = 100000000; // Начальное значение
int max = 100; // Количество строчек
List<string> list = Enumerable.Range(min, max * alphabet.Length).Select(x=>Toconvert(x, alphabet.Length )).ToList();
list = list.Distinct().ToList(); // Не понял откуда берутся дубли - пришлось удалять их
list.ForEach(x=>project.SendInfoToLog(x));

return list.Count;
Спасибо, не знал что под капотом LINQ есть и такие возможности
 
  • Спасибо
Реакции: BAZAg

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)