- Bash Brainfuck , Andrey Mitrofanov, 17:12 , 29-Ноя-18 (1)
>элементы массива/списка > Прим. > > $> ./test "Vasya Anton Petya Dima Anton Anton Vova Sasha Gray Anton" А у Вас "массив/список" в строку склеился! :) >[оверквотинг удален] > Anton > Anton > Anton > Vova > Sasha > Gray > Dima > Vasya > > На трояк - любое решение; На от[-троя-]сь: $ function test() { xargs -n1 <<<"$*" |shuf; } $ dat() { test "Vasya Anton Petya Dima Anton Anton Vova Sasha Gray Anton"; } $ diff -u <(dat) <(dat) --- /dev/fd/63 2018-11-29 17:09:07.893484064 +0300 +++ /dev/fd/62 2018-11-29 17:09:07.893484064 +0300 @@ -1,10 +1,10 @@ -Vasya -Dima +Gray Anton -Petya +Vasya Vova -Anton Sasha Anton Anton -Gray +Dima +Anton +Petya $ _
- Bash Brainfuck , pavlinux, 17:34 , 29-Ноя-18 (2)
> shuf; прекрасно... Это называется правильно понял смысл задачи :)
- Bash Brainfuck , михалыч, 19:27 , 29-Ноя-18 (3)
да, вы, батенька, shu-лер, как я погляжу ))) (ухмыляясь и доставая краплёную колоду)perl -MList::Util=shuffle -e 'print "$_\n" for shuffle @ARGV' Vasya Anton Petya Dima Anton Anton Vova Sasha Gray Anton (понимаю, это вне конкурса, простите, не удержался)
- Bash Brainfuck , Andrey Mitrofanov, 09:48 , 30-Ноя-18 (4)
> да, вы, батенька, shu-лер, как я погляжу ))) > (ухмыляясь и доставая краплёную колоду) > perl -MList::Util=shuffle -e 'print "$_\n" for shuffle @ARGV' Vasya Anton Petya Dima > Anton Anton Vova Sasha Gray Anton вай, шайтанама. > (понимаю, это вне конкурса, простите, не удержался)
Так нет ни призов, ни конкурса... ни каникул. :) Благородные доны "развлекаются". O-9 $ function test() { local D; [ "$1" = -d ] && shift && D=1; local A; read -a A <<<"$*"; local -i N=${#A[*]} R; while [ $N -gt 0 ]; do let R=RANDOM%N; echo "${D:+$N $R }${A[R]}"; unset A[R]; A=("${A[@]}"); let N--; done; } $ dat() { test "Vasya Anton Petya Dima Anton Anton Vova Sasha Gray Anton"; } $ diff -u <(dat) <(dat) --- /dev/fd/63 2018-11-30 09:40:56.638756256 +0300 +++ /dev/fd/62 2018-11-30 09:40:56.638756256 +0300 @@ -1,10 +1,10 @@ Anton -Dima -Anton -Anton -Gray -Sasha -Vasya Petya Anton Vova +Sasha +Gray +Anton +Anton +Vasya +Dima $ _
- Bash Brainfuck , ыы, 13:38 , 30-Ноя-18 (5)
>[оверквотинг удален] > Petya > Anton > Vova > +Sasha > +Gray > +Anton > +Anton > +Vasya > +Dima > $ _ а вариант для 5+++ есть? "Элементы вводятся через аргументы (argv)" + "при 1 млн элементов" ?
- Bash Brainfuck , Andrey Mitrofanov, 14:43 , 30-Ноя-18 (6)
>[оверквотинг удален] >> Vova >> +Sasha >> +Gray >> +Anton >> +Anton >> +Vasya >> +Dima >> $ _ > а вариант для 5+++ есть? > "Элементы вводятся через аргументы (argv)" + "при 1 млн элементов" ?Судя по $ time echo $(yes 1|head -1000000) |wc -l 1 real 0m1,006s , и, для RANDOM%N bash-варианта, $ time test $(yes 1|head -1000) |wc -l 1000 real 0m1,116s $ time test $(yes 1|head -2000) |wc -l 2000 real 0m4,376s , и, для xargs/shuf, $ time test $(yes 1|head -1000) |wc -l 1000 real 0m0,816s $ time test $(yes 1|head -10000) |wc -l 10000 real 0m8,254s , для 5-c-+++ нужен неленивый [-вырезано-] без фантазии и... ...с компилятором. Ждём прибытия в тему переписирастов и из старшЫх братьЁв по iq жавафагов.
- Bash Brainfuck , ACCA, 04:57 , 03-Дек-18 (7)
Не, так не пойдёт, там сзади сидит sort -R. Ключи группированы: > Anton > Anton > Antonпотому DieHard под вопросом. Так получше: $ echo "Vasya Anton Petya Dima Anton Anton Vova Sasha Gray Anton"|tr ' ' $'\n'|nl -n'ln'|shuf|cut -f 2 А для 5+++ нужно просто машинку понаряднее:
$ time sh -c "yes 1|head -1000000 |tr ' ' $'\n'|nl -n'ln'|shuf|cut -f 2 |wc -l" 1000000 real 0m0.221s user 0m0.288s sys 0m0.046s без фантазии и компилятора.
|