1. Список говнокодов пользователя wvxvw

    Всего: 202

  2. ActionScript / Говнокод #15816

    −126

    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
    public static function createTransitionTween(transitionView:TransitionView):TweenCore
    {
    	var innerTimeline:TimelineMax = new TimelineMax();
    	var verySmallNumber:Number = 0.0001;
    	var swfTween:TweenMax;
    	var showTween:TweenMax;
    	var hideTween:TweenMax;
    	var duration:Number = 1; 
    	
    	if (transitionView.swf.content)
    	{
    		var totalFrames:Number = (transitionView.swf.content as MovieClip).totalFrames;
    		
    		if (transitionView.isStartTransition)
    			swfTween = TweenMax.fromTo(transitionView.swf.content , duration, {frame:26, alpha:1},{frame:50, alpha:1, ease:Linear.easeNone});
    		else
    			swfTween = TweenMax.fromTo(transitionView.swf.content , duration, {frame:1, alpha:1},{frame:25, alpha:1, ease:Linear.easeNone});
    		
    		showTween = TweenMax.fromTo(transitionView.swf.content, verySmallNumber, {alpha:0}, {alpha:1});
    		hideTween = TweenMax.fromTo(transitionView.swf.content, verySmallNumber, {alpha:1}, {alpha:0});
    
    		innerTimeline.append(showTween, -1 * verySmallNumber);
    		innerTimeline.append(swfTween);
    		innerTimeline.append(hideTween);
    	}	
    	return innerTimeline;
    }

    Они сраслись интеллектами.

    wvxvw, 22 Апреля 2014

    Комментарии (3)
  3. Куча / Говнокод #15752

    +128

    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
    (defun primes-under (limit &optional (filter-depth (truncate (log limit))))
      (labels ((%purge (prefix table depth)
                 (iter
                   (for (key value) :in-hashtable table)
                   (for mul := (* key prefix))
                   (while (< mul limit))
                   (when (> depth 0) (%purge mul table (1- depth)))
                   (remhash mul table))))
        (let ((primes (iter
                        (with p := (make-hash-table))
                        (for i :from 2 :below limit)
                        (setf (gethash i p) t)
                        (finally (return p)))))
          (iter
            (for (key value) :in-hashtable primes)
            (%purge key primes filter-depth)
            (finally
             (return
               (iter
                 (for (key value) :in-hashtable primes)
                 (reducing key :by #'+))))))))

    Вопрос к знатокам: почему так работает? (у меня чисто случайно получилось)
    Для тех, кому влом разбираться:
    Задача выше - код из Прожект Ойлер. Нужно найти сумму всех простых чисел меньше 2000000 (двух миллионов).
    Методом подбора было установлено, что если из всех чисел меньше N последовательно удалять их произведения N_0 * N_1 * ... * N_m, где m = floor(log(N)), то, по крайней мере на сколько меня хватило посчитать, не-простых чисел не остается.

    Вопрос, как связан log(N), и можно ли вообще надеятся на то, что это правило - универсально (например, что степени двойки никогда не будут меньше N).

    wvxvw, 14 Апреля 2014

    Комментарии (150)
  4. Куча / Говнокод #15738

    +125

    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
    % -*- mode: Prolog -*-
    
    :- module e9.
    :- interface.
    :- import_module io.
    :- pred main(io::di, io::uo) is cc_multi.
    
    :- implementation.
    :- import_module int, float, list, string, math.
    
    :- func root(int) = int.
    root(Number) = floor_to_int(sqrt(float(Number))).
    
    :- func squares_under(int, int) = list(int).
    squares_under(From, To) = Result:-
        (Square = From * From,
         (if Square =< To
         then Result = [Square | squares_under(From + 1, To)]
         else Result = [])).
    
    :- pred list_to_disjunction(list(int)::in, int::out) is nondet.
    list_to_disjunction([Head | Tail], Result):-
        (Result = Head; list_to_disjunction(Tail, Result)).
    
    :- pred summands_of(list(int)::in, int::in, { int, int, int }::out) is cc_nondet.
    summands_of(Squares, Sum, { A, B, C }):-
        list_to_disjunction(Squares, As),
        list_to_disjunction(Squares, Bs),
        list_to_disjunction(Squares, Cs),
        As < Bs, Bs < Cs,
        As + Bs = Cs,
        root(As) + root(Bs) + root(Cs) = Sum,
        A = As, B = Bs, C = Cs.
    
    main(!IO):-
        Sum = 1000,
        Squares = squares_under(1, Sum * Sum),
        (if summands_of(Squares, Sum, { A, B, C })
        then io.format("Answer: A = %d, B = %d, C = %d\n", [i(A), i(B), i(C)], !IO)
        else io.format("No solutions\n", [], !IO)).

    Давно как-то мы не вспоминали Прожект Ойлер.
    Язык: Меркури,
    Эффективность решения: наверное, полный пиздец.

    Для тех, кому нечем заняться: http://joyreactor.com/post/954661

    wvxvw, 12 Апреля 2014

    Комментарии (6)
  5. ActionScript / Говнокод #15709

    −135

    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
    public function addAndSelect(displayObject:*):void
    {
    	var newItem:TransformItem = addSpriteView(displayObject);
    	if (newItem)
    	{
    		setupTransformItem(newItem);	
    		transformer.selectItem(newItem);
    	}
    	if (newItem && newItem.targetObject && 
    		newItem.targetObject is EditableText && 
    		(newItem.targetObject as EditableText).data is TextSpriteVO &&
    		((newItem.targetObject as EditableText).data as TextSpriteVO).format &&
    		((newItem.targetObject as EditableText).data as TextSpriteVO).format.font == null )
    	{
    		//var mpm:MenuPanelMediator = facade.retrieveMediator(MenuPanelMediator.NAME) as MenuPanelMediator;
    		//mpm.setTextFormat((track.sprite as TextSpriteVO).format);
    		var fontFamilyString:String = ((newItem.targetObject as EditableText).data as TextSpriteVO).format.fontFamily;
    		((newItem.targetObject as EditableText).data as TextSpriteVO).format.fontFamily = "akbar";
    		((newItem.targetObject as EditableText).data as TextSpriteVO).format.fontFamily = fontFamilyString;
    	}
    }

    Очень ценный код, после удаления програма падает при загрузке.

    wvxvw, 09 Апреля 2014

    Комментарии (905)
  6. ActionScript / Говнокод #15702

    −140

    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
    private function setHandlesVisiablity(isTextBox:Boolean, isSpecialMode:Boolean = false):void
    {
    	if (isSpecialMode)
    	{
    		(_handles[0].handle as Sprite).visible = false; 				  //center
    		(_handles[1].handle as Sprite).visible = false;     		      //top
    		(_handles[2].handle as Sprite).visible = false;	  			 	  //right
    		(_handles[3].handle as Sprite).visible = false;		      	   	  //bottom
    		(_handles[4].handle as Sprite).visible = false; 			  	  //left
    		(_handles[5].handle as Sprite).visible = false;		      		  //topLeft
    		(_handles[6].handle as Sprite).visible = false;		    	      //topRight
    		(_handles[7].handle as Sprite).visible = false;		    	      //bottomRight
    		(_handles[8].handle as Sprite).visible = false;		   		      //bottomLeft
    	}
    	else
    	{
    		(_handles[0].handle as Sprite).visible = true; 					  //center
    		(_handles[1].handle as Sprite).visible = !isTextBox;		      //top
    		(_handles[2].handle as Sprite).visible = true;	  				  //right
    		(_handles[3].handle as Sprite).visible = !isTextBox;		      //bottom
    		(_handles[4].handle as Sprite).visible = true; 			  		  //left
    		(_handles[5].handle as Sprite).visible = !isTextBox;		      //topLeft
    		(_handles[6].handle as Sprite).visible = !isTextBox;		      //topRight
    		(_handles[7].handle as Sprite).visible = !isTextBox;		      //bottomRight
    		(_handles[8].handle as Sprite).visible = !isTextBox;		      //bottomLeft
    	}
    }

    Нужно отдельно объяснить, что выключка у коментариев не сложилась потому, что уже два разных программиста отрефакторили этот код. Изначально коментарии были каждый на своей строчке и равнялись разными людьми использующими разные настройки ИДЕ.

    wvxvw, 08 Апреля 2014

    Комментарии (17)
  7. ActionScript / Говнокод #15695

    −136

    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
    /**
     *  @private
     *  Calculates the height needed for heightInLines lines using the default
     *  font.
     */
    private function calculateHeightInLines():Number
    {
        var height:Number = getStyle("paddingTop") + getStyle("paddingBottom");
        
        if (_heightInLines == 0)
            return height;
        
        var effectiveHeightInLines:int;
        
        // If both height and width are NaN use 10 lines.  Otherwise if 
        // only height is NaN, use 1.
        if (isNaN(_heightInLines))
            effectiveHeightInLines = isNaN(_widthInChars) ? 10 : 1;   
        else
            effectiveHeightInLines = _heightInLines;
        
        // Position of the baseline of first line in the container.
        value = getStyle("firstBaselineOffset");
        if (value == lineHeight)
            height += lineHeight;
        else if (value is Number)
            height += Number(value);
        else
            height += ascent;
        
        // Distance from baseline to baseline.  Can be +/- number or 
        // or +/- percent (in form "120%") or "undefined".  
        if (effectiveHeightInLines > 1)
        {
            var value:Object = getStyle("lineHeight");     
            var lineHeight:Number =
                RichEditableText.getNumberOrPercentOf(value, getStyle("fontSize"));
            
            // Default is 120%
            if (isNaN(lineHeight))
                lineHeight = getStyle("fontSize") * 1.2;
            
            height += (effectiveHeightInLines - 1) * lineHeight;
        }            
        
        // Add in descent of last line.
        height += descent;              
        
        return height;
    }

    Внимательно следим за жизненным циклом переменной lineHeight.

    wvxvw, 07 Апреля 2014

    Комментарии (17)
  8. ActionScript / Говнокод #15694

    −139

    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
    /**
     *  @private
     */
    public function set heightInLines(value:Number):void
    {
        if (value == _heightInLines)
            return;
        
        _heightInLines = value;
        heightInLinesChanged = true;
        
        heightConstraint = NaN;
        
        invalidateProperties();
        invalidateSize();
        invalidateDisplayList();
    }

    А значение по умолчанию-то NaN...

    RichEditableText's measure() method uses widthInChars and heightInLines to determine the measuredWidth and measuredHeight. These are similar to the cols and rows of an HTML TextArea.

    Since both widthInChars and heightInLines default to NaN, RichTextEditable "autosizes" by default: it starts out very small if it has no text, grows in width as you type, and grows in height when you press Enter to start a new line.

    The default value is NaN.

    wvxvw, 07 Апреля 2014

    Комментарии (6)
  9. ActionScript / Говнокод #15647

    −136

    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
    /**
         *  @private
    	 *  Storage for the isTruncated property.
         */
        private var _isTruncated:Boolean = false;
            
        /**
    	 *  A read-only property reporting whether the text has been truncated.
    	 *
    	 *  <p>Truncating text means replacing excess text
    	 *  with a truncation indicator such as "...".
         *  The truncation indicator is locale-dependent;
         *  it is specified by the "truncationIndicator" resource
         *  in the "core" resource bundle.</p>
    	 *
         *  <p>If <code>maxDisplayedLines</code> is 0, no truncation occurs.
         *  Instead, the text will simply be clipped
    	 *  if it doesn't fit within the component's bounds.</p>
         *
         *  <p>If <code>maxDisplayedLines</code> is is a positive integer,
    	 *  the text will be truncated if necessary to reduce
    	 *  the number of lines to this integer.</p>
         *
         *  <p>If <code>maxDisplayedLines</code> is -1, the text will be truncated
    	 *  to display as many lines as will completely fit within the height
         *  of the component.</p>
         *
         *  <p>Truncation is only performed if the <code>lineBreak</code>
         *  style is <code>"toFit"</code>; the value of this property
         *  is ignored if <code>lineBreak</code> is <code>"explicit"</code>.</p>
    	 *
    	 *  @default false
         *  
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
         */
    	public function get isTruncated():Boolean
        {
    		// For some reason, the compiler needs an explicit cast to Boolean
    		// to avoid a warning even though at runtime "is Boolean" is true.
    		return Boolean(_isTruncated);
        }

    Во-первых, неправда.
    Во-вторых, как бы это было печально, если бы было правдой.

    wvxvw, 02 Апреля 2014

    Комментарии (1)
  10. ActionScript / Говнокод #15621

    −131

    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
    protected function ignite(event:FlexEvent):void {
        imgCooser.dataProvider = new ArrayList([new ObjectProxy({w:Math.round(Math.random()*100+55),t:'0 one'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'1 two'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'2 three'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'3 four'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'4 five'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'5 six'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'6 seven'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'7 eight'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'8 nine'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'9 ten'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'10 eleven'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'11 twelve'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'12 one'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'13 two'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'14 three'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'2 three'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'3 four'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'4 five'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'5 six'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'6 seven'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'7 eight'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'8 nine'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'9 ten'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'10 eleven'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'11 twelve'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'12 one'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'13 two'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'14 three'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'1 two'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'2 three'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'3 four'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'4 five'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'5 six'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'6 seven'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'7 eight'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'8 nine'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'9 ten'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'10 eleven'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'11 twelve'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'12 one'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'13 two'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'14 three'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'2 three'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'3 four'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'4 five'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'5 six'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'6 seven'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'7 eight'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'8 nine'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'9 ten'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'10 eleven'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'11 twelve'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'12 one'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'13 two'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'14 three'}),
                   new ObjectProxy({w:Math.round(Math.random()*100+55),t:'15 four'})]);

    От нечего делать сижу и перебираю коммиты в репозитории, вот наткнулся...

    wvxvw, 30 Марта 2014

    Комментарии (1)
  11. ActionScript / Говнокод #15619

    −136

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    public function TweenMax(target:Object, duration:Number, vars:Object) {
    	super(target, duration, vars);
    	if (TweenLite.version < 11.2) {
    		throw new Error("TweenMax error! Please update your TweenLite class or try deleting your ASO files. TweenMax requires a more recent version. Download updates at http://www.TweenMax.com.");
    	}

    Тут нужно дополнительно подчеркнуть, что оба класса TweenMax и TweenLite распространяются вместе, и случайно получить несоответствующую версию очень тяжело (ее надо самому поменять).
    Но самое интересное в другом: ASO файлы - это артефакт механизма кеширования использовавшегося в AS2. В AS3 механизм кеширования другой, и об этих файлах давным-давно никто не слышал. Тем не менее, сообщение об ошибке по прежнему предлагает пользователям с ними побороться.

    wvxvw, 30 Марта 2014

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