Помогите сгенерировать на PHP

Discussion in 'PHP' started by Vlad&slav, 1 Jun 2010.

  1. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    нужно задать функцию перевода в систему счисления со своими символами
    типа я задаю символы "q 6 f 8"
    тогда число 3 будет выглядеть как "f" а 4 как "8"

    типа кудато сюда копать
    PHP:
    function gen($a)
    {

    $alf 'A B C D E F G H I K L M N O P Q R S T V X Y Z';
    $malf explode(' '$alf);
    $count count($malf);
    while(
    пока не поделим всё число){
    $div $a $count;
    $div substr($div0strrpos($div','));
    $mod $a $count;
    вышитываем символ...
      {

    }

    echo 
    gen(3255);

    или может есть другой путь?
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Vlad&slav четче сформулируйте задание. О каких числах идет речь? Требуется сделать простую замену всех цифр на некторый набор символов? То есть на входе например "1331" А на выходе будет "acca"?

    Тогда читайте про функцию strtr:
    PHP:
    $val 1331;
    echo 
    strtr((str$val'0123456789''abcdefghij');
    // Или если требуется заменять только некоторые символы:
    echo strtr((str$val, array('1' => 'a'));
     
    _________________________
  3. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Он имеет ввиду в 16-ой системе 0-9A-F, в 17-ой 0-9A-G и так далее

    решение на си сойдет?)
     
    #3 Chaak, 1 Jun 2010
    Last edited: 1 Jun 2010
  4. wildshaman

    wildshaman Elder - Старейшина

    Joined:
    16 Apr 2008
    Messages:
    478
    Likes Received:
    483
    Reputations:
    99
    Гифтс, не
    К примеру, в двоичной системе набор такой: "0 1"
    В восьмиричной: "0 1 2 3 4 5 6 7"
    В шестнадцатиричной: "0 1 2 3 4 5 6 7 8 9 A B C D E F"

    ТСу надо задавать такой набор своими символами и переводить в свою такую систему.
    Вообще, код там прост, но писать так влом :(
     
    2 people like this.
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    То как говорит Chaak:
    PHP:
    echo base_convert((int) $val1036);
    Как говорит wildshaman
    PHP:
    function some_trash($val$from=10 ,$base=-1$replacement='ABCDEFGHIKLMNOPQRSTVXYZ!"№;%:?*()')
    {
    $base $base <= count($replacement) : $base;
    if (
    strlen($replacement)<$base) return false;
    $tr_from substr('0123456789ABCDEFGHIKLMNOPQRSTVXYZ'0$base);
    return 
    strtr((string) base_convert($val$from$base), $tr_from$replacement);
    }
    echo 
    some_trash(501016);
     
    _________________________
    3 people like this.
  6. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Возьми код какого-нибудь укорачивателя ссылок, они по схожей системе работают...
     
    1 person likes this.
  7. TRX.new

    TRX.new Member

    Joined:
    27 Apr 2009
    Messages:
    151
    Likes Received:
    21
    Reputations:
    0
    Мне почему-то кажется, что это тут вообще ниочем:)
     
    1 person likes this.
  8. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Ну, перевести в другую систему счисления используя свой алфавит
     
    1 person likes this.
  9. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    Задача была как сказал шаман,
    объясните пожалуйста алгаритм
     
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Vlad&slav с помощью base_convert переменная преобразуется к нужной системе счисления. Дальше командой strtr символы полученного числа преобразуются соответственно со строкой замены ($replacement).

    Например $replacement = 'abcdefghijklm' тогда 0 будет заменен на а, 1 на b и так далее
     
    _________________________
    1 person likes this.
  11. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9

    А если я задам ряд символов для создания системы счисления больше чем strlen(0123456789ABCDEFGHIKLMNOPQRSTVXYZ)
    тогда твой код вроде как работать не будет ?
    возмождно ли реализовать через while?
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Vlad&slav второй раз - сформулируйте задание и с какой целью оно вам надо
     
    _________________________
  13. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    Формулирую.
    Каждая сис.счисления задаётся какимто набором символов(строк), например двоичная 0 и 1
    Мне нужна функция для получения n-ного члена системы счисления набор символов которой я задам сам (задам массивом).
    Функция принимает 2 параметра: n и массив набора символов(строк)(любого количества).
    Нужная система счисления будет образовываться из элементов массива и основанием = количеству элементов массива.
    Функция вернёт n-ный член этой системы счисл.

    PHP:
    function (array('a''[g]''[!]''5''}''+''[v]''[ab]'), '10744')
    {
    ......
    return 
    // функция по идеи должна вернуть [!]}[ab][ab]a 
    }
    С целью криптографии
     
  14. emmy

    emmy Member

    Joined:
    12 Oct 2009
    Messages:
    76
    Likes Received:
    17
    Reputations:
    8
    Эта задача называется nth permutation и у нее есть стандартное решение. К криптографии это имеет весьма опосредованное отношение.
     
    2 people like this.
  15. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
  16. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    а в чём проблема?
    PHP:
    function dec2hz($Ahz,$Dec){
        for(
    $hz=count($Ahz),$i=1;$Dec>=pow($hz,$i);$i++){/*© ROX ®*/}
        for(
    $i--,$dc=abs($Dec),='';$i>=0;$i--){
            
    $sl=pow($hz,$i);
            
    $kk=floor($dc/$sl);
            
    $dc-=$kk*$sl;
            
    .=$Ahz[$kk];
        }
        return 
    ;
    }
    echo 
    dec2hz(array('a''[g]''[!]''5''}''+''[v]''[ab]'),10744);
    конечно, всё можно сделать куда проще бональным делением... но это слишком просто :)
     
    #16 roxblnfk, 3 Jun 2010
    Last edited: 3 Jun 2010
    1 person likes this.