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

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    <?php
    
    function split_hash($hash, $sizes) {
        $cnt = count($sizes);                   // количество словарей
        $partSize = floor(128/4/$cnt);          // размер части хэша в тетрадах
        $result = array();
        foreach($sizes as $size) {
            $tmp = substr($hash, 0, $partSize); // разбиваем хэш по тетрадам на равные части
            $hash = substr($hash, $partSize);   
            $result[] = gmp_intval(gmp_mod(gmp_init($tmp, 16), $size)); // возвращаем остаток от деления фрагмента хэша 
                                                                        // на размер словаря
        }
        return $result;
    }
    
    function R($hash, $dicts) {
        $sizes = array_map(function($val){return count($val);}, $dicts); // получаем размеры каждого словаря
        $indices = split_hash($hash, $sizes);
        $result = '';
        foreach($indices as $dictNumber=>$index) {
            $result .= $dicts[$dictNumber][$index]; // сцепляем слово из частей
        }
        return $result;
    }
    
    function make_chain($start, $length, $dicts) {
        for($i = 0; $i < $length; ++$i) {
            $hash = md5($start);
            echo $hash . ' : ' . $start . PHP_EOL;
            $start = R($hash, $dicts);
        }
    }
    
    make_chain('свинособака', 10, array(
          array('свино',  'овце', 'тигро', 'косатко', 'зубро', 'волко', 'кото'),
          array('собака', 'бык',  'лев',   'дельфин', 'бизон')
    ));

    Выводит:

    360629d3cf05cee0240a23e1251c58a0 : свинособака
    1f7ad860b089c0e1141de02ac1e6e3ef : волкобизон
    6f2e4e3025c9dd840f1fa4a78792ef31 : котобизон
    d5812761186013ecca674a2704d5a081 : зубробык
    b4499d259156939bb74cbc1743632c8d : овцебизон
    c28ad194fcc581f538d109f8acb6b1f5 : волкобык
    663a3e06c88185db8fd4f81829e66b85 : котодельфин
    30bb70e972bf073c7aa4ec93c8d5b9a0 : косаткодельфин
    cc31cd8554c1add0128013bba2e47317 : волколев
    d88e78b7340637370628848b1957b4c2 : котособака


    http://ideone.com/rxqpj1

    Запостил: ropuJIJIa, 10 Октября 2019

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

    • SEO-пост: #HRT
      Ответить
    • Переведи на делфи.
      Ответить
    • показать все, что скрытоОтца троих детей, россиянина СИДОРОВА захотели лишить родительских прав из-за отсутствия дома телевизора.
      Ответить
    • показать все, что скрытоУ одинокого отца хотят отнять детей за нарушение местных традиций — у них нет телевизора
      update: 10-10-2019 (16:02)

      Комиссия по делам несовершеннолетних (КДН) Хворостянского района Самарской области намерена лишить жителя села Новотулка Ивана Сидорова родительских прав. Основанием стала жалоба на знание его сыновьями иностранных языков и основ вязания крючком, сообщил 10 октября корреспондент Каспаров.Ru.

      Отца вызвали на комиссию по делам несовершеннолетних и обвинили в "неисполнении родительских обязанностей" на основании жалоб родителей учеников местной школы. Они заявили, что трое детей Сидорова "неправильно влияют" на их детей. Сидоровы переехали в Новотулку, где живет немногим более тысячи жителей, три года назад. После развода отец один воспитывает трех мальчиков 15, 13 и 11 лет. Мужчина преподает психологию, ранее семья жила в Боснии, поэтому дети знают иностранные языки.

      На заседании КДН отца обвинили в том, что дома нет телевизора и дети не знают, кто такой Чебурашка и кот Леопольд. А средний сын Степан умеет вязать крючком, и, значит, он нетрадиционной ориентации.

      Ивану заявили, что он и его дети должны уважать и принимать традиции того места, где они живут.
      Ответить
    • Кстати, на 15-м значении обнаруживается цикл, в цикле будут повторяться 11 значений:
      360629d3cf05cee0240a23e1251c58a0 : свинособака
      1f7ad860b089c0e1141de02ac1e6e3ef : волкобизон
      6f2e4e3025c9dd840f1fa4a78792ef31 : котобизон
      d5812761186013ecca674a2704d5a081 : зубробык
      b4499d259156939bb74cbc1743632c8d : овцебизон
      c28ad194fcc581f538d109f8acb6b1f5 : волкобык
      663a3e06c88185db8fd4f81829e66b85 : котодельфин
      30bb70e972bf073c7aa4ec93c8d5b9a0 : косаткодельфин
      cc31cd8554c1add0128013bba2e47317 : волколев
      d88e78b7340637370628848b1957b4c2 : котособака
      def62adbda251428917a1691fed093f6 : свинодельфин
      4531af90a0ce028f612afbd37443e761 : свинобизон
      eb4bbce08370b27ab5f655260a0f87be : свинолев
      189c59833bcd27e05459b733e8cfd228 : зубрособака
      d5812761186013ecca674a2704d5a081 : зубробык
      b4499d259156939bb74cbc1743632c8d : овцебизон
      Ответить
    • показать все, что скрытоhttps://pbs.twimg.com/media/EGd9JOWWsAArnop.jpg
      Ответить
    • показать все, что скрытоЛишнехромосомный нашел dissociated press и хочет кого-то этим удивить.
      Ответить
    • Где-то однажды появился на свет
      С лаем и хрюканьем зверь, каких нет
      И тут же схрюкнул, оставив вопрос,
      Собачье-свинячий малыш Свинопес.

      Свинопеееееееес, Свинопес!
      Ответить
    • Объясни на словах что делает функция make_chain.
      Ответить
    • показать все, что скрытоАхах
      https://pbs.twimg.com/media/ECLMnmEXUAAqQcF.png
      Ответить
      • Кто-нибудь, расшифруйте то что там написяно.
        Ответить
        • Не отвечай на его коменты, питушочек.
          Ответить
        • показать все, что скрытоДержи OCR

          На митинге КПРФ выступил сын рок-музыканта Игоря Талькова — Игорь Тальков-младший. Свою речь он начал с того, что отец всю жизнь был против коммунистов, а он здесь. Также на акцию коммунистов "За честные выборы" пришел протоиерей Чаплин.

          Тоталитаристы за честные выборы. Карл.
          Поп Чаплин оппозиционер. В КПСС.
          Игорь Тальков коммунист.
          Страна не дураков, а гениев, блядь.
          Опустите мне веки.
          Я не могу больше это видеть.
          Ответить
    • Пробовал такие варианты:
      function split_hash($hash, $sizes) {
          $fullSize = array_reduce($sizes, function($carry,$item){return $carry*$item;}, 1); // произведение размеров словарей
          $prod = gmp_intval(gmp_mod(gmp_init($hash, 16), $fullSize));
          $result = array();
          foreach($sizes as $size) {
              $result[] = $prod % $size;
              $prod = floor($prod / $size);
          }
          return $result;
      }


      function split_hash($hash, $sizes) {
      //    $seed = gmp_intval(gmp_mod(gmp_init($hash, 16), gmp_add(PHP_INT_MAX,1))); // приводим хэш к интервалу 0...PHP_INT_MAX
          $seed = crc32(pack('h*', $hash));
          $fullSize = array_reduce($sizes, function($carry,$item){return $carry*$item;}, 1); // произведение размеров словарей
          mt_srand($seed);
          $prod = mt_rand(0, $fullSize - 1); // используем вихрь Мерсенна для получения числа в заданном интервале
          $result = array();
          foreach($sizes as $size) {
              $result[] = $prod % $size;
              $prod = floor($prod / $size);
          }
          return $result;
      }
      Ответить
      • Самый простой вариант:
        function split_hash($hash, $sizes) {
            $prod = gmp_init($hash, 16);
            $result = array();
            foreach($sizes as $size) {
                $result[] = gmp_intval(gmp_mod($prod, $size));
                $prod = gmp_div_q($prod, $size);
            }
            return $result;
        }
        Ответить
    • Примечательно, что в первом и втором массивах нет сходных значений, а то мог бы получиться какой-нибудь Moon Moon волковолк.
      Ответить

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