Генерация чисел

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Grih65kop
Сообщения: 145

Генерация чисел

Сообщение Grih65kop »

Каким образом можно получить комбинацию чисел входящих в необходимый диапозон, например 2^2, 3^2

Мучил seq, но что то не сложилось.
Спасибо сказали:
Аватара пользователя
korisk
Сообщения: 205
ОС: Xubuntu

Re: Генерация чисел

Сообщение korisk »

Grih65kop писал(а):
22.07.2011 19:48
Каким образом можно получить комбинацию чисел входящих в необходимый диапозон, например 2^2, 3^2

Мучил seq, но что то не сложилось.

случайная комбинация:
for i in $(seq 1 10);do echo "((2^2 + ($RANDOM*(3^2 - 2^2 + 2))/65535) + 0.5)/1"|bc;done
строгая последовательность:
a="2^3";b="2^4";for i in $(seq $(echo $a|bc) $(echo $b|bc));do echo $i;done
Registerd Linux user #486684 at http://counter.li.org/
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Генерация чисел

Сообщение allez »

Можно попробовать так, но тут потребуется утилита, не входящая в состав coreutils:

Код: Выделить всё

random -e $((3**2-2**2+1)); echo $(($?+2**2))

Пример

$ for i in {1..1000}; do random -e $((3**2-2**2+1)); echo $(($?+2**2)); done | sort -u 4 5 6 7 8 9


P. S. У меня random идет в пакете bsd-games.
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Генерация чисел

Сообщение Grih65kop »

К сожалению, утилиты bc и random нет, установить их тоже не предоставляется возможность.
Есть какие нибудь другие решения?

Если взять в пример 3^2, то на выходе хотелось бы получить

11
12
13
21
22
23
31
32
33
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Генерация чисел

Сообщение watashiwa_daredeska »

Grih65kop писал(а):
22.07.2011 21:16
Если взять в пример 3^2, то на выходе хотелось бы получить

11
12
13
21
22
23
31
32
33
for i in $(seq 1 3); do for j in $(seq 1 3); do echo $i$j; done; done
не?
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Генерация чисел

Сообщение Grih65kop »

Возможно, мне не совсем понятно каким образом таким способом можно получить 3^4
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Генерация чисел

Сообщение watashiwa_daredeska »

Grih65kop писал(а):
23.07.2011 02:44
каким образом таким способом можно получить 3^4
Ну, если я правильно понял, что означает Ваша запись 3^4, то будет 4 вложенных цикла for iN in $(seq 1 3); для N=1…4, и echo $i1$i2$i3$i4. Как-то так.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Генерация чисел

Сообщение ZyX »

Это замечательно решается через рекурсию. Решение для bash:

~/tmp/bash/getnumbers.bash (Created by format.vim)

function getnumbers() { if test $2 -eq 0 ; then echo return fi for (( i=1 ; i<=$1 ; i++ )) ; do getnumbers $1 $(( $2-1 )) | \ while read number ; do echo $i$number done done }

Если я правильно помню, то для POSIX shell надо условие цикла заменить на `seq 1 $1` и убрать function. Также надо что‐то сделать с $(( $2-1 )), но не знаю, что именно, раз здесь нет bc. Может просто использовать количество аргументов вместо $2, а декремент делать с помощью shift.

Ах да, вызов функции для получения 3^2 в вашей записи: getnumbers 3 2.
Спасибо сказали: