1. bash / Говнокод #8153

    −105

    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, 10 Октября 2011

    Комментарии (19)
  2. bash / Говнокод #7625

    −132

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 23 Августа 2011

    Комментарии (6)
  3. bash / Говнокод #7390

    −107

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 29 Июля 2011

    Комментарии (16)
  4. bash / Говнокод #7385

    −116

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 29 Июля 2011

    Комментарии (3)
  5. bash / Говнокод #7174

    −352

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 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 Июля 2011

    Комментарии (15)
  6. bash / Говнокод #7111

    −127

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 30 Июня 2011

    Комментарии (15)
  7. bash / Говнокод #7102

    −130

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 29 Июня 2011

    Комментарии (9)
  8. bash / Говнокод #7100

    −144

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    #! /bin/sh
    
    # some code
    
    daemon1="/usr/home/daemon1.sh"
    daemon2="/home/daemon2.sh"
    
    # some code with variables

    Скрипт на BSD. Хомяк находится в /usr/home, а /home симлинк на него

    Elvenfighter, 29 Июня 2011

    Комментарии (7)
  9. bash / Говнокод #7063

    −129

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 26 Июня 2011

    Комментарии (6)
  10. bash / Говнокод #6947

    −127

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 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 Июня 2011

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