Си диез / Говнокод #16297 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
void PrintAllChars()
        {
            for (int i = 0; i < 255; i++)
            {
                if (i == 10 || i == 20 || i == 30 || i == 40...i == 250)
                {
                    
                }
                else
                {
                    Console.WriteLine((char)i);
                }
            }
        }

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

Запостил: garmush garmush, (Updated )

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

  • > Не могла объяснить зачем нужно пропускать, каждый десятый символ.

    ну вот в этой фразе надо было сорок второй пропустить
    Ответить
      • > Но даже если у нее было предлог
        > Руку в трусишки ей запустить.
        Ну да, помощь с лабой - отличный предлог для распускания рук.
        Ответить
        • - Лабу сделаешь ты мне?
          - Если только за менет
          - Ну а если без него?
          - То не выйдет ничего
          - Может что нибудь в замен?
          - Отсоси - и нет проблем
          - Завтра у меня зачет!
          - Меня это не ебет
          - Препод наш все время злой...
          - Так попробуй сдать пиздой
          - Любе ты помог, зараза!
          - Люба отсосала сразу
          - Хочешь пивом заплачу?
          - Нет, спасибо, не хочу
          - Я же знаю. ты добряк...
          - Без минет, Лен, никак.
          - Как скажу об этом мужу?
          - От него минет не нужен
          - Что то больно борзым стал
          - Ну так я один лишь сдал
          - Я не буду делать это!
          - Выбора, Ленуся, нету
          - Хрен с тобой, снимай штаны...
          - Перед богом все равны
          Ответить
  • А символов-то 65536 😉
    Пусть дальше пишет 😀

    Кстати, а почему i<255 - а как же 255й?
    Ответить
    • 255 ненужон. В женском коде, как и в самой женщине, должна быть загадка и некоторая незавершенность
      Ответить
    • > А символов-то 65536 😉
      Их больше. И в один чар они уже не помещаются.
      Ответить
        • Даблачары

          В руби с этим связана забавная херня - есть 2 разные функции которые по разному считают длину строки. Одна посимвольно, другая - "почарово"
          Ответить
          • > забавная херня
            Я на такую нарвался в MySQL. http://gvforum.ru/viewtopic.php?pid=1839#p1839:
            P.S. Про Войну и мир Борманда наврал. Труъ ВиМ на 3.0МБ в комментариях он не написал, но объём первой редакции в 1.8МБ явно превысил.
            Рассматривал результаты работы скрипта и увидел число там поменьше. А всё потому, что JS-овское String.prototype.length с UTF-8 работает правильно, а SQL-евское length - честно.
            Ответить
            • > Про Войну и мир Борманда наврал. Труъ ВиМ на 3.0МБ в комментариях он не написал, но объём первой редакции в 1.8МБ явно превысил.
              Ха! Свыше 27 тысяч комментариев общим объёмом 4.3e6 байт. Не помню только, как я пробелы считал.

              Топ 10 пользователей по суммарному объёму комментариев:(всего 6168 штук)
              1	guest (#1)	4677467 45294к
              2	bormand (#5528)	4387177 27075к
              3	3.14159265 (#1438)	2450920 10119к
              4	wvxvw (#988)	2060581 5198к
              5	inkanus-gray (#1659)	1927014 9677к
              6	1024-- (#7146)	1582596 5829к
              7	roman-kashitsyn (#3818)	1525798 9759к
              8	kegdan (#6824)	1320386 13954к
              9	defecate-plusplus (#4442)	1316649 5705к
              10	Lure Of Chaos (#1538)	1288858 15914к
              
              Топ 10 пользователей по количеству комментариев:(всего 6168 штук)
              1:	guest (#1) - 45294
              2:	bormand (#5528) - 27075
              3:	Lure Of Chaos (#1538) - 15914
              4:	kegdan (#6824) - 13954
              5:	3.14159265 (#1438) - 10119
              6:	roman-kashitsyn (#3818) - 9759
              7:	inkanus-gray (#1659) - 9677
              8:	3_14dar (#7252) - 8609
              9:	TarasB (#721) - 7770
              10:	bugmenot (#1632) - 6120

              6168 пользователей на ГК оставили говнокод/комментарий.
              Ответить
          • В уютненьком дотнетике тоже есть такая херня: String.Length возвращает количество чаров в строке, StringInfo.LengthInTextElements возвращает количество текстовых элементов (правильно учитывает суррогатные пары).
            Ответить
          • Длину считают так:
            - байты (для хранения и ввода\вывода)
            - символы юникода (не совсем понятно как считать из-за суррогатов, всякого диакритического обвеса, который комбинируется с предыдущим символом, RTL/LTR меток, из-за этого такая длина почти бесполезна)
            - знакоместа (для высирания в консоль, например японские иероглифы - 2 знакоместа)
            - пиксели (для рисования)

            Вроде ниче не забыл?
            Ответить
              • > Нормализация же.
                В которую сторону? Емнип, там было несколько нормальных форм.

                З.Ы. Ну не вижу я смысла считать эти символы. Вот байты/знакоместа/пиксели имеют смысл. А символы - нет.
                Ответить
                • > Ну не вижу я смысла считать эти символы

                  Дано: строка в UTF-8. Надо: Перевести строку в UTF-32.
                  Сколько памяти выделить под результат?
                  Ответить
                  • Дык это тоже байты. Сколько байт занимает строка в кодировке utf-32.
                    Ответить
                    • Количество символов*4. А в UTF-8 каждый символ занимает от одного и больше. Строки RR, RЯ и ЯЯ занимают по 8 байт в utf-32, но 2, 3 или 4 в UTF-8. Вот и приходится считать количество символов (code points)
                      Ответить
            • > не совсем понятно как считать

              А что тут думать?

              1. Суррогаты существуют только в UTF-16 (ну и в основанных на ней кодировках). Суррогат — это всего лишь представление одного символа в виде пары 16-битных значений.

              Просто UTF-16 настолько глубоко проникла в Windows, что некоторые стали считать 16-битный элемент UTF-16 символом, хотя это неправильно.

              Итак, о суррогатах думать не нужно. Один суррогат в UTF-16 — это четыре байта или один символ. Точка.

              2. Диакритический обвес — да, проблема, если мы путаем символы и знакоместа. Если разделить знакоместа и символы, то всё встаёт на места: буква + N диакритических знаков = 1 знакоместо или (1+N) символов.

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

              3. RTL/LTR-метки — будем считать чем-то вроде HTML-тегов. Мы же не задаёмся вопросом, сколько символов в коде «<p>текст, <b>жирный текст</b>, <u>подчёркнутый текст</u></p>». RTL-метка — такой же символ, как символ, входящий в HTML-тег. Для исходного кода страницы они будут символами, а в подсчёт знакомест не войдут.
              Ответить
              • > (1+N) символов
                Ну тогда получается, что в строках "ё" и "е¨" разное количество символов?

                З.Ы. Ну ок, code point'ов.
                Ответить
                • Да, именно так. Более того, эти строки не равны, хотя в тестах на естественных языках имеют одинаковую семантику.

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

                  А сложная функция, которая производит нормализацию «в уме», не нужна.
                  Ответить
                • Вообще если при подсчётах проводить все преобразования не явно, а «в уме», то получим PHP. В PHP, выполняя преобразования «в уме», решили, что 1234 == "1234" и что "0eadfcb" == 0, так что теперь оператором == вообще боязно пользоваться.

                  На мой взгляд если хочешь, чтобы 1234 было равно "1234", либо делай явно strval, либо делай явно intval, а оператор сравнения портить нецелесообразно™.
                  Ответить
                  • Надо понаделать много разных операторов сравнения
                    == сравнить
                    === сравнить глубоко
                    =0= сравнить как числа (с кастами)
                    =()= сравнить как кортежи (с кастами)
                    =@= сравнить как строки (с кастами)

                    Версию со скобками можно кобенировать с версиями для типов:
                    =(0,@,(),(=))= - сравнить как кортежи из числа, строки и двух кортежей фиг знает с чем, причём второй кортеж сравнить глубоко.

                    Развивая тему,
                    =[+]= сравнение сумм элементов коллекции
                    =[@+]= сравнение сшитых строк из коллекции
                    =[sqrt.+.\x->x*x]= сравнение норм векторов
                    Ответить
                      • И правда. Кстати, поленился я отключить скрипт-детектор кодов на J, и тот комментарий подсветился красным.
                        Ответить
                      • Да ладно, если он J создаст. А то ведь может интересных личностей накликать, которые на его операторы сравнения слетятся, как мухи.
                        Ответить
                      • Да уже, как бы. Инфиксная нотация есть, работа с массивами есть. Тацитности недостаёт слегка, правда. Что это за x вообще?
                        Ответить
                      • =o= кейс инсенсатив сравнение
                        =O= сравнение строк (вместо нелогичного =@=)
                        Ответить
                        • Почему все идеи выбора символов для оператора крутятся вокруг перловского оператора «Сатурн»? Вы старый перловик?
                          Ответить
              • >Просто UTF-16 настолько глубоко проникла в Windows, что некоторые стали считать 16-битный элемент UTF-16 символом, хотя это неправильно.
                utf-8 это альтернативное представление для utf16 (поправьте если что)
                Ответить
                • утф-8, как и утф-16 и утф-32 это способы представления юникодных code point'ов. С утф-32 всё просто — номер code point'а совпадает с его бинарным представлением. С остальными сложнее из-за переменной длины. Главное отличие между ними — размер примитива. Ну и у утф-16 ниже эффективность использования памяти на большинстве текстов и проблема с индейцами.
                  Ответить
                  • Ниже чем у чего? Чем у utf32? А у utf8 переход к индексу за O(min( len(str), index*6 ))
                    Ответить
                    • Чем у утф-8: в большинстве текстов (не рассматриваем восточноазиатские и мёртвые языки) в утф-16 всё кодируется 2мя байтами, а в утф-8 знаки препинания, цифры и английские буквы — одним.

                      > А у utf8 переход к индексу за O(min( len(str), index*6 ))

                      UTF-8 предназначен для хранения, передачи и вывода текста, там достаточно последовательной итерации. Если нужно текст обрабатывать (посложнее чем контакенация / нормализация / денормализация) — конвертируй в утф32 и вперёд.
                      Ответить
                      • Поправлю: в UCS-2 всё кодируется двумя байтами. Правда, UCS-2 может вместить только 65536 кодпоинтов.

                        А в UTF-16 есть ещё суррогаты: символы, коды которых не помещаются в 16 байт, представляются парой двухбайтовых суррогатов. Так что в UTF-16 кодпоинту может соответствовать 2 байта, а могут 4.

                        Новомодные смайлики, например, в 16 бит не помещаются.

                        А в UCS-4 и в UTF-32 всё просто: четыре байта на символ.

                        *****

                        К счастью, сдохла UTF-7, которую распарсить было труднее, чем UTF-8. К несчастью, жива Punycode, но к счастью, её применение ограничивается доменными именами.
                        Ответить
                          • Разные кодировки.

                            UCS-4 == UTF-32 — тупо 4 байта отведённые на code-point

                            UCS-2 существовала, когда считали, что 2 байт хватит на все символы. Когда оказалось, что не хватит, поставили костыль, называющийся UTF-16: добавили суррогаты для не влазящих символов, добавив лишней головной боли.
                            Ответить
                            • Я не заметил этот лаконичный комментарий и написал некрасивую простыню...

                              Напишу ещё немного про СУБД.

                              Оказалось, что в MySQL кодировка, названная utf8, — это не совсем UTF-8, а некая кодировка, вмещающая символы, которые в UTF-8 занимают не более трёх байтов, что совпадает с диапазоном UCS-2.

                              Кодировку же, вмещающую символы, занимающие в UTF-8 до 4 байт включительно (коды до 1FFFFF), в MySQL назвали utf8mb4, чтобы было нескучно. Эта кодировка вмещает все символы из диапазона UTF-16.

                              Как думаете, если понадобится полный диапазон UTF-32, то utf8mb6 введут?
                              Ответить
                              • Обязательно, чтобы разобраться с жалобами на предыдущие кодировки, и добавить новых грабель. В общем, всё по-старому: https://xkcd.com/927/
                                Ответить
                          • UCS-4 = UTF-32. Каждый символ/кодпоинт = 4 байта без исключений. Эти кодировки «случайно» совпали.

                            UCS-2 и UTF-16 совпадают, если код символа не превосходит 0xffff = 65535, т. е. помещается в 16 бит. Однако, в UCS-2 размер представления кодпоинта/символа фиксирован и всегда равен 2 байтам, поэтому она недостаточно разработана, чтобы вместить остальные коды.

                            А UTF-16 может вместить весь диапазон UTF-32, но некоторые кодпоинты представляются не двумя байтами, а четырьмя. Т. е. с поиском n-го символа и с определением длины строки те же проблемы, что и у UTF-8, хотя тут вариантов меньше. Об этом некоторые забывают, считая UTF-16 двухбайтовой кодировкой.

                            Есть ещё редкая кодировка CESU-8. Она использует алгоритм UTF-8, только в UTF-8 на вход подаётся UCS-4/UTF-32, а в CESU-8 на вход подаётся UTF-16. Т. е. в общем случае распутать CESU-8 ещё сложнее, чем UTF-8.

                            Вроде всё, других UCS нет. А, да, в UTF-32 и в UTF-16 порядок следования байтиков может быть разным (большой индеец/маленький индеец).
                            Ответить
                            • Не индеец, а тупо/остроконечники. ПРичем хуй запомнишь что есть что.
                              Ответить
                              • Именно поэтому стоит думать в индейцах. В сети большой индеец, в памяти маленький.
                                Ответить
                                  • Да, может прийти myaut со своим Спарком и показать нам слово «dnamrob» или, не дай Ктулху, Тарас со своим ARM'ом, на котором и вправду порядок всякий может быть.

                                    Про ARM:
                                    The Current Program Status Register (CPSR) has the following 32 bits.
                                    M (bits 0–4) is the processor mode bits.
                                    T (bit 5) is the Thumb state bit.
                                    F (bit 6) is the FIQ disable bit.
                                    I (bit 7) is the IRQ disable bit.
                                    A (bit 8) is the imprecise data abort disable bit.
                                    E (bit 9) is the data endianness bit.
                                    IT (bits 10–15 and 25–26) is the if-then state bits.
                                    GE (bits 16–19) is the greater-than-or-equal-to bits.
                                    DNM (bits 20–23) is the do not modify bits.
                                    J (bit 24) is the Java state bit.
                                    Q (bit 27) is the sticky overflow bit.
                                    V (bit 28) is the overflow bit.
                                    C (bit 29) is the carry/borrow/extend bit.
                                    Z (bit 30) is the zero bit.
                                    N (bit 31) is the negative/less than bit.
                                    Ответить
                        • Я же писал: для большинства текстов. Увидеть суррогат в утф-16 в нормальном тексте, если ты не работаешь с редкими языками, это как цветок папоротника найти.
                          Ответить
  • Студенты-падлы перестали курить и сбегать с лекций... Даже поебать некого.
    Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8