Каким образом можно получить комбинацию чисел входящих в необходимый диапозон, например 2^2, 3^2
Мучил seq, но что то не сложилось.
Генерация чисел
Модераторы: /dev/random, Модераторы разделов
-
korisk
- Сообщения: 205
- ОС: Xubuntu
Re: Генерация чисел
случайная комбинация:
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: Генерация чисел
Можно попробовать так, но тут потребуется утилита, не входящая в состав coreutils:
P. S. У меня random идет в пакете bsd-games.
Код: Выделить всё
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: Генерация чисел
К сожалению, утилиты bc и random нет, установить их тоже не предоставляется возможность.
Есть какие нибудь другие решения?
Если взять в пример 3^2, то на выходе хотелось бы получить
11
12
13
21
22
23
31
32
33
Есть какие нибудь другие решения?
Если взять в пример 3^2, то на выходе хотелось бы получить
11
12
13
21
22
23
31
32
33
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Генерация чисел
for i in $(seq 1 3); do for j in $(seq 1 3); do echo $i$j; done; done
не?
Мои розовые очки
-
Grih65kop
- Сообщения: 145
Re: Генерация чисел
Возможно, мне не совсем понятно каким образом таким способом можно получить 3^4
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Генерация чисел
Ну, если я правильно понял, что означает Ваша запись 3^4, то будет 4 вложенных цикла for iN in $(seq 1 3); для N=1…4, и echo $i1$i2$i3$i4. Как-то так.
Мои розовые очки
-
ZyX
- Сообщения: 355
- ОС: Gentoo
Re: Генерация чисел
Это замечательно решается через рекурсию. Решение для bash:
Если я правильно помню, то для POSIX shell надо условие цикла заменить на `seq 1 $1` и убрать function. Также надо что‐то сделать с $(( $2-1 )), но не знаю, что именно, раз здесь нет bc. Может просто использовать количество аргументов вместо $2, а декремент делать с помощью shift.
Ах да, вызов функции для получения 3^2 в вашей записи: getnumbers 3 2.
~/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.
Спасибо сказали: