"PHP" / Говнокод #25925 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  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 ropuJIJIa, (Updated )

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

  • Отца троих детей, россиянина СИДОРОВА захотели лишить родительских прав из-за отсутствия дома телевизора.
    Ответить
  • У одинокого отца хотят отнять детей за нарушение местных традиций — у них нет телевизора
    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 : овцебизон
    Ответить
  • Лишнехромосомный нашел dissociated press и хочет кого-то этим удивить.
    Ответить
  • Где-то однажды появился на свет
    С лаем и хрюканьем зверь, каких нет
    И тут же схрюкнул, оставив вопрос,
    Собачье-свинячий малыш Свинопес.

    Свинопеееееееес, Свинопес!
    Ответить
    • Родился, и говорит: "и много за твое прыщеблядство платят, хуесосина анонимная?"
      Ответить
    • А не спеть ли мне песню
      проооо "PHP"
      про который я за, именно поэтому я заааа
      и на который я пеереевожу
      на "PHP"
      Ответить
      • "PHP"
        Скалится из "nginx",
        Входит в наши сны,
        "PHP"
        И мы ему верны.
        Вот и всё,
        Мир объят говном,
        Но не стихнет гром,
        "PHP" требует ещё-о.

        Ещё-о-о-о-о!
        Ответить
      • Держи 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 волковолк.
    Ответить

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

Из-за тебя ушел bormand, guest!

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


    8