En vice versa.
A B C D E F G
. . . . . . .
. . . A B C D
E F G A B C D
Overigens is het voorbeeldje dus precies volgens mijn laatste opmerking
Swaptor wijzigde dit bericht 07-03-2007 00:00 (31%)
Ontdek mij!
Proud NGS member
Stats-mod & forum-dude
Energizer Bunny Arrested! Charged with battery.
Trotse papa van Luca en Danu! | Pick My Icon!
$nieuwteken = $minascii + ((($teken - $minascii) + $x) % 26);
of iets dergelijks simpels. Dit neemt wel aan dat je alle tekens eerst even ord(). Dan heb je opzich geen array nodig
RobIII, doesnie zo snel
DataGhost wijzigde dit bericht 07-03-2007 00:00 (9%)
PHP:
| <?php
|
Niet getest, en niet netjes.
en nog niet op tijd ook.
CodeCaster wijzigde dit bericht 07-03-2007 00:03 (6%)
Nieuwste blog (31-01): Communicatie deel 6: de vaatwasser
Er zijn geen dieren fysiek of mentaal benadeeld tijdens het tikken van deze post. En ik vraag me af waarom niet.
Reg. datum: 29 september 2006
voorbeeldje
PHP:
| <?php
|
dit werkt zelfs voor een elke mogelijke rot van ROT-1 tot ROT-2147483647 omdat php's integer 32bit is. duurt ook wel een tijdje denk ik voordat je 2147483647 ROT's hebt gedaan
php manual page's:
http://www.php.net/manual/en/ref.array.php
http://www.php.net/manual/en/function.array-pop.php
http://www.php.net/manual/en/function.array-unshift.php
Docey wijzigde dit bericht 07-03-2007 03:16 (3%)
Reg. datum: 29 maart 2004
lolquote:Docey schreef op woensdag 07 maart 2007 @ 02:58:
...
dit werkt zelfs voor een elke mogelijke rot van ROT-1 tot ROT-2147483647 omdat php's integer 32bit is. duurt ook wel een tijdje denk ik voordat je 2147483647 ROT's hebt gedaan![]()
...
ik had een rotor-functie gemaakt, kan alleen nog een crappy variant vinden. Uiteindelijke idee was
code:
1
2
3
4
5
6
| function rotor($value, $min, $max) {
zolang $value niet tussen $min en $max zit
if $value>$max { $value=- $max; }
if $value<$min { $value=+ $min; }
}; |
Zodat buitenliggende indexwaarden vanzelf teruggeschaald worden.
PHP:
1 | <?php
|
Output:
code:
1
| Array ( [0] => w [1] => x [2] => y [3] => z [4] => a [5] => b [6] => c [7] => d [8] => e [9] => f [10] => g [11] => h [12] => i [13] => j [14] => k [15] => l [16] => m [17] => n [18] => o [19] => p [20] => q [21] => r [22] => s [23] => t [24] => u [25] => v ) |
Future is failure.
Reg. datum: 29 september 2006
lolquote:fl!pulI schreef op woensdag 07 maart 2007 @ 03:16:
[...]
lol![]()
ik had een rotor-functie gemaakt, kan alleen nog een crappy variant vinden. Uiteindelijke idee was
code:
1 2 3 4 5 6function rotor($value, $min, $max) { zolang $value niet tussen $min en $max zit if $value>$max { $value=- $max; } if $value<$min { $value=+ $min; } };
Zodat buitenliggende indexwaarden vanzelf teruggeschaald worden.
nieuwe poging,
PHP:
| <?php
|
zo, niet gestest maar deze ROT codeer en decodeer functie werkt nog steeds met een willekeurig aantal ROT's en houdt rekening met Hoofdletters en kleine letter's en laat andere leestekens en cijfers ongemoeid. door van $forward false te maken werkt deze functie in de tegengestelde richting.
*Edit DaPi zat ook al op het verkeerde pad en levert een nog simpelere versie van een rotor functie.
een rotor functie roteert de array maar dat is wat anders dan ROT codeering waar de TS het over heeft. bij ROT codeering schijft elke letter n plaatsen op in het alphabet. dus bij rot4 wordt elke A in de string een D, elke B wordt een E, elke C wordt een F en elke D wordt een H etc. en elke X wordt een B. het is alsof je het alphabet roteert maar niet de leterlijke plek van elk teken in de string zelf.
maarja, het is laat.
Docey wijzigde dit bericht 07-03-2007 03:47 (13%)
Aha ik snap t nu.quote:Docey schreef op woensdag 07 maart 2007 @ 03:40:
[...]
lolben niet de enige die ligt te slapen blijkbaar. ik post hierboven een rotor functie en niet een ROT codeer functie.
nieuwe poging,
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32<?php
$alphabet = range("a", "z");
$forward = true;
$rot_count = 4;
foreach($alphabet as $alphabet_key => $alphabet_val){
$alphabet_chr = ord($alphabet_val);
$capital = false;
if(($alphabet_chr >= 96 ) AND ($alphabet_chr <= 122)){
$alphabet_chr = $alphabet_chr -32;
$capital = true;
}
if(($alphabet_chr >= 64) AND ($alphabet_chr <= 90)){
if($forward == true){
$alphabet_chr = $alphabet_chr + $rot_count;
}else{
$alphabet_chr = $alphabet_chr - $rot_count;
}
if($alphabet_chr > 90){
$alphabet_chr = 64 + ($alphabet_chr -90);
}elseif($alphabet_chr < 64){
$alphabet_chr = 90 - (64 - $alphabet_chr);
}
if($capital == true){
$alphabet_chr = $alphabet_chr + 32;
}
}
$alphabet[$alphabet_key] = chr($alphabet_chr);
}
?>
zo, niet gestest maar deze ROT codeer en decodeer functie werkt nog steeds met een willekeurig aantal ROT's en houdt rekening met Hoofdletters en kleine letter's en laat andere leestekens en cijfers ongemoeid. door van $forward false te maken werkt deze functie in de tegengestelde richting.
*Edit DaPi zat ook al op het verkeerde pad en levert een nog simpelere versie van een rotor functie.
een rotor functie roteert de array maar dat is wat anders dan ROT codeering waar de TS het over heeft. bij ROT codeering schijft elke letter n plaatsen op in het alphabet. dus bij rot4 wordt elke A in de string een D, elke B wordt een E, elke C wordt een F en elke D wordt een H etc. en elke X wordt een B. het is alsof je het alphabet roteert maar niet de leterlijke plek van elk teken in de string zelf.
maarja, het is laat.
Overigens: Bij de originele ROT13 word de A een N dus bij ROT4 word de A een E en geen D zoals jij aangeeft.
Dit is wat ik net in elkaar geknutselt heb:
[EDIT] .... Onderstaande code werkt niet naar behoren, voor de verbeterde versie klik hier.
PHP:
1 | <?php
|
Veel plezier ermee
DaPi wijzigde dit bericht 07-03-2007 05:32 (6%)
Reden: Decode functie toegevoegd ;) // Bugje gefixed .. eek lol
Future is failure.
Reg. datum: 29 september 2006
damn, er zit een best wel nasty bug in jouw versie DaPi, in plaats van dat deze leestekens onvermoeid laat of ze ook ROT gooit deze ze gewoon weg.
dOcey ==> hSgic
Dapi ==> HeTm
dOceyDaPi ==> hSgicHeTm
Ts ==> Xw
dOceyDaPiTs ==> hSgicHeTmXw oftewel hSgic + HeTm + Xw.
dOcey8DaPi_Ts ==> hSgicHeTmXw !!! waar zijn de 8 en de underscore gebleven???
toch leuk om te zien dat er s'nachts nog zo actief wordt ge-code terwijl de TS al lang op een oor ligt.
Idd, kwam ik zelf net ook achter.quote:Docey schreef op woensdag 07 maart 2007 @ 05:17:
damn, er zit een best wel nasty bug in jouw versie DaPi, in plaats van dat deze leestekens onvermoeid laat of ze ook ROT gooit deze ze gewoon weg.
Hier de verbeterde versie:
PHP:
1 | <?php
|
Future is failure.
code:
1
2
3
4
5
6
7
8
9
| import Maybe rot x ls = take (length ls) $ drop x $ cycle ls swap (a,b) = (b,a) r2a = mkr2a ['a'..'z'] ++ mkr2a ['A'..'Z'] where mkr2a x = zip x $ rot 4 x a2r = map swap r2a rot4encode = map $ flip lookup' r2a rot4decode = map $ flip lookup' a2r lookup' x = fromMaybe x . lookup x |
En de output:
*Main> rot4encode "DaPi loves PHP" "HeTm psziw TLT" *Main> rot4decode "HeTm psziw TLT111" "DaPi loves PHP111"
Reg. datum: 29 september 2006
deze maakt gebruik van een hashtable wat vooral voor grotere stukken tekst veel sneller is. eerst worden voor alle ASCII tekens tussen start en stop de ROT versie's berekent en daarna wordt de tekst gewoon byte for byte gelezen en bewerkt waar nodig.
ook heb ik argument checking toegevoegd omdat dat wel zo netjes is.
PHP:
| <?php
|
ook worden ROT's die groter zijn dan het alphabet correct ondersteunt waar vorige versie's van zowel DaPi als mij dat niet deden. ROT 3315 geeft het zelfde resultaat als ROT13 alleen wordt het alphabet dus correct 3315 keer geroteerd.
op lijn 65 wordt de huidige ROT table gedumpt maar er mag gerust een commentje voor
rot_gentable ontvangt 3 integer waardes.
- de minimum ASCII waar gaat in $start.
- de maximum ASCII waarde gaat in $stop
- en het aantal ROT rotatie's gaat in $rot_count.
je krijgt dan een array met voor elke ASCII tussen minimum en maxium de rot versie. ge-index bij de ascii key met de ROT als waarde. gebruik dus zowel ord voor de key als de waarde om het ASCII nummer te krijgen.
rot_n ontvangt 4 argumenten.
- $input bevat de string die rot_n bewerkt
- $rot_count bevat het aantal ROT rotaties.
- $forward is een boolean welke de richting aangeeft. true voor encoderen, fals voor decoderen.
- $large_alphabet, als deze true is worden alle ascii waardes tussen 33(!) en 126(~) gebruikt, en elke ander waarde gebruikt alleen de letters a-z en A-Z.
rot_n geeft de bewerkte string weer terug. als rot_n een teken tegenkomt dat niet in de rotatie tabel staat dan slaat hij deze over en doet er niks mee.
zo, dan nu is het tijd voor een ontbijt. goedemorgen.
PHP:
| <?php
|
DAT is nou de kracht van de Postbank modulo!
Edit: Sorry Docey, maar...
PHP:
| <?php
|
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| helios hackthissite # time php rot.php iJkLmNoPqRsTuVwXyZaBcDeFgH jKlMnOpQrStUvWxYzAbCdEfGhI kLmNoPqRsTuVwXyZaBcDeFgHiJ lMnOpQrStUvWxYzAbCdEfGhIjK mNoPqRsTuVwXyZaBcDeFgHiJkL nOpQrStUvWxYzAbCdEfGhIjKlM oPqRsTuVwXyZaBcDeFgHiJkLmN pQrStUvWxYzAbCdEfGhIjKlMnO qRsTuVwXyZaBcDeFgHiJkLmNoP rStUvWxYzAbCdEfGhIjKlMnOpQ real 0m0.108s user 0m0.080s sys 0m0.030s helios hackthissite # time php rot_Docey.php iJkLmNoPqRsTuVwXyZaBcDeFgZ jKlMnOpQrStUvWxYzAbCdEfGhZ kLmNoPqRsTuVwXyZaBcDeFgHiZ lMnOpQrStUvWxYzAbCdEfGhIjZ mNoPqRsTuVwXyZaBcDeFgHiJkZ nOpQrStUvWxYzAbCdEfGhIjKlZ oPqRsTuVwXyZaBcDeFgHiJkLmZ pQrStUvWxYzAbCdEfGhIjKlMnZ qRsTuVwXyZaBcDeFgHiJkLmNoZ rStUvWxYzAbCdEfGhIjKlMnOpZ real 1m29.545s user 1m28.910s sys 0m0.040s |
Edit2: Hm, ik zie nou pas dat je output ook niet klopt (zie het laatste teken).
DataGhost wijzigde dit bericht 07-03-2007 09:08 (48%)
Juist, alleen substr gebruiken om een char in een string aann te spreken is natuurlijk overkill.quote:
$string[X] will do just fine.
Hanlon's Razor: "Never attribute to malice that which can be adequately explained by stupidity."
Hm, toch wel?quote:Grijze Vos schreef op woensdag 07 maart 2007 @ 08:57:
[...]
Juist, alleen substr gebruiken om een char in een string aann te spreken is natuurlijk overkill.
$string[X] will do just fine.
Verrek! Dan heb ik gisteren vast ergens anders een foutje gemaakt
DataGhost wijzigde dit bericht 07-03-2007 09:11 (11%)
Reg. datum: 29 september 2006
dat is mischien leuk voor als je ROT13 wilt doen maar wat als je nou ROT-47 wilt? dat gaat dus mooi niet lukken met jouw versie. je negeert alles buiten het alphabet terwijl ROT-47 dat nou juist vereist. met jouw versie kom je niet verder dan ASCII 65 tot 90 en 96 tot 122. wat als je nou een ROT wilt doen met de extended ASCII zeg 30 tot 255. juist dan wordt jouw versie ook wel wat groter.quote:DataGhost schreef op woensdag 07 maart 2007 @ 08:49:
Zal ik de boel dan nog even vlug komen verpesten? Pff, wat een gigantische scripts komen hier langs voor zoiets simpels...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14<?php
function rot($input, $n) {
$n %= 26;
if($n < 0) $n += 26;
$ret = "";
for($i=0; $i<strlen($input); $i++) {
$tmp = ord($input[$i]);
if($tmp >= 65 && $tmp <= 90) {
$ret .= chr(65 + ((($tmp - 65) + $n) % 26));
} elseif($tmp >= 97 && $tmp <= 122) {
$ret .= chr(97 + ((($tmp - 97) + $n) % 26));
}
}
return $ret;
}
?>
DAT is nou de kracht van de Postbank modulo!
Edit: Sorry Docey, maar...![]()
PHP:
1
2
3
4<?php
$str = "aBcDeFgHiJkLmNoPqRsTuVwXyZ";
for($i=0;$i<10;$i++) {
echo rot_n($str, 123456 + $i) . "\n";
}
?>
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 helios hackthissite # time php rot.php iJkLmNoPqRsTuVwXyZaBcDeFgH jKlMnOpQrStUvWxYzAbCdEfGhI kLmNoPqRsTuVwXyZaBcDeFgHiJ lMnOpQrStUvWxYzAbCdEfGhIjK mNoPqRsTuVwXyZaBcDeFgHiJkL nOpQrStUvWxYzAbCdEfGhIjKlM oPqRsTuVwXyZaBcDeFgHiJkLmN pQrStUvWxYzAbCdEfGhIjKlMnO qRsTuVwXyZaBcDeFgHiJkLmNoP rStUvWxYzAbCdEfGhIjKlMnOpQ real 0m0.108s user 0m0.080s sys 0m0.030s helios hackthissite # time php rot_Docey.php iJkLmNoPqRsTuVwXyZaBcDeFgZ jKlMnOpQrStUvWxYzAbCdEfGhZ kLmNoPqRsTuVwXyZaBcDeFgHiZ lMnOpQrStUvWxYzAbCdEfGhIjZ mNoPqRsTuVwXyZaBcDeFgHiJkZ nOpQrStUvWxYzAbCdEfGhIjKlZ oPqRsTuVwXyZaBcDeFgHiJkLmZ pQrStUvWxYzAbCdEfGhIjKlMnZ qRsTuVwXyZaBcDeFgHiJkLmNoZ rStUvWxYzAbCdEfGhIjKlMnOpZ real 1m29.545s user 1m28.910s sys 0m0.040s
Edit2: Hm, ik zie nou pas dat je output ook niet klopt (zie het laatste teken).
daarnaast checked jouw versie compleet niet wat er in de functie wordt gevoerd en is dus slordig. wat als ik nou rot(array(array(0)), false) in jouw functie voer? krijg ik dan een keurige false waarde en een E_WARNING? nee. goede code wordt herkend door goede error-handeling en als je kijkt zie je dat ik zo'n 26 regels code hier aan besteedt.
daarnaast maak ik ook gebruik van white-space zodat mijn code goed leesbaar is, niet alleen voor mij zelf maar ook voor anderen die het willen gebruiken. jouw code zit zo op mekaar gedrukt dat het niet makkelijk leest. een paar extra white regels er tussen en wat correcte error-handeling er bij en jij zit ook op 40+ regels.
daarnaast hoe presteert jouw code als je 100KB wilt ROT'en. voor elk teken wordt weer opnieuw uitgerekend wat zijn ROT variant is. daarnaast zou je mijn functie zonder problemen kunnen aanpassen om de ROT-tabel te bewaren en mee te geven als een functie argument. oke voor die paar honderd bytes is jouw versie sneller, maar veel meer bytes moeten er niet bij komen.
ook kan je met jouw code compleet niet decoden. nou is dat voor ROT13 geen probleem maar voor ROT-vul-een-getal-in wel. daar moet dus weer een aparte functie voor worden geschreven.
begrijp me niet verkeerd maar mijn regels code zijn teminste:
- functioneel
- leesbaar
- correct in error-handeling
- en voor grotere stukken tekst veel sneller
- makkelijk aanpasbaar door gedeelde opzet.
als je vindt dat 85 regels te veel is en liever alles op die miezerige 10regels pleurt en je je als programmeur je wilt mag zoeken naar wat er fout ging en waarom, ga je gang maar ik code liever in een keer goed inplaats van het wiel elke paar maand voor elke opdracht weer opnieuw uit te vinden.
die laatste-teken bug zal ik nog wel even naar kijken. heb je de gebruikte rot_table er bij?
*edit, zie het probleem al waarschijnlijk, vervang op regel 69 de < operator voor <=. hij slaat de laatste byte over in de bewerkings loop. kleine maar duidelijke leesbare bug.
Docey wijzigde dit bericht 07-03-2007 12:34 (3%)
Je vergeet nog iets, mijn code kan geen raketten lanceren. Lees nog eens wat er in de topicstart gevraagd werdquote:
rot($input, -47);quote:dat is mischien leuk voor als je ROT13 wilt doen maar wat als je nou ROT-47 wilt? dat gaat dus mooi niet lukken met jouw versie.
Als jij dat niet snapt, moet je je eens gaan verdiepen in het princiepe van ROT, en wat modulo precies doet.
[quote]je negeert alles buiten het alphabet terwijl ROT-47 dat nou juist vereist.[quote]
Aha...
Juist kleiner. De else if kan weg, 30 t/m 255 kan afgehandeld worden in de eerste if. Wat ik wel zie is dat ik vergeten benquote:met jouw versie kom je niet verder dan ASCII 65 tot 90 en 96 tot 122. wat als je nou een ROT wilt doen met de extended ASCII zeg 30 tot 255. juist dan wordt jouw versie ook wel wat groter.
PHP:
| <?php
|
te doen. Verder is er geen probleem.
quote:daarnaast checked jouw versie compleet niet wat er in de functie wordt gevoerd en is dus slordig. wat als ik nou rot(array(array(0)), false) in jouw functie voer? krijg ik dan een keurige false waarde en een E_WARNING? nee. goede code wordt herkend door goede error-handeling en als je kijkt zie je dat ik zo'n 26 regels code hier aan besteedt.
PHP:
| <?php
|
Zo beter?
Met alle bovenstaande toevoegingen betekent dat minstens 1 spatie tussen elke regel. Je gaat mij niet vertellen dat dat opeens leesbaarder is. Voor kleine stukken code als deze is het nauwelijks nodig en als je dat wel vindt, weinig moeite ze ertussen te zetten.quote:daarnaast maak ik ook gebruik van white-space zodat mijn code goed leesbaar is, niet alleen voor mij zelf maar ook voor anderen die het willen gebruiken. jouw code zit zo op mekaar gedrukt dat het niet makkelijk leest. een paar extra white regels er tussen en wat correcte error-handeling er bij en jij zit ook op 40+ regels.
Ik kan ook zonder problemen van alles aanpassen...quote:daarnaast hoe presteert jouw code als je 100KB wilt ROT'en. voor elk teken wordt weer opnieuw uitgerekend wat zijn ROT variant is. daarnaast zou je mijn functie zonder problemen kunnen aanpassen om de ROT-tabel te bewaren en mee te geven als een functie argument. oke voor die paar honderd bytes is jouw versie sneller, maar veel meer bytes moeten er niet bij komen.
rot25, 10 runs, 100kB lorem ipsum
code:
1
2
3
4
5
6
7
8
9
10
| helios hackthissite # time php rot.php real 0m4.040s user 0m4.010s sys 0m0.030s helios hackthissite # time php rot_Docey.php real 0m2.244s user 0m2.210s sys 0m0.020s |
rot25000, 10 runs, 100kB lorem ipsum
code:
1
2
3
4
5
6
7
8
9
10
| helios hackthissite # time php rot.php real 0m4.067s user 0m4.060s sys 0m0.010s helios hackthissite # time php rot_Docey.php real 0m20.165s user 0m20.070s sys 0m0.020s |
Meen je dit serieus?quote:ook kan je met jouw code compleet niet decoden. nou is dat voor ROT13 geen probleem maar voor ROT-vul-een-getal-in wel. daar moet dus weer een aparte functie voor worden geschreven.
rot(rot($string, 9876), -9876);
Dat versleutelt en ontsleutelt weer...
Voor jou misschien, net als mijn code voor mij leesbaar is. Je hebt totaal niet gedocumenteerd en ik vind het vrij lastig te lezen.quote:begrijp me niet verkeerd maar mijn regels code zijn teminste:
- functioneel
- leesbaar
- correct in error-handeling
- en voor grotere stukken tekst veel sneller
- makkelijk aanpasbaar door gedeelde opzet.
Voor de gestelde specificatie is het ruim voldoende. Als je er van alles bij gaat verzinnen kan ik ook een verkooppraatje houden dat het beter is.quote:als je vindt dat 85 regels te veel is en liever alles op die miezerige 10regels pleurt en je je als programmeur je wilt mag zoeken naar wat er fout ging en waarom, ga je gang maar ik code liever in een keer goed inplaats van het wiel elke paar maand voor elke opdracht weer opnieuw uit te vinden.
Reg. datum: 29 maart 2004
Als je alles op 85 regels moet plaatsen voor deze functionaliteit dan moet er nog wat uitgekristalliseerd worden
Ik vraag me het nut af van je bijdrage, aangezien er [PHP] in de topictitel staat...quote:chris schreef op donderdag 08 maart 2007 @ 00:11:
Die van mij is ook generiek, werkt zelfs op alle lijsten inplaats van alleen Strings, en is maar 9 regels. Zonder onleesbaar te zijn (als je Haskell kan). 85 regels vind ik ook wel erg veel.
Hanlon's Razor: "Never attribute to malice that which can be adequately explained by stupidity."
Reg. datum: 29 september 2006
ik heb geen ervaring met Haskell en weet dus ook niet of Haskell loose-typed is etc.quote:chris schreef op donderdag 08 maart 2007 @ 00:11:
Die van mij is ook generiek, werkt zelfs op alle lijsten inplaats van alleen Strings, en is maar 9 regels. Zonder onleesbaar te zijn (als je Haskell kan). 85 regels vind ik ook wel erg veel.
@Dataghost:
Ik ben mischien wat voorbij geschoten aan dat wat de Topic-Starter er mee wil en nee, mijn script kan ook geen raketten lanceren, daarom toch nog even een toelichting en een revisie.
PHP:
| <?php
|
dit is natuurlijk geen argumenten checken, laat staan error-handeling. ik heb mischien geen ver gaande ervaring met het werken met modulo maar jij hebt blijkbaar ook geen kaas gegeten van integers en het memory-managment van php. enzo blijkt dat we allebei nog wel wat te lezen hebben, ik over hoe modulo met floats omgaat en jij over interger-conversie.
geeft niet hoor, fouten maken is menselijk. klopt het dat dit dus jouw code is met de correctie? (in mijn code style dan wel welliswaar).quote:Juist kleiner. De else if kan weg, 30 t/m 255 kan afgehandeld worden in de eerste if. Wat ik wel zie is dat ik vergeten ben
PHP:
| <?php
|
ik heb op lijn 8 en 21 een kleine stopwatch in gebouwd. deze mogen dus zonder problemen worden verwijdert. ik gebruikte ze alleen om te kijken welke van onze 2 versie's sneller is.
de gebruikte microtime_float functie:
PHP:
| <?php
|
oke, code-stijl is mischien een persoonlijk punt. als jij jouw code lekker vindt lezen, wie ben ik dan om dat jouw te verbieden. maar voor anderen is blanco-regel hier en daar wel een stuk beter te lezen.quote:Met alle bovenstaande toevoegingen betekent dat minstens 1 spatie tussen elke regel. Je gaat mij niet vertellen dat dat opeens leesbaarder is. Voor kleine stukken code als deze is het nauwelijks nodig en als je dat wel vindt, weinig moeite ze ertussen te zetten.
als je mijn stukje nog eens goed doorleest had ik het niet over of je 1 byte ROT4 vs 1byte ROT2500 maar over of je 1byte ROT4'd of dat je 102400bytes ROT4'd. en daar zit wel degelijk een verschill in. als je even een paar microtime's in mijn code had gezet dan zie dat 80% van de tijd bezig is met het opstellen van de rotatie-tabel en ja ik geeft toe, dat was inderdaad niet zo handig, zeker als je bedenkt dat de TS waarschijnlijk geen ROT2500 gaat doen.quote:daarnaast hoe presteert jouw code als je 100KB wilt ROT'en. voor elk teken wordt weer opnieuw uitgerekend wat zijn ROT variant is. daarnaast zou je mijn functie zonder problemen kunnen aanpassen om de ROT-tabel te bewaren en mee te geven als een functie argument. oke voor die paar honderd bytes is jouw versie sneller, maar veel meer bytes moeten er niet bij komen.
daarom hier een aangepaste versie die gewoon een rot-table slikt:
PHP:
| <?php
|
en de gebruikte test code:
PHP:
| <?php
|
zoals je ziet maak ik nu gebruik van een statische rotatie table voor ROT4. omdat het Lorem_Ipsum verhaal wat te groot is om op fouten te controlleren maak ik eer een md5-hash van. hier het resultaat:
code:
1
2
3
4
5
6
7
| >Run-Time: 0.391242027283. >Run-Time: 0.393701076508. >Run-Time: 0.203727006912. >Run-Time: 0.204609870911. >SIZE : 72134 bytes. ef3e37118d2cf7a777e84fc9f352e8d7. >ROT_4: ef3e37118d2cf7a777e84fc9f352e8d7 >ROT_N: ef3e37118d2cf7a777e84fc9f352e8d7 |
zoals je ziet is mijn aanpak wellicht 20 regels meer code, maar zeker op de wat grotere teksten bijna een factor 2 sneller omdat het gewoon een copy&paste methode is met een vooraf ge-creerde rotatie tabel. een opvallend puntje is dat jouw versie iets over het algemeen iets langzamer is met encoden dan met decoden terwijl mijn versie precies het tegenovergestelde heeft, waarschijnlijk door de array_flip die ik gebruikt heb.
kortom de TS heeft nu meerder versie's om tussen te kiezen en zal zelf die afweging moeten maken.
Offtopic: ik doe maar wat, doe ik iets verkeerd, laat t me weten, daar leer ik van
De code:
PHP:
| <?php
|
Future is failure.
Dat is waarquote:Grijze Vos schreef op donderdag 08 maart 2007 @ 09:01:
[...]
Ik vraag me het nut af van je bijdrage, aangezien er [PHP] in de topictitel staat...
Pagina: 1
