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

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
<?php
// Создаём функцию struktura_array (массив со значениями)
function struktura_array($mas) {
//Подсчитываем количество значений в массиве $mas
$col_el = count($mas);
//Подсчитываем количество всевозможных вариантов по формуле 2^n – 1, n = $col_el
$col_zn = pow(2,$col_el)-1;

//Делаем цикл до $i = $col_zn
for ($i=1; $i <= $col_zn; $i++) {
//выполняем преобразование числа $i в двоичную систему
 $dlina_i_bin = decbin($i);
//Дописываем нули в левую часть на длину $col_el
 $zap_str = str_pad($dlina_i_bin, $col_el, "0", STR_PAD_LEFT);
//Переворачиваем $zap_str
 $zap_dop = strrev($zap_str);
 $dooh = array();
//Преобразуем $zap_dop в массив вида Array (0=>"0", 1=>"1", 2=>"1", 3=>"0", 4=>"0")
 for($j=0; $j < $col_el; $j++) {
 $dooh[] = $zap_dop[$j];
 }
//Обнуляем $d и $a чтоб при следующем проходе цикла они были пустыми
 $d = 0; $a = "";
//Теперь самое интересное
//Итерируем по массиву $dooh и выдергиваем значения (либо 1 либо 0)
 foreach ($dooh as $k=>$v) {
//Если выдернули 1 то в массив $a записываем значение с соответствующим ключом
   if ($v == 1) {$a[] .= $mas[$d];}
//Увеличиваем ключ на единицу для перехода по массиву
   $d++;
 }
 $return[] = $a;
}

return $return;
}

Запостил: qbasic qbasic, (Updated )

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

  • автор видимо зарплату за комментарии к коду получает а не за сам код.
    Ответить
    • Кстати, есть где-нибудь сейчас построчная оплата кода?
      Ответить
      • не знаю 🙂
        да и вообще первый раз слышу об этом, а такое что бывает(ло) ?
        Ответить
        • бывает. мы один раз с такими немцами работали. эти пидарасы сделали по 10 наследоований классов пустышек.
          мол кода дохуя - значит работа сделана. ага
          Ответить
          • они захотели больше заработать чем на своем порно 🙂
            Ответить
            • да, только этот проект нам на дописывание дали.
              немцы доигрались до того что сами скомпилировать уже его не осиливали. мы сделали скрипты сборки.
              собираться то оно собиралось :))
              но вот переписывать.... проще было заново написать.
              Ответить
  • бля!!! да ведь автор забыл написать

    //возвращаем массив $return
    return $return;

    как же он теперь в своем коде разберется?
    Ответить
  • Реализация не очень, а вот алгоритм интересный.
    Переписал на C# ООП более-менее. Может быть, кому пригодится. Прошу не пинать.
    public class UniqueCombination<T>
    {
    /*Все элементы находятся только в своих позициях, сочетания отличаются только присутствием/отсутствием конкретных элементов.
    * Алгоритм взят отсюда: sources.ru/magazine/1207/5.html
    * Переделал на ООП. Вместо цикла сделал GetNext(), упростил.*/
    T[] _array;
    int _maskNumber = 0;

    public UniqueCombination(T[] array)
    {
    _array = array;
    }

    public T[] GetNext()
    {
    var permutation = GetPermutationByNumber(_array, _maskNumber);
    _maskNumber++;
    return permutation;
    }

    public static T[] GetPermutationByNumber(T[] array, int number)
    {
    var binaryMask = GetPermutationMask(number, array.Length);
    var permutation = GetPermutationByMask(array, binaryMask);
    return permutation;
    }

    static bool[] GetPermutationMask(int maskNumber, int arrayLength)
    {
    //var col_zn = (int)Math.Pow(2, arrayLength) - 1;
    var mask = Convert.ToString(maskNumber, 2);
    // var zap_dop = zap_str.Reverse().ToArray();

    bool[] binaryMask = new bool[arrayLength];
    for (int i = 0; i < mask.Length; i++)
    {
    binaryMask[i] = (mask[i] == '1');
    }

    return binaryMask;
    }

    static T[] GetPermutationByMask(T[] array, bool[] binaryMask)
    {
    var permutation = new T[array.Length];
    for (int k = 0; k < binaryMask.Length; k++)
    {
    if (binaryMask[k])
    {
    //Записываем элемент в перестановку
    permutation[k] = array[k];
    }
    }
    return permutation;
    }
    }
    Ответить
    • Точнее так:
      public class UniqueCombination<T>
      {
      /*Все элементы находятся только в своих позициях, сочетания отличаются только присутствием/отсутствием конкретных элементов.
      * Алгоритм взят отсюда: http://sources.ru/magazine/1207/5.html
      * Переделал на ООП. Вместо цикла сделал GetNextCombination(), упростил.*/
      T[] _array;
      int _maskNumber = 0;
      public UniqueCombination(T[] array)
      {
      _array = array;
      }
      public T[] GetNextCombination()
      {
      var combination = GetCombinationByNumber(_array, _maskNumber);
      _maskNumber++;
      return combination;
      }
      public static T[] GetCombinationByNumber(T[] array, int number)
      {
      var binaryMask = GetCombinationMask(number, array.Length);
      var combination = GetCombinationByMask(array, binaryMask);
      return combination;
      }
      static bool[] GetCombinationMask(int maskNumber, int arrayLength)
      {
      //Подсчитываем количество всевозможных вариантов
      //var col_zn = (int)Math.Pow(2, arrayLength) - 1;
      var mask = Convert.ToString(maskNumber, 2);
      //Переворачиваем (не нужно, походу)
      // var zap_dop = zap_str.Reverse().ToArray();
      bool[] binaryMask = new bool[arrayLength];
      for (int i = 0; i < mask.Length; i++)
      {
      binaryMask[i] = (mask[i] == '1');
      }
      return binaryMask;
      }
      static T[] GetCombinationByMask(T[] array, bool[] binaryMask)
      {
      var combination = new T[array.Length];
      for (int k = 0; k < binaryMask.Length; k++)
      {
      //Если маска этого элемента true,
      //то в массив записываем его в перестановку
      if (binaryMask[k])
      {
      combination[k] = array[k];
      }
      }
      return combination;
      }
      }
      Ответить
      • Ну ваша-то реализация гораздо лучше, лол. Особенно порадовал GetCombinationMask. Ну и это уж точно не перестановки (permutations), на лицо рука попытка генерации всех подмножеств заданного множества.
        Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8