1. Python / Говнокод #19650

    −42

    1. 1
    length = (length, 200)[length>200]

    Хакатон хакатоном, а так делать всё же не стоит....
    https://habrahabr.ru/post/278995/

    Запостил: Vindicar, 17 Марта 2016

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

    • Подскажите начинающему питонщику по каком правилу тут False кастится в 0 а True в 1
      Ответить
      • """
        class bool([x])

        Return a Boolean value, i.e. one of True or False. x is converted using the standard truth testing procedure. If x is false or omitted, this returns False; otherwise it returns True. The bool class is a subclass of int (see Numeric Types — int, float, complex). It cannot be subclassed further. Its only instances are False and True (see Boolean Values).
        """
        Ответить
    • А чем length = min(length, 200) не угодил? Или так недостаточно запутанно?
      Ответить
      • Там ниже ещё вариант подкинули:
        [length,200][length>200]
        Ответить
        • [200,length][length<=200]
          Ответить
          • 200*(length>200)+length*(length<=200)

            Раскрыв скобки получим: 200*length>200*200 + length*length<=200*length
            Ответить
            • сгруппируем
              (200>200*200 + length<=200*length)*length
              200>200*200 - всегда 0
              так как length>=0, то  length<=200*length всегда 1


              итого
              length  = length
              Ответить
              • Право, очень неожиданный результат, коллега.
                Ответить
              • Откуда это тождественное преобразование следует? У Пи в первом случае была формула, которая возвращает число и работает как ожидается, а также формула, которая возвращает False, но I не было.
                Ответить
        • sorted([length,200])[0]
          Ответить
      • Перешёл по ссылке
        >первые полчаса я разбирался как на python парсить джейсон."

        Восхитительно. Почти как "Полчаса разбирался, как парсить json на JavaScript"
        Ответить
        • eval(s)
          Ответить
          • json = '{"ha-ha": os.system("rm -rf /")}'
            eval(json)
            Ответить
            • В браузере js работает в песочнице без доступа к ФС. Кэп.
              Ответить
              • А вдруг это нода жс, а не браузер?
                Ответить
                • и вдруг кто-то там ещё и "os" правильно инициализировал
                  Ответить
                  • А, так это питон? Понаделали жсоноподобных языков...
                    Ответить
                    • Да кто знает... А что было в http://govnokod.ru/19650#comment316548?
                      Кстати, в Node таки есть os, только там всякая питушня для чтения вроде hostname, cpus и arch.
                      Ответить
                    • На правах антирекламы
                      Я тут с Луа недавно познакомился, так это полный пиздец. Даже массив - это объект в смысле

                      массив - это хештаблица инт => инт

                      А хештаблица - это обьект
                      a["аа"]
                      эквивалентно
                      a.aa

                      можно в массив засунуть функцию а потом юзануть прототипное наследование и наплодить дочерних обектов

                      Не юзайте луа. пожалуйста
                      Ответить
                      • > a["аа"] эквивалентно a.aa
                        Ты только что описал жабоэкмаскрипт.
                        Ответить
                        • очень похоже на недоэкмаскрипт, написанный больным ублюдком в полнолуние

                          там даже нет деления на целые числа и плавающего питуха. есть просто - числа
                          http://tylerneylon.com/a/learn-lua/
                          Ответить
                          • Да там боль не в этом, там боль во всяких map/split-питухах, которых вроде бы по умолчанию нет.
                            Ответить
                          • А ещё в Lua годная идея с обычными функциями, у которых нет выделенного this. В жс бы такое убрало кривую питушню вроде xs.map(function(x) { return x.f(); }) и f.bind(this, 6).
                            Ответить
                          • >>repeat
                            >>until

                            аа! паскаль!! вот за одно это я уже люблю луу
                            Ответить
                      • Всё вышеописанное можно и про JS сказать.
                        > a=[]
                        []
                        > a.f = function(){ return 3; }
                        function (){ return 3; }
                        > function F(){}
                        function F(){}
                        > F.prototype = a
                        []
                        > n=new F
                        F {}
                        > n.f()
                        3
                        > n['f']()
                        3


                        Няшненько же! Кстати, метатаблицы в Луа круче, чем в жс. Можно и обработчики всякой питушни делать, и операторы как в питонах перегружать. Ну и в {} можно ключами всё, а в ES такое только недавно завезли (и то в отдельный класс).
                        А какой крутой пример с массивом чисел Фибоначчи... Лучше ваших хацкелей.
                        Ответить
                      • > Не юзайте луа. пожалуйста

                        Чего? Норм язык, получше этих ваших жабоскриптов.

                        Там и foreach встроенный, и корутины, и модули, и опупенная интеграция с сишечкой, и инкрементальный сборщик мусора, и даже jit отдельно можно завести.
                        Для встраивания в качестве языка расширений - самое оно.

                        Целые числа и побитовые операции отдельным модулем поставляются.
                        Ответить
                        • >получше этих ваших жабоскриптов.
                          Ну разве что него.

                          >Целые числа и побитовые операции отдельным модулем поставляются.
                          Ы-ыыыыы
                          Ответить
                          • Ну здорово же. Не нравится арифметика? Просто замени на ту, которая нравится!
                            Ответить
                            • Представляю себе полностью модульный язык. В начале есть только возможность подключать модули. Хочешь объявлять функции? Подключи модуль с функциями. Не нравится синтаксис объявления? Подключи другой. Хочешь, чтобы твоя программа была не либой, а могла выполняться? Подключи модуль с точкой входа. Плавающий питух, исключения, ООП, циклы (100500 разновидностей) — всё в своих модулях.
                              Ответить
                              • from future import
                                Ответить
                              • from syntax import C++
                                from memmanagement import gc
                                ага
                                Ответить
                                • Тогда уж так:
                                  from syntax import C++
                                  #include <gc>
                                  ...
                                  Ответить
                              • А модуль с подключением модулей сменить нельзя ;(
                                Ответить
                                • > А модуль с подключением модулей сменить нельзя ;(

                                  В Луа можно регистрировать загрузчик модулей через package.loaders

                                  Можно даже заоверрайдить стандартный.
                                  Ответить
                              • препроцессор C++ тебе в помощь
                                Ответить
                              • OMeta2.
                                Ответить
                        • Не помню точно, но там же чего-то типа break или continue не хватало... Или уже завезли?
                          Ответить
                        • а чем луа лучше питона?
                          Ответить
                          • Ничем.
                            Ответить
                          • луа быстрее питона 2,3
                            видимо, насколько существенно быстрее, что его выбрали как язык для игры факторио (там много шкриптов каждый тик евалится)
                            Ответить
                            • мне кажется что быстрота языка зависит от интерпретатора и его реализации, а не от языка, разве нет?

                              Афайк когда луу выдумали, питон просто был зачаточным
                              А потом так и повелось
                              Ответить
                            • Ага, поэтому Факторио так безбожно тормозит, если пытаться сделать что-либо сложное. По-моему, питон просто труднее прикручивать как скриптовый язык. Луа прикрутить даже макака сможет.
                              Ответить
                              • а вот и не сложно
                                https://docs.python.org/2/extending/embedding.html
                                Ответить
                              • На луа может кодить даже макака
                                Ответить
                                • А на жс - не ниже бабуина что ли?
                                  Ответить
                                  • Вот это я понимаю - ранги. Я то - жуниоры какие то
                                    вот это по мужски
                                    1 тушканчик
                                    2 макака
                                    3 бабуин
                                    4 сеньор бабуин
                                    5 орангутанг
                                    6 царь низших гоминид
                                    7 питух
                                    8 плаваующий питух
                                    9 питух с человеческим лицом
                                    10 (имя_языка)блядь
                                    11 человек
                                    12 киборг
                                    13 Брат Кнута
                                    Ответить
                                    • не хватает между 6 и 7 Аксильный питух и 14. Царь
                                      Ответить
                                      • >14. Царь
                                        Однозначно. Без Царя в голове иерархия дырявая.
                                        Ответить
                                • так на любом скриптовом современном языке кроме перла может кодить макака

                                  на рубях может (хотя и сложно)
                                  на питоне (уже легче)
                                  на пыхе так и вовсе только макаки и кодят
                                  Ответить
                            • Из-за LuaJIT, наверное. Но игроделы вообще к lua любовь питают в свободное от изобретения велосипедов время.
                              Ответить
                              • > к lua любовь питают в свободное от изобретения велосипедов время
                                Да и не только. У нас один дятел разработчик таки дятел размазал по всем уровням серьёзной программы lua-движок и прикрутил самопальную консоль на TRichEdit ради трёх бесполезных команд.
                                Ответить
                                • > консоль на TRichEdit
                                  Цветную что ли?

                                  > трёх бесполезных команд
                                  Ну ничего, скоро этих бесполезных команд станет больше...
                                  Ответить
                                  • > Цветную что ли?
                                    Нет, чёрно-зеленую. - У вас есть цветные телевизоры? - Есть. - Дайте зелёный.

                                    > скоро этих бесполезных команд станет больше...
                                    Это было три года назад, человек почти сразу ушёл, а проект довольно быстро был переписан :)
                                    Ответить
                                    • > человек почти сразу ушёл
                                      В гейдев?
                                      Ответить
                                      • > > человек почти сразу ушёл
                                        > В гейдев?
                                        В начальники...
                                        Ответить
                                        • Новичок Аркадий оказался не так прост, как мы думали. Три высших образования сделали из него то, что из меня не смог сделать интернет, телевизор и теща - зомби. Внешне он был абсолютно нормальным человеком, но стоило допустить его до проекта, как он начинал неистово жрать мозги. То часть проекта на каком нибудь экзотическом языке начнет писать, то какой нибудь луа движок прикрутит, то бежит впереди паровоза и объясняет заказчику как ему жизненно необходимо, что бы сервисная часть сайта была написана на С++. Заказчик ничего не понимал, но раз у человека три вышки, то зачем ему говорить глупости? Жизнь превращалась в ад, и Петрович, который всю жизнь был атеистом, приволок в офис трехлитровую банку святой воды "для отогнания ирода"
                                          Больше так продолжаться не могло
                                          - Ну мужики, че делать будем?
                                          - Валить его надо. - сказал Семен - Лопатой по голове и в багажник, в лесу закопаем.
                                          - Не слишком?
                                          - Не, Семен дело говорит. Даже если посадят и то проще будет. - сказал Федя
                                          - Тебе-то че, ты вообще скоро свалишь отсюда.
                                          - А мне оно надо? Я слишком стар для этого бумажного дерьма. - Федя демонстративно бросил бычок в урну и задумался. - Слушайте, а может мы его того?
                                          - Да, да, я уже с родственниками поговорил, если че у них перекантуемя толпой - нервно сказал Семен - Типа шашлыки, все такое, пошел пьяный купаться и не всплыл
                                          - Ну тебя! Я говорю может его того, вместо меня?
                                          - В смысле?
                                          - Ну напишем мол так и так, достойный кандидат, все дела, три высших образования. Пусть сидит себе, с заказчиками общается, авось и не на наших проектах. Работы станет побольше, ЧСВ вырастет, и забудет он про нас. Ну я надеюсь.
                                          Ответить
                                          • Идея Феди всем понравилась. Даже Семену. На следующий день была составлена петиция с просьбой предоставить Ардакию внеочередное повышение в том направлении, в котором космические корабли бороздят просторы большого театра - подальше от нас.
                                            Через неделю Аркадия изъяли. Нашему счастью не было предела. Мы радовались свободе как дели радуются мороженному в жаркий день. Производительность мгновенно выросла втрое.
                                            Через несколько дней мне позвонил Степа, мой друг из города Н
                                            - Ты мне тут контору рекомендовал, ну пришел я к ним - вообще невозможно. Начальник - придурок. Вечно какую-нибудь хрень в проект пытается засунуть. Вчера сказал что все скрипты нужно на lua переписать
                                            - А как его зовут? - спросил я, едва сдерживая смех
                                            - Аркадий Контантинович.
                                            - Степа, беги - сказал я и, положив трубку, рассмеялся
                                            Ответить
                                • ну automation все равно же нужно как-то делать

                                  допустим, ваша система умеет делать Foo

                                  как заставить её сделать Foo столько раз, сколько есть файлов в папке bar?

                                  нужен или ембедед язык, или COM+Ole automation+WSH+JS если венда или cmdlets+powershell итд
                                  Ответить
                                  • > как заставить её сделать Foo столько раз, сколько есть файлов в папке bar?
                                    выделить файлы мышкой, правой, открыть с помощью.
                                    Ответить
                        • вот именно изза корутин его не любят джаваскриптеры
                          из за них весь смысл макаронного кода колбеков теряется

                          а без макарон джаваскриптеру плохо
                          что за программа без семнадцати уровней вложенности?
                          Ответить
                    • Уффф... Это было сложно, но я портировал на жс под ноду:
                      json = '{"ha-ha": child_process.exec("rm -rf /")}'
                      eval(json)

                      Надо ещё var добавить в идеале.
                      P.S. А ведь у zombiee был выставлен [code=python], судя по HTML.
                      Ответить
        • плюсанул, потому что любой мудак должен знать фокус "переведи вопрос на инглиш, вбей в гугол и получи линк на стековерфлоу"
          Ответить
          • Мне 3 ссылкой по запросу «How to parse JSON in Python» выдало линк на официальную документацию. А стаковерфловочку выдаёт даже если по-русски писать.
            Ответить
            • по моему эта штука Jython называется. не?

              Не то прочитал, не то подумал.

              Короче я о java byte code а не о json
              Ответить
              • джайтон это интерпретатор питона под JVM
                как IronPython под .NET
                итд
                Ответить
            • Мне выдавало на русскоязычные сайты, но вопрос о json уже есть на любом языке. Просто привычка, т.к. на инглише обычно все лучше.
              Ответить
            • парсер джосна в питоне есть чуть ли не в стандарнтой либе
              ну на pypi точно есть

              чувак просто тугой если он пол часа на это потратил
              Ответить
              • > парсер джосна в питоне есть чуть ли не в стандарнтой либе

                Именно. import json
                Ответить
              • КЭП! Дай руку пожму!
                Ответить
                • не хочу я тебе руку пожимать, Сема

                  Одному дьяволу известно что ты ею до этого трогал
                  Ответить
      • length = 200^length^max(length, 200)

        теперь заебись
        Ответить
        • Из этого можно вывести min-max-симметрию:
          length ^= 200^max(length, 200)
          length ^= length^min(length, 200)
          Ответить
          • (200 ^ length) & -(200<=length)^length
            Ответить
          • length не изменится
            Ответить
            • Если было <= 200, то да, не изменится, так и задумано.
              Но ведь, хоть ксор и симметричен, наше преобразование асимметрично, можно добавить ещё несколько таких строк для устаканивания. Или у меня какой-то баг?
              Ответить
              • Я не учел что во второй половине будет новая длина. Кароч мне лень
                Ответить
              • таки проверил, все правильно

                Молодец
                Ответить
        • Вспомнилось:
          int min(int x, int y) { return (((y-x)>>(32-1))&(x^y))^x; }


          Но на питоне так не сделать
          Ответить
          • Чет знакомый код. А как он работает?
            Ответить
            • очевидно - через жопу
              Ответить
            • таки если разница y и x отрицательна, то (y-x)>>(32-1) = 1

              и выражение равно (x^y)^x = y

              а если x > y то (y-x)>>(32-1) = 0

              и выражение равно (0)^x = x

              Нахуя я это тебе объяснял. сам же все понимаешь. Битый небитого везет!
              Ответить
              • >>> (((y-x)>>(32-1))&(x^y))^x
                > Битый небитого везет!
                Ответить
            • Вбил в поиск гитхаба "fastmin".
              Без курения не разобраться.

              Но что-то сомневаюсь что это "fast"
              Ответить
              • fastmin - это cmp + cmov на x86, x86_64. А это реально какое-то говно.
                Ответить
            • Мне это напомнило разговоры пользователей ГК с Царём и реализацию (a+b)/2 для всего диапазона интов.
              Ответить
              • a/2 + b/2 + (a&b&1) ?

                А не, херня.
                Ответить
                • Та не, нормально. Только на отрицательных будет вверх округлять, а не вниз.

                  Там еще изъёбистое выражение учитывающее знаки дописать и будет ок.
                  Ответить
          • давно пора ввести это опкоды и делать

            min rax, rbx ; и в rcx сложить
            Ответить
            • В ссе разве нету ещё?
              Ответить
              • я думал что в SSE только для распаралеливания потоковых алгоритмов всякие ништяки

                а вообще не знаю
                я в компьютерах не очень

                я всё больше по сапожной части
                Ответить
                • Таки завезли в SSE2:

                  pminsw xmm, xmm
                  Compare packed 16-bit integers in a and b, and store packed minimum values in dst.
                  Ответить
            • cmp %%rbx, %%rax
              cmovb %%rbx, %%rax

              Результат в %%rax, никаких бранчей нет.
              Ответить
              • послушайте, откуда у вас у всех привычка писать в AT&T?
                вот что такое cmovb?
                mov с размером byte?
                Ответить
                • movb — это mov с размером byte.

                  А cmov — это инструкция SSE. Это mov, если выполнено какое-то условие, чтобы джампы не писать.
                  Ответить
                  • P.S. Исправил: cmovb и cmovc выполняют пересылку, если установлен CF (по аналогии с jb и jc).

                    А как этот ужас будет выглядеть в AT&T, мне и представить страшно.
                    Ответить
                  • Из инструкции Intel: cmov было реализовано в процессорах поколения P6 (Pentium Pro). При чём тут SSE?
                    Ответить
                    • так это даже не mmx?
                      Ответить
                      • Да, это не MMX. Увидев инструкции cmov, P55 (Pentium MMX) и даже AMD K6 выкинут исключение 6.
                        Ответить
                        • Олдфаг-байтоёб в треде. Интересно, какого хера ты это знаешь?
                          Ответить
                          • Что увидено, не может быть развидено. С чем бы это сравнить? Ну это примерно как увидеть гоатсе.

                            Теперь и ты будешь знать, что инструкции семейства CMOV появились в P6, а в K6 их не завезли.

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

                              >Теперь и ты будешь знать
                              Только если ты меня убедишь что эта информация полезна. А так это лишь повод немножко поностальгировать.
                              Ответить
                    • Действительно, SSE-регистры тут не используются. Просто дурацкая привычка называть SSE всё, чего не было на P55.
                      Ответить
                • > откуда у вас у всех привычка писать в AT&T?
                  тоже неудоумеваю. видимо от выхлопов gcc.
                  Ответить
                • Мне, например, нравится, когда сначала идёт источник, потом назначение. Сишный и интеловский синтаксис, когда в начале идёт куда, а затем откуда — уёбищен.
                  Ответить
                  • А %%rax и $42 тоже нравятся?
                    Ответить
                  • Есть такая инструкция - VFMADD132PD. У неё 3 аргумента. И, емнип, они в AT&T синтаксисе идут совсем не в том порядке, в котором кажется...
                    Ответить
                    • >>VFMADD132PD
                      м-да

                      а ведь был CISC когда-то
                      с десятком высокоуровненвых комманд
                      Ответить
                  • потому что у вас у всех не было детства с tasm и masm
                    Ответить
                    • Но ведь AT&T'шный синтаксис старше, если я не ошибаюсь... Может у него было детство с какими-нибудь никсовыми майнфреймами?
                      Ответить
                      • >>старше
                        особенно под intel) Интел только изобрел 08086, а AT&T уже и синтаксис подогнал.

                        Просто под другие процы он конечно старше, тут я не спорю

                        ну мы уже выясняли где-то что он писал на K&R C под такие мотороловские процы XC68000
                        Ответить
                  • И оператор присвоения тоже наизнанку писать?
                    Ответить
                  • То ли дело язык программирования R, в котором есть и присвоение влево <-, и присвоение вправо ->
                    Ответить
                    • ...и нахуй он никому не нужен
                      Ответить
                      • Как никому? У него же навалом библиотек для data mining.

                        Ещё скажи, что OCaml или Хаскель никому не нужны!
                        Ответить
                        • ну хаскель мне нужен как минимум для понтов
                          Ответить
                          • > для понтов
                            Учи malbodge, хули. Тех, кто его осилил - десятки, если не единицы...
                            Ответить
                            • Если я malbodge выучу то в дурку поеду инфа 100%
                              Ответить
                              • Но зато к тебе будут приходить и брать автографы... А хаскель - это уже мейнстрим. Им не попонтуешься.
                                Ответить
                                • это среди пользователей данного сайта мейнстрим. а так - очень даже модно, стильно, молодежно
                                  Ответить
                          • Хоть один признался. Алсо, вайпалка для двачей написана на хачкеле.
                            Ответить
          • >Но на питоне так не сделать
            >(32-1)
            я даже знаю почему. (в код не вникал)
            Ответить
          • >Но на питоне так не сделать
            Вот по сути то же.
            вместо (200<=length) можно использовать знак, конвертировать в -1 и через & выкусить нужное.
            http://govnokod.ru/19650#comment316569
            Ответить
    • В перле красивее: http://govnokod.ru/13520 :3
      Ответить
    • Так-то да, есть min, но приведенный вариант чем не устраивает-то? И почему предлагается альтернатива
      [length,200][length>200]
      , которая делает то же самое?
      Ответить
      • Потому что эта альтернатива красивее и симметричнее...
        Ответить
      • >но приведенный вариант чем не устраивает-то?
        Неочевидное нечитаемое говно.
        Ответить
    • Фантазии и воспоминания разгорались в голове с новой силой, хотелось поправить вставший и неудобно загнувшийся в штанах член, но при матери было неудобно.
      Ответить

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