[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разбить на группы и найти парные символы.
Chapollino86
Здравствуйте.
есть число $nomer его нужно разделить группами по три символа, но если в начале группы подряд идёт две 11 то группа из двух символов.
Подскажите как решить задачу?


<?php
$nomer = "010101010111110101010101101011010101";

$dlina = strlen($nomer); // strlen Возвращает длину строки.
for($i; $i < $dlina; $i=$i+3) {
$rez .= $nomer[$i].' ';
echo '<br>'.$rez;
}
?>


Вот код, но он вытаскивает по одному символу через три.... Совсем не то. :(
Ron
Чисто если в лобешник, то вот так:
<?php

$nomer = "010101010111110101010101101011010101";

if (substr($nomer, 0, 2) == 11) {
$group = 2;
} else {
$group = 3;
}

$output = str_split($nomer, $group);

print_r($output);


А, или вначале каждой группы?
AllesKlar
строка = "010011011011000110101"
слово = ""
цикл пока строка != "" :
если длина слова == 3 или слово == "11"
печать слово
слово = ""
конец если
слово = слово + первый символ строки
строка = строка без первого символа
конец цикл


Очень надеюсь, что это информатика в школе.

Ron
ответ сошелся? Для проверки:

$nomer = "010101010111110101010101101011010101";

010
101
010
11
11
101
010
101
011
010
11
010
101

Зачем вообще таким помогать готовыми решениями?
У человека сессия на носу, прогулял весь семестр, а теперь нет допуска к зачету, потому что лабораторки не сданы?
Ну так пусть в армию валит.
Написал бы честно - народ, помогите, бухал, отчисляют, горю, каюсь, обещаю....
Блин, задача - подготовительная группа детсада. У меня дочке 11 лет, она на уровне логики такие задачи сама решает.
Давай, не позорься, делай красивое решение, раз вписался. Рекурсия там или побитовые сдвиги.
Пусть препод ТС удивится :D

_____________
[продано копирайтерам]
Ron
AllesKlar, ну хорошо, уговорил. =)

<?php

$nomer = "010101010111110101010101101011010101";
preg_match_all('!11|\d{3}!', $nomer, $result);

print_r($result);


:D
Chapollino86
Результат немного не тот. :(
необходим вывод на экран 010 101 010 11 11 смещение пошло 101 01 01 01 01 10 101 101 010 1

Array ( [0] => 010 [1] => 101 [2] => 010 [3] => 111
[4] => 110 [5] => 101 [6] => 010 [7] => 101 [8] => 101
[9] => 011 [10] => 010 [11] => 101 )

это попытка написать архиватор, с без анализа энтропии.
Chapollino86
Ron Спасибо, Работает.
Chapollino86
Подскажите. Есть два массива как сделать замену?
например г => D


$al = Array("A","B","C","D","E","F");
$beta = Array("а","б","в","г","д","е");

AllesKlar
Chapollino86
Блядь, да отсканируй уже всю методичку, да выложи. Мы тебе за выходные перерешаем, делать все равно нехрен никому.

Ну, а если следовать традициям форума, то так:
показывай, как ты делаешь замену, мы поправим, если что не так.

_____________
[продано копирайтерам]
Ron
Цитата (AllesKlar @ 12.11.2016 - 23:35)
да отсканируй уже всю методичку, да выложи.

Добрее надо быть. =)

Chapollino86, теебе такой результат нужен? Просто условие задачи сформулировано несовсем четко.

$string = 'REPLACE абвгде 12фывфыв33';

$al = Array("A","B","C","D","E","F");
$beta = Array("а","б","в","г","д","е");

echo str_replace($beta, $al, $string);
//REPLACE ABCDEF 12фыCфыC33

P.s. бойся множественной замены. См. официальную документацию. http://php.net/manual/ru/function.str-replace.php

Но так, между нами, ЯП, выбранный для создания архиватора мягко говоря не тот. ;)

Chapollino86
Цитата (AllesKlar @ 12.11.2016 - 23:35)
Блядь, да отсканируй уже всю методичку, да выложи. Мы тебе за выходные перерешаем, делать все равно нехрен никому.

Ну, а если следовать традициям форума, то так:
показывай, как ты делаешь замену, мы поправим, если что не так.

Методичка такая.
Большое число раскладывается по формуле (16+4)^3
000 16^3
001 16^2*4
010 16^2*4
011 16^2*4
100 16*4^2
101 16*4^2
110 16*4^2
111 2^3

потом обратная операция в исходное число.


index.php

<?php
session_start();
require_once('base_convert_y.php');
require_once('downarh.php');
require_once('uparh.php');

if ( isset ( $_POST['submit'] ) ) {
$numberInput = $_POST['numberInput'];
echo "<br>".$numberInput." сообщение<br>";
$downarh_0002 = downarh_0002 ($numberInput);
echo "<br>".$downarh_0002." Зашифрованое сообщение Функция downarh_0002<br>";
echo "<br>-----------------------------------------------------------<br>";
$numberOut = uparh_1113 ($downarh_0002);
echo "<br>".$numberOut." сообщение востановленое Функция OpenArh_2002<br>";
echo '<br /><br /><a href="index.php" title="Вернутся.">Вернутся..</a><br />';
exit;
}


echo '<form method="POST">
<b>Введите число для шифрования. в 10 системе исчисления.</b><br />
<input type="text" name="numberInput" value="01234567890123456789" size="100" /><br />'
;
echo '<input type="SUBMIT" value="Зашифровать" name="submit" /></form>';
?>



base_convert_y.php

<?php
function
base_convert_y($str, $frombase=10, $tobase=36) {
$str = trim($str);
if (intval($frombase) != 10) {
$len = strlen($str);
$q = 0;
for ($i=0; $i<$len; $i++) {
$r = base_convert($str[$i], $frombase, 10);
$q = bcadd(bcmul($q, $frombase), $r);
}
}

else $q = $str;

if (intval($tobase) != 10) {
$s = '';
while (bccomp($q, '0', 0) > 0) {
$r = intval(bcmod($q, $tobase));
$s = base_convert($r, 10, $tobase) . $s;
$q = bcdiv($q, $tobase, 0);
}
}

else $s = $q;

return $s;
}

?>



downarh.php

<?php
session_start();
require_once('base_convert_y.php');

function downarh_0002($str) {
$chislo = $str;
$chislo = base_convert_y($chislo, 20, 10);
echo $chislo." <br>";

preg_match_all('!\S{3}!', $chislo, $result);


for ($i=0; $i< count($result[0]); $i++) {
$rez = "";
$per = $result[0][$i];

preg_match_all('!\S{1}!', $per, $znach);
for ($ii=0; $ii< count($znach[0]); $ii++) {
if ($ii == 0) $x = $znach[0][$ii];
if ($ii == 1) $y = $znach[0][$ii];
if ($ii == 2) $z = $znach[0][$ii];
}
$x = base_convert_y($x, 20, 10);
$y = base_convert_y($y, 20, 10);
$z = base_convert_y($z, 20, 10);

if ($x > 3 & $y > 3 & $z > 3) {
$x = $x - 4;
$x = base_convert_y($x, 10, 2);
$y = $y - 4;
$y = base_convert_y($y, 10, 2);
$z = $z - 4;
$z = base_convert_y($z, 10, 2);

if ($x < 1000) $x = "0".$x;
if ($x < 100) $x = "0".$x;
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 1000) $y = "0".$y;
if ($y < 100) $y = "0".$y;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 1000) $z = "0".$z;
if ($z < 100) $z = "0".$z;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;

$xyz = $x.$y.$z;
$rez.= "111".$xyz;

}elseif ($x < 4 & $y < 4 & $z < 4) {

$x = base_convert_y($x, 4, 2);
$y = base_convert_y($y, 4, 2);
$z = base_convert_y($z, 4, 2);
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "000".$xyz;
}

if ($x > 3 & $y < 4 & $z > 3) {
$x = $x - 4;
$x = base_convert_y($x, 10, 2);
$y = base_convert_y($y, 4, 2);
$z = $z - 4;
$z = base_convert_y($z, 10, 2);
if ($x < 1000) $x = "0".$x;
if ($x < 100) $x = "0".$x;
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 1000) $x = "0".$x;
if ($z < 100) $x = "0".$x;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "101".$xyz;
}elseif ($x < 4 & $y > 3 & $z < 4) {
$x = base_convert_y($x, 4, 2);
$y = $y - 4;
$y = base_convert_y($y, 10, 2);
$z = base_convert_y($z, 4, 2);
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 1000) $y = "0".$y;
if ($y < 100) $y = "0".$y;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "010".$xyz;
}


if ($x < 4 & $y > 3 & $z > 3) {
$x = base_convert_y($x, 4, 2);
$y = $y - 4;
$y = base_convert_y($y, 10, 2);
$z = $z - 4;
$z = base_convert_y($z, 10, 2);
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 1000) $y = "0".$y;
if ($y < 100) $y = "0".$y;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 1000) $z = "0".$z;
if ($z < 100) $z = "0".$z;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "011".$xyz;
}elseif ($x > 3 & $y < 4 & $z < 4) {
$x = $x - 4;
$x = base_convert_y($x, 10, 2);
$y = base_convert_y($y, 4, 2);
$z = base_convert_y($z, 4, 2);
if ($x < 1000) $x = "0".$x;
if ($x < 100) $x = "0".$x;
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "100".$xyz;
}



if ($x > 3 & $y > 3 & $z < 4) {
$x = $x - 4;
$x = base_convert_y($x, 10, 2);
$y = $y - 4;
$y = base_convert_y($y, 10, 2);
$z = base_convert_y($z, 4, 2);
if ($x < 1000) $x = "0".$x;
if ($x < 100) $x = "0".$x;
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 1000) $y = "0".$y;
if ($y < 100) $y = "0".$y;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "110".$xyz;
}elseif ($x < 4 & $y < 4 & $z > 3) {
$x = base_convert_y($x, 4, 2);
$y = base_convert_y($y, 4, 2);
$z = $z - 4;
$z = base_convert_y($z, 10, 2);
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 1000) $z = "0".$z;
if ($z < 100) $z = "0".$z;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "001".$xyz;
}





$final.= $rez."";
}

echo $final." <br>";
$final = base_convert_y($final, 2, 20);
echo $final." <br>";
$final = base_convert_y($final, 20, 10);
return $final;
}
?>

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.