Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Помогите сгенерировать на PHP (https://forum.antichat.xyz/showthread.php?t=208355)

Vlad&slav 01.06.2010 13:02

Помогите сгенерировать на PHP
 
нужно задать функцию перевода в систему счисления со своими символами
типа я задаю символы "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); 

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

Gifts 01.06.2010 13:30

Vlad&slav четче сформулируйте задание. О каких числах идет речь? Требуется сделать простую замену всех цифр на некторый набор символов? То есть на входе например "1331" А на выходе будет "acca"?

Тогда читайте про функцию strtr:
PHP код:

$val 1331;
echo 
strtr((str$val'0123456789''abcdefghij');
// Или если требуется заменять только некоторые символы:
echo strtr((str$val, array('1' => 'a')); 


Chaak 01.06.2010 13:45

Он имеет ввиду в 16-ой системе 0-9A-F, в 17-ой 0-9A-G и так далее

Цитата:

http://www.cyberforum.ru/cpp-beginners/thread65570.html
решение на си сойдет?)

wildshaman 01.06.2010 13:51

Гифтс, не
К примеру, в двоичной системе набор такой: "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"

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

Gifts 01.06.2010 14:16

То как говорит 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); 


OdaN 01.06.2010 14:17

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

TRX.new 01.06.2010 14:21

Цитата:

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

Мне почему-то кажется, что это тут вообще ниочем:)

Chaak 01.06.2010 15:26

Цитата:

Сообщение от Gifts
То как говорит 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); 


Ну, перевести в другую систему счисления используя свой алфавит

Vlad&slav 01.06.2010 19:28

Задача была как сказал шаман,
объясните пожалуйста алгаритм

Gifts 01.06.2010 21:46

Vlad&slav с помощью base_convert переменная преобразуется к нужной системе счисления. Дальше командой strtr символы полученного числа преобразуются соответственно со строкой замены ($replacement).

Например $replacement = 'abcdefghijklm' тогда 0 будет заменен на а, 1 на b и так далее

Vlad&slav 01.06.2010 23:36

Цитата:

Сообщение от Gifts
Vlad&slav с помощью base_convert переменная преобразуется к нужной системе счисления. Дальше командой strtr символы полученного числа преобразуются соответственно со строкой замены ($replacement).

Например $replacement = 'abcdefghijklm' тогда 0 будет заменен на а, 1 на b и так далее


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

Gifts 01.06.2010 23:52

Vlad&slav второй раз - сформулируйте задание и с какой целью оно вам надо

Vlad&slav 02.06.2010 10:03

Цитата:

Сообщение от Gifts
Vlad&slav второй раз - сформулируйте задание и с какой целью оно вам надо

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

PHP код:

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


С целью криптографии

emmy 02.06.2010 10:28

Эта задача называется nth permutation и у нее есть стандартное решение. К криптографии это имеет весьма опосредованное отношение.

Vlad&slav 03.06.2010 15:20

а?

roxblnfk 03.06.2010 16:33

а в чём проблема?
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); 

конечно, всё можно сделать куда проще бональным делением... но это слишком просто :)


Время: 08:47