1. PHP / Говнокод #13420

    +106

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    $items = array('palto','noski','shapki');
        $colors = array('red','black','white');
        $materials = array('kozha','meh','aluminij');
    
        foreach($items as $item) {
          foreach($colors as $color) {
            foreach($materials as $material) {
              echo $item.'-'.$color.'-'.$material;
              echo '</br>';
            }
          }
        }

    Задача:
    Группа 1.
    Пальто, Шапки, Носки
    Группа 2.
    Красный, Синий, Зеленый
    Группа 3.
    Мех, Кожа

    Необходимы комбинации следующего вида, пример:
    1) Пальто - красный - мех
    2) Пальто - красный - кожа
    3) Пальто - синий - мех
    ....
    N) Носки - зеленый - кожа

    При том условии, что группа занимает только свое место в порядке. Т.е. пальто не может быть 2-ым или 3-им словом в комбинации.

    Запостил: Vasiliy, 15 Июля 2013

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

    • А в чем говно помимо yobanogo translita? Вроде все прилично.
      Ответить
      • меня пкоребило наличие 3 foreach хотя можно было обойтись одним while.
        это решение не совсем Гк. Но что то из раз ряда берем топор и рубим.
        Кстати данный подход характерен для фрилансеров ( быстрее, больше за еду). возможно автор будущий/ настоящий фрилансер
        Ответить
        • Можно посмотреть на ваше решение с вайлом? Мне кажется оно и будет гк. А три форича, имхо, - самое простое и наглядное решение...
          Ответить
          • http://ideone.com/BrQTvS
            Ответить
            • что-то я не вижу всех 3^3 = 27 вариантов
              так и задумано?

              как и shapki-red-kozha
              shapki-red-kozha


              что ты вообще хотел показать то?
              Ответить
              • в задачи про уникальность фраз слов не было.
                Ответить
                • Да там в задачЕ вообще предложный падеж был. Ты если представляешь себя интеллектуалом, то соответствуй.
                  Ответить
            • > $count=count($items)+count($color)+count ($material);
              Что должно символизировать это, кхм, число?

              P.S. Ну а вообще тут решены 2 разных задачи - у вас нагенерить N вариантов (не все, без гарантии уникальности). А в коде из топика - показать все различные варианты.
              Ответить
              • ну как бэ количество вариантов. :) помножить конечно надо было
                Ответить
                • Вот жаль нельзя махнуть коды местами... Ваш в топик, а код из топика - как кошерное решение ;)
                  Ответить
                  • не 3 форыча это определено зря. Хотя для веба, скорость скрипта не кртична
                    Ответить
                    • Почему у пыхеров такая ненависть к форичу? Он же работает быстрее, чем for и while по индексам :)

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

                          В общем, во всем виноват составитель задачи, который не смог ее толком сформулировать... Хотя бы написать, нужно ли в случайном порядке, нужно ли все варианты, должны ли они быть различными...
                          Ответить
                        • как по мне - охуенно эстетично
                          разве что пробела между foreach и ( не хватает
                          и как ты уже догадался (догадался ведь?), это не только эстетичный, но и самый понятный путь получить все комбинации
                          Ответить
                          • ну вот если все, порядку и без повторов то да.
                            Ответить
                            • Судя по примеру в условии - по порядку и без повторов.
                              Ответить
                              • Шутишь, зачем читать и анализировать условия задачи, можно же просто писать произвольный код, так веселее и проще. )
                                Ответить
                        • А ещё для модификации значений (если надо будет) потребно организовывать референсный доступ через &.
                          Ответить
            • Вот это вот пример говнокода
              Ответить
          • function combos() {
             return implode(' ', func_get_args());
            }
            echo implode("<br/>\n",
                         array_map('combos', $items, $colors, $materials)
                        );
            Ответить
            • А, не, он по 1 берёт. Мне чего-то казалось он их перемножает...
              Ответить
              • function array_mul() {
                  $args = func_get_args();
                  $base = array(array());
                  foreach ($args as $add) {
                    $newbase = array();
                    foreach ($base as $left) {
                       foreach ($add as $right) {
                         $tmp = $left;
                         $tmp[] = $right;
                         $newbase[] = $tmp;
                      }
                    }
                    $base = $newbase;
                  }
                  return $base;
                }
                $res = array_mul($items, $colors, $materials);
                $res = array_map(function($item){return implode('-', $item);}, $res);

                О регистры! Я совсем разучился в алгоритмы! Чую, что можно их перемножить намного проще, и не вижу как :(
                Ответить
                • На самом деле, делать декартово произведение вместо трех foreach неоптимально по памяти. Если нет "ленивых итераторов", то нужно просто печатать (рекурсивной функцией или через индексы).
                  Ответить
                  • Да, но написанный "в лоб" оптимальный по ресурсам кусок потом сложно расширять. У меня как раз сейчас проект, который 2 года жил по такому принципу :( В итоге куча похожих, но чуть-чуть разных мест, из-за чего нельзя везде и сразу добавить общую настройку. :) Вот, как видите, дошло до опускания рук и решения любых других задач, лишь бы не видеть того. :)
                    Ответить
            • Красота. Только девисы нужно добавить.
              Ответить
              • Ну в имплоде поменять ' ' на '-'.
                Ответить
                • Но раз он только 3 варианта выводит то не красота. Я php не знаю.
                  Ответить
            • 1) Этот код выведет не все варианты, а только 3.
              2) На примере из условия (не из кода) в последнем варианте вывалит пустое значение.
              Вывод - ваш код достоен находиться на этом сайте ;)
              Ответить
              • Пасиба! А то всё время только чужое сюда заливаю, надо-ж и себя показать. :)
                Ответить
            • <?php
              
              function product($x1, $x2) {
                $result = array();
                foreach ($x1 as $key1 => $value1)
                  foreach ($x2 as $key2 => $value2)
                    $result[$key1][$key2] = array($value1, $value2);
                return $result;
              }
              
              function print_product($x) {
                $tmp = array();
                foreach($x as $row) {
                  $tmp = array_merge($tmp, array_map(function($value){
                    return implode('-', $value);
                  }, $row));
                }
                return $tmp;
              }
              
              $items = array('palto','noski','shapki');
              $colors = array('red','black','white');
              $materials = array('kozha','meh','aluminij');
              
              echo implode("<br/>\n", 
                print_product(product(
                  print_product(product(
                    $items, 
                    $colors
                  )), 
                  $materials)
                ));


              http://ideone.com/LS7s8F
              Ответить
        • одним?
          Ответить
          • Видимо три счетчика, вайл тру и "поразрядные" инкременты. Ну или в пхп есть секретное оружие для декартовых произведений ;) Ждем кода...
            Ответить
            • Не, по ходу нету... На SO такие же велосипеды, как здесь в комментах, только с рекурсией. :)
              Ответить
          • foreach (mysql_query("select items.item, colors.color, materials.material from items, colors, materials") as $record) {
                print $record['item'] . '-' . $record['color'] . '-' . $record['material'] . "<br />\n";
            }
            Ответить
    • Автор ты выложил свою лабу, что бы мы её проверили ?
      Ответить
      • А че, надо предложить ВУЗам аутсорсить проверку лаб на ГК. Не бесплатно, конечно.
        Ответить
    • >>noski
      >>aluminij

      лол
      Ответить
      • А я сажаю алюминиевые огурцы на брезентовом поле...
        Ответить
    • SELECT group1.name, group2.name, group3.name
      FROM group1, group2, group3

      Ну и это все обернуть PHP кодом :)
      fixed?
      Ответить
      • DBA way :)
        Ответить
        • Есть задачи, которые всё-таки лучше для декларативщины.

          А есть задачи, которые пытаются свалить на декларативщину, когда им там совсем не место :(
          Ответить
    • О кстати, я нашел говно! Вот оно:
      </br>
      Ответить
      • А это кто-нибудь учёл?
        > $materials = array('kozha','meh','aluminij');
        > Группа 3.
        > Мех, Кожа
        Ответить
        • Ну оригинальный код вполне хавает. Код Василия тоже.
          Ответить
    • <?php $items = array('пальто','носки','шапки',
                           'красные','чёрные','белые',
                           'кожа','мех','алюминий');
      
      $counts = array(3,3,3);
      $total = array_product($counts);
      
      foreach(range(0, $total - 1) as $i) {
         $num_color = floor($i / $counts[2]);
      
         $item = $items[floor($num_color / $counts[1])];
         $color = $items[$num_color % $counts[1] + $counts[0]];
         $material = $items[$i % $counts[2] + $counts[1] + $counts[0]];
      
         echo $item.'-'.$color.'-'.$material;
         echo '<br />'.PHP_EOL;
      }
      http://ideone.com/J9nVfu

      Многомерные массивы и вложенные циклы не нужны. Истинно говорю, есть только смещения, всё остальное от лукавого.
      Ответить
    • Сегодня к вам пожаловал сэр специально с нульчана считать очередной факториал на божественном языке:
      decart2 po pre = map ((pre++) . (:[])) po
      decart l = foldl (\pre po -> concat $ map (decart2 po) pre) [[]] l
      main = print $ decart [["palto", "noski", "shapki"], ["red", "black", "white"], ["kozha", "meh", "aluminij"]]

      http://ideone.com/eUCJGA
      Ждем код от царя, обгоняющий мой. Чтобы держать народ в напряжении пока не замерял время работы кода.
      Ответить
      • Давненько не брал я в руки шашек...
        combos = do
            item <- ["palto", "noski", "shapki"]
            color <- ["red", "black", "white"]
            material <- ["kozha", "meh", "aluminij"]
            return $ item ++ "-" ++ color ++ "-" ++ material
        main = mapM_ putStrLn $ combos
        Ответить
        • Красиво, но мой код универсальнее твоего. В decart я могу передать больше или меньше данных с ввода пользователя, не меняя код decart. А у тебя фиксировано декартового произведение трех множеств.
          http://ideone.com/3Okmm6
          http://ideone.com/2m0WHZ

          Могу даже так:
          decart2 po pre = map ((pre++) . (:[])) po
          decart l0 l = foldl (\pre po -> concat $ map (decart2 po) pre) [l0] l
          main = print $ decart ["Kisaragi", "Saya"] [["palto", "noski", "shapki"], ["red", "black", "white"]]
          Ответить
          • > Saya
            Из Saya no uta?
            Ответить
            • > Saya no uta
              > Песнь Саи
              По словам Saya Kisaragi uta или Saya Kisaragi song гуглится:
              http://www.youtube.com/watch?v=l-2vIGxYZI0
              Коллега тоже лингвист?
              Ответить
              • Песнь Саи: http://ru.wikipedia.org/wiki/Saya_no_Uta.

                P.S. Да простят меня модераторы за оффтопик.
                Ответить
                • Подозреваю, что saya переводиться как ужас или монстр.
                  Ответить
                  • Эм, а разве это не имя собственное, которое не переводится?

                    P.S. Саечка няша ^_^
                    Ответить
                    • > Saya no Uta (яп. 沙耶の唄?, яп. Песнь Саи) — визуальная новелла производства Nitroplus в жанре ужасов и мистики с хентай сценами
                      http://en.wikipedia.org/wiki/Blood-C
                      > Blood-C ... Saya Kisaragi ... Genre Action, Horror, Supernatural, Tragedy
                      Они любят говорящие идентификаторы и имена собственные.

                      > P.S.
                      НЯ! ^_^
                      Ответить
                      • > любят говорящие идентификаторы и имена собственные
                        совмещать. То есть чтобы идентификатор был значащим.
                        Ответить
                        • Не ожидал столько плюсов. На говнокоде точно кому-то нравятся японские порномультики.
                          Ответить
                          • Да тут все подрят питухи, а питухи любят японские порномультики. Всякие бородатые борманды поросшие бородой и анскиллом - надо же как-то себя развлекать - вот они и някает смотря порнографию.

                            Хаскельговно тоже - анскилл, но выживать надо - вы запитушились на говнозыках - пытаетесь найти спасение в порномультиках.

                            анямэ для питухов, только питухи его смотрят.
                            Ответить
                            • You same shit unskilled. C destroy your brain and ass.
                              Может и анскилл, но планирую поднять свой уровень. А ты планируешь поднимать свой?
                              Ответить
                              • >Может и анскилл, но планирую поднять свой уровень.
                                На детских делфях/пхп? Или кукарекая на Царя?


                                СУть в том, что питух планирует, а Царь апает. Царь фармит скилл 24/7. А ты питух в стал и стоишь посреди вестфала(или где там таверна эта злополучная рядом со штормом) и ролиплеешь в таверне с остальными питухами. И кукарекаешь на пацанов, которые мимо идут.

                                "Ко-ко-ко - я царь, а ты питух. Ко-ко-ко я маргинальщик, Ко-ко-ко я нахрен понтовый - уменя ник какбэ я за хаскель, но он говно - какбэ я тралю тебя лалка - хахаха, ко-ко-ко.
                                Ответить
                                • > Или кукарекая на Царя?
                                  Послушав кукареканье Царя скорее. Типичный не царь качает скилл 24/365.5±0.5 в год. Ему некогда расхаживать по балам. Разве что в отпуске может позволить себе расслабиться.

                                  Царя плюсую я. Как всегда харизматично. Почему такие таланты не идут в Мариинский?
                                  Ответить
                                  • >>Послушав кукареканье Царя скорее. Типичный не царь качает скилл 24/365.5±0.5 в год. Ему некогда расхаживать по балам. Разве что в отпуске может позволить себе расслабиться.
                                    Тыж говорил про многопоточность - дак вот, итинный царь многопоточный - как китайский фармер. Поэтому ничего не мешает ему расхаживать по балам, если это полезно для его скилла, не вредит ему и интересно ему.

                                    Апать скилл - это развивать думалку - когда ты пишешь 24/7 - ты лишь пишешь говно бездумное, как машинистка на задворках жизни. Нормальный код месяц обдумывается - неделю пишется. А пока царь думает - царь можешь и пофлудить на ларе/говнокоде.
                                    Ответить
                                • > СУть в том, что питух планирует, а Царь фапает
                                  Ответить
                                  • > питух планирует
                                    Питух не может планировать. Подъемная сила у крыльев маловата, да и вес большой.
                                    Ответить
                                    • > да и вес большой
                                      Кура может, я в деревне видел, как спокойно слетала с сарая. С петухом опытов я ставить бы не стал.
                                      Ответить
                                      • > спокойно слетала с сарая
                                        Яростно молотя крыльями или все-же планируя на расправленных? :)
                                        Ответить
                                        • > планируя
                                          Нечто среднее, к планированию ближе. За давностью лет, я уже точно не могу быть в этом уверен, придётся поставить натурный эксперимент. Только потребуется Пизанская башня. как минимум.
                                          Ответить
                                    • Да и банка сгущенки тоже не невесомая.
                                      Ответить
                                • Бля буду, Иисусе ... Это Ваш кукарешник до Сыктывкарского ЛВЗ кое как дополз с опщипаными жопами ? :D

                                  Слыхали ... Тряхнуло по дороге всех ... Живот болел три недели, персс сам по себе накачался
                                  Ответить
                      • У вас последний кандзи не правильный.
                        Ответить
                        • > С петухом опытов я ставить бы не стал.
                          Ты меня подловил. Я не знаю Японский.
                          Ответить
          • А я напишу это в одну строку без велосипедов:
            main = mapM_ putStrLn $ map (intercalate "-") $ sequence [["palto", "noski", "shapki"], ["red", "black", "white"], ["kozha", "meh", "aluminij"]]
            Ответить
            • Про sequence я забыл, а вот liftA2 для декартового принципиально не хотел использовать
              Ответить
          • > но мой код универсальнее твоего.
            mapM_ (putStrLn . intercalate "-") $ sequence [["a","b","c"], ["1","2","3"], ["gif","jpg","png"]]


            А так, мне больше нравится:
            printf "%s-%s.%s" <$> ["a","b","c"] <*> ["1","2","3"] <*> ["gif","jpg","png"] :: [String]
            Ответить
            • Апликативные функторы это хорошо, но их проблема как раз в том, что число множеств фиксировано заданно. sequence тут идеален.
              Ответить
              • > Апликативные функторы это хорошоa
                Это замечательно, часто удобен вкупе с Parsec: skipPrefix *> extract <* skipSuffix (a не do skipPrefix; val <- extract; skipSuffix; return val).
                Но для читаемых случаев, в общем вариант bormand с явным "биндингом" лучше.

                > sequence тут идеален
                Тут это где? В конкретном примере или в выдуманном случае: "В decart я могу передать больше или меньше данных с ввода пользователя,"
                Ответить
                • > skipPrefix *> extract <* skipSuffix
                  Ого как красиво. Говорят парсек недетерминированный парсер(парсер-комбинатор)? Что медленно
                  Ответить
                  • > недетерминированный
                    Да вроде нет, если не использоваться редкие "look-ahead". Просто высокуровневый подход со своими издержками.

                    Есть тот же attoparsec, с тем же аппликативным интерфейсом. К тому, что в данном случае узкое место - не комбинаторный подход.
                    Ответить
                    • Узкий момент видимо в том, что сначала не выделяются токены перед парсенгом?
                      Ответить
                      • Токенайз - какразтаки узкое место. На малых строках он сглаживается кешем, выполняя как-бэ префетч.

                        А так токенайз говно. Однопроходный уничтажающий не валидирующий парсер пидалит в хлам всё, что только может.
                        Ответить
                        • А ты ведь прав.
                          > skipPrefix *> extract <* skipSuffix
                          При использовании токенезирования skipPrefix *> extract вызовет как минимум загрузку двух строк кеша при первых обращениях к обоим. Без него как минимум одну. Профит на лицо. С другой стороны токинизированный код занимает меньше места и поэтому скорее всего то, что загружается в skipPrefix уже будет находиться в кеше, то есть в среднем все-таки число вытесняемых кешлиний может уменьшиться. А если ещё подумать, то более последовательные обращения к кешлиниями без токенизации также могут увеличивать профит от автопрефетча процессором. А ещё токинизация может увеличивать вероятность перекрытия адресов кешлиний и приводить к вытеснению часто требуемой кешлинии из-за того, что например (там сейчас все ещё также?) совпали младшие биты адресов (хотя старшие не совпали), но кешу пофиг, ведь он смотрит только по младшим.
                          Ответить
                          • Да не в кеше дело - в питушарстве. Токенайз говно, зачем гинерить таки строки, для которых нужен токенайз? Юзай бинари.

                            Питушарский автоматический кеш всегда работал как говно. И гнилая ассоциативность так никуда не делась. Поэтому да, если у тебя в строке могут лежать только такие адреса - он клал и он выкинет в зависимости алгоритма любой адрес с такой же Nнностью.

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

                            Вот тебе ещё одна вещь - в Царском процессоре должен быть только ручной кеш. Кеш - это ещё одна оператива, с которым ты работает обычными мeвами, либо меморимув на 64байта.

                            Только суть в том, что с такми питушарскими декодерами и ссешками на 32байта - конвейер сдуется на некоторых камнях. Но даже это лучше, чем та питушня с кешем, которая происходит сейчас.

                            Кеша станет в 2раза больше - память станет намного быстрее - всего лишь с выпилом питушрской ассоциативности и автоматичекого управления кешом.
                            Ответить
                            • > Вот тебе ещё одна вещь - в Царском процессоре должен быть только ручной кеш.
                              Тебе во VLIW
                              Ответить
                              • Я там говорил про итаниум, да, но все реализации твоего VLIW зафейлили. Ибо влив требует ахриненного влива скилла в программиста. А его пытались превратить в обычный х86 - вышло то, что вышло - питухам тормазит. Для отцов - питушня, ибо для питухов.

                                Т.е. влив не может быть мейнстримом, а то, что не мейнстрим - интелу, да и рынку не нужно.
                                Ответить
                      • Если в контекте медлительности parsec:
                        [color=blue]https://github.com/bos/attoparsec/blob/master/doc/whats-in-a-parser-1.md[/blue] - первый пункт мне говорит, что в изначально высокоуровненвый подход плохо вписалась эффективность (но для ряда задач - норм). В деталях не разбираюсь.

                        https://github.com/bos/attoparsec/blob/master/doc/attoparsec-rewired-2.md - а это, что комбинаторный подход может быть эффективным (и сразу хвататься за alex/happy не стоит).
                        Ответить
                        • Знаешь сколько я могу парсить хттпреквестов на голой сишке? Я лучше тебе не буду говорить.

                          А знаешь, сколько реквестов будет выдавать нормальные бинарные заголовки? И данные, как гзипованный хваст?

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

                          Потом пишут валидирующие парсеры, ибо "мы питушки не знаем, где мы не ту букву поставили" - это ещё -50% перфоманса, вплоть до -98%.

                          Я конечно понимаю, что героически решить проблему, которую сами же создали - аля: 10k rps problem. Тцп стек уже лет 100 как 10кrps умеет. Неумело этого: Питушарское хттп, хтмл и прочее говно - но у нас появились процессоры и мы написали омегабыстрые парсеры и добились своих 10krps в лучше случае, и то на статике.

                          А сейчас нормальный "вебсервер", не то говно, аля нгинкс, апач и прочее - именно парсер опкодов и раскидывателей данных - выдаёт тысячи тонн rps. В тысячи раз больше, чем самый илитный веб. Как так?

                          Заголовок к нормальном протоколе - это опкод и его стрктура. Это парсится процессором на скорости близкой к терабайту в секунду максимум - ну 100гигов дастс даже в самом слабом случае с тысячей переходов. Т.е. на порядки быстрее ущербанского гигабита.

                          Сравни это с ущербанским вебом. Кому нежен этот питушарних html, хмл и иные реализации этого говна? Выпили это говно - запили нормальное бинарное представление. Сразу будет буст на порядки - нет, мы питухи - мы юзаем говно, гинерим говно и рисуем говно. Мы хвалимся тем, что мы хоть что-то сделали и оно работает.
                          Ответить
                          • Хех... если бы апач тормозил из-за парсинга запросов... да там инициализация какого-нибудь PHP и ожидание ответа от него займет на порядки больше времени, чем этот парсинг сраных 500 байт заголовка и их валидация ;)

                            Твои мегатонны rps сможет адекватно вытянуть только прокся\балансер\хрень раздающая статику из оперативы.
                            Ответить
                            • Из оперативы? Сравни скорость оперативы и гигабита. Мегатонны выдаёт не статика - статика выдаёт ещё больше.

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

                            > нормальный "вебсервер" ... выдаёт тысячи тонн rps. В тысячи раз больше, чем самый илитный веб. Как так?
                            Ну всякие node.js yarw берут 10k и больше, на 1.5 порядка загнался. А просто pong даже на haskell доходит до: http://www.yesodweb.com/blog/2011/03/preliminary-warp-cross-language-benchmarks

                            > нормальное бинарное представление. Сразу будет буст на порядки
                            Да ну, html малая толика, когда web обвешах всякой хренью через js / flash / прочее.
                            А пример "нормального представления"? (ну так, чтоб с валидацией, ибо "мы питушки не знаем, где мы не ту букву поставили" херня, а не аргумент :)
                            Ответить
                            • > yarw
                              yaws*
                              Ответить
                            • >По ссылке вообще-то используется чужой http_parse.
                              Я говорю не про ссылку, а вообще.

                              >Ну всякие node.js yarw берут 10k и больше, на 1.5 порядка загнался. А просто pong даже на haskell доходит до: http://www.yesodweb.com/blog/2011/03/preliminary-warp-cross-language-benchmarks
                              Какие нодыжс - ты упорлся - это бездарное говно от питухов для питухов. Нормальных вебсерверов не существует. Есть более-мене нормальные, аля http://gwan.ch - ты не смотри там на названия эзыков, а тыкай по ссылки и читай.

                              >Да ну, html малая толика, когда web обвешах всякой хренью через js / flash / прочее.
                              >А пример "нормального представления"? (ну так, чтоб с валидацией, ибо "мы питушки не знаем, где мы не ту букву поставили" херня, а не аргумент :)
                              Причём тут жс, флеш и прочее - всё это говно, а хтмл тормазит именно сеть и питушит сервера.

                              Нормальный - я тебе описал. Ты, никакие хттп запросы руками не пишешь - я тебе описал пример с опкодами.

                              Вместо данных - юзай хтмл, если питух. Юзай бинарь, если не питух. Передавай код на сишке, который будет бутстрапица у тебя в броузёрке и рисовать твой сайтец на опенгл"е, общатся по нормальному сокету и никаких хтмл не нужны вообще.
                              Ответить
                              • > аля http://gwan.ch
                                И кто еще упоролся). Если "нормальных вебсерверов нет" - может виновато завышенное представление о нормальности?

                                > а хтмл тормазит именно сеть и питушит сервера
                                А нахрена, спрашивается, "оптимизировать", если на фоне остального не факт, что будет заметно.

                                > бинарь .. код на сишке .. бутстрапица .. сайтец на опенгл"е .. сокету
                                Круто, чо.. Только мало: может это, сетовой стек слить в нормальное царское состояние, а то такой оверхед вложений.

                                Интересно, если html такой петушиный, что здесь-то забыл? Поцчему не создаешь царский бинарный фидонет, не ведешь цивилизацию по пути прогресса?
                                Ответить
                                • > бинарный
                                  ой, неидиоматично звучит, гипербинарный
                                  Ответить
                                  • Да, гипербинарный.

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

                                    А почему? Патамучто хттп протух бы в миг, а твой рогалик гинерил бы по 10гигобайт траффика в час от юзверя.
                                    Ответить
                                    • > Иди погляди на питушатские рогалики, как там запилена сеть
                                      Ну наверное что-то поверх udp, хотя не суть: разговор-то был про web. Откуда желание все прибить к железу?

                                      > умеет работать со всяким говном и недоязыкам
                                      Может это, ну его этот линукс, ставь plan9, меньше будет идиосинкразия.

                                      > Ах да, ты же не пилил вебсервера - чтобы мне было удобно, чтобы я не ваял говно - и писал вместо 1к строк двадцать.
                                      Не распарсил мысли. Ты же сам вполне можешь запилить 1M rps.

                                      > всё будет едино
                                      Все бинарь.. даже небо.. даже аллах.

                                      > Сетевой стек ты не выпилишь, ибо между тобой и юзверем сеть.
                                      Да легко, чего на софте останавливаться: царская сетувуха <-> царский маршрутизатор <-> царские интернеты.

                                      > Всё остальное я выпилил.
                                      Юзабельно?

                                      > говно как инструментом для апаскилла и в последствии запила не говна.
                                      Допустим, можно примеры запиленного последнего?

                                      > избранных мною я возьму собой и поведу
                                      Это правильно, таким надо держаться вместе.
                                      Ответить
                                      • >Ну наверное что-то поверх udp, хотя не суть: разговор-то был про web. Откуда желание все прибить к железу?
                                        Какая разница какой протокол - суть в том, что там нормальный опкодный протокол. Давай я напишу тебе пример, чтобы ты понял: http://pastebin.com/fdnZGxYV - вот тебе полноценный вебсервер для нормального протокола - там ещё нужно строк 20, чтобы прочекать валидность номеров опкодов и прочую фигню, аля он не проверяет длинну куска данных, которые идут за опкод структурой - если они длинше - он должен возвращать не один, а лишнии данные, либо сразу указатель.

                                        Добавляешь хеадлер, структуру, номер опкода - будет хреначить. Реальный сервер на 4-х нитях у тебя будет выдавать миллард rps. В зависимости от фейлов переходов. Остально у тебя уже зависит от сети и ведра.


                                        >Может это, ну его этот линукс, ставь plan9, меньше будет идиосинкразия.
                                        Говно от питухов для питухов.

                                        >Не распарсил мысли. Ты же сам вполне можешь запилить 1M rps.
                                        Суть в том, что я могу и мильярд, но ваш питушарский протокол мне этого не даёт.


                                        >Да легко, чего на софте останавливаться: царская сетувуха <-> царский маршрутизатор <-> царские интернеты.
                                        Да, но это уже потом.

                                        >Юзабельно?
                                        Для царей - да.

                                        >Допустим, можно примеры запиленного последнего?
                                        Ну вот я тебе за 5минут накатал аналог твоего вебсервера - умеет тоже, протокол нормальный - попытайся запилить такое же для питух Хттп.
                                        Ответить
                                        • > http://pastebin.com/fdnZGxYV - вот тебе полноценный вебсервер
                                          Ирония в том, что _веб_ подразумевает именно гипертекстовую часть интернетов.
                                          Ну отодвинет это немного проблему, а дальше? Кеп подсказывает, что перспективнее двигаться в сторону распределенных систем.

                                          > Суть в том, что я могу и мильярд
                                          Свежо сие преданье, а верится весьма с трудом.

                                          > попытайся запилить такое же для питух Хттп
                                          В смысле "такое же", если он by design текстовый? Есть готовые библиотеки, меня устраивает. Да меня и html устраивает, хотя xhtml имхо поприличнее.

                                          btw хоть тот же netcat позволяет получить страницу, а что делать с "единым бинарем"? Не чувствуете ли вы духовную близость с незабвенным леннартом (и его бинарным логом)?
                                          Ответить
                                          • >Ирония в том, что _веб_ подразумевает именно гипертекстовую часть интернетов.
                                            Говновеб, а не норм Царский веб - ты о5 слился, питушок.

                                            >Ну отодвинет это немного проблему, а дальше? Кеп подсказывает, что перспективнее двигаться в сторону распределенных систем.
                                            Какую проблему - это апнет сервера. А нормальные сайтецы написанные на сишке - выдают мильёны rps уже сейчас, но не, что пишешь ты, заедушный пхп питух.


                                            >Свежо сие преданье, а верится весьма с трудом.
                                            Мой тот пример выдаёт овермильярд rps в секунду на хелворде на одном ведре. коре2 1.86ггц. Но тут нет нормального выбора хеадлеров - поэтому тут нет переходов - с переходами будет медленее в пару раз в худшем случаее.

                                            Остальное - уже зависит от ip/tcp стека твоей ОС.

                                            >В смысле "такое же", если он by design текстовый? Есть готовые библиотеки, меня устраивает. Да меня и html устраивает, хотя xhtml имхо поприличнее.
                                            Твоя самая лучшая библиотека медлннее на порядки моей примитивной реализации нормального протокола.

                                            >btw хоть тот же netcat позволяет получить страницу, а что делать с "единым бинарем"? Не чувствуете ли вы духовную близость с незабвенным леннартом (и его бинарным логом)?
                                            Замени фейковые псевдоре сокеты на реальные - будет работать. Хоть хелворд на хтмл будет тебе выдавать.
                                            Ответить
                                          • >бинарным логом
                                            А что в нем плохого? Решили спиздеть у винды? Давно пора.
                                            Ответить
                                • >И кто еще упоролся). Если "нормальных вебсерверов нет" - может виновато завышенное представление о нормальности?
                                  Пацан скиллся - дак вот запомни - всё, что ты знаешь говно. А пока ты читаешь про гван и тестишь его - он так работает потому, что запилен по царскому методу.

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

                                  >А нахрена, спрашивается, "оптимизировать", если на фоне остального не факт, что будет заметно.
                                  Ты питух? Ты животное? Ах да, ты же не пилил вебсервера - чтобы мне было удобно, чтобы я не ваял говно - и писал вместо 1к строк двадцать.

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

                                  Ты можешь играца, смотреть кинцо - и всё без тормазов и говна. Всё будет красиво, круто и быстро.

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

                                  >Интересно, если html такой петушиный, что здесь-то забыл?
                                  О5 кукарекушка начала нести говно и сливаться. Если жизнь такое говно - что ты сдесь забыл? Я сдесь для того, чтобы жизнь из говна сделать не говном. Ничего не запрешает мне пользоваться говно как инструментом для апаскилла и в последствии запила не говна.

                                  Это основа - питухам не понять.

                                  >Поцчему не создаешь царский бинарный фидонет, не ведешь цивилизацию по пути прогресса?
                                  Создаю, только мне не интересно вести цивилизацию к прогрессу. Я показываю путь, избранных мною я возьму собой и поведу, остальные же либо пойдут сами по пути, который указал я - либо сдохнут и жить будут в питушне до конца своего жалкого бытия.

                                  Мне не интересно кому-то что-то объяснять, учить питухов и прочее - хочешь - ты избранный, не хочешь - я даказывать тебе ничего не будут - ты питух и это твой выбор.
                                  Ответить
                                • Бинарные интернеты уже придумали до Царя:

                                  http://ru.wikipedia.org/wiki/WBXML

                                  http://dev.opera.com/articles/view/opera-binary-markup-language/
                                  Ответить
                                  • Это не бинарные интернеты - это говно. Это питушарский кастыль к питух хмл - банальный сжиматель питух хмл. Я же говорю о чисто бинарным протоколах, которым это говно сольёт, будучи хоть трижды бинарным
                                    Ответить
                              • > Передавай код на сишке, который будет бутстрапица у тебя в броузёрке и рисовать твой сайтец на опенгл"е, общатся по нормальному сокету
                                Наркоман штоле?
                                Ты так до векторного гипертекстового говнокода додумаешься.
                                Ответить
                                • Нет, не додумаюсь. Мне не интересны питухи. Оправдания у хттп и хтмл"ов лишь одно - они понятны человеку, вернее не человеку, а анскильному животному, ибо мне бинарь понятнее.

                                  Всё говно в этом мире вызванно потоканием и заботой об неосиляторах - питухи они.
                                  Ответить
                                • Так круто же! Вместо того, чтобы передавать эхмаскрипты, передавать исходники на сишечке, чтобы они компилировались в браузере под платформу пользователя. А поскольку текстовый файл — питух, передавать будем двоичную сериализацию гнутого AST. Прирост перфоманса будет 146%.
                                  Ответить
                                  • > двоичную сериализацию
                                    Можно прям снимок куска памяти, если вместо указателей юзать офсеты, и совпадают byte-order и битность.
                                    Ответить
                                    • Без разницы как - это будет загружатся ровно один раз в жизни, для постоянных сайтецов, которые ты юзаешь.

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

                                    Она бутстрапица при первом заходе - и живёт у тебя во кладке. А броузер - это шедулер/планировщик. Т.е. микроОС. Браузер будет жрать 0 метров оперативы, а написанные по Царский сайты - по 1метру максимум.

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

                                    Авось запилит кто-то анол юкоза для анскилледов - пусть там свои сайтецы и пилят.
                                    Ответить
                                    • > Сайтецы будут ваять только избранные, говнори умрут за ненадобностью
                                      Тру! Я уже джва года жду Только вот вероятность того, что ты будешь прозябать в своём инторнете в гордом одиночестве, близка к единице.
                                      А, да, бинарные исполнимые сайты - вообще шикарно. Сменил дизайн - перекомпилировать на всех мобилках, про сплоиты даже думать страшно.

                                      P.s. На самом деле, идея сжатых двоичных веб-приложений не очень плоха, и дело не в скорости или размере. Основная проблема в том, что это пользователям ничего не даст. И приведёт это именно к ГВФ.
                                      Не стоит забывать, что современные инторнеты, как они есть, продукт эволюционного развития, растянувшегося на десятки лет. В чём-то создатели инторнетов были гениальными, в чём-то недальновидными. Нельзя так просто взять и отринуть весь этот существующий базис, пусть даже он морально устарел.
                                      Ответить
                                      • > Сменил дизайн

                                        Дизайн не нужен же. На сайтах должна быть только инфа, только хардкор! Да здравствует telnet!

                                        Ну серьёзно, для чего нужен дизайн, кроме того, чтобы работающие за «Доширак» анскиллябры, гордо именующие себя дизайнерами, имели работу?
                                        Ответить
                                        • > Да здравствует telnet!
                                          Во, вспомнились BBS'ки. Тот самый исполняемый файл на любом языке, правда все-таки на стороне сервера. И вот в то время идеи Царя могли бы найти применение...
                                          Ответить
      • char * t[] = {
          [1] = "кожа", [2] = "мех", [3] = "питух", 
          [0x10] = "красный" , [0x20] = "чёрный", [0x30] = "белый", 
          [0x100] = "пальто", [0x200] = "шапка", [0x300] = "носки"  
        };
        uint64_t nt[] = {
          0x111, 0x112, 0x113,
          0x121, 0x122, 0x123,
          0x131, 0x132, 0x133,
          
          0x211, 0x212, 0x213,
          0x221, 0x222, 0x223,
          0x231, 0x232, 0x233,
          
          0x311, 0x312, 0x313,
          0x321, 0x322, 0x323,
          0x331, 0x332, 0x333,
          0
        };
        int main(void) {
          uint64_t i = 0, n = nt[i++];
          while(({
            fprintf(stderr, "%s - %s - %s\n", t[n & 0x300], t[n & 0x30], t[n & 0x3]);
            n = nt[i++];
          }));
        }


        Давай забенчим.
        Ответить
        • #include <stdio.h>
          
          #define A(M,Y,Z) M("кожа",Y,Z) M("мех",Y,Z) M("питух",Y,Z)
          #define B(M,Z) A(M,"красный",Z) A(M,"чёрный",Z) A(M,"белый",Z)
          #define C(M) B(M,"пальто") B(M,"шапка") B(M,"носки")
          #define STR(X,Y,Z) Z "-" Y "-" X "\n"
          #define OUTPUT C(STR)
          
          int main(){
            fprintf(stderr, "%s", OUTPUT);
          }
          Ответить
          • Это балавство, а не понты.
            Ответить
            • Не понты или баловство, а всего лишь кратко записывающееся, быстро работающее, жрущее память, нерасширяемое, плохо читаемое решение поставленной задачи с царскими словами, уместное в определённых условиях.
              Ответить
              • >жрущее память
                Не жрёт память.

                >нерасширяемое
                Расширяемое.

                >плохо читаемое решение
                Нормально читается.

                >царскими словами
                Это не компил тайм гинер строки.
                Ответить
                • > Не жрёт память.
                  Как минимум, размер исполняемого файла раздувается (линейно от среднего размера слова, как степенная функция от количества среднего слов и экспоненциально от количества измерений; а в царском коде всё линейно). Для варианта ниже у меня он дошёл до ~55К вместо ~27K (для прошлого моего варианта).

                  > Расширяемое.
                  Да, расширяемое (см. код ниже).
                  Но я имел ввиду добавление слов/измерений во время исполнения, что может кому-нибудь пригодиться.

                  > Нормально читается.
                  Не всеми. По крайней мере, решение на пхп, которому посвящён сей пост, читается гораздо лучше, даже анскильными питушками, если они знают английский. Мой вариант не читается столь легко.

                  #include <stdio.h>
                  
                  #define O(M,Y,Z,T) M("большой",Y,Z,T) M("маленький",Y,Z,T) M("средний",Y,Z,T) M("огромный",Y,Z,T) M("гигантский",Y,Z,T)
                  #define A(M,Y,Z) O(M,"кожа",Y,Z) O(M,"мех",Y,Z) O(M,"питух",Y,Z) O(M,"дерево",Y,Z) O(M,"сталь",Y,Z) O(M,"камень",Y,Z)
                  #define B(M,Z) A(M,"красный",Z) A(M,"чёрный",Z) A(M,"белый",Z) A(M,"зелёный",Z) A(M,"синий",Z) A(M,"красный",Z)
                  #define C(M) B(M,"пальто") B(M,"шапка") B(M,"носки") B(M,"пиждак") B(M,"свитер") B(M,"перчатки")
                  #define STR(X,Y,Z,T) T "-" Z "-" Y "-" X "\n"
                  #define OUTPUT C(STR)
                  
                  int main(){
                    fprintf(stderr, "%s", OUTPUT);
                  }
                  Ответить
                  • >Как минимум, размер исполняемого файла раздувается (линейно от среднего размера слова, как степенная функция от количества среднего слов и экспоненциально от количества измерений; а в царском коде всё линейно)

                    Упоролся чтоли - твой код жрёт меньше, чем процесс пхп. Посчитай, сколько тебе надо захреначить таких макросов, чтобы хотябы приблизится к бинарнику php интерпритатора. Напомню - твой код еле-еле весит чуть больше 2кбайт. Бинарь пхп интерпритатора почти 9метров.

                    Какие там у тебя 27kb - ода портянка того когда, что в ГК весит овер 2килобайта.

                    Сожми строку.

                    >Но я имел ввиду добавление слов/измерений во время исполнения, что может кому-нибудь пригодиться.
                    Повторю ещё раз - в 85% случаев добавление слов не нужно.


                    >Не всеми. По крайней мере, решение на пхп, которому посвящён сей пост, читается гораздо лучше, даже анскильными питушками, если они знают английский. Мой вариант не читается столь легко.
                    Питухи меня не интересуют.
                    Ответить
                    • > сколько тебе надо захреначить таких макросов
                      Скажем, 7 измерений по 8 слов по 5 байт дадут 5*8^7=5*2^21=10 мегабайт без учёта дефисов. А размер исходника изменится при этом раза в четыре.

                      > Какие там у тебя 27kb
                      Действительно, в первом варианте длина строки - 495. Вероятно, какая-то виндомагия. Остаётся только понять и простить. Но строка из второго варианта - 31536 символов.

                      > Сожми строку.
                      Это сам исполняемый файл сжимать? Или ещё как-то? (правда, если сжимать-разжимать в проге, то легче вернуться к массивам)
                      Ответить
                      • На самом деле про 10МБ я наврал. Там выходит 8^7 комбинаций по 5*7 байт, т.е. 70МБ.

                        7 измерений по 6 слов по 5 байт - 9.3МБ, или 11.2МБ с "-" и "\n".
                        Ответить
                      • >Скажем, 7 измерений по 8 слов по 5 байт дадут 5*8^7=5*2^21=10 мегабайт без учёта дефисов. А размер исходника изменится при этом раза в четыре.
                        10мегобайт - ты приблизился к бинарю php -ты что анскильный такой. Ты зачем про память кукарекаешь, если несёшь тотальную херню - возьми пхп - запусти тот скрипт из 1-й строки - удивись.

                        >Действительно, в первом варианте длина строки - 495. Вероятно, какая-то виндомагия. Остаётся только понять и простить. Но строка из второго варианта - 31536 символов.
                        У тебя ещё меньше должно быть - у тебя не православный утф8, а говно маздайское по 8байт на символ.

                        >Это сам исполняемый файл сжимать? Или ещё как-то? (правда, если сжимать-разжимать в проге, то легче вернуться к массивам)
                        На нормальных ФС, а не на твоём маздайском говне - этот файл на 100500твоих измерений будет весить меньше интерпритатора пхп. Чёй-то легче? За 2минуты хреначится.

                        Запили свою сжималку - задампь хешмап и массив, как сделал я в 1-м случае. Всё сжимается просто, а хреначится легко - а до тех объёмов памяти, которые жрёт пхп - это метров 30бинарей - у тебя есть наиогромнейший запас. А уж про пожирание оперативы твоим пхп я и говорить не буду.
                        Ответить
                        • > У тебя ещё меньше должно быть
                          Фиг знает, MinGW выдаёт 23098Б для main.exe, созданного с помощью
                          echo int main(){} > main.c && gcc main.c -o main.exe


                          > На нормальных ФС, а не на твоём маздайском говне - этот файл на 100500твоих измерений будет весить меньше интерпритатора пхп.
                          Семимерный вариант для 6 слов "питу1", "питу2", "питу3", ..., "пит42" в 1251 весит, как было обещано - 11.2МБ, сжался средствами NTFS до 2.1МБ, то есть всё ОК (меньше пхп), хоть и совсем не фонтан.

                          > Чёй-то легче?
                          Для сравнения, в *.7z та же питушня весит 58.9КБ.
                          Несколько массивов со словами - самый эффективный вариант сжатия той последовательности, которую надо выдать на выходе. И "разархивирование" её даже многомерным фором скорее всего будет быстрее, чем пляски с архиватором. И сам исполняемый файл будет даже у меня меньше.

                          > у тебя есть наиогромнейший запас
                          Опять же, на малом количестве слов/измерений.
                          Напомню, что он оценивается как n*l*m^l символов, где n - длина слова, l - количество измерений, m - количество слов.
                          Ответить
                          • Прилинкуй упаковщик экзешника
                            Ответить
                          • Да никому не нужны твои строки - пойми ты. Накой из этих питушков большие строки в жизне не видел.

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

                            Когда люди гинерят и работают со стоками по 10метров - там никакого пхп, и питухов нет.
                            Ответить
        • uint64_t nt[] = {
            0x111, 0x112, 0x113,
            0x121, 0x122, 0x123,
            0x131, 0x132, 0x133,
            
            0x211, 0x212, 0x213,
            0x221, 0x222, 0x223,
            0x231, 0x232, 0x233,
            
            0x311, 0x312, 0x313,
            0x321, 0x322, 0x323,
            0x331, 0x332, 0x333,
            0
          };
          Цари не признают циклов и всегда закатывают солнце руками, потому что так перфоманс выше?
          Ответить
          • Да.
            Ответить
            • > Цари всегда закатывают солнце руками?
              Ты не поверишь, но Цари напрягают подчиненных, чтобы те горбатились за еду.
              Ответить
              • Не цари, а говнори. Царь - это Царь всего сущего, то, что ты понимаешь под царём - рядовой говнарь. Царь питухов, со свитой питухов.
                Ответить
                • А в реале прыщавый школьник сидит перед компом в грязной комнате, засраной хрущевки.
                  Илита интернетов.
                  Ответить
                  • Сливалка - убеги в страхе, тебя ждут в темах про паскаль - там пацаны оценят твой скилл.
                    Ответить
          • Теперь ждём для сорокамерного массива на миллион значений.
            Явсегдабудучитатьтреддоконца.Явсегдабуду читатьтреддоконца.Явсегдабудучитатьтредд оконца.
            Ответить
        • Ну так не пойдет. У тебя не во время рантайма или даже не во время компайлтайма решены некоторые задачи, а именно во время кодогентайма (а точнее кодеврайттайма, что ещё груснее). А именно выделена память и уже заполнена конкретными данными, а даже в массив записано решение. Ты производительность fprintf будешь замерять. А если понадобится поменять (я уж не говорю о числе перемножаймых декартовым произведением множеств) то ты даже количество данных в одном любом множестве не сможешь поменять, не перекомпилируя приложение и не поменяв t и nt и прочие магические константы.
          Ответить
          • Это можно гинерить хоть в каком тайме, просто питухи этого не понимают. Любое число - это даже и не 10% от того, что можно выжать.
            Ответить
        • uint64_t nt[] = {
          0x111, 0x112, 0x113,
          0x121, 0x122, 0x123,
          0x131, 0x132, 0x133,

          0x211, 0x212, 0x213,
          0x221, 0x222, 0x223,
          0x231, 0x232, 0x233,

          0x311, 0x312, 0x313,
          0x321, 0x322, 0x323,
          0x331, 0x332, 0x333,
          0
          };

          Внезапно, количество элементов в каждой категории стало 100 и код превращается в...
          Ответить
          • ... сгенерированную скриптом таблицу ;)
            Ответить
          • Если елементов будет в каждой категории 256 - мне будет ещё легче. Никаких скриптов и прочего.

            Вы даже идею не поняли, анскилледы:

            const char * c[] = {
              "посрал", "херню написал", "минуснул пацана", "плюсанул питуха"
            };
            const char * b[] = {
              "Зашел к Царю", "Новое говно открыл", "говно на паскале написал", "говно попаказал"
            };
            const char * a[] = {
              "питух", "тотальная анскильность", "животинушка", "днина делфятская"
            };
            const char * name[] = {
              "Тарас", "роман", "икарус-гей", "хаскель-говно"
            };
            
            int main(void) {
              uint64_t i = 0x0;
              do {
                fprintf(stderr, "%s - %s - %s - %s\n", name[((i >> 6) & 3)], a[((i >> 4) & 3)], b[((i >> 2) & 3)], c[i & 3]);
              } while(++i != 0x1000);
              return 0;
            }
            Ответить
        • А на троичных компах это можно было бы сделать в лоб без лишнего массива...
          Ответить
          • Почему?
            Ответить
            • #include <stdio.h>
              #include <inttypes.h>
              
              char * t[] = {
                [0]  = NULL,
                [1]  = "кожа",     [2]  = "мех",    [3]  = "питух",
                [4]  = "красный" , [8]  = "чёрный", [12] = "белый",
                [16] = "пальто",   [32] = "шапка",  [48] = "носки"
              };
              
              int main(void) {
                size_t n = 0;
                while(
                  (t[n & 0x3] && t[n & 0xC] && t[n & 0x30])?
                    fprintf(stderr, "%s - %s - %s\n", t[n & 0x3], t[n & 0xC], t[n & 0x30]):0,
                  !(n++ >> 6));
                return 0;
              }
              http://ideone.com/snjckr

              Пришлось применить двоичную систему для эмуляции троичной, поэтому цикл пробегает 64 значения (4×4×4) вместо 27 (3×3×3). А если бы была троичная система, программа бы была в ≈2,37 раза быстрее!
              Ответить
              • P.S. Оптимизация, чтобы лишний раз не лазить в память и не гонять цикл вхолостую:
                while(
                    n=(n & 0x30)?n:n+0x10,
                    n=(n & 0x0C)?n:n+0x04,
                    n=(n & 0x03)?n:n+0x01,
                    fprintf(stderr, "%s - %s - %s\n", t[n & 0x3], t[n & 0xC], t[n & 0x30]),
                    !(n++ >> 6));
                http://ideone.com/aoyZIO
                Ответить
    • Тут собрать бы в кучу, вроде в другом треде кто-то предлагал еще руссификатор для естесственных языков, который вставлял "сука" после каждого второго слова. Было бы гораздо лучше, если бы генератор генерироравл:
      "конь, сука, пальто, сука, алюминий, бля!"
      Остальные варианты можно было бы не генерировать, заказчик все равно был бы доволен.
      Ответить
      • <?php
         
        $items = array('пальто','носки','шапки');
        $colors = array('красные','чёрные','белые');
        $materials = array('кожа','мех','питух');
        $all = array($items, $colors, $materials);
         
        $used = array();
         
        while (count($used) < count($items) * count($colors) * count($materials)) {
          $item = rand(0, count($items) - 1);
          $color = rand(0, count($colors) - 1);
          $material = rand(0, count($materials) - 1);
          $triada = array($item, $color, $material);
         
          if (in_array($triada, $used)) continue;
          $used[] = $triada;
         
          $names = array_map(function($value, $key) {return $value[$key];}, $all, $triada);
          echo implode(', сука, ', $names) . ', бля!' . PHP_EOL;
        }
        Готово: http://ideone.com/7L8F86

        P.S. Код легко расширяется на произвольную размерность. Зря я явно три измерения перемножил, когда можно было использовать array_product...
        Ответить

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