0
1 2 3 4 5 6 7 8 9
Предлагаю конкурс на лучшую реализацию задачи про стеки.
Язык - bash, python или любой скриптовый.
Номинируются такие стадии
1. Ленивая стека, push - o(n) pop o(1) top o(1)
2. Забывчивая стека, push - o(1), pop o(1) top o(1), для любого l : len(l)>=n push(l,x) = l
3. Стека-очередь, push переводит стеку в режим очереди, pop переводит в режим стеки. top - O(1)
4. Маразматическая стека, map (push l) (x1,x2,x3,x4) -> [x1, x1, x3, x3] o(n), pop(l) -> (x1,x1,x4) - номер сиротливого брата определяется старшим номером брата
5. Бинарная стека - push o(1) pop o(1) top o(1), sort o(1), shuffle o(log(n))
Номинантам лучших стадий будут достанутся приз
Главное - не программировать стеку, а показывать всем, как я это делаю.
До второй стадии осталось 22 часа. Второй шаг алгоритма
alexoy ,
10.10.2011 (Updated 25.03.2018 )
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
found_files()
{
if [ "$DAY_CONF" = 'all_last' ]; then
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | grep -v `date "$DATE_PREFIX"` )
fi
if [ "$DAY_CONF" = 'last' ]; then
if [ "`date +%d`" -eq '01' ]; then
case "`date +%m`" in
02|04|06|09|11 )
need_date=31;
;;
03 )
if [ -n "$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | grep `date +%Y0229` )" ]; then need_date=29; else need_date=28; fi;
;;
* )
need_date=30;
;;
esac
if [ "`date +%m`" -eq '01' ]; then
need_month=12
need_date=31
need_year=$(( `date +%Y` - 1 ))
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | grep "$need_year$need_month$need_date" )
else
need_month=$((`date +%m` - 1 ))
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | egrep `date ${DATE_PREFIX%%%m*}[0]*$need_month$need_date` )
fi
else
need_date=$((`date +%d` - 1))
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | egrep `date ${DATE_PREFIX%%%d*}[0]*$need_date` )
fi
fi
if [ "$DAY_CONF" = 'today' ]; then
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | grep `date "$DATE_PREFIX"` )
fi
echo $files
}
Замечательная функция поиска файлов "за вчера". Находит файлы не только "за вчера".
Автор неизвестен.
SadKo ,
23.08.2011 (Updated 25.03.2018 )
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
#!/usr/bin/env zsh
A=( q w e r t y u i o p a s d f g h j k l z x c v b n m )
B=( Q W E R T Y U I O P A S D F G H J K L Z X C V B N M )
C=( 0 1 2 3 4 5 6 7 8 9 A B C D E F ) #hex
F=( 1 2 4 )
D=40
E=10
Char::GetRandA(){
echo ${A[$(shuf -n 1 -i 1-${#A[@]})]}
}
Char::GetRandB(){
echo ${B[$(shuf -n 1 -i 1-${#B[@]})]}
}
Char::GetRandC(){
echo ${C[$(shuf -n 1 -i 1-${#C[@]})]}
}
Char::GetRandF(){
echo ${F[$(shuf -n 1 -i 1-${#F[@]})]}
}
Main::Matrix(){
for i in {1..$D}; do
for b in {A,B,C}; do
echo -n '\033[0;3'$(Char::GetRandF)"m$(Char::GetRand$b) "
done
done
}
#Run
for i in {1..$E}; do
Main::Matrix
done
дело было вечером...
james ,
29.07.2011 (Updated 25.03.2018 )
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
#!/bin/sh
#
# $1 is the mail account
[ -n "$1" ] && {
MAIL_PATH="/Mail/$1/mbox"
OUTPUT_MAIL_PATH="/mnt/flash/save/email/inbox/"
mkdir -p $OUTPUT_MAIL_PATH
mv /var/spool/mail/root/* $MAIL_PATH
for j in `find $MAIL_PATH -name "msg.*"`
do
MAIL_NAME=`basename $j`.eml
NEW_MAIL="$OUTPUT_MAIL_PATH/$MAIL_NAME"
mkdir -p "$OUTPUT_MAIL_PATH"
[ ! -f "$NEW_MAIL" ] && {
grep "^From:" $j | head -n 1 > $NEW_MAIL
if grep "^Cc:" $j ; then
grep "^Cc:" $j | head -n 1 >> $NEW_MAIL
fi
grep "^To:" $j | head -n 1 >> $NEW_MAIL
grep "^Subject:" $j | head -n 1 >> $NEW_MAIL
grep "^Date:" $j | head -n 1 >> $NEW_MAIL
if grep "^Content-Type: text/plain;" $j ; then
LINE_NUM=`grep -n "^Content-Type: text/plain;" $j | cut -d: -f1`
if grep "^Content-Type: text/plain;" $j | grep "charset=" ; then
TYPE=`grep "Content-Type: text/plain;" $j | cut -d";" -f1`
echo "$TYPE" >> $NEW_MAIL
CHAR="charset="`grep "Content-Type: text/plain;" $j | cut -d= -f2`
echo "$CHAR" >> $NEW_MAIL
else
grep "^Content-Type: text/plain;" $j >> $NEW_MAIL
x=$(($LINE_NUM+1))
sed -n "$x"p $j >> $NEW_MAIL
fi
x=$(($LINE_NUM-1))
BOUNDARY=`sed -n "$x"p $j`
for i in `sed "/$BOUNDARY/s/.*/ffffuuuucccckkkk/" $j | grep -n "ffffuuuucccckkkk" | cut -d: -f1`
do
if [ "$i" -gt "$LINE_NUM" ] ; then
i=$(($i-1))
y=$(($LINE_NUM+3))
echo "Mail content start:" >> $NEW_MAIL
sed -n "$y,$i"p $j >> $NEW_MAIL
break
fi
done
if ! grep "Mail content start:" $NEW_MAIL ; then
echo "Mail content start:" >> $NEW_MAIL
y=$(($LINE_NUM+3))
x=`grep -c "^" $j`
sed -n "$y,$x"p $j >> $NEW_MAIL
fi
else
echo "Fuck....."
fi
}
done
}
/bin/mail.sh из прошивки букридера GreenBook
wat3rs ,
29.07.2011 (Updated 25.03.2018 )
0
1 2 3 4 5 6 7 8 9 10 11
#!/bin/bash
function f() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
f "$1" &
shift
done
wait
example usage:
./sleepsort.bash 5 3 6 3 6 3 1 4 7
Метод сортировки :)
Взято с:
http://dis.4chan.org/read/prog/1295544154
ramzes_2 ,
06.07.2011 (Updated 25.03.2018 )
0
1 2 3 4 5 6 7 8 9 10
type="${(@j::M)${(@)tmp#-}#?}"
if (( $tmp[(I)-g*] )); then
glob="${${${${(@M)tmp:#-g*}#-g}##[[:blank:]]#}%%[[:blank:]]#}"
[[ "$glob" = *[^\\][[:blank:]]* ]] &&
glob="{${glob//(#b)([^\\])[[:blank:]]##/${match[1]},}}"
# add `#q' to the beginning of any glob qualifier if not there already
[[ "$glob" = (#b)(*\()([^\|\~]##\)) && $match[2] != \#q* ]] &&
glob="${match[1]}#q${match[2]}"
fi
zsh, избранное из _files: остальное чуть лучше.
Зато... хм, портабельно (в смысле между не оболочками, а платформами).
greno ,
30.06.2011 (Updated 25.03.2018 )
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
Request() {
Info "Добро пожаловать в VKSearch $sys_version!"
Info "Загрузка списка треков..."
vkapi_signature=$(echo -n "${vkapi_id}api_id=1696393count=${cfg_search_count}method=audio.searchq=${query}test_mode=1v=2.0${vkapi_secret}"|md5sum|awk '{print $1}')
wget "http://api.vkontakte.ru/api.php?api_id=1696393&count=${cfg_search_count}&v=2.0&method=audio.search&sig=${vkapi_signature}&test_mode=1&q=$query" -qO "${sys_temp}/vksearch.out"
found=$(cat ${sys_temp}/vksearch.out | sed -ne 's,<count>\([^<]*\)</count>,\1,p'|sed 's/^[ \t]*//')
error_msg="$(cat ${sys_temp}/vksearch.out | sed -n 's|<error_msg>\(.*\)</error_msg>|\1|p'|sed 's/^[ \t]*//'|head -n1 )"
error_code="$(cat ${sys_temp}/vksearch.out | sed -n 's|<error_code>\(.*\)</error_code>|\1|p'|sed 's/^[ \t]*//'|head -n1)"
[ -n "$error_msg" ] && Info "Ошибка: $error_msg (Код $error_code)" die
song_count=$(cat ${sys_temp}/vksearch.out | grep '<url>'|wc -l )
[ $song_count -eq 0 ] && Info "По запросу ${query} не найдено ни одного трека..." die || Info "По запросу ${query} найдено ${found} композиций. Обработка первых ${song_count}."
}
Parse() {
OLD_IFS=$IFS
IFS=$'\n'
song_urls=( `cat ${sys_temp}/vksearch.out | sed -n 's|<url>\(.*\)</url>|\1|p'|sed 's/^[ \t]*//' ` )
song_artists=( `cat ${sys_temp}/vksearch.out | sed -n 's|<artist>\(.*\)</artist>|\1|p'|sed 's/^[ \t]*//' ` )
song_titles=( `cat ${sys_temp}/vksearch.out | sed -n 's|<title>\(.*\)</title>|\1|p'|sed 's/^ //' ` )
song_durations=( `cat ${sys_temp}/vksearch.out |sed -n 's|<duration>\(.*\)</duration>|\1|p'|sed 's/^[ \t]*//' ` )
song_counts=$(( ${#song_urls[@]} - 1 ))
IFS=$OLD_IFS
}
RemoveDoubles() {
rm ${sys_temp}/vksearch.pars* 2>&-
Info "Начинаю удаление треков с одинаковой длительностью..."
for i in `seq 0 $song_counts`
do
echo "<1>${song_durations[$i]}<2>${song_artists[$i]}<3>${song_titles[$i]}<4>${song_urls[$i]}<5>" >> ${sys_temp}/vksearch.parsing
done
cat ${sys_temp}/vksearch.parsing | sort -n | uniq -w 6 > ${sys_temp}/vksearch.parsed
cat ${sys_temp}/vksearch.parsing | sort -n | uniq -w 6 -d > ${sys_temp}/vksearch.doubles
OLD_IFS=$IFS
IFS=$'\n'
song_urls=( `cat ${sys_temp}/vksearch.parsed |sed -ne 's,.*<4>\([^<]*\)<5>.*,\1,p' ` )
song_artists=( `cat ${sys_temp}/vksearch.parsed |sed -ne 's,.*<2>\([^<]*\)<3>.*,\1,p' ` )
song_titles=( `cat ${sys_temp}/vksearch.parsed | sed -ne 's,.*<3>\([^<]*\)<4>.*,\1,p' ` )
song_durations=( `cat ${sys_temp}/vksearch.parsed |sed -ne 's,.*<1>\([^<]*\)<2>.*,\1,p' ` )
song_counts=$(( ${#song_urls[@]} - 1 ))
IFS=$OLD_IFS
Info "В плейлисте осталось ${#song_urls[@]} треков."
}
парочка функций из моего проекта VKSearch - поиск и сохранение музыки ВКонтакте на shell... -_-
snoopcatt ,
29.06.2011 (Updated 25.03.2018 )
0
1 2 3 4 5 6 7 8
#! /bin/sh
# some code
daemon1="/usr/home/daemon1.sh"
daemon2="/home/daemon2.sh"
# some code with variables
Скрипт на BSD. Хомяк находится в /usr/home, а /home симлинк на него
Elvenfighter ,
29.06.2011 (Updated 25.03.2018 )
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#!/bin/bash
EMAIL="Your email"
PASSWORD="your password"
USERAGENT="Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20110529 Firefox/4.0"
curl -A "$USERAGENT" -c /tmp/vklogin.cookie -d "pass=$PASSWORD&email=$EMAIL" http://login.vk.com/?act=login -L | iconv -f cp1251 > /tmp/vklogin
perl -e "while(<STDIN>) {\$a=\$_; if(\$a =~ /^\s*<input[^>]*?name='([^']*)'[^>]*?value='([^']*)'\s*\/>/i) {print \"\$1=\$2&\";}}" < /tmp/vklogin > /tmp/vklogin.postdata
POSTDATA="$(cat /tmp/vklogin.postdata)"
curl -A "$USERAGENT" -d "$POSTDATA" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vkontakte.ru/login.php -L -v 2>&1 | iconv -f cp1251 &> /dev/null
echo 1 > /tmp/vklogin.mailid
echo 1 > /tmp/vklogin.mailoutid
while [ `cat /tmp/vklogin.mailid | wc -l` -gt 0 ]; do
curl -A "$USERAGENT" -d "$POSTDATA" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/mail -L | iconv -f cp1251 > /tmp/vklogin.mail
cat /tmp/vklogin.mail | perl -e "while(<STDIN>) {if (\$_ =~ /.*mail.deleteMsg\((\d*)/) {print \"\$1\n\";} }" > /tmp/vklogin.mailid
for i in $(cat /tmp/vklogin.mailid); do
curl -A "$USERAGENT" -d "act=a_delete&al=1&from=inbox&hash=1309098903_0eefa6ea250675f38e&id=$i" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/al_mail.php -L | iconv -f cp1251
done
done
while [ `cat /tmp/vklogin.mailoutid | wc -l` -gt 0 ]; do
curl -A "$USERAGENT" -d "$POSTDATA" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/mail?section=outbox -L | iconv -f cp1251 > /tmp/vklogin.mailout
cat /tmp/vklogin.mailout | perl -e "while(<STDIN>) {if (\$_ =~ /.*mail.deleteMsg\((\d*)/) {print \"\$1\n\";} }" > /tmp/vklogin.mailoutid
for i in $(cat /tmp/vklogin.mailoutid); do
curl -A "$USERAGENT" -d "act=a_delete&al=1&from=outbox&hash=1309103621_59302e5e1b1a924a70&id=$i" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/al_mail.php -L | iconv -f cp1251
done
done
rm /tmp/vklogin*
Удаляет все сообщения на vk.com
Наверное hash надо будет заменить.
Tanger ,
26.06.2011 (Updated 25.03.2018 )
0
1 2 3 4 5 6
am=`cat $file | wc -l`
for ((i=1;i<=$am;i++))
do
read z
imsi=`echo $z | sed -e "s/^[0-9]*[ ]*//" `
done < $file
berezhinskiy ,
14.06.2011 (Updated 25.03.2018 )