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

Форум АНТИЧАТ (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 и так далее


Время: 19:42