LINUX.ORG.RU

Чем эффективно решить задачу генерации числовой поледовательности

 ,


0

1

Хотел решить такую задачу есть некоторые цифры которые повторяются например 11 хотел сгенерировать 7 значные строки в виде файла в котором:

XXABCDF

....

AXXBCDF

...

ABCXXDF

...

где XX две повторяющиеся цифры ABCDF любые цифры. Можно конечно сделать так seq 1 99999 затем из неё выбрать др поледовательности grep'ом приклеить катом нужные цифры, крайне неэффективно, поэтому у меня вопрос есть ли готовые инструменты для этого в линух (кроме генераторов паролей) и второй вопрос если гуглить этот вопрос то как лучше сформулировать запрос?



Последнее исправление: xxoaea (всего исправлений: 3)
Ответ на: комментарий от TheAnonymous

GPT-4 сгенерировал по этой задачи вот такое безумие :)

#!/bin/bash

output_file="generated_strings.txt"
repeat_digits="11"

# Удаляем файл, если он уже существует
rm -f "${output_file}"

# Функция для генерации строк с повторяющимися цифрами на определенной позиции
generate_strings() {
  local position=$1

  for a in {0..9}; do
    for b in {0..9}; do
      for c in {0..9}; do
        for d in {0..9}; do
          for e in {0..9}; do
            for f in {0..9}; do
              case "${position}" in
                1)
                  printf "%s%s%s%s%s%s%s\n" "${repeat_digits}" "${a}" "${b}" "${c}" "${d}" "${e}" "${f}" >> "${output_file}"
                  ;;
                2)
                  printf "%s%s%s%s%s%s%s\n" "${a}" "${repeat_digits}" "${b}" "${c}" "${d}" "${e}" "${f}" >> "${output_file}"
                  ;;
                3)
                  printf "%s%s%s%s%s%s%s\n" "${a}" "${b}" "${repeat_digits}" "${c}" "${d}" "${e}" "${f}" >> "${output_file}"
                  ;;
                4)
                  printf "%s%s%s%s%s%s%s\n" "${a}" "${b}" "${c}" "${repeat_digits}" "${d}" "${e}" "${f}" >> "${output_file}"
                  ;;
                5)
                  printf "%s%s%s%s%s%s%s\n" "${a}" "${b}" "${c}" "${d}" "${repeat_digits}" "${e}" "${f}" >> "${output_file}"
                  ;;
                6)
                  printf "%s%s%s%s%s%s%s\n" "${a}" "${b}" "${c}" "${d}" "${e}" "${repeat_digits}" "${f}" >> "${output_file}"
                  ;;
                7)
                  printf "%s%s%s%s%s%s%s\n" "${a}" "${b}" "${c}" "${d}" "${e}" "${f}" "${repeat_digits}" >> "${output_file}"
                  ;;
              esac
            done
          done
        done
      done
    done
  done
}

# Генерация строк с повторяющимися цифрами на каждой из возможных позиций
for position in {1..7}; do
  generate_strings "${position}"
done

echo "Файл сгенерирован: ${output_file}"
metalbeaver
()
Ответ на: комментарий от TheAnonymous

тут я погорячился, не от 1, а от нуля т.е пустых мест быть не должно, т.е если идет 1 - то это не 1, а 00001. Т.е. отдельно генерится последовательность из нулей и катом или чем-то др сшивается - это один из вариантов поскольку все это усложняет алгоритмы генерации нужетн готовый инструмент для этом который например будет оперировать цифрами не как цифрами, а как отдельными символами типа букв. Если кто знает такой инструмент, пожалуйста подскажите название или куда копать?

xxoaea
() автор топика
Последнее исправление: xxoaea (всего исправлений: 2)
Ответ на: комментарий от metalbeaver

Так это обычный bash с циклами. С решением задачи в лоб т.е. чифровые символы рассматриваем как цифры. А я спрашивал об утилите для решения подобгых задач.

xxoaea
() автор топика
Последнее исправление: xxoaea (всего исправлений: 1)
Ответ на: комментарий от xxoaea

А я спрашивал об утилите для решения подобгых задач.

Есть генераторы данных по регулярным выражениям. Например, exrex. Правда по текущему условию регулярное выражение не будет лаконичным:

exrex "[0-9]{5}XX|[0-9]{4}XX[0-9]{1}|[0-9]{3}XX[0-9]{2}|[0-9]{2}XX[0-9]{3}|[0-9]{1}XX[0-9]{4}|XX[0-9]{5}"

Можно сделать сгенерировать неподходящие варианты и отгрепать из них нужные:

exrex "[0-9]{0,5}AB[0-9]{0,5}" | grep -E "^.{7}$"
Tanger ★★★★★
()