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

    +129

    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
    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, 10 Июля 2014

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

    • - void PrintAllChars()
      + void PrintAllCharsExceptForEachTenthChar()
      Ответить
    • for(int i = 0;i<255;i++){
      			if(i%10 != 1)
      				Console.WriteLine((char)i);
      		}
      не?
      Ответить
      • void PrintAllCharsExceptForEachTenthCharStart ingFromEleventh() ?
        Ответить
        • да ты сам однокурсник еще тот, я посмотрю
          Ответить
          • Не поняли сарказм или английский, Сэр ?
            Ответить
            • анонимус невзначай
              сунул хуй в английский чай
              все внезапно стало новым
              хуй - английским. чай - хуёвым
              Ответить
              • Забыл сказать... Это же гениально!
                Ответить
                • Это не мое - с лурка принес.
                  Ответить
                  • Эх, надо мне классику рунета читать, а то про такие душевные произведения не знаю.
                    Ответить
                    • Сам узнал на днях

                      Просвещайся с Кегданом ;)
                      Ответить
          • Джавист он)))
            Ответить
      • Пфф, C# и без Linq'а:
        Enumerable.Range(0, 255).Where(c => c % 10 != 0).ToList().ForEach(c => Console.WriteLine(c));
        Ответить
        • Не эквивалентно коду ОП'а: ноль выкинет.
          Ответить
        • Ваши касты в лист огорчают негров

          foreach (var i in Enumerable.Range(0, 255).Where(c => c % 10 != 0)) Console.WriteLine(i);
          Ответить
        • и да, шарпик умеет так

          ForEach(Console.WriteLine)
          Ответить
        • показать все, что скрытоНа глаза попало, теперь понятно, откуда в хаскель линзы притащили, правда как всегда густо облив теорией... багофича с нулем оставлена для совместимости
          [0..255] ^! folded . filtered (\x -> x `mod` 10 /= 0) . act print
          Ответить
          • 0:filter ((/=0).(10 `mod`)) [1..225]
            Ответить
            • https://ideone.com/bJzSaz
              Ответить
            • Матан-формулировка:
              [x | x <- [0..225], mod x 10 /= 0 || x == 0]
              Ответить
              • ну или так.

                0:[x | x <- [1..225], mod x 10 /= 0]


                Не позорь меня перед толпой
                Ответить
                • > Не позорь меня перед толпой
                  Ну и императивненько через списковую манду монаду:
                  test = do
                      x <- [0 .. 255]
                      guard $ x == 0 || mod x 10 /= 0
                      return x
                  http://ideone.com/Wu7Y6e
                  Ответить
                  • Do для геев

                    http://ideone.com/wsRd9E
                    Ответить
                    • А вот и J

                      f =: 13 :  'y{~I.0~:10|>:i.#y'
                      Ответить
                      • 13 - это дань сатане, что бы скомпилилось?
                        Ответить
                        • 13 это указание по возможности превратить выражение в тацитную форму.
                          Ответить
                    • сегодня опасно говорить "гей", тебя могут неправильно понять
                      Ответить
                      • неправильно, это как?
                        Ответить
                        • ну, например, что ты не хочешь себя обидеть словами типа "пидр" или "гомосек" :)
                          Ответить
                          • а в чем разница?
                            Ответить
                            • тебе это действительно интересно?
                              Ответить
                              • Я конченный аналитик и теоретик и поэтому мне пох на эмоциональную окраску. Логически они равны. А остальное - от лукавого )
                                Ответить
        • IEnumerable не гарантирует порядок
          Ответить
      • Почему != 1?
        Ответить
    • > Не могла объяснить зачем нужно пропускать, каждый десятый символ.

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

      Кстати, а почему i<255 - а как же 255й?
      Ответить
      • 255 ненужон. В женском коде, как и в самой женщине, должна быть загадка и некоторая незавершенность
        Ответить
      • > А символов-то 65536 ;)
        Их больше. И в один чар они уже не помещаются.
        Ответить
        • Char'ов 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, и тот комментарий подсветился красным.
                          Ответить
                        • Да ладно, если он J создаст. А то ведь может интересных личностей накликать, которые на его операторы сравнения слетятся, как мухи.
                          Ответить
                        • Да уже, как бы. Инфиксная нотация есть, работа с массивами есть. Тацитности недостаёт слегка, правда. Что это за x вообще?
                          Ответить
                      • кейс инсенсатив сравнение забыл. популярная же хрень
                        Ответить
                • показать все, что скрыто>Просто 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 в нормальном тексте, если ты не работаешь с редкими языками, это как цветок папоротника найти.
                            Ответить
    • показать все, что скрытоНужна отдельная рубрика "лабы"
      Ответить
    • показать все, что скрытоСтуденты-падлы перестали курить и сбегать с лекций... Даже поебать некого.
      Ответить
    • показать все, что скрытоЧто за парад плюсов?
      Ответить

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