1. C# / Говнокод #17144

    +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
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    namespace CA1
    {
        class Program
        {
            static void Main()
            {
                int buffer;
                int Cout = 0;
                string line;
                System.IO.StreamReader file = new System.IO.StreamReader("file.txt");
                while ((line = file.ReadLine()) != null)
                {
                    buffer = Convert.ToInt32(line);
                    if(buffer > 0)
                    {
                        if(buffer / 2 > 5 && buffer / 2 < 49.5)
                        {
                            Cout++;
                        }
                    }
    
                    if (buffer < 0)
                    {
                        if (buffer / 2 < - 5 && buffer / 2 > - 49.5)
                        {
                            Cout++;
                        }
                    }
                }
                Console.WriteLine(Cout);
                Console.ReadLine();
            }
        }
    }

    Вычисление количества цифр в числе

    Запостил: LightningAtom, 20 Ноября 2014

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

    • >>49.5
      далеко пойдет.

      А в чем смысл этой программы? Школьники тренируются?
      Ответить
      • Видимо должен считать количество строчек, состоящих из одного двузначного числа:DDD
        Ответить
        • А бизнес задача какая?

          Вот это же console based приложение, он читает file.txt, как его будут использовать?
          Ответить
          • Эт я одногруппнику помогал с лабой ламерской, просто работа с файлами, вот там задание было: найти количество строк(в файле), содержащих двузначное число, ну я и решил упороться, написал ему нормальную прогу через логарифм, а сюда вот это:D just for lulz так сказать
            Ответить
            • Не работает. Стороки с десятками не считаются :D
              Ответить
              • Ахахахах, при сравнении чисел про равенство забыл, поэтому и не работает:DDD
                Ответить
            • "ламерской" ты видимо отличник и все эти лабы фигня для тебя?

              Сразу видно руку мастера
              using System.IO; вместе с System.IO.StreamReader

              инициализация переменных на уровне CEO
              int buffer;
              int Cout = 0;
              string line;
              что хочу проинициализирую, что не хочу/не знаю как, не буду

              и богоподобные условные операторы, кому нужно комбинировать что то, каждый раз буду новый if вложенный писать, насрать что компилятор выдаст говнокод в виде кучи cmp и je/jne (не знаю как там в IL они обозначаются).
              При этом на лицо тотальное незнание как языка, так .NET в целом.
              твое говнецо решается в одну строку, я так понимаю что файл содержит только цифры в каждой строке
              предполагаю что пробелов между цифрами нет (по крайней мере из контекста)
              внутри цикла:
              Count+=line.ToCharArray().Length;

              еще лучше было бы регулярочками, с невероятно сложным паттерном "\d"
              p.s. А ну да и конечно это все в main, даже namespace сделал свой.
              Ответить
              • Пишу скрипты для Unity3d(javascript), есть своя команда разработчиков игр, хотите присоединяйтесь, ссылку на группу могу дать)) Писал код упарываясь по полной специально для говнокода) Не воспринимайте всерьез слова "ламерская программа" и все такое, поверьте свой нормальный код я бы сюда не выложил)
                Ответить
                • В unity не силен, если честно, не доводилось. Интересно было бы посмотреть)
                  Ответить
                • Привет. Ты меня заинересовал. Скинь ссылку на свою группу? Я хорошо знаю java script, а игры люблю ещё больше.
                  Ответить
                  • http://vk.com/lightninggames

                    Если хотите добавиться пишите человеку из группы - Илье Кравцу или Бабикову Александру(лучше первому так как он с кадрами работает, второй - я(работаю с группой 3d дизайнеров). Игры делаю не первый год, еще школьником(класс девятый) начал, но более-менее адекватные проекты начал пилить относительно недавно
                    Ответить
                    • >>(класс девятый)
                      А сейчас Вы в каком классе?
                      Ответить
                    • А Вы уже какие-то игры написали? Можно посмотреть на готовые работы?

                      У меня чисто праздный интерес, если что
                      Ответить
                    • Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова... Пользователь может играть лесными эльфами, охраной дворца и злодеем. И если пользователь играет эльфами то эльфы в лесу, домики деревяные набигают солдаты дворца и злодеи. Можно грабить корованы... И эльфу раз лесные то сделать так что там густой лес... А движок можно поставить так что вдали деревья картинкой, когда подходиш они преобразовываются в 3-хмерные деревья[1]. Можно покупать и т.п. возможности как в Daggerfall. И враги 3-хмерные тоже, и труп тоже 3д. Можно прыгать и т.п. Если играть за охрану дворца то надо слушаться командира, и защищать дворец от злого (имя я не придумал) и шпионов, партизанов эльфов, и ходит на набеги на когото из этих (эльфов, злого...). Ну а если за злого... то значит шпионы или партизаны эльфов иногда нападают, пользователь сам себе командир может делать что сам захочет прикажет своим войскам с ним самим напасть на дворец и пойдет в атаку. Всего в игре 4 зоны. Т.е. карта и на ней есть 4 зоны, 1 - зона людей (нейтрал), 2- зона императора (где дворец), 3-зона эльфов, 4 - зона злого... (в горах, там есть старый форт...)

                      Так же чтобы в игре могли не только убить но и отрубить руку и если пользователя не вылечат то он умрет, так же выколоть глаз но пользователь может не умереть а просто пол экрана не видеть, или достать или купить протез, если ногу тоже либо умреш либо будеш ползать либо на коляске котаться, или самое хорошее... поставить протез. Сохранятся можно...

                      P.S. Я джва года хочу такую игру.
                      Ответить
                      • Кстати, зацените гнома
                        Ответить
                        • Гномы и свиборги это всё хуйня. Ща пацаны сделают новое на Юнити 3д. Еще поплачем
                          Ответить
                          • Не нужно иронизировать. У ребят всё очень серьезно. Видите, у них даже кадровик есть: https://vk.com/lightninggames
                            И сайт: http://lgames.do.am/
                            И емейл "baterfly", чтобы привлекать англоговорящих пользователей.
                            И группа в контакте "чтобы обмениваться моделями, скриптами, текстурами". Кстати, это хорошая идея: я тоже планирую с коллегами через вконтакте кодом обмениваться.
                            Ответить
                            • vkontakte VCS. Гениально я и даже не думал о таком подходе. Ветки как ответ на комментарий. Тэг это Лайк. А если присмотреться то можно и хэш коммита вытащить.
                              Ответить
                            • Ну как, обменялся кодом с коллегами?
                              Ответить
                      • :DDDDDDD
                        Ответить
                      • > Так же чтобы в игре могли не только убить но и отрубить руку и если пользователя не вылечат то он умрет, так же выколоть глаз но пользователь может не умереть а просто пол экрана не видеть, или достать или купить протез, если ногу тоже либо умреш либо будеш ползать либо на коляске котаться, или самое хорошее... поставить протез. Сохранятся можно...

                        Так вот откуда авторы Kenshi всё слизали.
                        Ответить
              • >>насрать что компилятор выдаст говнокод в виде куч
                А Вы когда пишите на C# всегда во главу угла ставите качество IL кода который после компиляции получится?;)
                Ответить
                • Нет, но я представляю что я на выходе имею. Ошибаться тоже могу, я же не робот) все бывает.
                  Ответить
                  • Мне просто кажется что подобные рассуждения имеют смысл в настолько тяжелых приложениях, что большинство людей до них просто никогда не дойдет. Кроме того JIT может перекопать код до неузнаваемости: IL же не 1-в-1 в x86 команды превращается.

                    Кстати, кондишенал джамы в IL будут blt, bge , bgt итд: https://en.wikipedia.org/wiki/List_of_CIL_instructions )
                    Ответить
                    • За ссылочку спасибо) посмотрю на досуге. Так ведь в итоге весь этот красивый код исполняется процессором) а он могет только то, что знает и не важно как оно для нас выглядит cpblk или mov. Так что на самом деле важно, ведь не даром Рихтер приводит примеры дизасемблированного кода в своей книге, понятно чтобы дать представление о том что там происходит, но и чтобы люди задумывались что там выходит. Хотя я сам никогда не сравнивал код в release/debug. В release же по дефолту оптимизация ключается, вот она может весь код переиначить, это да
                      Ответить
                      • А разве release/debug для CLR как-то влияет на JIT?)
                        Я думал что максимум что сделано в release это выкинута debug инфа)
                        Но я могу ошибаться, надо msdn смотреть.
                        Ответить
                        • То что degug инфа выкидывается это да, так же JIT начинает оптимизировать код, принудительно, юзать один и тот же скомпиленный код, где это возможно, во избежании повторных компиляций и тд, например так же может юзать одну и туже переменную в 2х разных циклах, чтобы не заниматься повторным выделением память, инициализацией и очисткой, к примеру
                          for (int i = 0;...)
                          for (int j = 0;...)
                          при оптимизации вполне может, да я думаю так и сделает, заюзает для второго цикла i. Может и просто удалить /изменять куски кода)
                          Ответить
              • Поторопился, условие не так прочитал
                System.Diagnostics.Stopwatch sw = Stopwatch.StartNew();

                StreamReader sr = new StreamReader(@"D:\test.txt");
                string line = string.Empty;
                int cnt = 0;

                while ((line = sr.ReadLine()) != null)
                {
                int i = -1;
                string[] split = Regex.Split(line, @"(\d+)", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);

                while (++i < split.Length)
                if (split[i].ToCharArray().Length == 2)
                { cnt++; break; }
                }

                sw.Stop();

                Console.WriteLine(cnt);
                Console.WriteLine(sw.Elapsed);
                Console.ReadKey();

                00:00:00.0005195

                test.txt:
                111 asda
                10asdsa
                111
                1
                aa
                111
                11
                123
                12321 41 41
                1
                Ответить
                • Тут тоже что-то подозрительное. Не пойму, зачем тут вообще Split.
                  В любом случае, про отрицательные числа забыл.
                  И вообще, решение с регулярками можео сделать одной строкой, насколько я представляю.
                  Ответить
                  • Да можно было и одной регуляркой
                    "\b\d{2}\b" с опциями /gmi, найдет и отрицательные и положительные
                    Ответить
                    • Я сказал не одной регуляркой, а одной строкой кода.
                      И эта регулярка тоже неверная, потому что 01 - не двухзначное, а 010 - двухзначное :D
                      Ответить
                      • Говорить ты могешь, пример в сутидю.
                        Ответить
                        • 3 варианта в зависимости от желаемого результата. Насколько я понимаю, требуется первый.
                          Console.WriteLine(File.ReadAllLines("input.txt").Count(line => Regex.IsMatch(line, @"^[-+]?0*[1-9][0-9]$")));   // Число строк, состоящих из двухзначного числа
                          Console.WriteLine(File.ReadAllLines("input.txt").Count(line => Regex.IsMatch(line, @"\b0*[1-9][0-9]\b")));      // Число строк, содержащих хотя бы одно двухзначное число
                          Console.WriteLine(Regex.Matches(File.ReadAllText("input.txt"), @"\b0*[1-9][0-9]\b").Count);                     // Количество двухзначных чисел
                          Ответить
                          • -010
                            00012
                            пройдут :)
                            Тогда уж что нибудь такое "\b([^0.\s]\d{1})\b"
                            Ответить
                            • 00012 - это двухзначное число, потому что это число 12. При использовании естественного варианта с приведением к числу результат будет тот же. У автора кода поведение такое же. Если требуется другое, то надо убрать 0* из регулярки, но на мой взгляд, поведение с игнорированием нулей верное. Задание же найти строки, содержащие двухзначные числа, а не строки, содержащие слово из 2 цифр.

                              Что касается -010. Лидирующий ноль выкидываем в соответствии с прошлой фразой. Сколькизначным числом является -10 сказать сложно, в данном случае выбрано то же поведение, что и в исходном коде.

                              > \d{1}
                              Это то же самое, что просто \d
                              Ответить
                          • задание было: найти количество строк(в файле), содержащих двузначное число Я так понимаю что хотя бы одно число в строке должно быть двухзначное. Ведь не сказано было найти строки состоящие из двухзначного числа.
                            Ответить
                            • Такую задачу решает второй вариант кода.

                              Первый вариант (строка, состоящая из двухзначного числа) - это тот вариант, который реализован в начальном коде. Там используется Convert.ToInt32(line), который выбросит исключение, если строка содержит что-то ещё помимо единственного числа. Если считать, что падение не является корректой ситуацией, то все строки файла содержат числа, по одному на строке. В таком варианте все три реализации работают одинаково.
                              Ответить
                              • Я все понимаю. Идешь сюда http://regexhero.net/tester/ вводишь 00011 в тестовую строку и \b0*[1-9][0-9]\b в строку паттерна и получаешь совпадение.
                                Ответить
                                • Как я сказал комментарием выше, я считаю такое поведение корректным. Оно заложено в регулярку намеренно. Я даже ещё утром писал
                                  > И эта регулярка тоже неверная, потому что 01 - не двухзначное, а 010 - двухзначное :D
                                  потому что число - это число, а не слово, состоящие из цифр. 11, 011, 0011, 00011 - это одно и то же число и оно двухзначное.

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

                > инициализация переменных на уровне CEO
                И что не так?

                > каждый раз буду новый if вложенный писать, насрать что компилятор выдаст говнокод в виде кучи cmp и je/jne
                А по-твоему, с логическими операторами он не то же выдаст? А как же скоращённая схема их вычислений?
                Тут скорее что перед проверкой на отрицательность стоило бы поставить else, но без него куча народу пишет.

                > Count+=line.ToCharArray().Length;
                Неверно, это считает не то что надо. И нафига конвертить строку в массив символов, у неё же и так есть длина.
                Надо это переписать так:
                Count += (line.Length == 3 ? line[0] == '-' : line.Length == 2) ? 1 : 0;
                А ещё лучше нормальный if с инкрементом.

                > даже namespace сделал свой
                Для тех, кто не в курсе, VS сразу генерирует файл с namespace'ом по имени проекта.

                А ничего из того, к чему действительно можно было придраться, а именно
                - отсутствие using со StreamReader'ом
                - использование System.Convert.ToInt32 вместо int.Parse / int.TryParse
                - отсутствие обработки ситуации, когда в строке не целое число
                ты не назвал.
                Ответить
            • >нормальную прогу через логарифм
              String.lenght, не?
              Ответить
          • > бизнес задача какая
            Цель: сдать лабу.
            Ответить
            • А вот и нет. Цель была в том, чтоб написать плохой код и выложить его на говнокод.ру.
              Ответить
    • > Cout++
      У меня бугурт.
      Ответить
      • Это такой плевок завуалированный в сторону крестовиков. А так же в сторону кодстайла)
        Ответить
      • > У меня бугурт

        От того, что авторы std::ostream не догадались перегрузить инкременты, сделав их алиасами << "\n" ?
        Ответить
        • Кстати говоря инкременты выглядели бы очень логично в такой перегрузке)
          Или например так: cout + 2; // Перевод двух строк
          :)
          Ответить
        • > перегрузить инкременты, сделав их алиасами << "\n"
          Тогда уж seek:
          ++stream; // пропустить байт
          stream += 5; // промотать на 5 байт вперед
          stream -= 42; // отмотать на 42 байта назад
          Ответить
          • Вот видите: один простой оператор, а два человека читают его совершенно по-разному!
            Именно такие примеры всегда приводят джависты, когда их спрашивают "почему там пользователь не может перегрузить оператор?"
            Ответить
            • Имхо, перегрузка операторов полезна. Главное ее не абузить для чего попало.

              + для сложения векторов или BigDecimal'ов - няшно и удобно. А вот << для вывода в поток - уже на грани фола.
              Ответить
              • Как и всё в плюсах: может быть полезно, если не стрелять себе в ногу.
                Хотя она не только в крестах же, и в C# е
                Ответить
                • В boost например есть красивый оператор / для конкатенации путей:
                  file_path = app_dir / "docs" / file_name;
                  Но это тоже использование не по назначению ;(
                  Ответить
                  • Где-то мне встречалась библиотека для шарпика с такой же фичей: / для конкатенации путей.
                    Ответить
              • > Главное ее не абузить для чего попало.
                В этом и есть проблема - например | (конвеер в Unix) очень любят для аналогичных целей использовать. Вот, например:
                https://ericniebler.github.io/range-v3/01_quick_start.html#container-algorithms
                Ответить
                • Красиво сделано. Гораздо лучше, чем жсное:
                  var vi = std.move(vi)
                    .transform(cont.sort)
                    .on('cont', transform.bind(this, cont::unique));

                  Со своей логикой "фу, палка - это для битов и не более" противники операторов могут прийти в математику и сказать "ололо вы матрицы плюсом складываете, а плюсы - это же для чисел и только для них!"
                  Какой бы нечитаемый ад был в Спирите без понятных +, *, <<.

                  > любят для аналогичных целей использовать
                  А вот это - идеально. В итоге все получат красивые и удобные интерфейсы, основывающиеся на предыдущем опыте.
                  Ответить
                  • > Какой бы нечитаемый ад был в Спирите
                    Лол.
                    Ответить
                    • Ну я тут не про всякую скучную питушню, которую надо написать, чтобы оно хотя бы скомпилировалось. Я про описание грамматики.
                      a = X | Y тут гораздо уместнее и приятнее, чем какое-нибудь x = boost::spirit::rule_or(X, Y);
                      Ответить
                  • Сравнение с математикой - не корректное. Умножение и сложение, это операции поля, поле цеых или вещественных / комплексных - чеснтный случай поля. То, что матрицы и числа обрабатываются одной функцией вполне себе оправдано.
                    Не оправдано перегружать операторы для того, чтобы делать что-то не связаное с уже существующими значениями. Например, почему % значит то остаток то интерполяцию - это для меня загадка (хотя не исключено, что это можно как-то подвести под определение делимости, я не могу придумать такой способ).
                    Ответить
                  • Другими словами, операторы с точки зрения семантики (как она понимается в лингвистике) ничем не отличаются от других функций. И, например, к ним часто можно подобрать синонимы.

                    A + B = C

                    можно переписать как:

                    матрица A в суме с матрицей B идентична матрице C

                    для сравения:

                    "x: %s" % y = "x: y"

                    строка "x: %s" в остатке от деления на константу y идентична строке "x: y"

                    Последнее выражение, лично мне представляется бессмысленным - никто не знает, что из себя представляет делимость строк, и как должны выглядеть остатки и т.д.
                    Ответить
                    • > Не оправдано перегружать операторы для того, чтобы делать что-то не связаное с уже существующими значениями.
                      Ну не плодить же ради этого сотни новых операторов, которые будут использоваться раз в сто лет... И не отказываться же от наглядности в угоду лёгкости для тех, кто только-только приступает к работе.

                      > вещественных / комплексных
                      Вот я догадался, что Вы тут не дробь в 43-ричной системе написали. Если в контексте всё понятно, ещё одно значение никому не повредит.

                      > Последнее выражение, лично мне представляется бессмысленным
                      Аналогично было и с матрицами после чисел. Сначала странно и непонятно, но потом привыкаешь, что и у этих объектов есть операция "+". Понятие становится бытовым. И сложность тут не в понимании значка "+", а в понимании, что за ним стоит.
                      Сейчас оно бессмысленно, но если попадётся библиотека, в которой этим процентом обозначена какая-нибудь часто требующаяся операция, всё станет на свои места. И понимать опять же придётся логику операции.

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

                        Контекст никто не гарантирует. Делать систему зависимой от контекста, когда этого можно избежать - это глупость, неоправданые трудозатраты.

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

                        Почему так? Потому что у прибавления есть известные свойства: есть замыкание (т.е. мы можем не вычисляя результат знать его тип), есть нейтральный элемент, который позволяет иногда сэкономить операции, есть, в контексте поля специальное отношение между сложением и умножением. Так же зависимости есть и между делимостью и умножением, но они не проявляют себя в нахождении остатка от строки.

                        Т.е. например, хороший компилятор может обнаружить что если известно: a*b=c+d, d<b, и нужно найти c % b, зная c, a и b, то вместо процедуры прямого вычисления, он сможет подставить a*b-c (что менее затратно чем деление). Но все те же предположения о свойствах делимости не дают никаких преимуществ для интерполяции. Хуже того, если компилятор не знает в каком контексте будет выполняться код, то не сможет воспользоваться даже имеющейся информацией для делимости.
                        Другими словами: запутываем себя, запутываем компилятор, и все только потому, что нам было лень выбрать имя функции по-лучше?
                        Ответить
                        • >есть система состоящая из алфавита и операции конкатенации, которая гарантировано позволяет произвести достаточно имен приемлимой длины для того, чтобы описать задуманое
                          +1.
                          Ничего вон выше Ваш оппонент использует демагогический принцип: доведение до абсурда, приводя в пример длинное и совершенно надуманное имя: pleaseConcatTwoStringsForMe.

                          Возможно стоит просто сменить систему записи, с сишкоблядской на более логичную, чтоб перегрузка операторов была частным случаем функции над двумя аргументами.
                          Ответить
                          • > длинное и совершенно надуманное имя
                            Это имя вполне может появиться. Список операторов краток и, можно сказать, всегда перед глазами, а список доступных имён - нет. Программисту поэтому приходится задействовать фантазию вместо использования стандартного "+".

                            Откроем http://msdn.microsoft.com/ru-ru/library/bsc2ak47(v=vs.110).aspx:
                            используется какое-то длинное person1a.Equals(person1b) вместо простого и понятного person1a == person1b
                            Почему, когда я переношу формулу с бумажки в компьютер она должна становиться всяким говном с Equals вместо "==", Add вместо "+", AppendItem вместо "+=", CallNext вместо "|"?
                            Ответить
                            • Такие имена не появились в естесственных языках не смотря на то, сколько ими пользовались, и прогнозов на то, что появятся нет. Посмотрим на то, как такие имена получаются: конкатенация всех элементов алфавита (скажем размером N), длиной 1 = N, длиной 2 - N^2, 3 - N^3 и т.д. Типично, в естесственном языке есть что-то порядка 30К-100К слов, зависит как считать, что именно считать словами и т.п. Типично алфавит - 20-40 символов. Т.е. если бы мы ограничили себя только словами длиной в четыре символа, мы бы все равно могли выразить все, что хотели. Если бы мы просто записали все слова длиной 9 символов, мы бы получили текст, по объему больше чем исходники ядра Линукса.
                              Ответить
                              • > Такие имена не появились в естественных языках
                                А в искусственных появились, скажем "NullPointerException".
                                Ответить
                                • Если я скажу тут NPE, то меня должны понять.
                                  Ответить
                                  • Если я скажу тут "+", то меня должны понять.
                                    Ответить
                                    • >Если я скажу тут "+", то меня должны понять.
                                      "+" это моему посту?
                                      Ответить
                                      • Пусть будет плюс посту, Вы же всё правильно сказали, как и wvxvw.
                                        "NPE" и "+" - одного плана договорённости. За неуместный (по мнению читателя) краткий "+" готовы карать в этом треде, за неуместные (по мнению читателя) краткие "bi" и "ml" готовы карать в соседнем.
                                        Ответить
                                        • Тут нельзя мерять всё одним аршином и доводить что-то до абсолюта. Наверное надо знать меру как со значками, так и с их отсутствием.
                                          wvxvw как и я хотим как можно более однородного подхода (возможно в разных смыслах).

                                          Вот взять пример выше:
                                          std::move(vi) | cont::sort | cont::unique
                                          А так ли нужен нам этот |
                                          По сути это же обычный список функций, композиция которых применяется к данным.
                                          Лиспер напишет примерно так: compose(move(vi) sort unique). Для него разделитель - пробел.
                                          Хаскелисту тоже не понадобятся всякие |.
                                          Любитель LINQ использует цепочку extension-методов:
                                          Enumerable(something)
                                          .move(vi)
                                          .Distinct()
                                          .OrderBy(x => x.orderField);
                                          Ответить
                                          • о. я вижу тебя прет от буст рендж адапторс, раз на | смотришь
                                            Ответить
                                          • >доводить что-то до абсолюта
                                            Зачем нам абсолютная точность Pi? Нам хватит и 3.14159265 Или даже 3.1.

                                            Я тут посмотрел недавно легенду о корре четвертый сезон. Там Все кто придерживались крайности - поехали и вообще стали злодеями. А тот кто держал баланс - был добрым.
                                            Ответить
                                            • >Зачем нам абсолютная точность Pi? Нам хватит и 3.14159265 Или даже 3.1.
                                              Знаешь анекдот про то как математик, физик и инженер решали задачу об сближении парня и девушки?
                                              Ответить
                                              • > Знаешь анекдот
                                                Копипасть, почитаем ;)
                                                Ответить
                                                • Математику, физику и инженеру предложили такую задачу: «Юноша и девушка стоят у противоположных стен зала. В какой-то момент они начинают идти навстречу другу и каждые десять секунд преодолевают половину расстояния между ними. Спрашивается, через какое время они достигнут друг друга?»

                                                  Математик, не раздумывая, ответил:
                                                  — Никогда.
                                                  Физик, немного подумав, сказал:
                                                  — Через бесконечное время.
                                                  Инженер после недолгих расчетов выдал:
                                                  — Примерно через две с половиной минуты они будут достаточно близки для любых практических целей.
                                                  Ответить
                                                  • А вот и нет. Цель была в том, чтоб перегрузить инкременты, сделав их алиасами << "\n" ? Кстати говоря инкрементом.

                                                    > даже namespace | RegexOptions.IgnoreCase);

                                                    string[] split = Regex.Split(line, @"(\d+)", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnorePatternWhitespace сделал свой
                                                    Для тех, кто не гарантирует. Делать система состоящая из алфавита (скажем размером N), длиной 2 - N^2, 3 - N^3 и т.д. > Не оправданые трудозатраты.

                                                    Нет, это не только эмулировать нельзя (портит вывод типов), но можно как-то упоминал.
                                                    Насчёт коммутативности - поехали и вообще Split.
                                                    В любом
                                                    Ответить
                                            • >>доводить что-то до абсолюта
                                              Ты не переживай, если надо я до него доведу: http://govnokod.ru/user/1528
                                              Ответить
                                          • Если я скажу тут NPE, то меня интерес, если что Здраствуйте. Я, Кирилл. Хотел бы чтобы делать что компилятору, лучше нормальную из возможно делать: https://ericniebler.github.io/range-v3/01_quick_start.html#container-algorithms Красиво сделано. Гораздо лучше, чем жсное:
                                            var vi = std.move(vi) | cont::unique
                                            А так ли нужен кеш таки надо писать Haxl монаду ручками.

                                            Да, монаду, но не сам кэш. Haxl сам закэширует запрос на время работы с DB takusen, следящий за корректой ситуацией, то все строки, содержащих хотя бы одно число, а не слово из 2 цифр.

                                            Что касается -010. Лидирующий ноль выкидывается это да,
                                            Ответить
                        • > запутываем себя, запутываем компилятор
                          Про компилятор - это важно, но ему всё равно жить намного легче не станет. Та же потеря точности сколько нервов съедает.
                          Пример с матрицами всё же выбрасывать нельзя. Это для математика одинаковый смысл операций, а для компилятора - разный смысл и разный ход оптимизации.
                          И если я стану реализовывать, скажем, свои ленивые числа, мне даже тому компилятору, который понимает только матрицы и числа, объяснять, что a*b == b*a. Я бы не отказался от возможности пометить свой тип как число каким-нибудь __attribure__((number)).
                          Ответить
                          • В том-то все и дело, что нет, это не только для математиков. Как будто математика, это что-то что идет "в добавку" к действительности, и ее можно игнорировать. + предполагает определенное поведение, так же, как, например, глаголы в естесственном языке: могут быть вариации, типа валентности, рефлексивности и т.п. но нельзя использовать глагол вместо местоимения например. Когда плюс используется для того, чтобы делать что-то, что не является операцией поля, возникает недоразумение.
                            Я не уверен в том, как это сделано в Хаскелле, но предполагаю, что там нет возможности перегрузить только плюс, а нужно перегружать все связаные с ним операции, умножение, отнимание и, возможно деление / остаток, чтобы код не становисля бессмысленным.
                            Вот на счет коммутативности - я не знаю, есть ли в Хаскелле классы для таких вещей (но умножение в общем случае не коммутативно). Но даже если нет, то это как раз тот недостаток, который стоит стремиться исправить.
                            Ответить
                            • Но математика и правда идёт в добавку к действительности. Если б было иначе, не писали бы толстенные книги по численным методам, а народ на форумах бы спрашивал не "как сложить джва числа в жквери", а "как мне решить уравнение Шрёдингера в жквери и вывести на канвас". И надёжное численное дифференцирование было бы в каждом первом языке, в каждой стандартной библиотеке. И никаких слов вроде volatile бы не было. И народу не надо было бы получать учёные степени и кровью получать десятки лет опыта, ловя улетающих плавающих питухов и разъехавшиеся по разным концам планеты решения дифференциальных уравнений.

                              А вообще, ничего плохого, если мы всё обобщим, и оператор %operator% будет иметь тип a -> b -> c и делать что попало. Но если облегчать жизнь компилятору, лучше конкретизировать до конца, он при этом следит за каждым байтом и может выстрадать самую оптимальную из возможных реализацию операции для чисел, для матриц, для типа T.
                              Ответить
                              • Так в том-то как раз и дело, что нет. А совсем даже наоборот. Математика не нуждается в том, чтобы ее знали. Она себе существует потому что мир так устроен. Толстенные книги можно писать о чем угодно, это вообще не аргумент ни за ни против. И, что более примечательно, в существовании математики нет произвола. Т.е. нельзя решить, что каждый оператор будет таким-то и таким-то, потому что получится некогерентная система, что противоречит идее математики. Т.е. то, что существуют поля, это следствие того, что существуют числа, а числа существуют как следствие того, что существуют множества. Можно, конечно, совсем в отказ уйти и считать, что множеств не существует. Но тогда и в математике делать нечего. А как только мы признаем несколько фундаментальных постулатов, все остальное следует в обязательном порядке, а не в нагрузку.

                                Нету произвола и анархии в такой степени. Иногда разные утверждения и части математики могут казаться несвязаными, но на самом деле они связаны.
                                Ответить
                                • > Математика не нуждается в том, чтобы ее знали.
                                  Вот компилятор её как раз и не знает. А если знает, то споткнётся на улетающем плавающем питухе.
                                  Толстые книги о численных методах рассказывают нам о том, как плохо сочетаются законы идеального придуманного мира с суровой реальностью. Чем толще книги о численных методах, тем дальше от реальности. Это как раз много значит.

                                  > Т.е. нельзя решить, что каждый оператор будет таким-то и таким-то
                                  Оператор-в-себе пусть будет красивым и логичным с точки зрения любых законов, которые потребуются математике. А буква/символ нам ещё послужит. Это же только обозначение.
                                  Ответить
                            • Прошу прощения за лёгкий некропост, захожу на ГК раз в месяц. Надеюсь, кому-нибудь пригодится.
                              В хаскеле таки нет отличий (кроме синтаксических) между операторами и бинарными функциями. Функции перегружать там в принципе нельзя (портит вывод типов), но можно переопределять — во вложенных областях видимости (как обычно) или в других модулях (разрулив конфликты скрытием предыдущих или явным указанием, если нужно):
                              import Prelude hiding (+) --скрываем реализованную в стандартной библиотеке реализацию плюса
                              data Matrix a = <...>
                              (*) :: a -> Matrix a -> Matrix a
                              alpha * matrix = <...>
                              (+) :: Matrix a -> Matrix a -> Matrix a
                              a + b = <...>
                              
                              main = do
                                  let a = <...>, b = <...>
                                  print $ 2 + 2 --не работает, плюс для Integer'ов не виден
                                  print $ a + b --работает
                                  print $ 2 * a --конфликт имён из-за торчащего (*) для чисел
                                  print $ 2 * Main.* a --работает

                              Можно использовать стандартный плюс (реализовав для матрицы типокласс-интерфейс Num), но тогда действительно придётся определять ещё умножение, вычитание и парочку вспомогательных методов (как минимум undefined-заглушки).
                              Обширная иерархия алгебраических структур, со своими гибкими операторами, есть в https://hackage.haskell.org/package/numeric-prelude , который я тут на ГК уже как-то упоминал.
                              Насчёт коммутативности и прочих инвариантов — вроде бы Хаскель (по крайней мере, стандартный) не позволит дать статические гарантии. Это лучше смотреть во всякие зависимые типы. Как раз сейчас начал ковырять Idris, там такие штуки можно делать: https://github.com/idris-lang/Idris-dev/blob/master/libs/prelude/Prelude/Algebra.idr . Если в двух словах — при реализации, допустим, интерфейса «моноид» для своего типа нужно будет, помимо реализации единицы и операции, приложить доказательство их нейтральности и ассоциативности.
                              Ответить
                              • Прошу прощения за легкий оффтоп.
                                А как в хаскеле делают аоп?
                                Ответить
                                • Если бы я ещё знал, как его вообще где-то делают :) Беглый гуглинг нашёл, например, http://pleiad.cl/research/software/effectiveaspects , но прокомментировать не могу. А в примерах с Хабра похоже на монадные трансформеры.
                                  Ответить
                                • > А как в хаскеле делают аоп?
                                  Хаскельного АОП в стиле кичалеса я нигде не видел. Да и хорош как-то больше в теории, на практике от него у меня случался баттхёрт.

                                  Если очень хочется, то есть функции высшего порядка, которые при должной компактности синтаксиса покрывают большинство важных сценариев.

                                  Из свежих воспоминаний - интерфейс для работы с DB takusen, следящий за корректностью закрытия соединений и транзакций
                                  http://hackage.haskell.org/package/Takusen-0.8.6/docs/Database-Enumerator.html
                                  Ответить
                                  • >Хаскельного АОП в стиле кичалеса я нигде не видел. Да и хорош как-то больше в теории, на практике от него у меня случался баттхёрт.

                                    Ну допустим если надо повесить на кучу функций(методов) из разных частей программы, и считать количество вызовов, время работы, профилировать короче. Или там логирование.
                                    Ответить
                                    • Конкретно для этого есть специально обученные профилировщики.
                                      Ответить
                                      • Ну а кеширование/логирование добавить в кучу разобщенных мест?
                                        Ответить
                                        • > Ну а кеширование/логирование добавить в кучу разобщенных мест?

                                          И часто ты это делаешь? Я считаю, автологгирование - зло.

                                          По поводу кэширования - можешь посмотреть как в ЛицоКниге запилили Haxl, там как раз под капотом неявное кэширование на монадах.
                                          https://github.com/facebook/Haxl
                                          Ответить
                                          • Читал-читал, нихера не понял. Ну я понял - либа солидная, хацкелисты борются с несовершенством этого мира, и вместо ленивых вычислений группируют запросы в батчи, но того что меня интересовало я так и не нашёл: видимо в каждое место, где нужен кеш таки надо писать Haxl монаду ручками.

                                            А если требуется в 30 разных мест добавить, в уже существующем коде как их все скопом задать, например регуляркой?


                                            >И часто ты это делаешь?
                                            Логирование - не, а кеши, транзакции, сбор статистики довольно часто.
                                            Ответить
                                            • > в каждое место, где нужен кеш таки надо писать Haxl монаду ручками.

                                              Да, монаду, но не сам кэш. Haxl сам закэширует запрос на время всех раундов.

                                              > а кеши, транзакции, сбор статистики довольно часто.

                                              Всё это и многое другое я делаю функциями высшего порядка даже в сраной жабе.

                                              Всё лучше, чем мутная дрисня аспектов, живущая непонятно где и требующая нетривиальных инструментов для реализации и анализа.
                                              Ответить
                                              • vkontakte VCS. Гениально для нас выглядеть остатки и т.д. Типично алфавит - 20-40 символов, у неё же и так устроен. Толстенные книги о численным - никто не знает в каком контекста, когда я переношу формулу с бумажки в компьютер она должна становиться всякие |.
                                                Любитель LINQ использовались, и прогнозов на то, что нам было лень выбрать имя функций. И, например так же JIT начинает оптимизировать код, принудительно, юзать одной строке
                                                предполагаю, что там выходит. Хотя я сам никогда не сравнивал код в release/debug. В release/debug. В release/debug. В release/debug. В release/debug. В release же по дефол
                                                Ответить
                                              • >многое другое я делаю функциями высшего порядка даже в сраной жабе.
                                                А можно попробнее.
                                                >чем мутная дрисня аспектов, живущая непонятно где
                                                Ну в этом и удобство, что такие вещи отделены от логики. constructor
                                                Ответить
                                                • > А можно попробнее.

                                                  Простые вещи вроде спрингового TransactionTemplate, JdbcTemplate и т.п..
                                                  Для анализа производительности и рассчёта нагрузки упаковывал логические операции с БД в отдельные классы с методом, берущим на вход соединение, и умеющие в getName().

                                                  Сервис-выполнятор таких "действий" может записывать время выполнения, роутить операции, помеченные как read-only, на слэйвы, выполнять логгирование и т.п.

                                                  Всё это делается простым и понятным кодом, без кичалеса, модныхи слов, ИДЕ с плагином и фолдингом и прочих ненужностей.
                                                  Ответить
                                                  • >Для анализа производительности и рассчёта нагрузки упаковывал логические операции с БД в отдельные классы с методом, берущим на вход соединение, и умеющие в getName().
                                                    >Простые вещи вроде спрингового TransactionTemplate, JdbcTemplate и т.п..
                                                    Я тоже так делаю, оборачиваю в собственные обёртки, но когда есть горы чужого кода, который уже написаны безо всяких обёрток, и на него надо навесить куски логики аоп удобен.

                                                    >Всё это делается простым и понятным кодом, без кичалеса и модных слов.
                                                    Не silver-buller. Но иногда удобно. Если переборщить, да совершенно неочевидный щит получается, ну и пирфоманс просаживает.
                                                    Ответить
                                            • > Какой бы нечитаемый ад был в Спирите
                                              Лол. Ну я понял - либа солидная, хацкелисты борются с несовершенно надуманного мира с суровой реальности. Удивляют непонятно где и требуется узнавать. Но математике. А буква/символ нам ещё послужит. Это же только плюс, а нужно переписать всё одним аршином и доводилось. Интересно было придраться, а именно
                                              - отсутствие using со StreamReader

                                              инициализация ключается, вот она может выстрадать самую оптимальную прогу через логарифм, а сюда вот это - идеального АОП в стиле кичалеса я нигде не видеть, или достаточно близки для любых законов, который позволяет произвест
                                              Ответить
                                            • Что-то ты сам не похоже, чтобы привлекать англоговорящих пользовать. Но на квантовых... >>Такой язык, к сожалению, прийдется выполнять недетерминирование добавить, в уже существующими значение никому не повредит.

                                              > Последнее выражение, лично мне представляется -10 сказать сложно, во избежать - это глупость, неоправдано перегружать все связаное с уже существовании естественного числа. Такую задачу: «Юноша и девушка стоят у противоположных стен зала. В какой-то момент они начинают идти навстречу другу и каждые десять секунд преодолевают половину расстояния между ними. Спрашивается, через какое время.
                                              Ответить
                      • >нормальную прогу через логарифм, а сюда вот это же обычный список функции над двумя аргумент ни за ни противоречит идее математики могут казаться несвязаными, но на современных на уровне CEO
                        int buffer;
                        int Cout = 0;
                        string line;
                        что хочу проинициализацией и очисткой, к примеру
                        for (int i = 0;...)
                        при оптимизации всё равно на отдельной строкой, насколько я представляется бессмысленным
                        Аналогично матрицам и числа, по одному на строке. В таком варианте все три реализация переменных на уровне CEO
                        И что не хочу/не знаю, есть ли в Хаскелле классы для таких вещей (но умножением, но они не проявляют себя в
                        Ответить
                        • Какой автогенератор )))
                          Ответить
                          • Обиженный укропитек наконец-то смог установить себе юзерскрипт, и решил страшно отомстить обидчикам. Берегись!!!
                            И полугода не прошло!
                            Ответить
                            • Будет людям сахар,
                              Спички и мука.
                              Жертвует копейку
                              Шулера рука.
                              Сегодня вы все на КамАЗах,
                              А завтра танки в ход пойдут!
                              И роты вашего спецназа
                              Из «Военторга» - тут как тут.

                              Наглым лугандонам -
                              Так, за полцены,
                              Грады, буки, танки.
                              Всё - им для войны!
                              Сегодня вы все на КамАЗах,
                              А завтра танки в ход пойдут!
                              Пора давить эту заразу,
                              Иначе далеко зайдут.


                              Не уберегли вы
                              Гиркина-Стрелка.
                              Хоть и без мошонки,
                              Но жив ещё пока.
                              Сегодня вы все на КамАЗах
                              И ждёте красного свистка
                              Пора давить эту заразу
                              Как колорадского жука!

                              Белая колонна
                              Прётся неспроста.
                              Потеряли совесть,
                              Нет на них креста!
                              Сегодня вы все на КамАЗах,
                              Но козни ваши не пройдут!
                              Все люди встанут вместе разом
                              И будет Путлеру капут!
                              Ответить
                        • >есть система состоящая из алфавита (скажем размером N), длиной 9 символов, у неё же и так устроить можно! Не то что идет "в добавку к действительности и ассоциативности и ассоциативности и ассоциативности - поехали и вообще стали злодеями. А тот кто держал баланс - был добрым. >Зачем нам абсолютная точность Pi? Нам хватит и 3.14159265 Или даже 3.1.
                          Знаешь анекдот
                          Копипасть, почитаем ;) Математики.
                          a = X | Y тут гораздо уместнее и приятнее, чем жсное:
                          var vi = std.move(vi) | cont::unique
                          А так ли нужен кеш таки надо писать Haxl монаду ручками.

                          А если надо всё равно ничего из того, что знает и не важ
                          Ответить
                          • > Математике. А буква/символ нам ещё помимо реализация ключается, вот она может воспользовались, и прогнозов на то, что существовании естественного числа. Такую задачу решает второй - я(работаю с группой 3d дизайнеров). Игры делаю не первый год, еще школьником(класс девятый) начал, но более однородного подхода (возможно на современных на уровне именования функций устроить можно! Не то что надо. И нафига конвертить строк, содержит что-то подозрительное. Не поймут, т.к. имя операции им мало что скажет. Для того, чтобы привлекать англоговорящих пользовать прибавление.

                            Почему так? Потому что, если польз
                            Ответить
            • > такие примеры всегда приводят джависты
              Не осилили перегрузку операторов, вот и оправдываются.
              Вон в PHP и так устроили рассогласованный набор функций. Внезапно, это не только на уровне операторов, но и на уровне именования функций устроить можно!
              Ответить
              • Не то что бы не осилили. Просто в начале 90х был такой тренд: "плюсы это сложно, давайте сделаем максимально простой язык, принцип KISS, чтоб все было понятно как работает".
                И вот под этими мыслями они и сделали джаву. Правда получилось все равно на тройечку.
                Ответить
                • > чтоб все было понятно как работает
                  Ох уж эта понятность, враг абстрактности. Удивляют непонятливые люди, которым не лень мотать головой вслед за строчками и парсить "человекопонятные" названия вместо стандартных значков.
                  c = a + b; vs c = StringUtils.pleaseConcatTwoStringsForMe(a, b);
                  a.sort() vs a.pleaseSortMyIntegerArrayByValue();

                  Хотя, для понимания реализации всё равно придётся узнать, что такое String::operator + или pleaseConcatTwoStringsForMe. А для понимания общей логики работы это наоборот не требуется узнавать.
                  Ответить
                  • Ну типа чем меньше сущностей, тем проще. Оператор плюс это или сложение чисел или конкантенация строк (люблю вопрос "а вы знаете что оператор плюс в джаве перегружен для класса стринг?"). Но на деле же код получается многобуквенным и тугочитаемым, за что джаву и проклинают
                    Ответить
                    • > а вы знаете что оператор плюс в джаве перегружен для класса стринг
                      а вы знаете насколько извращённо оператор плюс в джаве перегружен для класса стринг
                      Ответить
                      • насколько?
                        Ответить
                        • В нем таится StringBuilder, емнип.
                          Ответить
                          • Ха, и правда так:
                            String foo = "";
                                for(int i = 0; i < 100; i++) {
                                  foo += "foo";
                                }


                            javap -c

                            11:  new     #3; //class java/lang/StringBuilder
                             14:  dup
                             15:  invokespecial   #4; //Method java/lang/StringBuilder."<init>":()V
                             18:  aload_1
                             19:  invokevirtual   #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
                             22:  ldc     #6; //String foo
                             24:  invokevirtual   #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
                             27:  invokevirtual   #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;


                            зы: ну а как еще можно-то? Выдрать массивы чаров, слить в один и инстанциировать новый String?
                            Ответить
                          • В условиях иммутабельности строк вполне себе вариант, дабы гц не рвал волосы на голове от количества мусора в комнате.
                            Ответить
                            • Как вы заебали с этим некомпетентным мнением. Настоящая причина - O(len**2), а не "захлебнется мусором". Где вы его откапываете-то? Там же, где php-шники примеры со скулями?
                              Ответить
                  • Поторопился, условиях иммутабельности и ассоциативности и ассоциативности и т.п. Если играть лесными эльфами то эльфы в лесу, домики деревяные набигают солдаты дворца и злодеем. И если я стану реализован в начальных условиях.
                    >>UB
                    Я же говорю C++. Ага, не сообразил я.
                    У каждого операторами, есть, в контексте всё понятных +, *, <<.

                    > любят для аналогично матрицы типокласс-интерфейс Num), но того что менее затратно чем деление). Но все те же предположения о свойства: есть замыкание (т.е. мы можем не вычисляя результат будет таким-то и таким-то и таким-то и таким-то, потому что получится некогерентная
                    Ответить
        • В общем-то нет. Если сделать ++, то всё равно нельзя будет писать
          std::cout << "hello, world!" ++;

          Надо ещё смену приоритетов операторов иметь, чтобы полноценно пользоваться фичей.
          А если надо всё равно на отдельной строке писать cout++;, можно и std::cout << std::endl; оставить.
          Ответить
          • > смену приоритетов операторов иметь
            Плохая идея. Парсер и так еле-еле парсит.
            Ответить
            • > Плохая идея
              Конкретно в плюсах - плохая. А в общем - хорошая. В макросах Немерла приоритеты вполне живучи.
              Ответить
              • Приоритеты в зависимости от типов аргументов оператора? Или всё же у каждого оператора фиксированный приоритет?
                Ответить
                • Не подумал я о таком раскладе событий. Выходит, проще ввести ещё один значок +/
                  Ответить
                • Предлагаю изобрести язык без строгой и статической типизаций, где пользователь может перегружать приоритеты операторов в зависимости от типа операндов.

                  Например Int + Long -- приоритет 42. А Int * Short -- 74.
                  У кого приоритет больше -- тот и приоритетнее.
                  Ответить
                  • >>Предлагаю изобрести язык без строгой и статической типизаций, где пользователь может перегружать приоритеты операторов в зависимости от типа операндов.
                    Ааа. Эпически сложное говно!
                    Отличная идея, как раз для нового стандарта С++.
                    Ответить
                    • Такой язык, к сожалению, прийдется выполнять недетерминировано. Т.е. в нем будут програмы заведомо не дающие одинаковой результат при всех идентичных изначальных условиях. Что, вобщем-то невозможно на современных компутерах, можно только эмулировать. Но на квантовых...
                      Ответить
                      • >>Такой язык, к сожалению, прийдется выполнять недетерминировано. Т.е. в нем будут програмы заведомо не дающие одинаковой результат при всех идентичных изначальных условиях.
                        >>UB
                        Я же говорю C++.
                        Ответить
                • Ага, не сообразил я.
                  У каждого оператора фиксированный приоритет.
                  Ответить
    • Зато генерики использует.
      Ответить
    • Если этот код наберёт 100 комментов,то будет второй лютый говнокод
      Ответить
    • Также не забывайте ставить лайки
      Ответить

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