1. Куча / Говнокод #12620

    +124

    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
    import Control.Monad
    import Control.Arrow
    import Data.List
    
    solve' :: [String] -> [[String]]
    solve' = nub . filter (
                and . uncurry (
                    zipWith (
                        (.head) . (==) . last
                    )
                ) . (id &&& tail)
             ) . uncurry ($) . (
                last . (((
                    map (
                        last . fst &&& uncurry (++) . (init . fst &&& snd)
                    ) . tail . uncurry (zipWith (,)) . (inits &&& tails)
                ) >=> (uncurry map) . 
                    ((:) *** solve')
                ):
                ) . (uncurry takeWhile) . (
                        const . null &&& const [const [[]]]
                    ) &&& id
             )
    
    main = print $ solve' ["123","321","123"]

    HaskellGovno, 20 Февраля 2013

    Комментарии (24)
  2. Objective C / Говнокод #12618

    −106

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    - (void)shutdownSoundManager {
    	@synchronized(self) {
    		if(sharedSoundManager != nil) {
    			[self dealloc];
    		}
    	}
    }

    Убийца синглетонов, блджд

    clockworkman, 20 Февраля 2013

    Комментарии (2)
  3. SQL / Говнокод #12617

    −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
    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
    /*здесь было много кода*/
    
    DECLARE @Strings TABLE /* in this temporary table we keep all strings, even the names of the elements, since they are 'escaped' in a different way, and may contain, unescaped, brackets denoting objects or lists. These are replaced in the JSON string by tokens representing the string */
        (
         String_ID INT IDENTITY(1, 1),
         StringValue NVARCHAR(MAX)
        )
      SELECT--initialise the characters to convert hex to ascii
        @characters='0123456789abcdefghijklmnopqrstuvwxyz',
      /* firstly we process all strings. This is done because [{} and ] aren't escaped in strings, which complicates an iterative parse. */
        @parent_ID=0;
      WHILE 1=1 --forever until there is nothing more to do
        BEGIN
          SELECT
            @start=PATINDEX('%[^a-zA-Z]["]%', @json collate SQL_Latin1_General_CP850_Bin);--next delimited string
          IF @start=0 BREAK --no more so drop through the WHILE loop
          IF SUBSTRING(@json, @start+1, 1)='"'
            BEGIN --Delimited Name
              SET @start=@Start+1;
              SET @end=PATINDEX('%[^\]["]%', RIGHT(@json, LEN(@json+'|')-@start) collate SQL_Latin1_General_CP850_Bin);
            END
          IF @end=0 --no end delimiter to last string
            BREAK --no more
          SELECT @token=SUBSTRING(@json, @start+1, @end-1)
          --now put in the escaped control characters
          SELECT @token=REPLACE(@token, FROMString, TOString)
          FROM
            (SELECT
              '\"' AS FromString, '"' AS ToString
             UNION ALL SELECT '\\', '\'
             UNION ALL SELECT '\/', '/'
             UNION ALL SELECT '\b', CHAR(08)
             UNION ALL SELECT '\f', CHAR(12)
             UNION ALL SELECT '\n', CHAR(10)
             UNION ALL SELECT '\r', CHAR(13)
             UNION ALL SELECT '\t', CHAR(09)
            ) substitutions
          SELECT @result=0, @escape=1
      --Begin to take out any hex escape codes
          WHILE @escape>0
            BEGIN
              SELECT @index=0,
              --find the next hex escape sequence
              @escape=PATINDEX('%\x[0-9a-f][0-9a-f][0-9a-f][0-9a-f]%', @token collate SQL_Latin1_General_CP850_Bin)
              IF @escape>0 --if there is one
                BEGIN
                  WHILE @index<4 --there are always four digits to a \x sequence  
                    BEGIN
                      SELECT --determine its value
                        @result=@result+POWER(16, @index)
                        *(CHARINDEX(SUBSTRING(@token, @escape+2+3-@index, 1),
                                    @characters)-1), @index=@index+1 ;
            
                    END
                    -- and replace the hex sequence by its unicode value
                  SELECT @token=STUFF(@token, @escape, 6, NCHAR(@result))
                END
            END
          --now store the string away
          INSERT INTO @Strings (StringValue) SELECT @token
          -- and replace the string with a token
          SELECT @JSON=STUFF(@json, @start, @end+1,
                        '@string'+CONVERT(NVARCHAR(5), @@identity))
        END

    парсинг json-строки sql скриптом. полная версия тут : https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/

    mozg_raka, 20 Февраля 2013

    Комментарии (6)
  4. Objective C / Говнокод #12616

    −98

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
                [NSThread sleepForTimeInterval:0.35];
                [[NSThread mainThread] performBlock:^{
                    [titleLabel setHidden:NO];
                }];
            });

    torip3ng, 20 Февраля 2013

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

    +67

    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
    public final class SomeActivity extends Activity {
           @Override
    	protected Dialog onCreateDialog(int id) {
    		Dialog dialog = null;
    		if (id == DialogGenerator.SETTINGS_DIALOG) {
    			dialog = mDialogGenerator.createSettingsDialog();
    		}  {
    			dialog = super.onCreateDialog(id);
    		}
    		return dialog;
    	}
    
    	@Override
    	protected void onPrepareDialog(int id, Dialog dialog) {
    		super.onPrepareDialog(id, dialog);
    		if (id == DialogGenerator.SETTINGS_DIALOG) {
    			mDialogGenerator.prepareSettingsDialog((AlertDialog) dialog, someBoolValue, someObjectValue);
    		} 
    	}
    }
    
    public final class DialogGenerator {
    	public Dialog createSettingsDialog() {
    		int dialogId = SETTINGS_DIALOG;
    		int titleId = R.string.settingsTitle;
    		String[] itemsArray = getStringArray(R.array.settings);
    		ThreeTypeOptionsAdapter adapter = new ThreeTypeOptionsAdapter(mControllerAsActivity, itemsArray,
    				mCheckableOptions, mTwoTextOptions);
    		AlertDialogCallback dialogCallback = new AlertDialogCallback(mControllerAsDialogHost, dialogId);
    		AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mControllerAsActivity);
    		dialogBuilder.setTitle(titleId);
    		// костыль
    		dialogBuilder.setSingleChoiceItems(itemsArray, 0, null);
    		// конец костыля
    		dialogBuilder.setAdapter(adapter, dialogCallback);
    		AlertDialog dialog = dialogBuilder.create();
    		setMainListenersOnDialog(dialog);
    		dialog.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    		return dialog;
    	}
    	
    	public void prepareSettingsDialog(AlertDialog dialog, boolean someBoolValue, String someStringValue) {
    		//костыль
    		ListView dialogList = dialog.getListView();
    		dialogList.clearChoices();
    		dialogList.setItemChecked(POSITION_FOR_BOOL, someBoolValue);
    		//конец костыля
    		ThreeTypeOptionsAdapter adapter = (ThreeTypeOptionsAdapter) dialogList.getAdapter();
    		adapter.setAdditionalValue(POSITION_FOR_STRING, someStringValue);	
    	}
    }

    Задача: показать диалог, внутри которого есть 3 типа ячеек: выделяемые с чекбоксом справа, невыделяемые с дополнительной надписью справа, обычные невыделяемые.
    Примерно так:
    Use GPS checkbox
    Selected country Russia
    Launch some activity

    В комментах к методам я описал костыль:
    Здравствуйте, дорогие друзья. Сегодня мы с вами поговорим об уникальном виде животных, которых открыли только в конце XX века. Это, дорогие друзья, Ява-обезьяны. Давайте дружно откроем сырцы Андроид-СДК, а именно - класс com.android.internal.app.AlertController .AlertParams - и метод createListView(AlertController). Видите, одна обезьяна решила, что нам будет удобней, если диалог автоматом задисмиссится, когда мы щёлкнем по элементу списка в CHOICE_MODE_NONE, и OnClickListener будет не null? А теперь давайте перейдём в android.app.AlertDialog.Builder. Видите, там другая обезьяна решила, что для multi-choice списка нам не потребуется хитроумный адаптер? Поэтому, дорогие друзья, когда мы поставили кастомный адаптер (setAdapter()) и сопроводили его слушателем, то какой бы мы choice mode не ставили после AlertDialog.Builder.create(), диалог дисмиссился. Поэтому, дорогие друзья, пришлось пойти на хитрость и вначале установить single choice (чтобы флаг mIsSingleChoice стал true), а потом уже ставить адаптер.

    QuickNick, 20 Февраля 2013

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

    +133

    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
    drwxrwxrwx  1 wvxvw None       0 02-17 16:59 .svn
      -rw-rw-rw-  1 wvxvw None   22082 02-04 11:03 header.asp
      -rw-rw-rw-  1 wvxvw None   14331 02-04 11:02 header.utf.asp
      -rw-rw-rw-  1 wvxvw None   10333 02-04 11:01 header2.asp
      -rw-rw-rw-  1 wvxvw None   10368 02-04 11:02 header2_test.asp
      -rw-rw-rw-  1 wvxvw None   11825 02-04 11:02 header3.asp
      -rw-rw-rw-  1 wvxvw None   11734 02-04 11:03 header3_liran.asp
      -rw-rw-rw-  1 wvxvw None   11238 02-04 11:01 header3_old.asp
      -rw-rw-rw-  1 wvxvw None    7403 02-04 11:02 header3_ssl.asp
      -rw-rw-rw-  1 wvxvw None    9045 02-04 11:01 header3del.asp
      -rw-rw-rw-  1 wvxvw None   39451 02-04 11:02 header4.asp
      -rw-rw-rw-  1 wvxvw None   40224 02-04 11:02 header4_new.asp
      -rw-rw-rw-  1 wvxvw None   13348 02-04 11:02 header4rus.asp
      -rw-rw-rw-  1 wvxvw None     230 02-04 11:02 headers.asp
      -rw-rw-rw-  1 wvxvw None     208 02-06 09:37 headers.php

    Наследство.

    wvxvw, 19 Февраля 2013

    Комментарии (18)
  7. JavaScript / Говнокод #12613

    +157

    1. 1
    if (!("" instanceof String)) throw new Error("Empty string is not a string");

    Майкрософт. JScript, ASP.

    wvxvw, 19 Февраля 2013

    Комментарии (31)
  8. PHP / Говнокод #12612

    +145

    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
    if (!$to && !$from)
            {
                $msgInstance->setStatus(1);
                $msgInstance->setDeletedTo(1);
                $msgInstance->setDeletedFrom(1);
                $incomingL = -1;
                $outcomingL = -1;
            }
            elseif (!$to){
                $msgInstance->setStatus(1);
                $msgInstance->setDeletedTo(1);
                $incomingL = -1;
                $outcomingL = 0;
            }
            elseif (!$from)
            {
                $msgInstance->setDeletedFrom(1);
                $incomingL = 0;
                $outcomingL = -1;
            }

    Оцените xD ;)

    mishanon, 19 Февраля 2013

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

    +28

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    if ( _It->m_sOpenText.substr( 0, 3 ) == "<tr" ||
    		 _It->m_sOpenText.substr( 0, 3 ) == "<th" ||
    		 _It->m_sOpenText.substr( 0, 3 ) == "<td" ||
    		 _It->m_sOpenText.substr( 0, 6 ) == "<thead" ||
    		 _It->m_sOpenText.substr( 0, 6 ) == "<tbody" ||
    		 _It->m_sOpenText.substr( 0, 6 ) == "<tfoot" ||
    		 _It->m_sOpenText.substr( 0, 8 ) == "<caption" ||
    		 _It->m_sOpenText.substr( 0, 4 ) == "<col" ||
    		 _It->m_sOpenText.substr( 0, 9 ) == "<colgroup" )
    		return; // TODO: я пишу ТАКОЙ код, убейте меня...

    Продолжаем неделю свитчей  — HTML-препроцессор!

    Yuuri, 19 Февраля 2013

    Комментарии (18)
  10. C++ / Говнокод #12610

    +80

    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
    /* Попытка обьединить четыре  цикла в один.
    	Первый - Присвоение элементам массива значения.
    	Второй - Поиск минимального значения.
    	Третий - Поиск максимального значения.
    	Четвертый - Вывод содержимого массива.
    */
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    int main()
    {
    	int array[100];
    	int flag;
    	int min = 0;
    	int max = 0;
    
    	for (flag=0;flag<100;flag++){					   
    		array[flag]=rand();
    		
    		if ( ! min && ! max){	   //Инициализация переменных, для первой итерации.
    		max = array[0];
    		min = array[0];
    		}
    
    		if (array[flag] >=max) max = array[flag];
    		
    		if (array[flag] <= min) min = array[flag];
    		
    		cout << array[flag] << "\n";
    	}
    	
    	cout << "\nМаксимальное значение: " << max;	
    
    	cout << "\nМинимальное значение: "  << min << '\n';
    	
    	return 0;
    }

    Писал я, пытаясь переделать пример из книжки, в котором для этой же задачи использовалось 4 цикла.
    Просьба обьективно обгадить сей код, дабы мне было над чем подумать.

    P.S только учусь.

    shim, 18 Февраля 2013

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