1. C++ / Говнокод #26485

    +2

    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
    70. 70
    71. 71
    72. 72
    // https://shitcode.net/557
    
    int getChar(char charachter){
     int returnValue = Z;
     switch(charachter){
      case 'A': returnValue = A; break;
      case 'a': returnValue = A; break;
      case 'B': returnValue = B; break;
      case 'b': returnValue = B; break;
      case 'C': returnValue = C; break;
      case 'c': returnValue = C; break;
      case 'D': returnValue = D; break;
      case 'd': returnValue = D; break;
      case 'E': returnValue = E; break;
      case 'e': returnValue = E; break;
      case 'F': returnValue = F; break;
      case 'f': returnValue = F; break;
      case 'G': returnValue = G; break;
      case 'g': returnValue = G; break;
      case 'H': returnValue = H; break;
      case 'h': returnValue = H; break;
      case 'I': returnValue = I; break;
      case 'i': returnValue = I; break;
      case 'J': returnValue = J; break;
      case 'j': returnValue = J; break;
      case 'K': returnValue = K; break;
      case 'k': returnValue = K; break;
      case 'L': returnValue = L; break;
      case 'l': returnValue = L; break;
      case 'M': returnValue = M; break;
      case 'm': returnValue = M; break;
      case 'N': returnValue = N; break;
      case 'n': returnValue = N; break;
      case 'O': returnValue = O; break;
      case 'o': returnValue = O; break;
      case 'P': returnValue = P; break;
      case 'p': returnValue = P; break;
      case 'Q': returnValue = Q; break;
      case 'q': returnValue = Q; break;
      case 'R': returnValue = R; break;
      case 'r': returnValue = R; break;
      case 'S': returnValue = S; break;
      case 's': returnValue = S; break;
      case 'T': returnValue = T; break;
      case 't': returnValue = T; break;
      case 'U': returnValue = U; break;
      case 'u': returnValue = U; break;
      case 'V': returnValue = V; break;
      case 'v': returnValue = V; break;
      case 'W': returnValue = W; break;
      case 'w': returnValue = W; break;
      case 'X': returnValue = X; break;
      case 'x': returnValue = X; break;
      case 'Y': returnValue = Y; break;
      case 'y': returnValue = Y; break;
      case 'Z': returnValue = Z; break;
      case 'z': returnValue = Z; break;
      case ' ': returnValue = _; break;
      case '3': returnValue = B2; break;
      case '<': returnValue = TEMP; break;
      case '*': returnValue = FULL; break;
      case '|': returnValue = LINE; break;  
      case '_': returnValue = _; break;  
      case ':': returnValue = COL; break;  
      case '-': returnValue = DASH; break;  
      case ')': returnValue = BRA2; break;  
      case '%': returnValue = SMILE; break;  
      case '.': returnValue = DOT; break;    
      case '^': returnValue = COLDOT; break;      
      }
      return returnValue; //RETORNO DE INFORMAÇÃO
    }

    Тут IsBukva до getChar допромоутили

    Запостил: Fike, 10 Марта 2020

    Комментарии (48) RSS

    • Какой "С++"
      Ответить
    • Они ещё все однобуквенные идентификаторы заняли под константы. Как теперь олимпиадный код писа́ть?
      Ответить
      • А греческими буквами можно именовать константы?
        Ответить
        • Да хоть эмоджами с говном и неразрывными пробелами, к сожалению...
          Ответить
          • Это хлеб!
            Ответить
            • А Вы знали, что говнокодер делает хлеб, чтобы заработать на хлеб?
              Ответить
    • >> RETORNO DE INFORMAÇÃO
      retorno de informaçinho
      Ответить
    • Ещё и из секты одновозвратников. Кстати, у одноразвратников есть какие-то преимущества, кроме возможности вставки питушни перед return для ручной аспектушни и логирования?
      Ответить
      • Можно сэкономить на слове return, в некоторых япах вообще без него обойтись. Шесть байт на дороге не валяются
        Ответить
      • В теории, в сишке это помогает не забыть убрать за собой говно и избежать ситуаций, когда return вставил, а освободить память забыл. В языках с RAII/GC это скорее сугубо методологическая/философская питушня.
        Ответить
        • Вроде в сишке для этого делают goto free_pituxes;, который становится синонимом return. Интересно, или поехавшим легче делать вложенные if, чтобы во всех случаях без return и goto?!

          Но во всех функциях, которые не пожирают временные ресурсы, эта питушня создаёт синтаксиальную переголову.
          Ответить
          • типа
            if (...) goto kurochka;
            ////
            kurochka:
            free(petuh);
            return;
            ?

            Разве не какашня? А были же какие-то языки, где ретурн мог вооще быть только один, и там надо было так иделать
            Ответить
            • Да, так.

              Зато код выглядит как расстановка гардов и потом исполнение алгоритма на чистых данных.
              1. Размер плохой? Садись на флешку!
              2. Память не выделилась? Садись на флешку!
              3. Кобенанта неворцеательная? Садись на флешку!
              4. Вроде всё хорошо, исполняем код.

              P.S. Ну и если багор случился где-то внутри двойного цикла, проще через return или goto отправиться на флешку, чем хитрожопить логику плавного выхода.
              Ответить
            • Да нормально. Когда нужно открыть штук пять ресурсов, а потом их в правильном порядке закрыть, при этом каждое открытие может наебаться — ничего лучше без эмуляции «RAII» просто не придумаешь (именно поэтому я за «RAII»).
              Да и выглядит оно не так уж и плохо, если сишку более-менее знать.

              FILE *f1 = NULL, *f2 = NULL;
              void *mem = NULL;
              
              f1 = fopen("huj1", ...);
              if (!f1) { goto free_and_exit; }
              
              f2 = fopen("huj2", ...)
              if (!f2) { goto free_and_exit; }
              
              mem = malloc(42*100500);
              if (!mem) { goto free_and_exit; }
              
              // Тут всё ок, все ресурсы доступны
              // ...
              free_and_exit:
              free(mem);
              if (f2) { fclose(f2); }
              if (f1) { fclose(f1); }
              
              return 42;

              Простой, понятный, надёжный код, лучше можно сделать только с «RAII». Без «goto» это была бы лапша из ифов с кучей копипасты (освобождать f1 бы пришлось в трёх местах: после f2, после mem и перед нормальным выходом), при этом куча копипасты растёт квадратично от количества открываемых ресурсов.
              Ответить
              • Ну вот, пока писал — умудрился проебаться с fclose(f1). Именно поэтому я за «RAII».
                Ответить
              • Пример хороший, по крайней мере однообразный, и сразу понятно, куда добавить f84.
                Гото реабилитировагн
                Ответить
              • Убрал goto, проверь:
                FILE *f1 = NULL, *f2 = NULL;
                void *mem = NULL;
                
                do {
                f1 = fopen("huj1", ...);
                if (!f1) { break; }
                
                f2 = fopen("huj2", ...)
                if (!f2) { break; }
                
                mem = malloc(42*100500);
                if (!mem) { break; }
                } while (0);
                
                // Тут всё ок, все ресурсы доступны
                // ...
                free(mem);
                if (f2) { fclose(f2); }
                if (f1) { fclose(f1); }
                
                return 42;


                Правда, с бряком могут быть проблемы, если есть вложенные циклы.
                Ответить
              • Перевёл на «кресты»:
                FILE *f1 = NULL, *f2 = NULL;
                void *mem = NULL;
                
                [&](){
                f1 = fopen("huj1", ...);
                if (!f1) { return; }
                
                f2 = fopen("huj2", ...)
                if (!f2) { return; }
                
                mem = malloc(42*100500);
                if (!mem) { return; }
                }();
                
                // Тут всё ок, все ресурсы доступны
                // ...
                free(mem);
                if (f2) { fclose(f2); }
                if (f1) { fclose(f1); }
                
                return 42;


                Надеюсь, ничего не напутал.
                Ответить
                • На крестах проще все в RAII'шные обёртки пихать и не течь.
                  Ответить
                  • Ещё идея: try ... catch или try ... finally.

                    «Watcom C» в «Windows» (и в «OS/2») поддерживает try даже в няшной сишке посредством SEH. К сожалению, портабельный вариант они родить не смогли.
                    Ответить
              • Ответить
                • Да, Золотая макака выше продемонстрировала.
                  Ответить
                • То ли дело «PHP», в котором есть break с параметром, указывающим, на сколько уровней нужно выпрыгнуть:
                  https://www.php.net/manual/ru/control-structures.break.php

                  Хотя всё равно опасная конструкция: если обернёшь цикл другим, придётся у всех бряков менять значение аргумента.
                  Ответить
                  • Какой пхп )))

                    То ли дело «Java»:
                    package com.journaldev.util;
                    
                    public class JavaBreakLabel {
                    
                    	public static void main(String[] args) {
                    		int[][] arr = { { 1, 2 }, { 3, 4 }, { 9, 10 }, { 11, 12 } };
                    		boolean found = false;
                    		int row = 0;
                    		int col = 0;
                    		// find index of first int greater than 10
                    		searchint:
                    
                    		for (row = 0; row < arr.length; row++) {
                    			for (col = 0; col < arr[row].length; col++) {
                    				if (arr[row][col] > 10) {
                    					found = true;
                    					// using break label to terminate outer statements
                    					break searchint;
                    				}
                    			}
                    		}
                    		if (found)
                    			System.out.println("First int greater than 10 is found at index: [" + row + "," + col + "]");
                    	}
                    
                    }

                    «Точно-точно не goto, зуб даю!»
                    Ответить
                    • У goto в сишке, по сути, три разумных применения - выход из пачки циклов (джава одобряет), обработка исключений (goto fail) и генереция FSM.

                      В общем-то в этих случаях код с goto неплохо читается, даже лучше чем без него.
                      Ответить
              • Ещё идея: в «gcc» можно использовать вложенные функции. Правда, писанины будет больше.
                Ответить
          • Вообще, я плохо знаком с одновозвратничеством, но краем уха слышал, что в основном они топят за «плавное» выполнение кода, чтобы не было разрывов. Поэтому, скорее всего, goto у них ещё в большей анафеме, чем многовозврат.
            Ответить
            • Плавное это чтобы процессору-спекулянту лучше жилось?
              Ответить
              • чтобы бранч предикшен через окно овертона прокрутить
                Ответить
            • >секты одновозвратников
              >я плохо знаком с одновозвратничеством, но краем уха слышал

              ГК потихоньку деградирует.
              За весь тред ни разу не всплыла фамилия Дейкстра.

              >скорее всего, goto у них ещё в большей анафеме, чем многовозврат
              https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf
              Ответить
              • Зато мы его вспоминали, когда обсуждали говнопаттерн «цикл Дейкстры» и когда обсуждали сложность стандарта языка Ада (целых 600 страниц).
                Ответить
                • Дейкстра еще умел по деревьям лазить ходить, и научил этому многие link state алгоритмы маршрутизации;)

                  Под конец жизни Дейкстру жутко заебали анскилябры не могушие ни в математику, ни в CS, говнокодящие говно на джаве без включения мозгов, и запускающие дебагер вместо чтения кода в случае ошибки, и вообще ничего кроме джавы не знающие.

                  Так они его заебали, что он посоветовал всем студентам до второго курса запретить вообще пользоваться комптютером, и изучать программирование посредством ручки, тетрадки и, кажется, lispа:)

                  Хорошо, что старина не дождил до расцвета PHP
                  Ответить
                  • Да-а-а, если бы он почитал пхпклуб.ру — на месте б схватил инфаркт, инсульт, эпилепсию и мозг рака.
                    Повезло старику.
                    Ответить
                    • >Повезло старику.

                      Он умер в 2002. А пхп изобрели в 1995.
                      Сволочи. Довели деда.
                      Ответить
                      • Расцвет пыха пришелся на первую половину нулевых, он его не застал практически.
                        Ответить
                  • Смешно что Дейкстра был убеждённым противником программирования в стиле «проб и ошибок».
                    Которое сводится к вводу различных сочетаний букв и символов, пока программа наконец не скомпилируется.
                    Ответить
                  • Какой багор )))

                    Нужен же какой-то баланс между случайным клацаньем по кнопкам и просчитыванием всего в голове вместо компьютера.
                    Математика - это хорошо, но она сама же покажет, что если есть реальная задача, которую надо сделать наиболее эффективно, то придётся искать компромиссную точку минимума, а не впадать в крайности.
                    Ответить
                    • Я согласен про баланс, и я никогда бы не стал программистом, если вместо написания змейки на паскале мне пришлось бы считать математику посредством лиспа в тетрадочке.

                      Просто Дейкстра из тех времен, когда программисты называли себя математиками, и он говорил, что компьютер это просто инструмент математика, как нож -- инструмент хирурга. Называть программирование computer science это всё равно, что хирургию назвать knife science, говорил он
                      Ответить
                      • Подтверждаю.
                        Наверное, дело в том, что во времена Дейкстры компьютеры действительно были инструментами математиков, так как пользователей в современном смысле в те времена попросту не существовало.
                        Ответить
                        • Именно поэтому я за «времена Дейкстры».
                          Ответить
                          • Один старый программист рассказывал, как он писал программы для какой-то питушни в 70-е на перфокартах, потом их везли в вычислительный зал (или как там называется оно) и привозили потом результаты.

                            Так он написал программу для компьютера, который он даже не видел никогда!

                            Хотел бы так?
                            Ответить
                            • >он написал программу для компьютера, который он даже не видел никогда!
                              Да я каждый день пишу такие программы.
                              Выполняются они на каких-то удалённых компьютерах, которых я ни разу физически не видел.
                              Ответить
                              • Ну ты видел похожие компьютеры с такой же архитектурой с такой же ОС, не?
                                Ответить
                                • Питушня.

                                  Вы думаете, что ПИ знает заметно больше того деда - например, про внутренние питух-коды процессора или напряжения на ножках процессора под конкретными номерами?

                                  Или наоборот, дед вообще ничего не знал про старые ВМ*, и просто хреначил код на жс или брейнфаке под абстрактную ВМ**?

                                  Я думаю, дед знал то же самое, что и ПИ (в пересчёте на ...). Иначе он мог бы быть только кем-то вроде заказчика, а его код потом материли, перезаклеивали и перетыкивали.

                                  Разница с ПИ - пинг повыше и терминал картонный, а не пластиковый с магниевым сплавом. А так - что там, что там - частные имплементации SSH.
                                  _________
                                  * вычислительная машина
                                  ** виртуальная машина
                                  Ответить
                                  • Меня всегда зобавляло, что лишнехромосомные совки не сумели сами даже название кампутера придумать, а просто переписали IBM транслитом.
                                    Зее альзо: ксерокс, джинсы
                                    Ответить
                                    • Меня всегда зобавляло, что лишнехромосомные не сумели сами даже название разбавленного водой этанола придумать, а просто переписали vodka транслитом.
                                      Ответить
                                      • Ха, водка — это всего лишь этанолгидрат.
                                        Ответить
              • Просто «Considered Harmful» уже давно стал классикой и самим-собой подразумевающимся в подобных спорах. Про него каждый петух знает.
                В любом обсуждении goto Дейкстра упоминается неявно.
                Ответить

    Добавить комментарий