Beri bash i ebash / Говнокод #8153 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 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 alexoy, (Updated )

Комментарии (19, +19)

Beri bash i ebash / Говнокод #7625 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 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 SadKo, (Updated )

Комментарии (6, +6)

Beri bash i ebash / Говнокод #7390 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 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 james, (Updated )

Комментарии (16, +16)

Beri bash i ebash / Говнокод #7385 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 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 wat3rs, (Updated )

Комментарии (3, +3)

Beri bash i ebash / Говнокод #7111 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 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 greno, (Updated )

Комментарии (15, +15)

Beri bash i ebash / Говнокод #7102 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 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 snoopcatt, (Updated )

Комментарии (9, +9)

Beri bash i ebash / Говнокод #7063 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 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 Tanger, (Updated )

Комментарии (6, +6)