Tekst criptie maken zoals dit : Vlgones een oznrdeeok op een Eglnese
Hoe maak ik dat ik een tekst die ingevoerd is zo verander dat van elk woord de eerste en de laatste letter goed staan. En dat de letters daartussen in willekeurige volgorde staan? Hoe zou ik dit kunnen maken?
Probeer eens iets, en kom dan eventueel terug met vragen over je code die je inelkaar geflanst hebt.
Maar dit haalt alleen de eerste en laatste letters weg. En het werkt niet eens. :(
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
if ($waarde == 4) {
$tekst = strrev($tekst);
$words = explode(' ',$tekst);
// reverse the array of words
$words = substr($words,0,-1);
$words = substr($words,1,1);
// rebuild the string
$tekst = join(' ',$words);
}
$tekst = strrev($tekst);
$words = explode(' ',$tekst);
// reverse the array of words
$words = substr($words,0,-1);
$words = substr($words,1,1);
// rebuild the string
$tekst = join(' ',$words);
}
Kun je klein beetje op weg helpen? Dat ik daarmee weer verder kan?
tnx alvast
stap 1: verkrijg alle worden in 1 array
stap 2: fiets door deze array heen
stap 3: roep functie aan
stap 3.1: bepaal 1ste en en laatste letter
stap 3.2: bepaal de letters die zitten tussen 1ste en laatste
stap 3.3: doe iets met het resultaat van 3.3
stap 3.4: zet resultaat van 3.1 bij het resultaat van 3.3
stap 3.5: geef resultaat van stap 3.4 terug
stap 4: alle woorden gehad, bouw de zin op
Ik kom eerlijk gezegd niet verder dan dit. Heb nu dus de losse woorden in een array. Via google kan ik tot nu toe ook niks vinden wat mij verder kan helpen.
Ik had ook nog dit maar dat werkt helaas niet
Code (php)
En dan:
Dat was niet zo moeilijk toch?
Ik snap je script zowiezo niet... Je wou dat het midden "willekeurig" gehusseld word dus waarom strrev? Dat draait het alleen om... En die explode is ook niet nodig..
Toevoeging op 30/04/2011 21:55:11:
O en voor en zin word het uiteraard zo:
Code (php)
Niet getest, maar volgens mij klopt het wel.
Dus dat 'hallo dit is een voorbeeld zin;
'hlalo dit is een vbeorlobed zin' word
Maar ik ga even kijken of het nu gaat lukken. Thnx
Toevoeging op 30/04/2011 22:02:06:
Bedankt het werkt nu inderdaad. Ik ga even precies kijken hoe het werkt. En kijken of ik het daarna soort gelijk kan scripten om te oefenen. En kijken of het me lukt om zelf te maken dat hij leestekens niet mee rekent als laatste teken. Thanx
Toevoeging op 01/05/2011 14:14:09:
Hey,
Ik heb nu met dit dat alle leestekens eruit worden gehaald
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if ($waarde == 4) {
function hussle($string)
{
$string = preg_replace('/[^a-z0-9]/i', '', $string);
$middle = str_shuffle(substr($string, 1, -1)); //Haalt 1e en laatste letter weg
return substr($string, 0, 1).$middle.substr($string, -1, strlen($string)); //Voeg de 1e letter, het midden en de laatste letter toe
}
$array = explode(" ", "$tekst");
$words = array();
foreach($array as $word) {
$words[] = hussle($word);
}
$tekst = implode(" ", $words);
}
function hussle($string)
{
$string = preg_replace('/[^a-z0-9]/i', '', $string);
$middle = str_shuffle(substr($string, 1, -1)); //Haalt 1e en laatste letter weg
return substr($string, 0, 1).$middle.substr($string, -1, strlen($string)); //Voeg de 1e letter, het midden en de laatste letter toe
}
$array = explode(" ", "$tekst");
$words = array();
foreach($array as $word) {
$words[] = hussle($word);
}
$tekst = implode(" ", $words);
}
Maar is er een mogelijkheid ze weer terug te zetten na het husselen?
Waarom zou je ze weg willen halen en terug plaatsen?
Dat is toch logisch? Eerst worden ze weg gehaald, dan wordt er per woord 1e en laatste letter bewaard en rest gehusseld. Dan word het woord weer gefixt. En dan wil ik dat de leestekens die er stonden weer terug gezet worden.
Op die manier.
Ik heb alleen het 1e bericht gelezen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$sString = 'De kat krapt de krullen van de trap, ja echt!';
if( preg_match_all('/[a-z0-9_-]{4,}/i', $sString, $aMatch) )
{
$aMatch[0] = array_unique($aMatch[0]);
$aReplace = array();
//print_r($aMatch[0]);
foreach( $aMatch[0] as $sWord )
{
$aReplace[] = $sWord[0] . str_shuffle(substr($sWord, 1, -1)) . $sWord[ strlen($sWord) - 1];
}
$sStringNew = str_replace($aMatch[0], $aReplace, $sString);
}
echo '$sString: ' , $sString ,
'<br />$sStringNew: ' , $sStringNew;
?>
$sString = 'De kat krapt de krullen van de trap, ja echt!';
if( preg_match_all('/[a-z0-9_-]{4,}/i', $sString, $aMatch) )
{
$aMatch[0] = array_unique($aMatch[0]);
$aReplace = array();
//print_r($aMatch[0]);
foreach( $aMatch[0] as $sWord )
{
$aReplace[] = $sWord[0] . str_shuffle(substr($sWord, 1, -1)) . $sWord[ strlen($sWord) - 1];
}
$sStringNew = str_replace($aMatch[0], $aReplace, $sString);
}
echo '$sString: ' , $sString ,
'<br />$sStringNew: ' , $sStringNew;
?>
Gewijzigd op 01/05/2011 22:41:41 door Martijn B
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
function ftinoucn($str) {
return preg_replace_callback('/\b\w{4,}\b/i', function($matches) {
$start = substr($matches[0], 0, 1);
$end = substr($matches[0], -1);
$middle = substr($matches[0], 1, -2);
return $start.str_shuffle($middle).$end;
}, $str);
}
?>
function ftinoucn($str) {
return preg_replace_callback('/\b\w{4,}\b/i', function($matches) {
$start = substr($matches[0], 0, 1);
$end = substr($matches[0], -1);
$middle = substr($matches[0], 1, -2);
return $start.str_shuffle($middle).$end;
}, $str);
}
?>
Weet niet of hij precies werkt. De substr's en de regex kloppen mss niet helemaal.
Gewijzigd op 01/05/2011 23:03:53 door Pim -
edit: ik heb nog een probleempje. Van een één letter woord maakt hij er nu 2 van. Omdat hij die letters zowel als de eerste als de laatste letter ziet.
Gewijzigd op 01/05/2011 23:01:37 door Wouterjan Muchu
Als het goed is doet mijn versie die dingen goed.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
if ($waarde == 5) {
$str = $tekst;
function ftinoucn($str) {
return preg_replace_callback('/\b\w{4,}\b/i', function($matches) {
$start = substr($matches[0], 0, 1);
$end = substr($matches[0], -1);
$middle = substr($matches[0], 1, -2);
return $start.str_shuffle($middle).$end;
}, $str);
}
$tekst = $str;
}
$str = $tekst;
function ftinoucn($str) {
return preg_replace_callback('/\b\w{4,}\b/i', function($matches) {
$start = substr($matches[0], 0, 1);
$end = substr($matches[0], -1);
$middle = substr($matches[0], 1, -2);
return $start.str_shuffle($middle).$end;
}, $str);
}
$tekst = $str;
}
Maar nu mis ik ergens een ; of een }
Maar ik zie niet waar het fout staat?
Als je een string wil vervormen, doe gewoon ftincoucn($str)
Dat moet dus de string worden.
Verdiep je eens in de PHP basics