1. Куча / Говнокод #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)
  2. Java / Говнокод #15751

    +73

    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
    StartElement startElement = event.asStartElement();
    if(startElement.getName().getLocalPart().equals(REPORT)){
    	report = new Report();
    }else if (startElement.getName().getLocalPart().equals(CODE)){
    	event = eventReader.nextEvent();
    	report.setCode(event.asCharacters().getData());
    	continue;
    }else if(startElement.getName().getLocalPart().equals(SHORT_NAME)){
    	event = eventReader.nextEvent();
    	report.setShortName(event.asCharacters().getData());
    }else if(startElement.getName().getLocalPart().equals(NAME)){
    	event = eventReader.nextEvent();
    	report.setName(event.asCharacters().getData());
    	continue;
    }else if(startElement.getName().getLocalPart().equals(TYPE)){
    	event = eventReader.nextEvent();
    	report.setType(ReportType.valueOf(event.asCharacters().getData()));
    	continue;
    }else if(startElement.getName().getLocalPart().equals(CON_CMN_REPORT)){
    	event = eventReader.nextEvent();
    	String conRepCode = event.asCharacters().getData();
    	report.setConnectedCommonReport(getReportByCode(conRepCode, reports));
    	continue;
    }else if(startElement.getName().getLocalPart().equals(BEFORE)){
    	event = eventReader.nextEvent();
    	report.setAvaliableBefore(Boolean.valueOf(event.asCharacters().getData()));
    	continue;
    }else if(startElement.getName().getLocalPart().equals(QUANTITY)){
    	event = eventReader.nextEvent();
    	report.setQuantity(ReportQuantity.valueOf(event.asCharacters().getData()));
    	continue;
    }else if(startElement.getName().getLocalPart().equals(CREATOR_CLASS_NAME)){
    	event = eventReader.nextEvent();
    	report.setCreatorClassName(event.asCharacters().getData());
    }

    и не лень же было

    evg_ever, 14 Апреля 2014

    Комментарии (1)
  3. C++ / Говнокод #15750

    +12

    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
    int main()
    {
    MyList<MySubList*> *list;
    ...
    int error=makeZeroItemsNull(list)+deleteZeroItems(list);
    delete list;
    return error;
    }
    
    int makeZeroItemsNull(MyList *list)
    {
    //Удаляем указатели в списке и обнуляем
    if(list==0||error)return 1;
    return deleteZeroItems(list); //На всякий случай проверяем остались ли не удаленные элементы
    }
    
    int deleteZeroItems(MyList *list)
    {
    //Удаляем из списка обнуленные элементы
    if(list==0||error)return 2;
    return makeZeroItemsNull(list); //На всякий случай проверяем остались ли не обнуленные элементы
    }

    Учим все функции возвращать int(0) когда нет ошибок.

    IGHOR, 14 Апреля 2014

    Комментарии (1)
  4. Си / Говнокод #15748

    +123

    1. 1
    drwsr

    Pizda, 12 Апреля 2014

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

    +123

    1. 1
    geget

    Pizda, 12 Апреля 2014

    Комментарии (0)
  6. Си / Говнокод #15743

    +117

    1. 1
    bormand сосёт анус своему отцу, размазывая говно по лицу.

    Pizda, 12 Апреля 2014

    Комментарии (3)
  7. PHP / Говнокод #15741

    +128

    1. 1
    Я вернулся, вы рады?

    Дебил ХДДДДДДД

    Pizda, 12 Апреля 2014

    Комментарии (4)
  8. 1C / Говнокод #15740

    −162

    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
    Процедура ОбождатьПятьСекунд()
    	
    	Время1 = ТекущаяДата();
    	Пока ТекущаяДата() <= Время1 + 5 Цикл
    	КонецЦикла;
    	
    КонецПроцедуры
    
    Процедура ОбождатьМенуту()
    	
    	Н = 1;
    	Пока Н <= 12 Цикл
    		ОбождатьПятьСекунд();
    		Н = Н + 1;
    	КонецЦикла;
    	
    КонецПроцедуры
    
    Процедуры ВыгрузитьВСайт(КоличествоМенут)
    	
    	Н = 1;
    	Пока Н <= КоличествоМенут Цикл
    		ОбождатьМенуту();
    		Н = Н + 1;
    	КонецЦикла;
    	
    	СформероватьОправитьХМЛ();
    	
    КонецПроцедуры

    В пятницу на собеседование пришёл программист.
    Задание было следующим: по определённым правилам сформировать XML-файл для выгрузки в интернет-кабинет. Выгрузка должна была производиться с определённой периодичностью. В клиент-серверной версии нужно было создать регламентное задание.

    С заполнением XML-файла программист справился согласно требованиям.
    Но, к сожалению, парень не умел работать с регламентными заданиями, поэтому в качестве решения сделал внешнюю обработку с обработчиком ожидания, которая запускалась в отдельном сеансе.
    Орфография сохранена :-)

    Voittamaton, 12 Апреля 2014

    Комментарии (31)
  9. C++ / Говнокод #15739

    +9

    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
    class t_item{
    public:
    #define DEF_PRO_STRUCT_INFO(NAME,PARENT,OWNER)NAME(t_item)
    #define DEF_PRO_VARIABLE(ADDBEG,ADDVAR,ADDEND)\
    ADDBEG()\
    ADDVAR(0,string,name,DEF,$,$)\
    ADDVAR(1,int,next,SET,0,$)\
    ADDEND()
    //=====+>>>>>t_item
    #include "QapGenStruct.inl"
    //<<<<<+=====t_item
    public:
    };

    LispGovno, 12 Апреля 2014

    Комментарии (14)
  10. Куча / Говнокод #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)